There is a feature in SolidWorks that is not particularly advertised but which is quite convenient when you don’t know what to do with certain components inside an assembly. It is the ability to make any component inside a parent assembly virtual.
What is it
First thing first, if you are not familiar with the meaning of “component” and what it represents, you should check the article about the Definition of the Word Component.
A virtual component, is exactly like a standalone component. You can do everything you would do with the other. The only difference is that the data is embedded inside the parent’s file and not in its own file. The file that is physically saved on your hard drive or on your server is the parent. If you use a shared component database, it will help you to keep it clean of junk files. You can not only make parts virtual but also assemblies and have virtual assemblies within virtual assemblies.
Making a component virtual cuts the link with the original file so if you modify the virtual component, this modification won’t affect the original file and vice versa.
For Enterprise PDM users, you might have noticed that you cannot access the datacards of a virtual component. I am not sure if it is a bug or by design but there is a trick to make it appear:
- Check-in the parent assembly
- Select the virtual component and click on the datacard (it will be greyed out as the file is checked-in)
- Check-out the parent assembly
- Select the virtual component and click on the datacard (this time you have acces to it!)
How to use virtual components
Making a part or an assembly virtual is really easy, you just right click on the component and select Make Virtual.
The brackets () and the circumflex (^) followed by the name of the parent assembly tells you that the file is virtual and embedded into the parent. You can rename it by hitting “F2” when highlighted in the construction tree or by right clicking on it and selecting Rename Part or Rename Assembly.
You can also go the other way and make it a standalone file again. Just right click on the component and select Save Part (in External File) or Save Assembly (in External File).
To only have the parent showing in the Bill Of Materials and not the virtual components contained in it, you have to adjust the level of details. Please take a look at the article about the Scope of Supply.
You can see here that we have two instances of the same component Nut^0000001657 because it is the same name followed by a different number between chevrons (<1> and <2>). If you want to make them independent of each other, you can right click on one of the instances and select “Make Independent”. You can make them independent regardless if they are virtual or standalone.
When to use virtual components
Components constituting a parent component
Sometimes for modeling reasons or to simply reflect the reality, you have a component made of several other components. These components can be parts but also sub-assemblies, themselves made of parts and maybe sub-sub-assemblies too. They are just there because it was convenient to split a complicated model into several simpler models to be able to apply different materials or colors or to be able to repeat identical shapes, etc…
But the problem is that you don’t know what to do with them. If you choose to save them, you have to name them accordingly to your Naming System which is time consuming and also space consuming as you add more junk to your component database. This seems to be a waste for something that will be only referenced by their parent assembly. The answer is to make them virtual!
To know where to draw the line between what you make virtual and what you keep as a standalone file, just think from a procurement point of view: if a component is not supposed to show up in the Bill Of Materials, it should be made virtual. It is that simple.
- The most common case of making virtual the components constituting a parent component is when this parent is an external component. When you buy an electrical motor, you don’t buy the coils, the magnets, the wires, the screws, etc… you just buy the motor. In your BOM, this motor is a unique component on a single line.
Let’s look at another example. We have this freshly imported parallel gripper with 2 parts, 1 assembly itself constituted with 4 parts. In SolidWorks the construction tree looks like this:
In the BOM, we have the following lines:
You can tell that something is wrong because you see sub levels in the “ITEM” column. The “DESCRIPTION” is empty because if you want it to show you have to enter the properties for all the components!
In Windows Explorer, we have the following files:
We have a lot of files and they are not even well formatted yet according to a Files Naming system. Doing everything properly with compliant names, properties, etc… would be a waste of time and space for files only referenced by one assembly. This is exactly what you want to avoid when you have a shared component database.
But we just want the parallel gripper, we don’t care of what is inside it. It is not like we are going to order separately all the parts. Let’s make everything virtual and exclude it from the BOM and see what we get. The good thing is that if you make a sub-assembly virtual, all the components inside it will be directly made virtual too which saves you a lot of clicks.
In the BOM, we end up with a single line:
In Windows Explorer, we just need to keep the parent assembly, all the other files are saved inside it:
- But it is also useful to make virtual the components constituting a parent component in the case it is an internal component. This applies in particular to welded parent components. You want the finished part, which is a single line in the BOM, but not every pieces of steel that it is made of. On his side, the welder will probably have a detailed BOM with multiple lines but this is out of your scope.
For example we have this steel frame. To model the plates on the top just once and repeat them, it was more convenient to make separate parts than designing them directly within the frame.
Even if the parent file is an assembly in SolidWorks, from an engineering point of view it is a unique big mechanical part entirely welded so everything should be “excluded from the BOM”.
If you want to detail each component individually, it should be done on a multi-sheets drawing. The first sheet is used as a overall view and as a placeholder for a weldment list. See the article about the Scope of Supply to learn how to split the components to put hem on their own sheet.
When you are using a component that is too soft to have a fixed shape it is always difficult to know what to do with the file. If you model it the way it is shaped in your parent assembly and save it in your database, what do you do the next time you want to use it in a different assembly? Of course you can use different configurations to address this issue but it might become really complicated if it is not only dimensions that are changing but the sketch itself.
The solution is to have in your component database a template file of this component. It does not really matter the shape you give it, maybe just give it its default shape. You then insert this file in your parent assembly and you make it virtual. It will keep all the properties you set in the template, the material, etc… but it will break the link with the file so now you can modify the sketch without affecting the source.
The most common cases of making virtual the components that can be deformed is when you have belts, tubing, wires, seals, liquids, powders, etc…
For example we have that seal in the database. We assume that it has been properly formatted and all the properties are already set:
Drop it in the assembly and make it virtual:
Then you can edit the sketch in the context of the assembly to have the o-ring constrained on the groove of the plate.
Since you had all the properties set on the original file, this file also has them so in your BOM you will get all the information you need without having to re-enter them.