Showing results for 
Search instead for 
Did you mean: 
Showing results for 
Search instead for 
Did you mean: 

Using Pro/Program to Change Assembly Constraints


Using Pro/Program to Change Assembly Constraints



This is my first time using Pro/Program, and my intent is to change out a series of sub-assemblies depending on my inputs.


The main problem I'm running into is that these sub-assemblies mate to each other end-to-end and will drive the overall length of the assembly. I can calculate where my sub-assemblies SHOULD end up if I were to mate them the old fashioned way, but because not every iteration of this assembly will include all of the sub-assemblies, I can't because I'll end up suppressing some and un-suppressing others.


What I would like to do is make an assembly with ALL my sub-assemblies in it, use Pro/Program to suppress the ones I'm not using, and define a length constraint I can calculate to position my sub-assemblies accordingly.


I've never seen an example of constraint manipulation through Pro/Program, so I'm really hoping somebody can help me out here.




When I have done configurable assemblies in the past, I found it was much more robust to swap out components that were constrained to datum features (planes, axes, csys) than to other components. This way no other components will end up getting suppressed. You can control the position of the components by changing the locations of the datum features depending on what components will be turned on.


Hi @jbob 


That sounds lovely, I'm not against mating these sub-assemblies to their own respective datum planes, and controlling the positioning of the datum planes.


As an experiment, I inserted a Datum plane into the assembly and took a gander at the resulting Pro/Program to find the following:


 ADD FEATURE (initial number 110)
 PARENTS = 4(#2)


  NO.     ELEMENT NAME       INFO                                              
  ---     -------------      -------------                                     
   1      Feature Name       Defined                                           
   2      Constraints        Defined                                           
   2.1    Constraint #1      Defined                                           
   2.1.1  Constr Type        Offset                                            
   2.1.2  Constr References  Surface ASM_XY of feat #2 (DATUM PLANE)           
   2.1.3  Constr Ref Offset  Value = 15.0000                                   
   3      Flip Datum Dir     Defined                                           
   4      Fit                Defined                                           
   4.1    Fit Type           Default                                           



 d345 = (Displayed:) 15.000
        (   Stored:) 15.0 ( 0.005, -0.005 )


I made the datum 15" from ASM_XY, and now I'm curious how I would change that value. It's referenced 3 times in the above chunk of code. Do I need to replace all three instances with a variable, or does one of them mandate the other two? What if I set D345:1 to the value I wanted earlier in the code?


If you don't know, then I am grateful for the suggestion, and will experiment until I have something functional.


Again, thanks for the idea!


you do not need to replace all three instances just in one location. So if you are trying to control the overall length of the assembly you could create a parameter called overall_length. You could create a simple pro program like this


if overall_length == "assembly_1"

d345 = 15.00


if overall_length == "assembly_2"

d345 = 30.00




you can name the parameters anything you like as well as the values for these parameters.

Have you considered creating a skeleton model in the assembly and using that to constrain all components to it? You can use Csys features in the skeleton and map the csys to each component for assembly. You can then flex the skeleton to rearrange the components as required. This is usually a very robust method to use when constraining components. If the skeleton completely controls the constraints then you can use Pro/Program to modify the skeleton model to move things around.


@tbraxton I had, in fact, NOT thought of using a skeleton model. I also didn't know they existed. I'm self-taught WRT to Creo as a whole, and learning as much as I can about Pro/Program to generate a semi-automated model for one of our products.


I'll have to look into skeletons and how they are modeled/manipulated through Pro/Program. Thanks for the suggestion.

Skeletons are one of the top down design tools so if you have access to them I think you will find they are well suited to control component placement in assembly mode.


Here is a link to another thread regarding learning about skeletons. PTC offers some basic on line tutorials and I think these are more in depth. I have not reviewed any of this content but the material I have seen created by David Martin is well done. 


If you plan to use Pro/Program I will suggest getting this book. It will bring you up to speed quickly. It specifically addresses configuring assemblies. I think it is out of print so finding it at a lower price may be hit and miss. I think it was $40 or $50 MSRP back in 1996. 


Variables for Components will be helpful - or using an interchange assembly if you have something very complex.


You might find this useful -- don't worry -- it is FREE.. 🙂


... It needs JLINK to be installed:


Hope this helps