OMG this software is scary

Had a major WTF moment to nicely round off the week.
Made a copy of an assembly that had equations linking various part
dimensions. I now have a part that exists as one length in one assembly and a different length in the new assembly!! What a POS.
How can it let you just override an existing relationship like that? Does the part only know that a relationship exists to drive the dimension, but doesn't know or care what assembly does the business???
2007sp5 for what it's worth.
John H
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

You also need ALL of the drawings of each part of the assy.
Bob
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
John,
Good to see the software is working as designed. Use of top down methods, especially equations linking parts through an assembly can be tricky. While SW is easy to use there are some things that take understanding. It is possible to write equations that will change the dimensions of a part on every rebuild. You might want to CTRL Q in each assembly several times just to see whether they change after rebuild.
Now since you say you copied the assembly that means that you didn't copy the parts along with it and give them different names. So which assembly is driving which part?
TOP

Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

The original assembly structure was essentially:- Context Assy 1 Context Part 1a Context Part 1b Context Part 1c
It contained equations linking various dimensions of Parts 1a, 1b, 1c.
I then copied the assembly using file-save-as to become:- Context Assy 2 Context Part 1a Context Part 1b Context Part 1c
At this stage, I didn't know which parts would need to be changed and made new copies. My expectation at this stage was that the dimensions of the 3 parts were still controlled by the original assembly.
I then made copies of 1a and 1b using save-as. My assy now looked like:- Context Assy 2 Context Part 2a Context Part 2b Context Part 1c
What I had expected was that parts 2a and 2b would be controlled by Context assy 2, and part 1c would still be controlled by Context assy 1. My expectation was based on how I-DEAS works with its "associative copy" functionality.
The SolidWorks reality is that Part 1c is now driven by both sets of assembly equations, and is therefore a different size depending on which assembly is open. Unless there is a way of specifically controlling this behaviour, then this is complete crap, and to my mind renders assembly equations as dangerously unusable in a production environment.
John H
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
wrote:

John,
In what part of "file/save as" do you think solidworks knows which assembly to break the references and which to keep. You just made an exact copy of the assembly with references and all.
Why don't you just break the external references that you don't want to drive?
Better yet. Can you explain why you have 1 part that is a different size in each assembly? That would cause problems whether you are using top-down design or not.
Ian.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
It sounds like you haven't used a CAD system that controls such relationships in a structured fashion. In I-DEAS, if you relate the geometry of one part to that of another part in the context of an assembly, then the system prevents the part from having this relationship changed in another assembly, potentially by another user who is unaware of it. The first assembly owns this relationship, and you can't break it without having the owning assembly open and explicitly breaking the specific relationship (of which there could be many).
Even if you make a copy of just the assembly, the relationship still exists but is still owned by the original assembly and cannot be altered in the context of the new assembly.
It is however possible to make a copy of the assembly and parts which maintains the original relationship in the original parts, and recreates it in the new assembly with the new parts.

This is not what I am trying to achieve, it is the essence of the problem I've described!! By copying an assembly I now have a part whose dimensions are driven by 2 sets of equations in different assemblies. This just should not be possible - after all, even SWX makes a lame attempt at preventing you achieving this manually, by setting the read-only dimension attribute. Sometimes I get a warning message saying equations relate to another assembly and would I like to reset them to the current assembly (really dangerous - it's just too easy). However, I have an example on-screen right now where I can switch back and forth between 2 assemblies, and a part exists as different lengths in the 2 assemblies, and there are no warnings.

I'd expected that (as in I-DEAS) the parts know that they are being controlled by a different assembly, and that either the relationships would be broken, or at least rendered inactive until you did a file-save-as on the parts in the context of the assembly (i.e. with the assembly open at the same time).
I suppose the root of the problem is that SWX does not have built-in data management to control these relationships, and I wonder whether any of the bolt-on packages such as PDMW/Enterprise or DBWorks prevent such potentially catastrophic consequences.
John H
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Part 1.Part", with no reference to which assembly it is in. I guess that would explain why you get the results you get. It does seem pretty limited to me. Perhaps some of the people who use equations more can give us some help.
Jerry Steiger
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
John,
I had a look at the problem you set forth. To do this I created, as you
InCon1.sldasm 1a.sldprt
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
I'll try to finish this without hitting send prematurely again.
I created the same structure you did.
In my first copy of the assembly I used the copy option which preserves in-context references. Use multiple contexts was unchecked in options. I could open both assemblies at the same time, but SW put up a warning if I changed something in one of the assemblies. The warning said:
" Dims have been set to read-only by assembly InCon1. It appears that assembly: InCon1 was renamed to this assembly: InCon2. Would you like ot reset all the equations of this assembly to indicate that they were set to read-only iby In Con1? Yes / No"
When "No" is chosen then it will not allow the equations in InCon2 to be evaluated because thay are read only, ie, controlled by InCon1.
When "Yes" is chosen then it will allow the equations to be evaluated because they are read only.
What I find interesting is that SW does not provide the List External references functionality when equations alone are used to control geometry. This might be considered an oversight because there are external references being controlled.
Further, it appears that when a dim is driven by an assembly equation it will be set to read-only which is not the same as driven.
Now here is where this part driven by equation stuff becomes a bad dream. I made another assembly called OutCon1 and created an equation that related two parts by an equation. The dimension that was driven in OutCon1 drove a dimension in yet another part in InCon1 but SW did not know it or update that part. 2004 doesn't have all the fancy sprites on the dims to show how they are related/controlled.
So SW will set a dim to read-only if it is controlled through an assembly equation. SW will not give any overt indication that this is so, only after something happens that affects the parts will SW throw up a warning. SW will not be aware that some other equation in another assembly is controlling a parts dimensions if that other assembly is not loaded.
The bottom line is then that doing stuff like this must be done with great care and probably design.
TOP
PS, I suppose if you wanted a dimension to put up an external reference you could link the dimension in one part to a sketch with a line in it in that part. Then in another part, create a sketch with a line made in context with the first part and link that dimension to whatever it is you want to control in the second part. This should cause SW to list the references.
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

I've scanned this list of messages and indeed wonder why the use of SolidWorks Explorer has not been done or mentioned. I don't use "Save As", except with individual parts, myself.
I fully admit I am not an expert on equations and links, though I use them a bit, and to date have avoided problems EXCEPT, early on when I did "Save As" which goofed up relationships, or got me horribly mixed up with circular references somehow.
SWks Explorer lets you easily convert the original assembly and all of its parts with a prefix or suffix which puts all the copied parts in a set with new names so all the links are made with respect only to the copied files. Though I don't do real complicated assemblies, this seems to have kept things working without problems.
Bo
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
TOP,
Thanks for the research.
John
Add pictures here
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.