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.
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
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?
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
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"
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.
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
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.
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
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
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
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.
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
" 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
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.
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.
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.
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.