# Is there a modifier to transform proportionally along a circle? (for tri-lateral symmetry)

What I'm actually trying to achieve is a hack for modeling with trilateral symmetry. I'm trying to achieve this with the following modifiers:

Starting with a model like:

1 - Mirror Modifier (mirror in X and Y) to give 4 identical quadrants. This gives me something like:

2 - Boolean Modifer (use a big cube to remove the 2nd quadrant i.e. upper left). I only allow the cube to draw as wires so I can see through it. This give me something like:

3 - Some sort of deform modifier (this is the crux of my question) that will close the shape in some reasonable way to achieve trilateral symmetry and allow me to continue modeling only in the original "quadrant".

Simple deform doesn't seem to be the right thing here.

Mathematically there are a few ways to do this, though scaling everything along the circle seems to be most natural and gives me the result I want. So I could implement any of those transformations in Python as a one off. But I'd rather hear someone experienced with Blender say that one of the deform modifiers does the trick for me.

Thanks!

• You could use a curve modifier, after your current setup, or an array with object offset, using a rotated(360/3 degrees) empty Jan 23, 2015 at 8:10
• Maybe this helps: blender.stackexchange.com/questions/23659/… Jan 23, 2015 at 8:51
• Brilliant, @Jerryno. I had to tweak it a little to make it right. It is even more general that I had hoped. Writing up the answer now. Jan 23, 2015 at 14:59

Thanks to @Jerryno, I have an even more general solution than I was hoping for. In fact, it addresses any degree of symmetry that I need. Here are the details.

Here is my base geometry with only a subsurf modifier:

Notice it also shows a Bezier circle that I will be using.

1 - Add an Array modifier with a fixed count of 3. Notice that Merge is checked.

This gives a result like:

2 - Next we want to use a Curve modifier to bend things around the circle.

This gives something like:

3 - Don't fret about the gap. In order to close the gap, select the Bezier Circle and type "3/pi" in the X Scale and Y Scale. Since Blender interprets the Python expression it will show .955 in the cells as in:

Which gives the very satisfying result of:

Interestingly, if you change the Array modifier fixed count to anything, N, and change the scale on the circle to N/pi, you can get higher degrees of symmetry (e.g. w/ N = 5):

How cool is that?! (Man, I love Blender!)

One more thing might make this even more convenient. Since we have an odd number (3 in my case) of repeats, it isn't truly symmetrical. When I edit, it looks like...

If you want this edit to be truly symmetrical (i.e. each edit affects 6 analogous areas in the final geometry), then put a Mirror modifier for the X axis first in the modifier stack and only start with half of the original geometry. And we get...

So to summarize, the full recipe of modifiers for this N-lateral symmetry is:

1 - Mirror Modifier in X

2 - Array Modifier w/ a fixed count of N

3 - Curve modifier with a Bezier Circle

4 - Make sure the Bezier circle has a radius of N/pi

Use an array modifier and an empty to control the offset:

Starting with your original object and an empty

Add an array modifier to the object.

make the empty the offset object for the array

Rotate the empty 90 degrees and move it so all the pieces align.

Now you can edit the original object and all of the clones in the array will be edited simultaneously.

• Thanks, @cegaton. What I was looking for was a modifier stack so that as I edit, I could visualize the full symmetry around the circle live without having to manually duplicate and rotate things myself. I answered my own question below and am very happy with the result. Jan 23, 2015 at 15:40
• Though looking more closely, your approach would be good in some other ways. I'm going to play with that. For what I'm trying to do, rotation would be 120 degrees instead of 90 degrees. So your approach would be a little less convenient for my current design. Jan 23, 2015 at 15:43
• BTW, after a good deal of experimentation, a variation of what @cegaton suggests is actually a superior solution for some other situations. I'll write up the details shortly. Thanks, cegaton, and sorry I didn't fully grasp the superiority of your approach at first. Jan 24, 2015 at 22:26
– user1853
Jan 24, 2015 at 22:31

I had posted another answer to my question that addressed the original situation I was facing. But since I'm designing an entire series of objects with trilateral symmetry and some with some very different topology, I thought I'd adopt a variation of the solution presented by @cetagon here.

The problem with my other solution is that it maps everything in the original model above the X axis to the outside of the circle and everything below the X axis to the inside the circle. While this works for my original problem, it leads to a lot of confusion and crazy math to try to get resulting geometry that is close the origin.

So here's the solution I am using now. This is also generalizable for N-way symmetry, but I'll show the 3-way case here.

With starting geometry that looks like:

1 - Add a Mirror modifier to mirror in X to get (be sure to select Merge and Clipping):

2 - Add an empty at the origin and rotate it around Z by 120 degrees (1/3 of the way around).

3 - Add an Array modifier with relative offset 0, select Object Offset and specify the Empty object. Be sure to select Merge and First Last as in:

This yields...

I left it in edit mode so that you can see that only the one bit of geometry needs to be edited in order to get the fully symmetrized result.

Editing near the seam opposite the original mirror edge can be a bit wonky at times since it seems impossible to automatically get the clip behavior you get with the mirror modifier. I'm open to suggestions on that.

Also, do people prefer this approach or the other approach better? Or can someone think of something even better. I'd rather just have a more flexible mirror modifier but I'm not that far in understanding the code base yet. Only approximately 24 hours in a day.

• I realized that I could have just unchecked relative offset instead of making it 0. Jan 24, 2015 at 23:08