Overriding Mirrored Subassembly Parameters
AutoCAD Civil 3D is an incredibly powerful infrastructure modeling platform, especially for road (‘corridor’) design. One particularly useful feature of corridors is the way you can map the output of one subassembly to the input of another in the same assembly. For example, let’s say you have a lane subassembly that has a subgrade slope that is not superelevated, but a top/pavement slope that is. This will cause the depth of the subbase layer to vary from station to station as the superelevation rate changes. An adjacent shoulder subassembly may need to know how deep this subbase layer is in order to match the depth. If the lane subassembly outputs this depth via an output parameter, this can be easily accomplished in the assembly properties…
There is however a catch: let’s say that you create the right half of your assembly, and then you ‘mirror’ it to create the left.
After doing this, you then set the input parameter overrides to map the output from the lane to the input on the shoulder… To better illustrate the issue that will occur, we also set the subbase depth for the right side lane only to a larger value after mirroring (default is 0.3m, we’ll set the right side to 0.45m). When you apply your changes, you end up with something like this:
Obviously something has gone wrong… The right side looks perfect, but the left side shoulder is clearly following the right lane subbase depth! The problem is in the way AutoCAD Civil 3D interprets the parameter overrides/mapping. Because we mirrored the right side to create the left side of this assembly, the names of the left side subassemblies are identical to those of the right side. When we try to override the subbase depth in the left shoulder, we are presented with a list of possible candidates for the override value source; this list will contain the output parameters from the left lane subassembly. After selecting the proper output parameter from the lane, the binding for the override will be set. The format of this override is <left lane subassembly name>.<output parameter name>. AutoCAD Civil 3D will attempt to resolve this binding by locating the first subassembly with the specified name in the assembly – it does not look at any grouping of the subassemblies by side or connection…it just treats the entire assembly as one big collection of subassemblies. Again, because of the ‘mirror’ operation we used to construct the assembly, the right lane subassembly name is identical to that of the left. The right lane is defined first in the assembly, therefore the binding on the left shoulder will pick up the output from the right side lane:
So…how do we get around this? Knowing that the binding is resolved by subassembly name, the solution becomes evident and is actually quite simple: rename the lane subassemblies so that each is unique within the assembly and reset the overrides. First, remove the binding/parameter overrides from the shoulder subassemblies. Then, rename both lane subassemblies…simply appending an ‘L’ or ‘R’ to the name as a suffix will be sufficient.
Apply the changes and close the assembly properties dialog. This is necessary to refresh the subassembly list in the assembly for resetting the parameter override. Now, open the assembly properties dialog again and set the parameter overrides:
Note that you should see the renamed lane subassemblies in the value source list…
Upon applying the changes/closing the assembly properties dialog, you will see your assembly build correctly:
We would like to thank our partner in Ontario, SolidCAD Solutions, for bringing this issue to our attention and for allowing us to use images of their custom subassemblies (built using Subassembly Studio).