algorithmic modeling for Rhino
Tags:
I'd also be interested in hearing about a code approach to this but here are some practical tips:
1. Draft Angle Analysis will give you visual confirmation of the part line (the line along which the 3-axis approachable portion of the surface meets the portion of the surface referred to as the "undercut").
2. Running the Silhouette command in the Top viewport (this is how a 3-axis machine "sees" your model by default) to generate a curve or series of curves as your part line.
Remember:
1. Your tool tip geometry and diameter play a large role in which portions of the surface are approachable. In other words, it's just just undercuts you're looking for but also tight valleys and pockets into which your end mill may not fit.
2. Approachability is relative - a change to the CPlane properly synced with the origin system in your CAM package will completely change which portions of your model can be defined by a 3-axis mill.
Hi, Brian
Thank you for your tips. The real circumstances are far more complex than my simplified question. Not only the tool tip geometry is important, the flute length, holder diameter is also of critical importance. The curvature variation of the surface will result in an impossible milling point due to the collision on the holder. I will check and see if rhinocam provide an api to make the simulation internally:)
-Jerome
My initial approach would be to sample the normal vector at enough locations. If the normal is horizontal or points down, you can't mill it. With "enough locations" I mean something quite specific. Given a nurbs-surface I'd sample at degree*2 samples per span in every direction. However normal vector evaluation is extremely fast so you can sample the living daylights out of a surface if you're worried you might miss a small spot.
With Breps it becomes somewhat trickier. The same logic applies, but you'll have to iterate over all faces and for every sample determine whether it's inside or outside the trimming region.
Alternatively you can convert the surface/brep to a mesh and then just iterate over all mesh normals.
--
David Rutten
david@mcneel.com
Poprad, Slovakia
Thank you, David
I've tried normal checking and it's really fast. I used mesh to do this.
By the way, what do you mean by "sample at degree*2 samples per span in every direction" ?
-Jerome
Nurbs curves and surfaces have knots. For surfaces, knots in two directions (U and V). So a surface is actually made up of a patchwork of little sections delineated by knots in both directions. These segments are called "spans". Spans are useful because they represent a single "piece" in the "piecewise" nature of Nurbs. A single span is governed by only a single polynomial (or in the case of surfaces an interpolation between 4 polynomial boundary conditions) and therefore has limited complexity.
The higher the degree, the more complexity a span can have. Thus, if a surface has degree 2 in the U direction and degree 5 in the V direction, you should sample it with a sampling grid of 4×10 (2*2 × 5*2). Though on second thoughts I think you're better off sampling more often than twice the degree, you want to find even small areas that are beyond vertical.
--
David Rutten
david@mcneel.com
Poprad, Slovakia
Thank you! David.
Converting to mesh and use mesh faceNormals seems to be a simpler way, but may not be as fast as sampling on surface I think.
-Jerome
Also there may be bits of the surface which are underneath other objects that prevent the tool from reaching it (like the left portion of the top-most blob on the surface shown above). Since these ares may have normals that face up there might need to be some sort of additional analysis to identify these problematic spots.
Not that I claim to have a solution :) My gut would be (if you are interested in just identifying these problem areas) to do the vertical line intersections like you mentioned, and if there are multiple intersections on a given line, then store all but the first intersection as problem sample points on the surface.
It sounds like you may have tried something similar and it was computationally expensive - so I'm sure there are better ways of going about this... just thinking out loud :)
-Brian
"the left portion of the top-most blob" is actually part of that same surface. It cannot overhang itself without first having a horizontal normal vector. If you're dealing with an aggregate of different surfaces than you indeed need to perform intersection/collision tests, but for a single surface a normal-vector test should suffice.
--
David Rutten
david@mcneel.com
Poprad, Slovakia
I see what you mean, Brian. I was able to do this (in Grasshopper, not in code) by first isolating the sample points with a normal value equal or less to 0. Once those points were isolated, I used them as start points for some long lines running in the opposite vector of the CPlane Z axis. Lastly, I found where those lines intersected my original surface to identify both the undercut portions and "shadow" portions of the surface (foreground).
The surface in the background shows how it was still quicker to run a Silhouette command followed by a Project command, trim the curves to a single closed boundary, and use that boundary to split the surface so that I can create surface-based boundaries from multiple approach positions in my CAM package.
This does, however, bring up a coding opportunity: How do I generate a closed curve-on-surface that tightly bounds a collection of surface points found to be unreachable?
Ah yes, I thought it was just a test to see whether a shape could be milled at all. If you want more detailed information then you do need to take shadowing into account. I don't know what the fastest way would be to get this information.
--
David Rutten
david@mcneel.com
Poprad, Slovakia
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by