Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.
First time visiting? Here are some places to start:- Looking for a certain topic? Check out the categories filter or use Search (upper right).
- Need support? Ask a question to our Community Support category.
- Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
- Be respectful, on topic and if you see a problem, Flag it.
If you would like to contact our Community Manager personally, feel free to send a private message or an email.
In context edits to change with configuration variables?
eric_schimelpfenig
Member Posts: 75 EDU
in General
I feel like I'm missing something really obvious.. I'm pretty adept at Onshape but this one has got me puzzled:
I'm trying to design some parametric kitchen cabinets. As with most cabinets each cabinet is/can be unique in size, but often cabinets share a lot of the same parts.
To that end I've designed each part of a cabinet in it's own part studio:
In each part studio I add configuration variables to the stuff that's important to me.
Then, with each part designed and tested in a part studio I bring them all into an assembly:
In this example you'll see that I have the configuration set to 24" (in the future I'll be adding more options)
To do this a bunch of parts need to be set to certain configuration when they're brought in. You can see that in my assembly configurations.
So far this all works fantastic. Here's where it goes wrong:
See those legs that are on the bottom? They are brought in from their own part studio and placed where it makes sense. They need a hole drilled through the floor so they can be attached. So I right click on the floor and do an "edit in context":
I'm able to easily do the boolean operation I want to make the holes (or use the hole tool). I'm able to reference the legs so my holes are perfectly lined up. Still all good, but here's where it goes wrong:
When I change my configuration of the cabinet IN THE ASSEMBLY the location of the holes doesn't move. It's as if the in context edits are done in a snapshot in time, they don't change with the configuration of the assembly they're referenced.
I hope that makes sense.. So the question is: Am I doing this wrong? Is there a way I can get a configurable assembly to also allow my in context edits to move when I change the configuration?
I'm trying to design some parametric kitchen cabinets. As with most cabinets each cabinet is/can be unique in size, but often cabinets share a lot of the same parts.
To that end I've designed each part of a cabinet in it's own part studio:
In each part studio I add configuration variables to the stuff that's important to me.
Then, with each part designed and tested in a part studio I bring them all into an assembly:
In this example you'll see that I have the configuration set to 24" (in the future I'll be adding more options)
To do this a bunch of parts need to be set to certain configuration when they're brought in. You can see that in my assembly configurations.
So far this all works fantastic. Here's where it goes wrong:
See those legs that are on the bottom? They are brought in from their own part studio and placed where it makes sense. They need a hole drilled through the floor so they can be attached. So I right click on the floor and do an "edit in context":
I'm able to easily do the boolean operation I want to make the holes (or use the hole tool). I'm able to reference the legs so my holes are perfectly lined up. Still all good, but here's where it goes wrong:
When I change my configuration of the cabinet IN THE ASSEMBLY the location of the holes doesn't move. It's as if the in context edits are done in a snapshot in time, they don't change with the configuration of the assembly they're referenced.
I hope that makes sense.. So the question is: Am I doing this wrong? Is there a way I can get a configurable assembly to also allow my in context edits to move when I change the configuration?
0
Comments
(You're right: In-Context uses a snapshot of an assembly....if you use this to drive the hole locations from foot locations, you'd have to "update" the in-context reference for each assembly to get the new hole locations).
I don't think you want that - I think you want the hole positions for the feet to be driven by the width of the bottom panel part, not a particular assembly. Your design intent (feet are always xx mm from the end of the bottom panel) is driven by the part, not the particular assembly the cabinet bottom panel appears in.
Hope that helps!
So a more concrete example:
Cabinet A might want 6 legs, so I'd insert 6 legs into the assembly and "in context" the necessary holes
Cabinet B might not have any legs on it at all so no holes needed
Cabinet C Might have only 4 legs but be placed in particular spots
Cabinet A B and C would have their own assemblies.
Does that make sense? I really can't think of a good way to make it work other than what you suggested, which is not idea (not your fault of course!)
I think that the problem with driving this type of feature from the assembly, is that you will have a real tough time making sure that the bottom for Cabinet A above only has 6 legs when you want it to. It means that you'll need many many contexts for your bottom panel (one for each assembly it might go into) to be able to drive the hole locations for each one.
What if you have that same bottom in 2 different assemblies, and one has 4 legs and the other has 6 legs? You'd end up creating two configurations of that bottom panel anyway - but the "in-context" workflow is slower than configurations, and there's no visual indicator that you need update something (after all, it's designed that way).
If you create all the possible configurations you'll need in the bottom panel, you'll be able to select the one you want for each cabinet instance.
Don't forget, you can use Assembly Configuration Variables to drive part features (for instance, you enter "6" in the "Number of legs" variable in the assembly, and it will call the 6-leg configuration of the bottom panel, by actually setting the Feature Variable part (number of legs) to match the assembly variable. This way, you can actually create new part configurations (say, the first time you make an 8-leg cabinet) by putting the number in the Assembly.
This conversation has some good points and examples showing what I'm talking about: https://forum.onshape.com/discussion/comment/59238#Comment_59238
Not to mention the video from (I think) @NeilCooke introducing configuration variables with a great example (I can't find it right now).
What I was hoping to accomplish was being able to kit parts together in an assembly and modify them as needed.
Another example might be this:
Let's say I kit together a tall oven cabinet. That's a pretty standard cabinet, but I want an odd size door on it.
What I'd like to do is be able to bring a door in from a part studio (this door would have the wood panel, but also the cups for the hinges on it)
When I drop that into the assembly I could configure it's size (perhaps the height) and I could link the width to the assemblies configuration variable for width.
I put the door on the cabinet, and now I want to do an in context edit so I can boolean out the hinge cup from the side of the cabinet. right now I can do this no problem, BUT if I change the size of the cabinet (say taller, or shorter) the hinge drilling stays there.
I'm repeating essentially the same thing I said before, so It think the workaround is this:
In the side panel for the cabinet (where I need that hinge cup drilling) I'd have to add a configuration in the side panels part studio. That's a reasonable workaround for now, but with all of the variations that I could possibly have it could make a basic part like a cabinet side have a LOT of configuration variables that are just one offs...
I'd prefer with really custom cabinets to have the one offs just live in the assembly..
Your desire to create one-off part configurations from the assembly is exactly the workflow described in the link above, without using in-context references.
Remember: you'd need an in-context reference for every unique situation, which would be unreasonably slow and difficult to manage. Not to mention that the cabinet side part would only "exist" in one configuration at a time (the in-context reference you've most recently refreshed), and to change to a different configuration, you'd have to put the assembly into the state you want, then Update the in-context reference...whereas setting up to create one-off configurations on-the-fly results in a quick workflow, that's ultimately quite flexible.
Also - there's a quite a bit of standardization common in cabinets (spacing for hinge mounts etc)...are you not using something like the 32mm system? That would reduce many of the "possible" configurations by limiting things like hinge positions to be on 32mm-centres. If you're not using a standardized layout system - then the configurations should work just fine.