Assembly features have many important benefits like the ability to easily capture design intent. But they may also have significant long-term effects on your work such as increasing the amount of virtual memory required by Pro/ENGINEER and decreasing overall performance. Retrieval and regeneration performance may be particularly affected. This tip explains these potentially negative implications and makes recommendations for minimizing them.
In this tip, "assembly features" refers to subtractive type features like cuts and holes that remove geometry from component parts and have a component intersection list. This tip does not apply to other assembly features that do not remove material, such as datum features or component features.
Visibility level and "twin" instances. In order to understand the negative effects of assembly features, the concept of "visibility level" must first be discussed. The visibility level of an assembly feature refers to the part or assembly where the feature geometry may be seen. The visibility level may be at the:
1. Part Level, so the feature will be visible in the intersected part when it is retrieved on its own
2. Top Level Assembly, so the feature will only be visible when the assembly it was created in is retrieved and not visible at any other lower level
3. Sub-assembly Level, so the feature is visible in a sub-assembly and any higher-level assemblies, but not at any lower-level assemblies or the part. Note: Beginning with Pro/ENGINEER Wildfire 2.0, this option is only available with the config.pro option with the advanced_intersection set to yes.
When creating an assembly feature, Pro/ENGINEER provides an option to select the desired visibility level. The Top Level is selected by default. Designers frequently may change this to Part level so the feature can be viewed on the part when the part is retrieved on its own. The Sub-assembly level is used less frequently to show the intersection in the sub-assembly on its own but not at the part level.
Part level visibility can be convenient for creating identical features that intersect many parts at the same time. For Part level visibility, Pro/ENGINEER creates the feature as if it were created with the part active (in the partís feature list), but with an external reference to the assembly. Importantly, this method has minimal affect on Pro/ENGINEER memory usage and performance and is not the focus of this document.
On the other hand, when the top-level assembly or a sub-assembly is the selected visibility level, Pro/ENGINEER creates instances, or "twins", of the parts. This is a necessary requirement to be able to show the parts both with and without the removed geometry in different contexts but at the same time. For example, the part may need to be shown in the assembly window with the feature and in its own window without the feature concurrently. An assembly may also have the same part assembled multiple times. Some placement locations of this part may require an assembly feature intersection, but not others.
To be able to show a partís geometry both with and without an assembly feature, Pro/ENGINEER must keep different versions of the objects in virtual memory. Multiple assembly features intersecting multiple parts will cause memory use to increase in order to keep track of all of the "twin" objects. The creation of these "twins" during retrieval and regeneration may also degrade performance.
Further, if the same part is intersected from different assembly levels each with their own features, the number of "twins" increases and is equal to the number of assembly levels from which this part component was intersected.
In addition to assembly features, these "twin" instances are created for flexible components, inheritance features, mechanisms with multiple copies of sub-assemblies containing connections, and user defined part simplified reps.
In general, all of these twin instances will affect memory use similar to the creation of a family table instance.
Improving performance and memory use. Following are some general recommendations for improving performance when assembly features are desired. These recommendations may not hold true in every situation. See the section below (Additional Details) for a more in-depth discussion clarifying some of the situations when the recommendations may not hold true.
1. Create features with assembly intersection level only when demanded by the assembly process. That is, drilling, grinding, chamfering, and other material removal operations that take place in real assembling.
2. Use alternatives to features with assembly-level intersections when possible. Alternatives include (from fastest to slowest performance):
o Create assembly feature using part level intersection.
o Create features on the part level and use external references to the assembly. That is, create features in the partís feature list while the part is activated in the assembly window. This is faster if backup references are used (see number 3 below).
o Create assembly features with part level intersection with option "show feature properties in sub-models."
o Create features in part level using top-down design with skeleton model, Publish Geometry and Copy Geometry features. For example, create axis in a skeleton where the hole will be placed, create a Copy Geometry feature in the part copying the axis, and then create a coaxial hole in the part.
o Create assembly features with assembly level intersection. This option has the slowest retrieval performance. Regeneration performance is generally low but depends on the specific case.
3. Avoid having the same part intersected by assembly features from different levels. Try to create features at one level only. In other words, avoid having the same part intersected once from a feature at the top level and again from a feature at the sub-assembly level.
4. When possible, use external reference control and backup forbidden or out-of-scope references (available with Pro/ENGINEER Advanced Assembly Extension). In some cases, this will improve the performance of regeneration.
5. Avoid using the "Auto Update Intersects" option unless required by the design. This function may create unnecessary "twin" instances. For example, the geometry outline of the feature may be slightly larger than expected and include more models for intersection than desired. Instead, manually select the objects to be intersected.
1. Create a pattern instead of several independent features if possible. This may reduce the number of assembly intersections. The geometry of all features will first be calculated, then intersect each component once. Therefore, each component is only being intersected once and only creating one "twin" instance.
2. If a pattern creates many features and most do not intersect every component, then break up the pattern into separate patterns or features. Otherwise, each intersection of the patterned feature will be unnecessarily large in memory because the pattern geometry definition will be too large for each part. That is, some of the features created by the pattern will be in the part but not subtracting solid geometry.
3. Avoid using Group Patterns of assembly features. Instead, use Ref Patterns whenever possible. Group patterns generally have the worst performance (retrieval and regeneration) of any pattern type. Group patterns can often be converted to Ref Patterns by ungrouping the features, patterning the first feature, then ref patterning the remaining features.
4. Use the Edit, Solidify (Use Quilt) technique to create one cut intersection instead of several intersections for the pattern. This generally has even better performance than creating a simple pattern. This method has three steps:
o First, create a pattern of solid protrusions in a skeleton model representing the reverse of the pattern geometry to be subtracted.
o Second, create Copy Geometry features in the assembly copying the Solid Surfaces from the skeleton.
o Third, use #Edit, #Solidify (#Cut, #Use Quilt in Pro/ENGINEER 2001 and earlier) referencing the copied surfaces in order to create the subtracted geometry.
Additional details. Placing a feature at the part level may result in slower performance if the feature is in the middle of the partís feature list and has children. When the assembly regenerates, this will cause the features in the part starting with the part-level assembly feature to regenerate causing an apparent decrease in performance. Sometimes this behavior is desired, but if not, the way to avoid this is to place all part-level assembly features at the end of the partís feature list.
Pro/ENGINEER users should also be aware that operating system limitations could cause process memory to be exhausted even though a large amount of RAM or virtual memory may be available. The symptom of this would be unexpected exits of Pro/ENGINEER. The techniques above may help alleviate these memory issues. However, there are also other solutions available. Please refer to TPI 111330 "Increasing The Per-Process Memory Limit in Windows XP Professional (32-bit) for Pro/ENGINEER" for additional information (active maintenance customers, password required).