How to Design Highly Adaptable Models with Equations and Global Variables

This is a detailed walkthrough of the design process for the tire of a 3D Printed RC car on display in the MoST Museum. It serves as a simple and clear demonstration of how to design a component that will change significantly in the future.

CADimensions recently partnered with the Museum of Science and Technology in downtown Syracuse to create a new exhibit on 3D printing and the process of design. We created a display RC car, showing iterations of our design to help illustrate the process. I designed the entirety of the chassis, its internal mechanisms, and most of the wheel design. It was also my responsibility to ensure that all of the disparate components fit together, and the final product could be 3D printed and assembled. It was a highly enjoyable project, and I am quite proud of the results.

The first component I designed was the tire. I knew it would be one of the hardest to create, one of the most important pieces visually, and quite a bit of the resulting design would depend on its exact dimensions. But the trouble was, I had very little to actually define those dimensions. Nobody on our team had a clear idea of how big it should be, where exactly it would sit with respect to the chassis, what the tread should look like, anything like that. And there weren't many meaningful physical constraints to help narrow down the options either. The only thing that came close to defining it was the chassis my colleague had already created, which, gorgeous as it is, gave me little more than a shape to hold the tire up against and say, "Eh, this looks about right."

Ultimately, it was up to the group as a whole to decide those dimensions. I alone did not really have what I needed to make that call unilaterally. So I had to create a complete and visually pleasing tire design that I could edit on the fly in the very meeting in which I present it to the group. I had to create a highly adaptable design.

Unfortunately, I can't really give clear step-by-step instructions on how precisely to make a highly adaptable design. Your circumstances and constraints will differ wildly from my situation. All I can do is walk through my process of designing the tire, and explain why I made the choices I made. But, hopefully, you can pull some ideas from this, and it can help you with whatever design challenge you're encountering yourself.

Core Tire Shape

First, assess the variables.

The first thing I did was look at images of tires online and try and list all the things that could be different between any two tires. Thankfully, they generally retain approximately the same shape of "boxy torus", so whatever shape I ended up with would most likely be some variant of that. I ended up writing out a list of all the variables I could think of to define the basic shape of the tire.

  • Inner Diameter: The distance between the central axis of the tire and the inside most part of the rubber.
  • Tire Depth: How thick the tire was from inside radius to outside radius.
  • Inner Tire Fillet: The radius of the fillet that rounds out the inside edges of the tire.
  • Outer Tire Fillet: The radius of the fillet that rounds out the outside edges of the tire.
  • Tire Width: The distance between the two flat faces of the tire.

I then took that list and added each as a Global Variable, with a first-pass guess at approximately how large they might be.

I then used those Global Variables to define the sketch for the Revolved Boss that would generate the core shape.

And, one revolve later, we have ourselves a pretty basic looking tire shape! The most important part though, is that all we have to do to change its shape is open the Equations manager, change the number we wish, and rebuild. It takes only a couple seconds to wildly alter the appearance of the part.


But for the sake of consistency, I'll change the dimensions back to those that we ended up with in the final design.

Limits, Interactions and Other Considerations

An important consideration in these highly adaptable designs is to precisely understand their limits and interactions. And, in understanding them, you can more effectively control them, and consider them in the design. For example, in this tire, both "Tire Depth" and "Tire Width" must necessarily, be larger than "Inner Tire Fillet"+"Outer Tire Fillet". If they aren't, then the geometry of the side walls or the tread will break and the part will flood with errors. Thankfully. it's pretty easy to fix by just changing the variables again.

It's also important to consider precisely how you want to define the variables you wish to control. Typically, in most engineering contexts, Inner Diameter and Outer Diameter are what you use to define any hollow-cylinder-like shape. But I deliberately chose Inner Diameter and Tire Depth instead. For this project, the Outer Diameter of the tire really didn't matter enough to control directly. It wasn't going to fit within the wheel well of the car body, so it didn't really have any restrictions in that regard. What did matter was how the tire looked, and how to make the design adapt itself better when other variables changed. If I used Inner Diameter and Outer Diameter, then the Inner and Outer would be constrained by each other, and you'd have to change both at once to get anywhere. Moreover, consider one of the implicit restrictions of the design:

"Tire Depth" > "Inner Tire Fillet" + "Outer Tire Fillet"

If I had used Outer Diameter instead of Tire Depth in my design, that constraint would instead be:

"Outer Diameter" -  "Inner Diameter" >  "Inner Tire Fillet" + "Outer Tire Fillet"

Which is just messier, and so much less intuitive to hold in one's mind throughout the entire design process. Choosing "Tire Depth" over "Outer Diameter" simply makes it harder to break one variable when changing another. It's important to consider precisely which tuning knobs you want to give yourself in a highly adaptable design.

a control panel with knobs color-coded according to function

Tire Tread Sketch 1: Designing the Tread Segments

The next step was to add the tread to the tire. The tread on a real tire is meant to maximize contact area with the ground, while leaving channels for water to squish out from underneath the tire. For this project, I didn't need to do any calculations on what precisely would or would not work for such a design, I simply needed a tire tread that was visually pleasing and mildly impressive. So I opted for the "braided" appearance shown in the final tire.

(As a tangential note, but one relevant to explaining some inconsistencies in the images, I learned that the Wrap function only works on cylindrical or conical faces, and therefore refused to add tread on the curved surfaces defined by the Outer Tire Fillet variable in the previous step. I had to cut away the Outer Tire Fillet section, wrap the tread to the remaining surface, and then add the Outer Tire Fillet section later. I'll elaborate on this, and how I corrected for it, later on in the process.)

Creating an adaptable sketch for the tread was, by far, the most complicated and challenging part of the tire. Made MUCH more so by the requirement of being a highly adaptable design. I needed to somehow make sure that the treads of the tire would simply adjust themselves to suit the rest of the model, regardless of the final result. But, even with that complex a task, the first step is to create a plane to sketch on. So I created a plane tangent to the tire, sketched out a single iteration of the repeating pattern, and then assessed what variables I would have to define from there.

Relations were my best friend in this step of the design. They were the only things I could use to force the upper and lower bands of the tread to retain glide-reflection symmetry, and ensure that the tire tread didn't look strangely lopsided. But in this step of the design, I had to constrain it to only have glide-reflection symmetry without restricting it further. Or else I make certain combinations of tire dimension impossible and break everything when I adjust some variables.

Here is an incomplete list of constraints I used to force this adaptable symmetry:

  • The shown/selected dimension in the above image is set equal to the variable "Outer Tire Fillet" so that the curvature of the tread segment begins precisely when the outer tire fillet does.
  • The end caps, leading edge, and trailing edge of the two tread segments were each forced to be of equal length to their counterpart on the other tread segment. As were the Outer Tire Fillet arcs. I'd hoped this would be enough on its own to force the symmetry, but it was not.
  • The leading and trailing edge each tread segment were made parallel to one another, and the endcap of the second tread segment was also made parallel to the leading and trailing edges of the first tread segment. This kept the thickness of the segment constant throughout the shape, and helped keep the grooves aligned nicely as well.
  • The leading edge of the lower segment was made collinear with the end cap of the upper segment. This didn't really help to force glide-reflection symmetry. It was more to ensure the final tread segments lined up nicely and gave a cleaner final appearance. In the next step, when the pattern was repeated to wrap around the circumference of the tire, the leading edge of the second bottom segment was made collinear with the end cap of the first top segment, to keep things equal between them.
  • Sometimes, under circumstances I found hard to replicate for this article, one segment would tilt inwards, becoming wider with a shallower attack angle than the other. This also forced the overlapping section of the treads (pictured in the below image with a centerline bisecting the tire) off-center and broke the overall symmetry. I found that by adding these two construction lines and forcing them to be equal in length, that problem stopped happening.

Tire Tread Sketch 2: The Pattern

Once the two segments were Linear Patterned to fit the tire, there were further constraints to consider. For example, how do you make it wrap perfectly around without messily overlapping itself or leaving a gap? How do you force the consecutive repeats of the starting segments to align with one another the same way the first two do? How do you actually fully define the rest of the sketch once all the geometric constraints are in place, but the design still has some flexibility to it?

I started with figuring out how to make sure the treads align exactly how they should. I found, through trial and error, that 16 repeated segments looked about right in the final product, so I ended up adding 17 total repetitions to the Linear Pattern. I found that if you make sure the last two segments are exactly the length of the circumference of the tire apart, then they overlap perfectly with the first two segments in the final wrap, and the resulting pattern is seamless and continuous. You could never spot the starting segments. So, how do you do that?

Define a dimension between two equivalent points, and take advantage of the Equations available.

Thankfully "pi" is simply a known constant within Solidworks's database. It's available and true for every component. From there it was simply a matter of finding the appropriate radius,

R = Inner Radius + Tire Depth - Outer Tire Fillet

And using the circumference of a circle formula.

Circumference = 2 * pi * R

Then setting the distance between equivalent points to that value.

Now, finally, we have a pattern that will consistently and reliably make an unbroken tread no matter how we change the other variables defining the tire. And yet, the sketch is still under defined.

This is great news actually, it gives us a few more sliders to move with precisely customizing the tires. And it'll help us adjust things in case the other dimensions start to distort the tread out of shape too much.

There were a few different ways to define the dimensions. I ended up going with the following:

  • Ridge Width = The distance between two parallel sides of a given tread segment.
    (0.15 in the image below)
  • Gap Width = The distance between the trailing edge of one segment and the end cap of the next.
    (0.08 in the image below. Actually defined as = "Ridge Width"/2, because that ratio consistently looked right.)

These two dimensions fully defined the sketch. I could, alternatively, have swapped one of the dimensions for the angle between the trailing edge of a segment and the horizontal center line. It sounds like segment angle would be an intuitive and useful variable to control. But in practice, that definition ended up being a bit fickle, and Ridge Width just ended up being a more flexible control point.

The Wrap

And now, with the sketch fully defined, we can perform the Wrap feature, and it turned out great!

Another small note: I would, ideally, have liked to Wrap the treads out to exactly the proper distance for the design. Unfortunately, the Wrap feature does not support use of equations or global variables to define how far it extrudes from the selected surface. So in practice I basically just extruded it an absurd distance, and then added another Revolve Cut to trim it down to a diameter of "Inner Radius" + "Tire Depth"

The 1.25 in this sketch is defined by:

= "Inner Diameter"/2 + "Tire Depth"

And the R0.13 is simply:

= "Outer Tire Fillet"

Not the most intuitive way to do it, at least to me, but it was the most straightforward way I was able to find, and it still took me at least an hour to determine that I couldn't find any better approaches.

Completing the Tire Tread

Now, we're still not quite done with the tread. I wanted the grooves between the tread segments to have a controllable depth as well, and I wanted the inset of the tire to look a little less square. So I added one more Revolve feature to fill in that gap, and gave it one last controllable variable:

  • Groove Depth: How deep the grooves go from the tread to the bottom of the groove.
    (Defined as 0.025in)

The 1.13 in the above image is defined by:
= "Inner Diameter" / 2 + "Tire Depth" - "Outer Tire Fillet"
And matches up with the inside surface that was Wrapped with the tread pattern earlier.

The 0.13 is defined by:
= "Outer Tire Fillet"
to ensure that the curvature for this inner segment begins at the same point as all the other parts of the design defined by Outer Tire Fillet.

The 1.23 is defined by:
="Inner Diameter"/2 + "Tire Depth" - "Groove Depth"
Which, in essence, locates the outermost edge of this revolve a distance of "Groove Depth" in from the outside radius of the complete tire. As makes sense for a variable called "Groove Depth".

And now, this final Revolve Boss fills in the sharp edged gaps quite nicely, leaving us with a very smooth and rounded tire.

And, we've managed to retain the elements of a highly adaptable design! We can still wildly vary the tire's shape with the global variables, and a wide range of available options still works perfectly well. The only variable I wish I could control is the number of ridges that circle the tire, but Linear Sketch Pattern does not permit such things. I'd have to go in manually and change the number there. (then fix the corresponding Circumference dimension in that given sketch.) But other than that, the design grants incredible control and adaptability with little more than a few keystrokes!

Adding Text to the Side Walls

The final part of the process was extremely straightforward. All I needed to do was draw  centerline circular arcs and add text on top.

The R0.85 is defined by:
 = "Inner Diameter"/2 + "Inner Tire Fillet" * 2
Just to offset it from the inner fillet a bit. This measure was imprecise and approximated.

The font chosen was Impact Bold, as it looked most like a real tire, and extruded a distance of "Text Thickness", defined, also arbitrarily, as 0.025in.

The text pattern was repeated on the opposite side with the Unidirectional arrow corrected to point the opposite direction.

And with that, the tire is done!