Combining 'Double-Cut' extension with dynamic component to array copies

As a note, I am open to any solution that doesn’t use an extension as well, I just don’t think it’s possible. Also, I do know maybe 7 ways to do this manually, or with some degree of automation, but I need it completely automated into a dynamic component that a 2 year old could drop into a project and scale.

The end goal here is to create a deflection track dynamic component that will work properly when scaled. It’s basically a metal stud with slots cut all the way along it. I would like to be able to start with a short length with 1 slot in it, and then scale it to the length I need, and new slots are cut at equal spacing while I increase the length.

This concept stems from the fence picket example used in the official dynamic component tutorial. The difference being that instead of creating new pickets as I scale, I want it to create holes (in an object with thickness).

I’ve spent a couple days trying to accomplish this myself, but I hit a major roadblock when I found that ‘cutting-components’ can only cut a single face. I’ve found an extension, Double-Cut, that gets me halfway to my goal but now I need to apply the principles of the fence tutorial in conjunction with Double-Cut’s ability to penetrate both faces.

From the tutorial, I see there is a master component (Fence) that contains all the sub components (Picket, TopRail, BottomRail, Post). In trying to recreate this hierarchy, I hit a snag. Something about how Double-Cut operates doesn’t quite work here. I can create the outer/master component and the component for the hole, but if I make a component of the metal stud that the hole is being cut through, it ceases to cut the far face of the hole.

It appears a cutting component made by Double-Cut can only correctly operate on loose geometry. But if I can’t make the metal stud a component, I can’t array copies based on it’s length… Can I base the DC arraying off the length of the master component?

To relate this to the fence example:

It uses the length attribute of the ‘TopRail’ or ‘BottomRail’ to base the arraying of “Picket” on; could the length attribute of “Fence” be used instead? It would be exactly the same measurement, the difference would be that it’s grabbing an attribute from the component that it is nested inside of, instead of a component that is nested alongside it under the same outer component.

I can add a project file/pictures a bit later but just in principle, is there a way to do this (with or without an extension)?

Here is what I’d like to start with:

and here, what I’d like the end result to look like after scaling to any length I need.

I’ve attached my model (2020 Pro, with Double-Cut extension trial) that I haven’t messed with any dynamic component settings. Def Track.skp (35.6 KB)

  • cutting planes are on the XY axis and they need to be placed on raw geometry.

  • copies of a cutting plane can only work if placed within another cutting component or group

  • In this case groups are a better alternative as changing the length will greatly increase the number of components and clutter up outliner and increase file size

  • It is better to explode this item contents after creating the desired length to minimum the file (possible via ruby for position, scale and orientation like the line tool)Def Track.skp (110.2 KB)


Incredible you were able to solve this so fast! I can’t thank you enough; my co-worker is astounded and he’s been doing this a lot longer than I have. You deserve a medal sir.

The example above is proof of concept, but as been emphasized by others, groups are not reliable. They do not automatically become unique when used in a DC. For repetitive geometry this is not a problem.
If you copy this DC, you will find the array of holes (a group) will match the original despite any scaling. Therefore these need to be components as per new example.

Def Track (2).skp (419.8 KB)

If further development requires the holes to be of different sizes or a material scaler is used then the base cut groups may need to be components too.
The reason to try and use groups to avoid the #numbers that can appear on copied components (that can appear on an update) thus avoiding the need to purge the file after simplification.
As hinted above, the use of ruby to help overcome this problem and give extra functionality (without hacking the original code), by creating a tool similar to the line tool, would make this “child’s play” to use.
But first create the objects and check manually what can be done for your scenario

1 Like