algorithmic modeling for Rhino
I have tried some of the tools people have so graciously shared such as Camel http://www.grasshopper3d.com/forum/topics/camel-grasshopper-output-...
and Lobster http://www.grasshopper3d.com/group/lobster but I couldn't get them to generate the proper code for my machine. I tired a different solution than using IK. I am taking the normals along the surface I wish to cnc and I am using surface CP to move them onto a sphere and then I am simply using the remap feature to convert the UV values to my B and C rotations. This seems to work well for 5 axis machines since you only need XYZBC. This definition allows you to input a surface and it will generate the cutting paths as one continuous curve without any retracts. This is a pretty limiting method but it's fun and fast to use if you are planning on machining a form that lends itself to this sort of operation.
Here is a example of the curve it will create on the input surface.
You seem to have used a pretty clever way to evaluate the B and C angle. I'm very new to GH and if not to much to ask, I'd like you to explain in as much details as possible the method used to eval the angle.
I tried to figure it out by myself but unfortunatly the GH help on most component is pretty succinct to say the least.
Thanks for sharing,
I use the evaluate surface component to generate normal planes at the locations I wish to machine. I make a sphere with a size of 1 unit. I move all of these planes from the current location to the sphere center which in this case is also the origin. I then use surface closest point to place the oriented points onto the sphere. I then evaluate all of those points to get the UV coordinates on the sphere and I remap the u values from 0 to 1 : the rotation limits and then I remap the V from 0 to 1 : 0 to 360. It is kind of a strange approach but it works well. To me the math is little easier to think through rather than trying to solve for angles. I made an angle based solution in the past but it was hard to solve for positive and negative angles. With the current approach you can do that a bit easier based on your remap values and that way you can specify angle limits in relation to the machine you are using.
I can understand this technique works fine for an XYZBC machine where the part is fixed but for other configuration like say an XYZAC where A is a trunnion table and C is a rotating table in the middle of A I don't see how this can work because the XYZ coordinate of the control point or bit tip is moved each time a rotary axis move. This is why I wanted to have a better understanding of your approach.
If I may again, if I understand correctly you use a Plane origin component to move each normal plane generated by the eval surface component using the F output (though I guessed it was a normal plane there is no mention of this in the help file I've seen) then you feed the moved normal plane to a Point oriented compoment. I can see you set the U and V to 0 and W input to 1. I can only guess at what this compoment those, I assume W is set to 1 to match you sphere radius and I assume this component kind of project the points on the sphere. You then use this point (points actually) to find its UVs values on the sphere. Since the sphere as a radius of 1 I can understand that these UV are related to the sin and cos of a vector or line from the center of the sphere to that point (maybe I'm wrong here) but I don't see the linear relationship implied by the use of the remap component with angles. Maybe you can explain this part a little more if possible.
I am using an XYZBC machine so you might be right about it not working for other axis configurations although I think it could be adjusted to accommodate those machines. In terms of the linear relationship to the remap:
the current sphere is parameterized at 0 to 1 so the remap takes the current UV coordinate position and just scales it within the rotation values with U representing one axis and V the other. Here is an image that gives an example of a C axis rotation based on remapping a point value to a rotation value.