Cyclical references: A case study when creating the gauntlet hand and wrist plates
To create the hand section of the gauntlet I used a lot of Surfacing techniques. I started off with a 3D scan of a hand and used the Offset Surface command to create the inside surface of the gauntlet. I made all the parts in the context of an assembly using the top down design technique. I chose to do this so I could relate all the parts together and test for clearance at any time throughout the design. This method ended up generating a lot of external references in the design and many of them were cyclical references. The ironic thing is that I have suggested to so many others not to do that and in my blissful ignorance of designing this part I did just that. I am now going to explain what a cyclical reference is, why it is best to avoid them, and how to solve any issues if you have already created them. I am going to start off by explaining what an external reference is. An external reference is when a file reads a parameter (dimension, relation, face, edge, etc) off of a different file and uses that information to create the geometry of the feature. Once an external reference is made that part file can not rebuild properly if isolated from the other file that it is referencing. Much in the same way that an assembly file cannot exist without part files to reference. Figure 1 is an image of the assembly where I created my nightmare of cyclical references. I have labeled the Parts A, B, and C so you can understand which part I am talking about.
I started off really simple by having Part B reference Part A with a simple offset surface so I could set the minimum clearance. Once I tested the motion, I needed to remove some material from Part A so I edited the file and created an external reference to Part B via a cutting feature. At this point Part A had a reference to Part B and Part B had a reference to Part A. At that stage the order that the references occurred in the tree did not cause any major issues so I was ignorant to the knot I was slowly tying. I then created Part C with an external reference to Part B and did the same workflow to cut B with C creating an external reference to C within B. So to this point Part A references B, Part B references A & C, and Part C references Part B. Table 1 is a summary of the external references I created within the parts.
Table 1: Table summarizing the external references of the parts.
So here is where things get fun. In order to rebuild a part with an external reference, the referenced part must be opened and rebuilt in order to get accurate information on the referenced entity. So when I rebuild the assembly,Part A gets rebuilt up to the feature with the external reference. At that point Part B starts to be rebuilt but has an external reference to part A so then part A begins the process again. Part B also has an external reference to C which will throw the process back to B. Figure 2 is a flow chart representing the process for opening this cyclical reference.
Figure 2: Flow Chart of Cyclical References (Simplified)
Somehow, SOLIDWORKS managed to sort all of this out but caused me to have an undesirable rebuild time. By the end of the design with small tweaks here and there I ended up having about 8 cyclical references. I did not realize I had generated such a rat maze until I tried to open the file the next day and it took 11 minutes to open an assembly of 5 parts. I really liked my design but could no longer feasibly work on it because of the rebuild time. At that point, I decided that I needed to revise my strategy and remove all the references. The references were so convoluted that any changes I tried to make would cause another part to fail which would cascade the issue to all of the parts. This inability to edit the design made all of the external references a burden instead of having the desired effect of automatically propagating any design changes.
In order to remove all the references, I created copies of all the parts using save as copy and open. Once I was in the newly created file I broke all the external references. In order to view and manipulate the external references a part has you need to right click on the part at the top of the FeatureManager Design Tree and select List External Refs… as seen in Figure 3.
Figure 3: Location of List External References Command
That will open the External references window where you have the option to break or lock any or all external references. I broke all the external references for all of the parts and re assembled them in a new assembly which opened in seconds. I also could have saved the parts to a neutral file format (ie. IGES, STEP, Parasolid, etc) and used that imported solid in my assembly. I did not choose this method because that would cause me to lose all of my feature history and sketches which were still editable when they had broken references. In hindsight, I should have created these components as a multibody part so I could make as many references to the bodies as I desired and had a congruent assembly file to validate the clearance and motion.
In summary, it is always best to plan your design before you jump right in; a little pre planning would have helped me avoid this mess and saved me a lot of time. You should use top down design to edit or create components that will only be used in the assembly that they are referenced in and have no motion that is out of plane with any of the references. External references should be used strategically and sparingly to avoid cyclical references and slow rebuild times.