From: Fubax
Hi,
I've been working on a special gear design for my 3D print project and was able to draw a very nice involute gear profile using a modified Circular Array script.
The process of designing the gear was hybrid, I only used the function to create the undercut by roll-arraying the center point of a rack tooth circular tip, then drawing a through point spline and offsetting it by the tip radius.
For the tooth I just used standard involute shape made by FxGraph3D script:
_FxGraph3D a*(cos(u)+u*sin(u));a*(sin(u)-u*cos(u));0;0;6.283185307179586;0;0;50;0;1;;;V
, as the array produces involute profile at some arbitrary points along the rack tooth edge, which are hard to trace with a hand-drawn spline.
I've used Gemini Pro model to generate this script (see attachment ZIP). The principle works like this:
Simple straight-line rack rotates around a circle with a offset, such that there's no slip at a given radius. The circular array function has "Radial Step" parameter which does just that when it's a negative value.
The script works only for a rack placed on the bottom of the gear or top (negative radius must be used). This modified script accepts the roll radius/diameter value as input (tooth module * number of teeth = diameter) and calculates corresponding "Radial Offset".
Now I have an issue, because I want to create a non-circular involute gear, and I need to "roll-array" the rack over a curve (arch) with parallel offset to the curve to avoid slip at each step. I believe it would be possible with MoI, the script would essentially be the "Curve Array" with a roll offset option.
I haven't tried to make it using AI yet, and maybe some human ingenuity already made something like it. Anyway just asking.
Attachments:
ArrayRoll_v1.0.zip
Image Attachments:
ArrayRoll.JPG
From: Fubax
I might be onto something, did some research and maybe the correct method for creating such meshing gears would be a Curve Envelope script, that would trace a rolling shape of one curve over the other, in my case a straight rack over a curve arch. The script would work on a "tooling curve" first (here the rack curve) and expect it to be selected first, then selecting the roll path curve. It would expect that the initial position of the two is in its initial meshing position.
The roll path curve is essentially a pitch curve for a spur gear.
That would be all that's needed for production of the Envelope curve. The exact points making the envelope are a result of two parameters, position along rack curve and rack roll progress which drives its position and rotation. The Rack motion just assumes a straight rolling over the pitch roll curve, parallel at contact.
I got the idea from this video
https://youtu.be/eG-z-791_ak?t=652
From: Michael Gibson
Hi Fubax,
re:
>Now I have an issue, because I want to create a non-circular involute gear,
> and I need to "roll-array" the rack over a curve (arch) with parallel offset to the
> curve to avoid slip at each step. I believe it would be possible with MoI, the
> script would essentially be the "Curve Array" with a roll offset option.
I'm sorry but I'm not understanding what you are trying to do.
How is your ArrayRoll different than circular array?
Do you want the object to rotate in some way on every array step?
Kinda need some more details.
- Michael
From: pressure (PEER)
I'd look at using something like Gearotic for this. Or at least ask on the Gearotic forum if you want to roll your own.
- Peer
From: Frenchy Pilou (PILOU)
https://www.gearotic.com/Home.html
From: Fubax
@Michael Gibson sorry for confusing explanation.
My ArrayRoll differs from Circular Array by putting this equation into the Radial Step field:
- RollDiameter * PI * (AngleToFill / 360) / (ItemCount - 1)
where user has to enter only the circle diameter on which the arrayed item will roll. Here's a visual example ot normal array, vs roll array:
Normal array:

Roll circular array:
The roll shifts the rack perpendicularly to the curve normal at given step by the arc-length of the step.
Now I want to do the same with Curve Array, to shift the arrayed object perpendicularly to the path curve normal (or in other words parallel to the path curve) at a each step of the array, by the length of the step-segment of the path curve.
For a circle it is a simple slicing of circumference value by step size to get the offset. If the Curve array distributes the elements at a constant-length segments of the path curve, the equation would be simple.
@Peer and @Pilou thanks for pointing out the Gearotic, didn't know about it, the price is kind of high doe.
Image Attachments:
normal.JPG
roll.JPG
From: Michael Gibson
Hi Fubax,
re:
> If the Curve array distributes the elements at a constant-length segments
> of the path curve, the equation would be simple.
Curve array does distribute objects at arc length stations along the path curve.
There are 2 modes for specifying the arc length distance, there is a "distance" mode where you give the distance directly, or there is "Item count" mode where you give an integer item count and the segment distance is calculated by NumSegments = NumItems-1 and SegLength = TotalCurveLength / NumSegs.
Stations are positioned along the curve with a coordinate frame at each one:
Objects are then translated and rotated from the first frame onto each station's frame:
There isn't a specific parameter for giving a distance along the curve normal but if you translate the input objects in the direction of the normal at the start of the curve it should have that effect:
- Michael
Image Attachments:
fubax_array1.jpg
fubax_array2.jpg
fubax_array3.jpg
fubax_array4.jpg
From: Fubax
Thanks Michael for the response.
I would like to progressively shift the objects, parallel to the curve at each station.
If such parallel shift would amount to the step arc length, the object would essentially just roll over the curve, as if having a flat base.
*Edit
Essentially I'm looking for a "Radial Step" functionality from Circular Array in the Curve Array. Does this addition require changes to the factory, or can it be done in java script?
From: Michael Gibson
Hi Fubax, sorry no there isn't any progressive stepping built in to the array curve factory.
But it seems like it shouldn't be too difficult for a script to generate it.
If you have an object to array along the curve like this:
Your script could generate copies along the curve normal at the first position:
And then do a CurveArray of all those and harvest the desired piece at each station and discard the rest:
Or another method is the script could create a line along the curve normal at the base position and include it in the objects to array, then it could examine the line created at each station and use it as the direction to move that station's objects.
Let me know if neither of these methods will do what you need.
- Michael
Image Attachments:
fubax_arraycurve1.jpg
fubax_arraycurve2.jpg
fubax_arraycurve3.jpg
From: Fubax
I think the "double" array method would do the job. Would that be doable with NodeEditor Plus, the selection of a specific element of the first, linear array at each station? Maybe the Nodeeditor could even further automate the process and generate envelope path from the final array result?
From: Michael Gibson
HI Fubax,
re:
> Would that be doable with NodeEditor Plus, the selection of a specific element of the
> first, linear array at each station?
I'm not sure, I'm not familiar enough with the Node editor myself. I can set up an example .js script though, do you want that?
- Michael