MoI discussion forum
MoI discussion forum

Full Version: Parametric design in MoI?

Show messages:  1  …  462-481  482-501  502-521  522-541  542-561  562-581  582-601  …  902-912

From: Karsten (KMRQUS)
16 Oct 2016   [#522] In reply to [#520]
Hello James,

to run PatternSelArray in V0.85 please replace the following:

source_elem.pt.x,
source_elem.pt.y,
source_elem.pt.z,
source_elem.AngleX,
source_elem.AngleY,
source_elem.AngleZ,
source_elem.Size

With:
source_elem.data[0],
source_elem.data[1],
source_elem.data[2],
source_elem.data[3],
source_elem.data[4],
source_elem.data[5],
source_elem.data[6]

at two places in the file! It seems that Max has changed the internal structure since the Node was created!

Have a nice day
Karsten
From: James (JFH)
16 Oct 2016   [#523] In reply to [#522]
Hi Karsten,

Thanks for that, it works!
Now if only we could input array to dynamically generate the pattern.

I recall you stating that you were not a "Pattern Man" [#319]
http://moi3d.com/forum/lmessages.php?webtag=MOI&msg=7713.319

IMHO the manipulation of num & pt arrays (interlacing, flipping shifting etc)
lies at the very heart of parametric design. i.e. pattern.

Anyway, thanks again
- James
From: mkdm
17 Oct 2016   [#524] In reply to [#522]
Hi Karsten,

Thanks a lot for updating PatternSelArray for V0.85. I hope it works.

Have a nice day,

- Marco (mkdm)
From: mkdm
17 Oct 2016   [#525] In reply to [#523]
Hi James and good morning to everyone,

> IMHO the manipulation of num & pt arrays (interlacing, flipping shifting etc) lies at the very heart of parametric design. i.e. pattern.

I totally agree with you.

In fact, as I wrote in a post some times ago (http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.353),
I was writing a bunch of utility nodes for PointArray datatype :

- "ArrayShuffler" : returns a PointArray, by shuffling the elements inside the input PointArray (RMB -> Update : generate a new random shuffle)
For example, it may be useful to create objects like ball of wool.

- "ArrayFlipper" : returns a PointArray, created by flipping the elements of the input PointArray

And "ArrayBoolean", a very useful node that operates boolean operations on Pointarray. Very powerful.

Unfortunately, because of a distraction, I totally lost all the code of "ArrayBoolean" and other two very interesting nodes I was writing !!!

Only ArrayShuffler and ArrayFlipper were saved.

When Max will release the first 1.0 official version of Project Elephant I will try to write again those nodes.

Best,

- Marco (mkdm)
From: James (JFH)
17 Oct 2016   [#526] In reply to [#525]
Hi Marco,

"ArrayBoolean" sounds interesting. What a shame it has been lost.
Hopefully it or something similar will be resurrected in the future.
I'm always excited by your node contributions.

-James
From: mkdm
17 Oct 2016   [#527] In reply to [#526]
Hi everyone,

Thanks a lot James for your appreciation.

Damn "recycle bin" and "overwrite" !!
I tried also to use some recovery tools but without success...it's been too long....

Anyway, here's just some info in the case of someone wants to write something similar.

I was writing these nodes :

code:
"ArrayDistinct" node :

Input : A PointArray[], a DELTA (a javascript float number) and a PRECISION (a javascript int number) 

Output : a new PointArray[] containing all the "DISTINCT" PointArray elements found in the source PointArray[].

All the PointArray elements of the source, far from each other, NOT MORE THAN DELTA (considering the required PRECISION)
are WELDED into a SINGLE PointArray element, that is, the element currently investigated (simple "For loop" with some flags to mark already processed elements).



code:
"ArrayBoolean" node that did exactly what its name means : Basic boolean operations between two PointArray[] objects.

More in depth, it provided these operations :

1) Array Union : 
Input : Two PointArray[] (named "A" and "B") also with different amount of elements, a DELTA (a javascript float number) and a PRECISION (a javascript int number) 

Output : a new PointArray[] containing all the "DISTINCT" PointArray elements of both arrays.

All the PointArray elements of "A" and "B" far from each other, NOT MORE THAN DELTA (considering the required PRECISION)
are WELDED into a SINGLE PointArray element.

2) Array Difference : 
Input : Two PointArray[] (named "A" and "B") also with different amount of elements, a DELTA (a javascript float number) and a PRECISION (a javascript int number) 

Output : a new PointArray[] containing all the PointArray elements of "A" that are NOT PRESENT in "B".

All the PointArray elements of "A" that are far from each "B" elements, for AT LEAST DELTA (considering the required PRECISION)
are returned into the output PointArray[].


I don't know if I made myself clear..

It's really too bad that "ArrayDistinct" and "ArrayBoolean" node that I was writing were lost because they were at and advanced alpha stage,
and from many tests I did they seemed to be very powerful for interesting elaborations in order to create some "exotic" nurbs objects.

Anyway, I must also say that they have been written with a very coarse businnes logic, and crunching more than some hundreds of PointArray elements,
produced very poor performances.


Have a nice day,

- Marco (mkdm)
From: Karsten (KMRQUS)
17 Oct 2016   [#528]
Hello Marco, James, wastzzz ...

I thought about randomly place geometry again and was reminded ArrayShuffle made by Marco. So I have updated the file for v0.85. I have made some test as an alternative to the node I have written (randomObj). Two different ways with different advantages:-)

Have a nice day
Karsten

@James: I'm indeed not interested in patterns or more precisely ornaments (my focus is smooth geometry), but it's not possible for me to ignore them and I think not useful also:-)

Attachments:
ashuffle.nod


From: James (JFH)
18 Oct 2016   [#529] In reply to [#528]
Hi Karsten

Ornament is a crime :-)

I think there may have been some semantic confusion.
I meant pattern as order not ornament; designation not decoration.

Thanks for updating these nodes, I greatly appreciate it.

-James
From: speedy (AL2000)
18 Oct 2016   [#530]
Hello Friends
a new little exercise to test some Karsten's nodes
best
al

Attachments:
CP-Tennis Ball.nod

Image Attachments:
Two Tennis Ball.jpg 


From: Karsten (KMRQUS)
18 Oct 2016   [#531] In reply to [#529]
Hello James,

I agree with you about ornaments and the different interpretation of "pattern". But I'm not an artist and haven't the creativity like some others here, so there are many different points of view about the aesthetics of ornaments, that I can accept.

Have a nice day
Karsten

p.s.: Please, don't let us start a dicussion about that here - I'm afraid about that!
From: mkdm
18 Oct 2016   [#532] In reply to [#528]
Hi Kartsen and good morning.

Thank you for updating my old arraysExt.js and litegraphExt.js.

N.B. I will begin by saying that I'running latest Max's verison "nodeeditor.v.0.85_mod.zip" at http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.485

Well...I'm sorry but it seems that your updates doesn't works for me.
I think that I'm doing something wrong or I'm getting a little bit confused among various versions (mine and yours).

When I run your last experiment "ashuffle.nod" (http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.528)
I get this error : http://take.ms/R2l59

Also if I run this simple .nod file (http://take.ms/mGHP8) I get this error : http://take.ms/LnRgz.

I'm running your arraysExt.js that you uploaded (http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.528)
and this is my litegraphExt.js that has your modifications :

code:
// litegraphExt.js v.0.1 - Marco Di Mario (mkdm), 2016
// based on :
// 		Max Smirnov's Node Editor, v.0.65 - 2016
// 		litegraph.js library (c) Javi Agenjo http://tamats.com

pointArray.prototype.getElement = function(n)
{
	var idx = (n || 0);
	var shift = idx * this.recordLength;
	
	var element = {"pt":this.getPoint(idx),
		"AngleX":this.data[shift+3],
		"AngleY":this.data[shift+4],
		"AngleZ":this.data[shift+5],
		"Size":this.data[shift+6]};
		
	return element;
}

pointArray.prototype.copyElementDataTo = function(source_elem, n)
{
	var idx = (n || 0);
	var shift = idx * this.recordLength;
	
	if (source_elem) {	
		this.data[shift+0] = source_elem.data[0];
		this.data[shift+1] = source_elem.data[1];
		this.data[shift+2] = source_elem.data[2];
		this.data[shift+3] = source_elem.data[3];
		this.data[shift+4] = source_elem.data[4];
		this.data[shift+5] = source_elem.data[5];
		this.data[shift+6] = source_elem.data[6];
	}
}


What I'm doing wrong ?

P.S : Would you like to rewrite my lost :( experimental nodes ArrayDistinct and ArrayBoolean that I mentioned in my previous post ?
(http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.527)

Have a nice day ?

- Marco (mkdm)
From: Karsten (KMRQUS)
18 Oct 2016   [#533] In reply to [#532]
Hello Marco,

sorry that I forgot to say that you don't need the litegraphExt.js and so I didn't posted an updated here. Max has integrated the getElement in the last version. The copyElement -Stuff I have integrated inline. So try to remove litegraphExt.js from index.html.

Have a nice day
Karsten
From: mkdm
18 Oct 2016   [#534] In reply to [#533]
Ahhhh....Ok Kartsen,

I did what you said and now all works fine. Thanks a lot!

What do you think about my proposal to rewrite my lost :( experimental nodes ArrayDistinct and ArrayBoolean that I mentioned in my previous post ?
(http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.527)

Unfortunately, for the time being I can't deal that effort.
Maybe when Max's will release 1.0 version of Elephant...

Have a nice day.

- Marco (mkdm)
From: speedy (AL2000)
18 Oct 2016   [#535]
Hello Max and Friends
Someone is willing to post some examples
illustrating the use of the node length .........
for me it's difficult to figure out how to function
thank you
al
From: Karsten (KMRQUS)
18 Oct 2016   [#536] In reply to [#535]
Hello Al,

the length node evaluates the number of elements in a given array. With the RMB you can change the type of the input (numarray - default, pointarray or geometrical
objects). The output is type of numarray (number) with only one element.

Now it's up to you - but I saw that you have already used it!

Have a nice day
and thanks for sharing your examples
Karsten
From: speedy (AL2000)
18 Oct 2016   [#537]
Hi Karsten
thanks for your reply, I have many other questions to ask ,
but let's degrees.....
1-Blend
attached a file that contains two surfaces, you get with your Node Swep,
how do I use the Blend Node?
Swept gives me a single input, the surface, how do I
to extract the edge you want to use for the blend?
2-Blend
I also used two simple curves, I thought
that blend so it worked, I was wrong ....
Can you please show me the use of this Feature ...
Needless to say ... thank you very much

have a nice day,friend
best
al

Attachments:
CP-Swept_ versus Blend.3dm
CP-Swept_ versus Blend.nod

Image Attachments:
Blend-1.jpg 


From: Karsten (KMRQUS)
18 Oct 2016   [#538] In reply to [#537]
Hello Al,
I will try to explain the attached file and the workflow. First you have to create your surfaces. I have used here sweep with a circle placed to the startframe (getCrvSFrame). Important: Switch of CapEnds in the sweeps!. The created sweeps are connected to the nodes BRepNameSubObj. This node takes the sweep and gives edges and faces a name. If the elephant runs, it creates also a tempobject with the same names. Now you can preselect both edges. Do not clone the BRepNameSubObj node, because the clone would have the same basename for the subelements. When you now create the blend the names of the edges will be evaluated and stored in the blend node. Connect the wires and switch of the tempobjects in the BRepNameSubObj nodes.
It's a little bit complicated, but at the moment I can't find a better solution for the function.

Have a nice day
Karsten

Attachments:
sweep-blend.nod


From: Karsten (KMRQUS)
18 Oct 2016   [#539] In reply to [#537]
And your file with a blend:-)

Attachments:
CP-Swept_ versus Blend.nod


From: James (JFH)
18 Oct 2016   [#540] In reply to [#538]
Hi Karsten,

Thank you for your clarification of the application of BRepNameSubObj node together with Blend node. I know I asked about this earlier: http://moi3d.com/forum/index.php?webtag=MOI&msg=7713.499
but this a prime example of where inputs into a alt version of const node (called say Num node) would be very useful. In this way a short series could be constructed with variable inputs as shown.

-James
From: speedy (AL2000)
19 Oct 2016   [#541]
Hello Karsten

First of all thank you for the explanations....
I would like to ask you some things that are not
very clear

1- theBlend object surfaces are sweep, loft etc etc
must always be closed (solid) ???
Name BrepSubObj Node- does not recognize the surfaces
as Brep? ........
2- I need to clarify if, once connected my
Surf with BrepNameSubObj- Node, run Elephant, I have to selected
the edges which appear to me to video ,before or after
It made the final connection with the final Blend -Node ......

3- Blend curves, Curves Joint , Rebuild Curve, I think they are Nodes
absolutely essential for the growth of Our Elephant,
and given the Your ability to create Scripts, I think you should give it a thought

Have a Nice Day and many .. many .. Thanks
al

Show messages:  1  …  462-481  482-501  502-521  522-541  542-561  562-581  582-601  …  902-912