# Pro Engineer/Regeneration Failures

A regeneration failure is an error Pro/Engineer encounters in the generation of a model that forces it to halt until the problem is corrected by the user. Such failures are avoidable by careful, systematic use of the software but are unavoidable in dealing with designs handed down by less careful users.

## Causes of Failures
### Parent/Child Relationships

To determine whether a feature in the Model Tree is dependent on another feature, right click on it and select Info > Parent/Child. This will open a window describing what features this one depends on (its parents), and which features depend on it (its children).
When a feature of a part or assembly is a parent of other features, any changes to this parent are meant to be reflected in its children. This is enabled by careful consideration to Design Intent. For example, if a hole's diameter is intended to be the same as another hole, they should not be individually sized, but rather the child should be set equal in size to its parent so that any changes to the parent will result in robust reactionary behavior throughout the model and assembly.
The model tree, when managed carelessly, can become more of a web than a tree. Careless suppression of features is usually the root cause of regeneration failures.

### Suppressing Features

To suppress a feature, select it in the viewing area or in the Model Tree and in the right-click context menu select Suppress.
Suppressing a feature is similar to hiding it from view but also causes Pro/Engineer to stop considering it in the part or assembly generation. Suppressing a feature makes the model behave as if the feature were deleted, whereas hiding makes a feature invisible. Because the feature behaves as if it were deleted, any unsuppressed children of the feature will suffer regeneration failures.
Suppression is useful in engineering applications when certain aspects of the model need to be ignored in computation. For example, in creating a mesh of a solid for finite element analysis, certain features of a model may be irrelevant to the results and may offer nothing to the model besides an increase in processing time. The solution is to create a copy of the model, and in this copy suppress the unnecessary features. This is called defeaturing. The defeatured copy of the model should then be carefully kept off limits for feature modification, because changes that happen to conflict with suppressed features are very easy to create and go unnoticed. While this careful use of the suppress function is fairly harmless, the following uses in a collaborative design environment are more dangerous:
* The feature is likely to be deleted in the near future, but we haven't decided yet. I will suppress it for now. The correct way to approach this situation is to hide the feature or force yourself to ignore it-- not suppress it. It is important to maintain the functionality of a feature until it is actually removed. Another safe approach is to simply decide whether to delete the feature.
* I will suppress this feature because I don't know what it is. Never assume that a mysterious or invisible feature is without function until checking to be certain that it has no dependent features. Check the parent/child relations first before suppressing anything. Pro/Engineer will attempt to suppress child features of a suppression, but will give no warning when some children of the feature are already suppressed. It is wise to check with the original engineer to determine what features were placed for, because many features are placed for undocumented but important future intentions, and Pro/Engineer can do nothing to predict them or inform you of the consequences.
* I want to redesign this feature from scratch, but I don't want to delete it until I'm finished, so I will suppress it for now. This approach can create a mess of features in the model tree, made at different times by different users. Moreover, dependent features of the existing will need to be rereferenced to the newly designed parent. Whenever possible, a safer approach is to leave the feature in place while designing the new one. Unfortunately, many features cannot be hidden in Pro/Engineer, and working with two visible versions of a feature can be cumbersome because they often overlap in space. Sometimes this problem can be resolved by hiding the older version, but not all features are allowed to be hidden.
* I need both a visual and a computational model, and they are not the same, so I will alternate the suppressing of one version or the other. This is a useful application of suppression but it is safest to only do this for the finishing touches of a design. If such an approach is necessary for any more fundamental feature of a part or assembly that needs to be referenced by others, make sure the entire tree of dependencies of this feature may be suppressed together, and that this is consistent with your design intent.
* I'm going to leave this feature suppressed because I don't know what it is. This is the most dangerous situation of all. Suppression should always be done for a reason and should not occur in the middle of a design process. If given a part or assembly with suppressed features, vigorously pursue the understanding of why they are suppressed and attempt to resume as much as possible before beginning any modifications. It is difficult to see what a suppressed feature is because it is invisible in the viewing area. The only way to determine the nature of the feature is to resume it. If this leads to regeneration failures, follow the steps below to get into the redefinition of a failed feature, and the nature of the feature should become clearer.

### Over-Referencing

References are necessary to create robust models that intelligently update themselves in all necessary places to reflect design intent when any single change is made. Overuse of references creates a web of dependency that later becomes difficult to untangle and not only increases the likelihood of failures occurring but exacerbates the problem of mitigating the failures that do occur.
Features are often defined by sketches. Extrusions and revolutions are common examples. Before sketching begins, Pro/Engineer asks for enough references to place the sketch on the model. Often, more references are necessary for robust design. However, to minimize future frustration, only as many features as absolutely necessary should be referenced, and only very basic features that are least likely to be removed should be referenced. Absolute datum references are very effective for this purpose.
When regeneration failures occur, and references need to be reassigned, the care taken in the choice of references will repay itself many times over in ease of mitigation.

## Resolve Mode

When Pro/Engineer comes to a regeneration failure, it falls into Resolve Mode which utilizes an older interface consisting of menus that generally appear along the right side of the screen. In this mode, most functions of the program are disabled, including saving and quitting. The Undo feature is limited to one attempt and is not always successful. For these reasons, Resolve Mode can be difficult to maneuver out of, and is a source of frustration for many new users.
Failures often occur upon the Resume of a features that have been suppressed in the past, and have since been neglected and lost some of their parent references. One way to get out of this situation is to resuppress the feature: Quick Fix > Suppress > Confirm > Suppress All. This usually gets the model back to where it was before Resuming the feature. A more productive approach is to fix the reference problem by reassigning appropriate new references to whatever feature is missing them. Fix Model > Feature > Confirm > Redefine > Failed Feature gets this process started. Often this brings the user to the Edit Definition of a feature defined by a sketch, and often it is the sketch that is missing references. In the toolbar: Placement > Edit > Sketch will open up the problem sketch. In the menu, Sketch > References will open up the References dialog and with any luck this will display the problems. These broken references sometimes need to be deleted and replaced, and sometimes need to be reassigned to reflect changes. This tool can not be closed normally until issue is not resolved. Extremely not user friendly and time consuming tool.

### Resolve Options

* Undo Changes: A single opportunity to reverse the changes made, which does not always succeed.
* Investigate: Open up the model tree to viewing in order to search for the cause of the problem.
** Current Model/Backup Model:
** Diagnostics [Checkbox]: Toggle display of the Failure Diagnostics window.
** Show References: Open the Reference Information Window which contains the Parent/Child information of the failed feature. Generally there will be red bullets visible in the parents section on the left.
** Roll Model: Rolls the model back to a particular feature in the regeneration tree. This can allow the user to trace up the tree and look for anything out of place that later leads to failure.
*** Failed Feat:
*** Before Fail:
*** Last Successful:
*** Specify: Choose a particular feature.
* Quick Fix: Work with the failed feature or component to resolve the problem.
** Find Component: Find and retrieve the failed feature.
** Redefine: Redefine the feature.
** Suppress: Suppress the feature and its children. If a failure was triggered by the resuming of a feature, this is the best way to "undo" the action and immediately get out of Resolve Mode.
** Clip Supp: Suppress the feature and all features below it in the tree.
** Delete: Delete the feature.
* Fix Model: Work with other features of the model or assembly to resolve the problem. This section has hundreds of options that span much of Pro/Engineer functionality which in Resolve Mode is inaccessible through the menus.
** Current Model/Backup Model:
** Component:
*** Copy:
*** Insert Mode:
*** Reorder:
*** Group:
*** Merge:
*** Cut Out:
*** Assemble:
*** Create:
*** Package:
*** Delete:
*** Suppress:
*** Resume:
*** Redefine:
*** Reroute:
*** Pattern:
*** Del Pattern:
*** Adv Utils:
*** Transform:
** Freeze:
** Feature:
*** Intersect:
*** Pattern:
*** Copy:
*** UDF Library:
*** Group:
*** Read Only:
*** Delete:
*** Del Pattern:
*** Suppress:
*** Resume:
*** Redefine:
*** Reorder:
*** Reroute:
** Application:
*** Cabling:
*** Piping:
*** Welding:
*** ECAD:
** Modify:
*** Mod Part:
*** Mod Skel:
*** Mod Subasm:
*** Mod Assem:
**** Move:
**** Modify Dim:
***** Value:
***** DimCosmetics:
***** Dimension:
***** Move Datum:
***** Make Indep:
***** Geom Tol:
***** Datum/Axis:
***** PatternTable:
***** Line Style:
**** Regenerate:
*** Mod Dim (default):
**** Value:
**** DimCosmetics:
**** Dimension:
**** Move Datum:
**** Make Indep:
**** Geom Tol:
**** Datum/Axis:
**** PatternTable:
**** Line Style:
**** Scale Model:
*** Mod Expld:
**** Position:
**** Expld Status:
**** Offset Lines:
** Regenerate:
** Switch Dim:
** Restore:
** Relations:
** Set Up:
*** Mass Props: Create a file of mass properties to be assigned to the assembly.
*** Accuracy: Modify assembly accuracy.
*** Units: Set up units to be used.
*** Dim Bound: Modify dimension bounds for analysis.
*** Dimension: Create driven dimension.
*** Ref Dim: Create reference dimension.
*** Name: Set up names.
*** Geom Tol: Specify geometric tolerances for surface/feature.
*** Surf Finish: Add/delete/modify surface finish symbols.
*** Notes: Add/delete/modify notes associated with assembly.
*** Symbol: Insert symbol instances and define symbols.
*** Parameters: Set up parameters. Opens Parameters Dialog.
*** Grid: Define model grid for referencing.
*** Tol Setup: Specify toleance standards.
*** Interchange: Obtain information or remove relational references to interchange groups.
*** Ref Control: Controlling creation of external references.
*** Comp Interface: Create/delete new component interfaces.
*** Designate: Propagate parameters, features, and geometry to BOM and PDM systems.
*** Flexibility: Define assembly as flexible.
** X-Section: Create/delete/modify a cross-section.
** Program:
*** Show Design:
*** Edit Design:
*** Enable Repls:
*** Disable Repls:
*** Instantiate:
*** J-Link: