Wednesday, May 07, 2008

STS#2b - Derive Component Part

Due to the sheer number of posts on this subject, here's a handy guide to all of them.
#1 - Associative Copy/I-DEAS Baseline
#2 - Derive Component Part
#3 - Top-Down Design
#4 - Blocks
#5 - Design Library
#6 - Assembly Cut
#7 - Part Configurations

I currently know of four different methods to achieve part-to-part relationships in SolidWorks. The next few posts will cover each one. If you know of others, or if you see me make some heinous error in explaining something, please let me know.

Before diving in, it's probably worth mentioning that I have not yet found a way to copy a single surface in SolidWorks like I was doing in I-DEAS. For the most part, I'll be able to work around that with different modeling techniques. I'll revisit all of these capabilities when I talk about castings, because there I will want to copy the entire part. But for now, I'm going to try to shoehorn these commands into letting me wind up with a single surface. What I have found is awkward, so I'm hoping someone can show me a better way.


If I was interested in using an entire part for my relationship (I will be when I talk about castings), then the Derive Component Part would probably be the closest equivalent to Associative Copy in I-DEAS. Since I only want a single surface, it has some shortcomings, plus what I consider to be some curious/odd behavior.

Let's begin with our source part: the raw extrusion named "source".

SolidWorks actually does have a couple of methods of doing part-to-part relationships without an assembly. But this is not one of those methods. So I'll create an assembly that contains my source part.

The Derive Component Part commands needs some context, so it is grayed out until you select something. I'll select the source part...

... and then create a derived component part.

SolidWorks prompts that the assembly must be saved before proceeding. I suddenly miss model files. Oh well, save and proceed. I'll name it "context" just to keep some of the terms and concepts straight.

The result is a new part file that of course looks exactly like the source part, as it should. I'll save it as "target_derived". Let's take a look:

Although in general I'm not a fan of list-style modeling history displays, I have to concede that I'm getting some useful information at a glance. Without doing anything special, I can see not only which part it came from, but which assembly owns the relationship. It can be cumbersome to find this same information in I-DEAS, although the way we use it, the target parts are always in their context assemblies, so it's not much of an issue.

I'll come back to the modeling in a moment, because things are weird right now. Let me cycle back to the assembly.

There's my source part, still selected, just like I left it. Notice that the target part is nowhere to be found. Ok, I'll just chalk that up to "SolidWorks oddity" and add the target part to the assembly myself. Or not:

"A derived component part cannot be added back to the assembly it was created from." Wha-huh? So let me get this straight...the assembly was required in order to create the target part, but it cannot contain the target part? SolidWorks people, help me out here. This makes no sense to me whatsoever. I suspect it has something to do with avoiding circular references, but if so that's lame, because I've seen many other examples of relationships that would be significantly more circular that are handled just fine.

I guess this isn't a deal breaker in and of itself, but I would at least like a way to find out if there are derived parts out in the wild. Is this raw extrusion being used anywhere? SolidWorks has a handy Find References command, let's try it:

Hrm. No mention of the target part. This was performed on the assembly, by the way. Let's try again on the source part:

Well that's discouraging. Not only does it not mention the target part, it doesn't mention the assembly either. Maybe I don't understand what references are in SolidWorks-speak. How do I find this relationship without already knowing about the target part? If I can't find this information in a relatively easy manner - or at all, really - that is a deal breaker.

Ok, let's bring this back to modeling. I only wanted a single surface, but I got the entire part. The Derive Component Part command never gave me the option to pick anything other than the entire part, so I'll just assume it's not possible with this method. So I'll just delete surfaces until I'm left with the one I wanted. Finally found the surface delete command, oddly enough under the Insert menu:

I'll sketch on this surface just like I would have in I-DEAS. Only minor differences here. In I-DEAS, the edges of the surface would already be pickable for me to extrude, I would just need to build the section. That's mostly because I-DEAS basically does an auto-Focus when sketching on a surface. SW does not, although the need isn't quite a strong. More on that in a later post. The closest equivalent to Focus is Convert Entities. Not sure why it is called that. I guess you are converting solid geometry to sketch geometry.

The black lines are the converted edges; sketch entities that can now be extruded. SW gives you the perimeter for free if you have a surface selected when you hit Convert Entities, but you have to manually convert any holes or other interior loops.

Midplane extrude, just like I-DEAS.

It's a bit subtle, but the blue line down the middle of the part indicates that the original surface is still there. Also, if you look over in the listing at the left, you see a Solid Bodies folder, and a Surface Bodies folder. I-DEAS would have swallowed that face as part of the join operation. No problem, I'll just delete that surface. Or...will I?

A curious limitation that doesn't seem to serve any real purpose to me. But, at least the error message tells me what to do.

Seems like it ought to figure out that I'm deleting the last surface, and just delete the body for me. If that's a concern, then present a warning dialog before proceeding. Whatever.

Ok, let's head back to the source part and make a change.

I of course lost some design intent after trimming the curves. Fabulous!

Now I know that the assembly should be involved in propagating this change, but I want to know what kinds of alerts I get in the target part, so I'll open it up first.

At first glance, it doesn't look like anything has happened. Upon further inspection, it appears that the context assembly also opened up automatically. This is extremely subtle, but better than nothing, I suppose. Aside from that, I'm really not seeing anything telling me that the source part has changed. On a whim, I decided to roll back before my modeling operations.

Hmm. Ok, so it has already propagated the new information from the source part, but why isn't my target part doing anything? At this point, I-DEAS would either be barking at me because of a problem, or I'd see the change. At minimum, I would have some visual feedback that I need to process the change. Let's take a look at the sketch for my extrude.

Ah, interesting. We get a look at how changes are handled in SolidWorks. Right off the bat, notice that the sketch still considers itself fully constrained. I-DEAS would almost certainly be complaining because the main circle was broken into 2 pieces. Also notice the gray parts extending off to the right. This mostly makes sense; the half-moons that I added are new surfaces and thus naturally are not included in the surface delete operation I had performed previously. More interesting is that there are actually three surfaces there: the 2 half-moons, and the back side of the main circle. So SolidWorks definitely sees this as a new surface, but this alone is apparently not enough to trigger any problems with the sketch.

I'll add the new surfaces to my delete operation, then go work on the sketch.

Convert the new edges, trim (ARGH!) away parts of the original circle, all done.


I again acknowledge that I didn't pick the world's greatest example. But I still learned several things that will require additional investigation.

* How do I find out if my part has been used to derive a new part? This is really a 2-part question, too. Right now I'm using an open file system, but eventually we will be using PDMW Enterprise for data management. So how do I answer the question now, and how do I answer it in Enterprise?

* Similar question, but how do I find out if any derived parts have been generated from my assembly?

If I can't backtrack the relationships, that's a deal breaker.

I know I still have plenty of learning to do relative to troubleshooting, but I'm really concerned about the lack of any alerts or anything about the change I made. I've spent years arguing that the out-of-date-sketch-edges warning in I-DEAS is actually a good thing, and right now I'm feeling rather vindicated. I want to know that these kinds of things happened; I don't want the software making these assumptions for me.

To be fair, I think it's pretty clear that I'm not using the command the way it is intended to be used. The command obviously wants to use the entire part, since that is all that is allowed, so rather than bend it to my will, I should just use it that way. Take the entire extrusion, trim it back to the desired cut length, and just go. The process would be essentially the same as I-DEAS at that point. In fact, it's a little easier in SolidWorks.

SolidWorks lets you start your extrude from an offset of your original sketch plane. I actually can accomplish the same thing in I-DEAS, but it's a bit more convoluted.

This method is probably more robust in both programs, because you aren't relying on surface profile information at all.

Deriving a component part is an easy enough command, basically a single click. I'm a little nervous about tracking down the relationships, although if someone can give me a handy tip, that would alleviate most of my reservations about it. Let's throw this command into the "maybe" category for now, because it has potential, but I'm not sure it is right for us.

1 comment:

Josh said...

Hey man, great post. I understand some of your problems. I think an "Insert Part" type of derived part will take care of most of the (or make others :) - I did a couple example, also using an extrusion.

Here's the links Derived Insert Part

There's some creative ways to do parts and surfaces that look at other parts and surfaces. I like to use sketches in a main part and reference all the other parts with those.

Hope this helps man!