MoI discussion forum
MoI discussion forum

Full Version: Node Wish List

Show messages:  1-8  …  249-268  269-288  289-308  309-328  329-348  349-368  369-388  …  409-425

From: Michael Gibson
4 Apr 2023   [#309] In reply to [#308]
Hi James,

re:
> If you apply extrude to attached polyhedron (regardless whether separated or not) the
> extrusions does not conform to face normals, instead they unidirectional.

It's because the surfaces are not planar. They are degree 1 surfaces with 4 corner points but the 4 points are not all on one plane.

You could do something like evaluate a surface normal at the middle of parameter space and use that as the extrusion direction, but the regular Extrude command will only extrude each piece along a separate individual direction if the piece that's being extruded is planar.

- Michael
From: James (JFH)
4 Apr 2023   [#310] In reply to [#309]
Thanks Michael,
quote:
You could do something like evaluate a surface normal at the middle of parameter space and use that as the extrusion direction

Yes this is exactly the method I desire to recreate with nodes, and the principal reason for "NODE PROPOSAL: srfNormals" above.

Thanks for clarifying this.
James
https://www.instagram.com/nodeology/
From: MO (MO_TE)
4 Apr 2023   [#311]
I studied the links James posted earlier.
There is something I couldn't understand:
"face.evaluateNormal( uv )" function returns the surface normal on given "uv" value, right?
According to :
https://moi3d.com/forum/lmessages.php?webtag=MOI&msg=9547.25
There is no function that returns the surface "uv" value,
So I don't know what "uv" value should look like.
what is "uv" parameter type?
I tried to set the "uv" value with array numbers [0.5,0.5],also I tried to set points as "uv", but that didn't work either.

With "face.planarFrame" property I managed to get normals of planar surfaces
This property uses the "untrimmed" version of the surface
And normal appears on the corner of the "untrimmed" surface.

From: Michael Gibson
4 Apr 2023   [#312] In reply to [#311]
Hi MO, the uv can be any object that has .x and .y properties on it. You can use a 3D point for it where you've just stored the x and y values, the z value will just be ignored.

The actual x and y (usually referred to as u and v when being used in parameter space) values you use should be in the uv rectangle for the surface's parameter range.

The lower left corner of the surface's parameter range is on a .domainMin property on the face, and the upper right corner of the surface's parameter range is on a .domainMax property on the face. Each of those face.domainMin and face.domainMax properties will give back a 2d point object with x and y values.

If you want something in the center of the parameter range you could do x = (face.domainMin.x + face.domainMax.x)/2 and y = (face.domainMin.y + face.domainMax.y)/2 .

- Michael
From: MO (MO_TE)
5 Apr 2023   [#313] In reply to [#312]
Thank you for your helpful answer Michael
I wasn't aware that "evaluateNormal()" function returns direction of the normal, not the normal itself.
This was the tricky part.
I took James' idea and took it further.
The results are satisfying. :)




Although, I had a problem on some extruded surfaces.
I extruded an "S shape" curve, and this is the result:



After rebuilding the surface with the network command problem solved.
From: Michael Gibson
5 Apr 2023   [#314] In reply to [#313]
Hi Mo,

re:
> Although, I had a problem on some extruded surfaces.
> I extruded an "S shape" curve, and this is the result:

Stepping by even distance amounts in parameter space does not necessarily yield even distances in 3D space, the parameter space may be squished or stretched in relation to 3D space. For an extrusion if you had uneven spacing in the control points of the curve being extruded that will have that type of squishing or stretching in it.

A rebuilt curve will have what is called an "arc length parameterization" which means the parameter space is in sync with 3D distances. The Network solved it because it implicitly does a rebuild on its input curves. If you ran Rebuild on your curve before extruding it that would also do it.

- Michael
From: MO (MO_TE)
5 Apr 2023   [#315] In reply to [#314]
Thank you
you are right, rebuilding the curves solves the problem as well.
From: Frenchy Pilou (PILOU)
6 Apr 2023   [#316]
You have also some info about orientation of a surface(s) in Dispersion Script(s) by Max Smirnov! ;)
http://moi3d.com/forum/index.php?webtag=MOI&msg=6486.1

https://moi3d.com/download/scripts/max/vSpray.v.1.1.2014.01.27.zip
https://moi3d.com/download/scripts/max/vSeed.v.1.2.2014.02.05.zip
https://moi3d.com/download/scripts/max/vDrop.v.1.0.2014.01.28.zip
https://moi3d.com/download/scripts/max/vOrientFast.v.1.0.2014.01.28.zip
https://moi3d.com/download/scripts/max/vOrient.v.1.0.2014.01.28.zip
https://moi3d.com/download/scripts/max/vClone.v.1.0.2014.01.26.zip



Only surface by surface!

From: wayne hill (WAYNEHILL5202)
8 Apr 2023   [#317] In reply to [#315]
Hi Mo,

Nice progress on the Normals Node. I attempted it a while back with no success. Will be watching for updates.

Wayne
From: MO (MO_TE)
8 Apr 2023   [#318] In reply to [#317]
Hi Wayne
It's almost done, although I couldn't figure out some problems. (Like Invert mode)
I'll be happy if you or someone else can improve it. :)
I'll post it soon.
From: BurrMan
9 Apr 2023   [#319] In reply to [#318]
Hi Mo,
Heavy! Nice results!!!

“Inverse mode”?

Not that i can do what you are doing, but just a heads up. MoI uses “Flip” as the normal direction modifier.

Flip.js????
From: MO (MO_TE)
10 Apr 2023   [#320] In reply to [#319]
Hi BurrMan
Thanks, I couldn't make it work with "Flip" factory, But somehow managed to do it.
It's not perfect but it works ! :)
From: MO (MO_TE)
10 Apr 2023   [#321]
"surfaceNormals" node

Outputs the normals of the surfaces in 2 methods.
method 1: Faster, better flow ==> by using normal output
method 2: Slower, more reliable ==> by using "Dir" and "Base" outputs
"Dir" and "Base" can match with "vector/LinebyVec" node and "Points2/GetCrvSFrame" node to generate normals.




inputs:
surface/surfaces
u and v divisions

outputs:
Dir: direction of the normal.
Base: points on the surface.
Normal: surface normals

address:
Points/SurfaceNormals

updates :
Unified Normals option added
Rebuild Surface option added
Invert mode added
Small improvements :)
Instruction file attached

Attachments:
SurfaceNormals.js
SurfaceNormals_Instruction.nod


From: Barry-H
10 Apr 2023   [#322] In reply to [#321]
Hi Mo,
I can't run your instruction nod because I don't have the Box Center nod.
Can you please post the js file that contains it please.
Cheers
Barry
From: James (JFH)
10 Apr 2023   [#323] In reply to [#321]
Thanks MO for surfaceNormals node and instructional NOD file.

I have been experimenting and have found a possible bug with displaying normals of poly loft surfaces (NOD file attached).
Similarly if you use "Base" pts for locating objects (eg a sphere) the result is spheres bunched up in the same plane as the normal arrows.
Initially I thought it may be that all the facet were untrimmed surfaces, but this did not turn out to be the case.
I'm not sure what it could be...


Any thoughts?
James
https://www.instagram.com/nodeology/

Attachments:
SurfNorm.nod

Image Attachments:
SurfNormPolyloft.jpg 


From: MO (MO_TE)
11 Apr 2023   [#324]
Hi Barry
See attached file :)

James
It's interesting.
I extracted edges of a surface and made a new surface with network command and it worked.
I need to check that more.

Attachments:
wnSolids.js


From: Barry-H
11 Apr 2023   [#325] In reply to [#324]
Hi Mo,
thanks working now.
Barry
From: MO (MO_TE)
11 Apr 2023   [#326] In reply to [#323]
James
I checked your .nod file and tried different ways but the result wasn't what I expected.
I think this situation is something like the one I had earlier :
https://moi3d.com/forum/index.php?webtag=MOI&msg=9581.313

Quote from Michael:
quote:
Stepping by even distance amounts in parameter space does not necessarily yield even distances in 3D space, the parameter space may be squished or stretched in relation to 3D space. For an extrusion if you had uneven spacing in the control points of the curve being extruded that will have that type of squishing or stretching in it.


anyway, I've written a small node to solve this problem.

"QuadRepatch" node
Gets quad and triangle trimmed surfaces and regenerate them with "merge" and "network" commands.
Use it before "surfaceNormals" node.
address:
Construct2/QuadRepatch

Attachments:
QuadRepatch.js


From: James (JFH)
11 Apr 2023   [#327] In reply to [#326]
Thanks MO,

QuadRepatch.js did the trick.
I don't think I have encountered this issue before.
Could the code be incorporated within subD/polyLoft node?
James
https://www.instagram.com/nodeology/

Image Attachments:
normCubes.jpg 


From: MO (MO_TE)
12 Apr 2023   [#328] In reply to [#327]
Hi James
quote:
I don't think I have encountered this issue before.

It's because "evaluatePoint()" and "evaluateNormal()" functions work with uv parameter space not 3d space.
You need to keep the spacing of surfaces' control points even. Using "QuadRepatch", "Network" or "rebuildcurve" node.

This is possible to integrate "QuadRepatch" code inside "PolyLoft" node,
But I think it's better to keep using "QuadRepatch" node.
As you see in the attached image, "Extrude", "Loft" and "Sweep" nodes cause the same issue as well.
And I'm not sure how many nodes like them need to modify.

Show messages:  1-8  …  249-268  269-288  289-308  309-328  329-348  349-368  369-388  …  409-425