The innovative thing about this approach is that you can open any model in the default state very quickly, regardless of its complexity, and drill down from there to load more detail where required. This allows users to design in context, regardless of how complex the top assembly is. Importantly, accurate mass properties are available even when only low fidelity geometry is loaded, so measuring the weight, balance, and moment of inertia is possible even on assemblies so large it is impractical to work with the Master Rep.
Full explanation will be lengthy, but in brief: Users are instructed to setup the Default Envelope Rep for any slow-loading assembly. The envelope parts they create are configured to link back to the mass properties of their parent assembly. In these assemblies, a parameter value is flipped as an indication that an envelope model is available. In all assemblies, the Default Rep has rules that scan for such indications, so the Default Rep always consists of envelopes wherever they're available. Site configuration specifies that whenever opening an assembly, the Default Rep is shown initially, without prompting the user. A mapkey is provided, so user can click on any envelope, and quickly "Load More Detail"; i.e. switch the parent assembly from Default Envelope Rep (entire assembly represented by 1 part) to Default Rep (which may contain further envelopes, master models, or a mix).
This has proven itself to work very well in practice, although there are some cumbersome aspects to setting it up. It's my hope that by sharing these details, someone may offer advice on how the workflow could be streamlined to achieve the same end result with less effort. And of course, I think this may be helpful to others who struggle with managing projects that are too complicated to load all at once.
I will start by explaining the numerous configuration settings needed to make this work, then I'll go over the user interface issues.
How this is implemented
Required global config.pro settings:
Causes the Default Rep to load initially whenever opening an assembly, without prompting the user. Although it will be sensible to most users that the Default Rep opens by default, some training is required, as often the first thing they will want to do is switch to the Master Rep.
Specifies that rules applied to Simp Reps update automatically whenever model is loaded or regenerated (rather than only when user clicks "evaluate rules" button, in any of the various places it appears).
Specifies that if mass properties have been assigned, these values should be used in lieu of the calculated values.
Specifies that hidden line removal will apply to surfaces as well as solids. (Envelopes are surface models, so this is important.)
Global config.pro should also include some helpful mapkeys for working with envelopes:
When you click on an envelope, it seems like you've selected the whole assembly, but it's actually a part within the assembly. So you need to "select parent" for many common operations. I suggest mapkeys to "select parent and show in model tree" (SP), "open parent" (OP), "hide parent" (HP), & "exclude parent" (XP).
The "Load More Detail" (LMD) function which is the heart of this technique is also just a mapkey in the config.pro. Click on an envelope, hit a button, and it's replaced with more detail. (Could be real geometry, higher resolution envelopes for various subassemblies, or a mix of the two.) The mapkey itself is pretty simple: "Select Parent", "Set Representation to", "User Defined", "Default Rep".
Standard assembly template:
In the "start part" template used as a basis for new assemblies, the "Default Rep" has been customized. The top line default state is still "Master Rep", but a pair of rules is applied that changes the state of submodels. The Rep Action of the first rule is "Master Rep", so it is only needed to revert the state of models back, if they've been previously customized. (E.g. a model that once had an envelope, but has since been deleted.) The condition it searches for is "all models", and it applies to the current level only (scan does not "include submodels"). The Rep Action for the second rule is "Default Envelope". The condition it searches for is expression "USE_ENVELOPE" is equal to "YES". This scan does "include submodels".
Template also includes a YES/NO parameter called "USE_ENVELOPE", initially set to "NO".
Standard part template:
Alternate part template for use with envelopes only:
Two changes from the standard part template. First, values have been entered for all the "alternate mass properties" parameters; just 0's and 1's (for C.G. coordinates, and everything else, respectively). If these are left blank, as they are in a typical empty file, errors will pop up later when a user pastes in relations to check their values.
Second change is needed only if with your typical settings, surfaces & quilts are placed on a layer automatically, which users typical hide along with other construction geometry. Envelopes will be surfaces, but aren't construction geometry, so we don't want to hide them the way we would most surfaces. If you have a rule based surfaces layer in your typical part template, omit it from this one. If you have a rule based surface layer in a default_layer_model, create an empty layer in this model with the same name, and flag it as "independent", so the default layer rules won't apply here.
Standard drawing templates:
Change the "Detail Option" show_quilts_in_total_xsecs to "yes". This specifies that cross sections will cut through surfaces as well as solids, which is important if envelopes are cut.
If you use a *.dtl file to control initial settings for drawings not based on a template, include the line "show_quilts_in_total_xsecs yes"
A text file users can easily access:
To set up mass properties linking, the user imports this text into the Relations window of a new envelope model, so its mass properties are assigned values equal to parameters in another model. In order to prevent unneeded update cycles (model status goes yellow when should stay green & prompts for check-out when it hasn't actually changed), this text includes "if" statements, so the values are only updated when necessary, not with every model regeneration. Here is a sample for one of the values:
There are similar statements for volume, area, the three C.G. coordinates, and the six M.O.I values. Users are instructed to query the SessionID of the original assembly, and "Find and Replace" the "1" with the actual number. (Alternatively, they can close everything, clear memory, and open that model first, ensuring its SessionID actually will be "1".) The "ENVLP_MASS_PROPOGATOR" text refers to the name of a Mass Properties Analysis Feature that should have been created in the footer of that model.
There is also a density calculation, of the form:
Again, an "if" statement ensures this is only updated when necessary. Note, unlike other mass properties, there is no "alternate" parameter for density.
There is also a statement to specify that these alternate mass properties (as opposed to the calculated properties) should be used for this model:
Early on, I included this block of text as a 3D annotation within the part template used for envelopes; users could copy it, and delete the annotation. Now I have it as *.txt file that gets synced to a subfolder of user's Working Directory (along with numerous other helpful "goodies"). This sync happens whenever they launch Creo (with a *.bat file that also syncs our global config.pro, sets up licenses, etc). Being under the Working Directory makes it quick and easy to find when needed.
If it takes "more than a moment" to open a model in its "Default Rep", please create an envelope model for upstream use:
The resulting envelope models will be self updating, to some extent. If a part is moved, or its shape/geometry is changed, the envelope model will pick up the change with the next regeneration. However, if parts are added or removed from the assembly (or the number of entities in a pattern changes), then these changes will not be picked up until the user manually triggers a regeneration. To do this, you must open the envelope in its own window, and right-click the shrinkwrap feature, selecting either "Update Shrinkwrap" or "Edit Definition". The former option only appears if you'd been on the Master Rep in the assembly. If you were in another rep, you'll be prompted to return to the Master Rep when selecting "Edit Definition", and the green checkmark will update the shrinkwrap.
This technique for creating the envelopes in context only works for models small enough to work with the Master Rep. However, there will be models you will only be able to work with effectively when envelopes of certain children are loaded. Unfortunately, I have not found a way to create envelopes-of-envelopes using this approach. (It doesn't include the enveloped parts in the new envelope.) Workaround is to use "Save as" command and set the type to "Shrinkwrap". Selecting the "Surface Subset" creation method will mimic results of the standard envelope technique, but it will include envelopes already shown. This results in a new file in Windows, which needs to be brought into the PDM system and assigned as the "Default Envelope". Mass properties can be linked same as before. When making updates to this sort of envelope, you have the additional issue of bringing a Windows file into the PDM system that already has a file of the same name. There is a technique to rectify this in PDMLink, but it adds several steps to the process. (Trick is to search for old part in database and "download to workspace", with "keep modified" option checked.)
Extra steps are also required if you want cables to show up in your envelopes! With the pipe routing application you can create "pipe solids" which survive shrinkwrapping, but there is no similar option to create "cable solids". Only technique I've found is to do a "Save as", set the file type to "STEP", and check the "Export Cable Surfaces" box. Then reimport the resulting STEP file, and do a "Save as" again, selecting "Shrinkwrap", as above.
Example of how this works in practice:
Assembly A is a complicated mechanism that takes more than a moment to load. User creates an envelope for it.
Assembly A goes into Assembly B, which attaches a small simple component to it. The Master Rep takes a while to load, but the Default Rep is quick, as the mechanisms is represented by the envelope, and the additional parts don't cause much of a delay. No additional envelope at this level is required.
Assembly B goes into Assembly C, along with a bunch of complicated structure. Loading the Master Rep at this level causes serious delays, but the Default Rep loads quickly. The complicated structure is all envelopes. Although Assembly B doesn't have an envelope, the Default Rep's rules ensure that the envelope down deeper for Assy A is loaded.
It's time to add the fasteners that secure the mechanism to structure. The user selects the mechanism's envelope, and triggers the "Load More Detail" mapkey, repeating if necessary, until the mounting feet are shown at full resolution. Same thing with the particular piece of structure it mounts too. Both sides of the interface are shown at full detail, but all the surrounding structure is still just envelopes. User assembles the fasteners. Knowing that a drawing view will need to be created showing this interface, the user saves the current rep state (modified version of Default Rep) as a new Custom Rep. Then, reverts back to the Default Rep, and starts the next task.
With so many fasteners now included in Assembly C, it's starting to take a while to load in the Default Rep, so a new envelope is created at this level, for use in Assembly D and higher...
The next day, when someone opens Assembly D or higher, Assembly C will be represented by the envelope, even though it wasn't previously. "Loading More Detail" on Assembly C will load the fasteners, and the envelopes for the structure and the mechanism. With envelopes inside of envelopes, you can "drill down" to the area of interest, it's not all-or-nothing.
An envelope inside of envelope scheme such as this, that lets users drill down to the area of interest and leave envelopes shown elsewhere, is ideal. However, further development is needed to create tools that make managing such models quicker and easier for the user.
I would welcome a discussion of improvements, or completely different strategies for dealing with these issues. I will consider editing this post to stay current with "best practices", as they emerge.
This is an interesting problem to solve! The challenging part of the equation for large assemblies involves the following parameters:
I know that you want to live in Parametric if that is where you are doing the work...but the fact of the matter is that there are downstream users and other applications in the business that can benefit from accessing the information. Can a shrinkwrap envelope be used in drawings, Windchill visualzation like options and variants, Creo View, Creo Illustrate or MPMlink? What is the cost of maintaining this envelope...find a use case downstream that can benefit from the envelop part and that will help your case. I'm also impressed that you have Manager's creating the design review presentations...in our company it is the designers creating the information for the design review.
As we were evaluating updating from Creo 2.0 M240 to Creo 4.0 M040, it was observed that this system failed to load the "Default Envelopes" upon initially opening a model. The "Master Rep" of the subassy would load first, and only be replaced by its "Default Envelope Rep" after a regeneration, or by manually reactivating the "Default Rep" of the top model.
A bug report was filed with PTC (https://www.ptc.com/appserver/cs/view/case.jsp?n=14570474), and 2 months later they provided the solution:
The "USE_ENVELOPE" parameter must now be "designated". (There's a checkbox for that in the parameters dialog.) Traditionally, this setting has only meant that the parameter would be passed up to Intralink or PDMLink. This seems to be new undocumented behavior, but at least the entire system isn't irreparably broken, as I had feared.