There is an assembly with 2 components. 1st component is default constraint placed. Assembly and both the components are declared to the common notebook file. Three planes in both the parts are also declared to the notebook file. 2nd component is placed in the assembly automatically through notebook global declaration of those three planes.
When I replace 1st component, 2nd component fails. But after that, if I just "Edit Definition" the 2nd component and select "Automatic", it no longer fails.
Can I somehow avoid this unnecessary failure of 2nd component placement?
Please see attached zip file which contains dummy creo assembly and some instructions to feel my problem.
There are so many ways to get to the result you are looking for.
I typically try to avoid Layouts/Notebooks for this type of situation - mainly because Layouts/Notebooks create baggage later-on. Instead, you might want to look at an Interchange Assembly for more easily mapping the references.... or even Component Interfaces (would be best in the end I think)
The attached is an example using an Interchange Assembly to facilitate the interfaces. If I had a high number of items that I wanted to dynamically place, I would consider a skeleton and CSYS instead - to keep things more robust and less dependent on specific planes being defined in every model.
You are right to look at Pro/PROGRAM to replace the component using a variable - that is a very good way to plan for new components as options. Here is the View in Nitro-PROGRAM of the variable definition for the first component placement:
The Variable reference in the Pro/PROGRAM does give you a lot of flexibility for dynamic placement of components, but assumes some common references be defined for them to properly be placed and regenerated. Kudos for this approach!
Attached is an updated version of your model using an Interchange assembly to reliably constrain the assembled component - based on your variable placement using Pro/PROGRAM. I removed the Layout/Notebook declarations.
Hope this helps.
Dummy_child_2.prt is dependent on Dummy_child_1.prt for placement. That is the root of the problem you are describing. If you want to avoid this dependency you need to insure that Dummy_child_2.prt can be placed without referencing Dummy_child_1.prt.
One method would be to use relations in the layout to calculate the linear transform needed to offset a csys from the default csys in the assembly. So you would use the layout to calculate the orientation and position of a csys offset from the assembly def csys to locate Dummy_child_2.prt. This approach could be used to drive a skeleton model with all of the csys required to assemble as many parts as you need and can also enable automatic assembly of the part through the layout.
If you prefer to use the 3 planes you could put a placeholder part (devoid of solid geom) in the assembly containing the planes P1-P3 in your layout and auto assemble Dummy_child_2.prt to the placeholder which would not ever be deleted from the assembly. You could then place all Dummy_child_N.prt relative to this placeholder.
While either would work it may not be the most straightforward way to solve your real problem. Without a full understanding of the design intent or utility needed in the assembly it is difficult to suggest the "best" method to deal with it.
I will mention that am a proponent of using layouts and have seen them put to good use on some very complex designs to great effect. Having said that, like all tools they have advantages and limitations which need to be considered when employing them. Just remember than you can undeclare the layout at any time and thus eliminate it being a parent to an object.
Hi, I am not able to retrieve your models. It is because of difference in Creo version. If possible, can you please supply the models so that they open in Creo 3.0?
Thanks in advance.
I tried the Interchange Assembly concept. Its good but not feasible in my case because then I will have to make approximately thousand reference pairs considering the possible combinations of components I would like to swap among.
I am aware of skeleton csys concept. But, the problem with this is that I will have to mention the distances in x, y and z directions in the skeleton to assemble a component. Then I will have to write relations in the skeleton that is for example the component is "A" then the x,y,z distances are "d1", "d2", "d3". Likewise in my case there will be many many relations, although considering the fact that we can use the geometry constraints among components to avoid relations in skeleton. That is the reason I was trying to use Layouts. Its working perfect but I am stuck at that silly problem of "Edit Definition" to revoke the component from fail status.
What are your inputs? Is there any other strategy?
You will need a method that insures that part 2 is not dependent on part 1 for assembly constraints. Creo is doing exactly what I would expect in this case. You can see this if you follow the feature ID of part 1 in the assembly when you replace it, the FID updates as it should. This update by design requires a regen to reestablish the assembly constraints of part 2 which loses its assembly refs.
You can declare datums by table through Notebook. That may be workable but requires generating a lookup table for all anticipated values and maintaining it.
Based on your example assembly which may be oversimplified for this discussion I would create a skeleton and assemble all components using Csys or create datums in the assembly that are not children of the first component and align to them. If the general problem is indeed alignment of 3 planes as in your example then Creo can create the linear transform for a csys that would be the analogue to the 3 planes this can then be used to locate and orient the Csys in space such that both parts will line up correctly when assembling using csys alignment. This would exploit the measure transform function in the measure tool. You can save the measure as a feature and use the parameters to automate the location and orientation of csys as needed.
Another option is to make part 1 in the assembly variable such that instead of replacing it in the assembly you would just update the dims to size it appropriately. This would insure the FID does not change and part 2 should regen without user intervention for the assembly constraints.
Lastly you could use the Creo API to create an app that would automate the entire process using Toolkit or Jlink.
Well... It sounds like you are fighting poor/inconsistent modeling standards for those parts relative to your automation.
We have seen that in the past... the solution -- go fix all the models to have proper/reliable references (CSYS is the best).
A little pain to get that done, but it pays off hugely in automation later.
The alternative would be to catalog every model-specific constraint and map them based on their existence. That would be painful to manage. It would be better to go fix the source models with a stable/consistent reference and then plan the assembly design around that requirement.
I don't think there is a quick/easy fix for this situation.
Nice solution! I admittedly need to learn more about this and the implications of it relative to automation. Sounds like it opens a few doors. All about the structure and dataflow. 🙂