How to create a silhouette curve?

I have a subd in grasshopper that I’m trying to get a top view silhouette. I’m not seeing a way to do this, any guidance much appreciated.

Ok I found “project”, so half way there. It says no naked edges though…


How about this?

-Contour it, project the contours, region union to get the boundary curve.

Model Space:

Graph Space:


20230709_SubD_Boundary_Edge_Response_01a.gh (219.4 KB)

Thank you, that may get me by for now. As I’m sure you’re aware, decreasing the spacing increases the accuracy, approaching the actual silhouette.

I’m thinking there are likely multiple precise silhouette workflows, but this will hold me over until then.

Will leave this technically unsolved in case someone comes up with the perfect output workflow.

Thank you again.

1 Like

Yeesh lol, not unlike what I was afraid of, though I’ll likely offset the perimeter inwards, then somehow average the two intersecting curves as an approximation.

Agreed, it’s not the ideal workflow and perhaps there’s a better method that involves a plane intersection or some kind of convex hull boundary.

Perhaps there’s a method for getting an isocurve or subd demising line that someone can point to

I think mesh shadow looks promising:

Keep in mind technically it’s a meshed outline though… not smooth curves like subD so while visually accurate if you need it completely accurate I’m not sure this is the solution either.

20230709_SubD_Boundary_Edge_Response_01b.gh (116.8 KB)

And one more method sticking only in the realm of SubD:

I think (unless someone else has a better solution) this is the most accurate version as it isn’t computing a from a mesh representation of SubD but rather the SubD curves themselves. Speed is not great here though.


20230709_SubD_Boundary_Edge_Response_01c.gh (117.8 KB)

Interesting explorations, and thank you for contributing.

You may see in these images here what the basic problem is, the generated curves are not the silhouette, but slightly inset, as they are the projected edges of the Subd, which are not quite the silhouette, so the curve generated shows this tell of that with these bumps.

Yesterday I created a decently approximated curve manually traced upon yesterday’s workflow.
Today I got closer to the real silhouette by exporting to step, into solidworks, projected 99% (4 points were not quite connected and had to manually repair them so very close) of the silhouette to a sketch, extruded surface, and exported back into Rhino, where its close but no cigar.

I see that if in Rhino I look at the top view and select pen or technical graphics then it shows a silhouette, seems like almost there. Anybody know of a way to generate curves from these displays or to export them to dxf?

Can you please share your GH file so we can test with the actual form?

Thanks!

you can use the SubD’s mesh and catmull-clark it as SubD is a combo of these two things.
then either use mesh shadow, if you want the thing planar. I didn’t test it, because we have a better solution, but technically… to correctly order the points you would need to use a combo of travelling salesman and k-means algorithms, which works fine, but is a bit of a overkill here.

or

you use a little silhouette script, to have it computed like rhino would. the advantage is that your curves are already in the right order and you need to choose how to extract points from the lines and find a good middleway between wobbly lines and not much precision.

silhouetty.gh (10.1 KB)

hope this helps.

I considered including my subd, but it’s a proprietary design for a client. I was thinking about adjusting it some to share, but any subd shape should suffice for the exercise. Though thanks much for helping me to pursue better solutions.

I can say that ultimately I’m trying to make slices of the shape in order to sort of 3D jigsaw puzzle a structure then skin it, sort of like an old school RC plane, and I’m trying to get an accurate horizontal slice, which will likely be plywood curved a bit by one method or another, and so this exercise is to define that slice accurately.

I believe I have it close enough now, but now I’m extremely curious to figure out how to do this, which sincerely no offense to grasshopper which is my most regarded CAD software, but it’s frustratingly easy for me to get it precicely, in Solidworks haha.

Thank you Ben. Obviously you’re 100x the coder I am haha. I’ll read that a few more times and do some homework.

Unfortunately the script puts out not enough points for the curve if I plug in a generic subd.

it’s not about being a coder. it’s true that some standard silhouette is missing in grasshopper and you should not be learning code to use it in gh.

this file you could have shared though :stuck_out_tongue_closed_eyes: :joy:

try and upper the level of subdivision in the catmull clark subdivision, but I’m pretty sure it’s limited to 3…per node. you can put two or more subdividers after another to upper the “resolution” if you have such simple subD’s as your example.
EDIT: I see just now that you have ditched the mesh conversion…

in such cases you can cut a chunk out, so noone has the design, but we would have a segment of realistic data.

Have you tried make2D yet? This can be done in Rhino or programmatically through grasshopper

If you just pass your SubD directly to the Mesh Shadow component, it produces a pretty rough silhouette that falls outside the SubD in many areas.

If you first pass the SubD through the Mesh from SubD component with a reasonable Density (D) setting it will produce a fairly accurate outline.

230710_subD_silhouette_01.gh (118.8 KB)

This method fails to produce a silhouette with this geometry if the Mesh from SubD Density (D) is set above 3.

Using a script to create the silhouette works with higher Density settings and allows setting custom tolerance values if desired.

230710_subD_silhouette_02.gh (120.3 KB)

-Kevin

Thank you Kevin, been off of this project for a few days. I’ll take a look.

Thank you. Just tried it, says doesn’t support subd. Mesh from Subd and I’m not getting any output, I’ll have to try it more.