Hi all,
I have run into a problem with constraints seemingly "disappearing" or breaking after I moved some parts into assemblies and sub-assemblies using demote. The parts (mostly ipart plumbing fittings, but also some regular .ipt parts) were placed at the top level of the master assembly and constrained to various sub-assemblies within the master. I then moved all the newly placed parts to a plumbing sub-assembly and then grouped those into further sub-assemblies. I worked on the file for a day or so, replacing parts and editing the ipart masters, and then discovered that all of the constraints that related the fittings to the top level assembly had disappeared.
My understanding was that demoting parts should have no affect on constraints. I tried an experiment with a test assembly and repeated the basic workflow:
- create master assembly
- place parts with constraints
- demote all the parts to a "master hydraulic" sub-assembly
- further demote groups of parts to sub-assemblies
I notice that the original Insert constraints relating parts to the master are listed and the first component in new sub-assembly is grounded. However, if I now edit that newly created sub-assembly, only the first grounded part is constrained. The other constraints that related parts to the items at root level are lost. I can move them which will generate an inconsistent constraint error (which can't be fixed). The only remedy for this seems to be to promote the now un-constrained parts back to the root level and start over. Additionally, in order to edit, say the rotation of a part in a sub-assembly with respect to the master, I also have to promote the parts back to the root level.
So my questions are what is the logic here and how should I be doing this?
Many thanks.
Hi! It is true Demote/Promote should bring along constraints. However, there are exceptions. If the constraints are between demoting/promoting components, they should survive. If not, it is a bug. Things get tricky when components are in different levels. If the constraint is between a part and another part in a flexible subassembly, the constraint may not survive after Demote/Promote.
If possible, please share an example exhibiting the behavior here, forum experts can help take a look and comment further.
Many thanks!
Without seeing your exact Assembly and Sub-Assembly, I think you are OK through the third step in your workflow. The fourth step seems to be where you will get the bulk of the dropping of assembly constraints. The rule is the assembly constraint between two components will be maintained IF the two parts are demoted together. If one is demoted and the other stays in the original assembly, the assembly constraint will be lost. I tried to illustrate this in my screencast. You already know that if you promote the part back into the top level assembly, most of the time the original constraints will be restored. By the way, in my screencast I did not use the Demote and Promote commands. They are implied when you drag components between the various assembly and sub-assemblies in the tree. I just wanted to mention that in case you did not know of this feature.
John Hackney, Retired
Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
Thanks for the reply. Here is a screencast showing the problem in a simplified assembly.
Many thanks for the reply - the screencast is very helpful.
@jhackney1972 wrote:Without seeing your exact Assembly and Sub-Assembly, I think you are OK through the third step in your workflow. The fourth step seems to be where you will get the bulk of the dropping of assembly constraints.
Ok, so now I understand that the behavior I am seeing is "normal". My question remains, however, as to how I should be doing this. I really want to be able to group all of the hydraulic or electrical components together so that they contribute to a discrete BOM and I would greatly prefer that this grouping be done visually in the model tree as opposed to some hidden attribute/iProperty. Is the work-around to manually ground all the individual components of the hydraulic category sub-assembly before breaking them up into group sub-assemblies (and then possibly grounding all the components within them)? Or should I be going about this an entirely different way?
Although they are a bit more work, I think creating an iAssembly is your solution. iAssemblies are basically different assembly creations within the same file. The advantages are that they do not have any effect on assembly constraints, they will give you visual feedback in the browser and best of all, they manage what components appear in the BOM. If you have Microsoft Excel on you workstation, you can use it to speed up the creation and configuration of your iAssembly table.
I believe you only need to use the "Exclusion" function on the components in the iAssembly table to achieve what you want but other features you may use or need are available. Take a look at the screencast and see what you think.
John Hackney, Retired
Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
@jhackney1972 wrote:Although they are a bit more work, I think creating an iAssembly is your solution.
Thank you for that suggestion. It is an elegant solution to the problem.
I can see the utility of the Iassembly - especially for the creation of sub-sets for the BOM.
The only drawback is that the management of the of inclusion/exclusion has to be done manually and cannot be accomplished in the model tree. This would be ok for small assemblies or maybe even for larger ones after the design work is finished, but for designs that are still in flux, the probability of forgetting to adding something to the list or correctly setting the exclusion attribute in the table seems high.
I cannot help thinking that the functionality that I am looking for is (or at least should be) part of the underlying concept of the Inventor assembly. The workflow that I currently have does everything that I need, except maintaining constraints that have already been placed. Now that I know this, perhaps the solution is just not to mess with certain sub-assemblies without first promoting their constituent parts to the level of scope in which they were initially constrained or, as in my previous posts, just to ground the parts that were constrained to higher level parts and/or assemblies after the sub-assembly is created (admittedly also a manual step and additional work).
Many thanks for the input.
Can't find what you're looking for? Ask the community or share your knowledge.