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

Community Tip - New to the community? Learn how to post a question and get help from PTC and industry experts! X

A comprehensive massive model handling approach

dcokin
13-Aquamarine

A comprehensive massive model handling approach

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.

Background

  • I don't believe designers using Creo Parametric ought to have to switch to Creo View to work with large assemblies. If you're a Paramedic user, you should stick with Parametric for your entire workflow; Creo View should be relegated to users without the skills or access to run Parametric.  (Managers doing design reviews, shop floor personnel doing the build, quality inspectors, etc.)

  • I don't believe any model, no matter how complex, should take more than one minute to open in its default state.

  • I haven't had a lot of luck using any of the out-of-the-box Simp Reps intended to address large model performance; Geometry, Graphics, or Lite Graphics. I either see no discernable performance benefit, get occasional regen errors, or nothing shown at all. With my approach, only the Default Rep and Default Envelope Rep are typically used.

  • I don't believe that when faced with a large assembly, a designer ought to have to investigate if envelopes are available for particular subassemblies. Wherever envelopes exist, they should be loaded automatically, without user interaction. The user should specify when more detail is to be included, not less.

  • I believe envelope models should always have the same mass properties as the fully detailed models they represent, so that accurate weight, balance, and moment of inertia studies can be done on the top assembly, even if only low fidelity data is currently loaded.

How this is implemented

Required global config.pro settings:

open_simplified_rep_by_default default

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.

auto_evaluate_simprep_rules yes

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).

mp_analysis_default_source assigned

Specifies that if mass properties have been assigned, these values should be used in lieu of the calculated values.

hlr_for_quilts yes

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:

No changes

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:

if PRO_MP_ALT_MASS!=MASS:FID_ENVLP_MASS_PROPAGATOR:1

PRO_MP_ALT_MASS=MASS:FID_ENVLP_MASS_PROPAGATOR:1

endif

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:

MP_DENSITY=PRO_MP_ALT_MASS/PRO_MP_ALT_VOLUME

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:

PRO_MP_SOURCE="PARAMETERS"

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.

User instructions:

If it takes "more than a moment" to open a model in its "Default Rep", please create an envelope model for upstream use:

  • Switch to the "Default Envelope Rep" for the first time, and it will prompt you to create a new envelope model.  Name the new file properly, and select the appropriate template file to copy from. A prompt will indicate you are entering shrinkwrap mode.
  • Change the enveloping technique from default value of "Autocollect all solid surfaces" to "Outer Shell".  Set the Quality Level to "5" (for starters; adjust as needed), and check "Ignore Small Surfaces" with a threshold of 1% model size.
  • With the envelope model now created, change the value of the "USE_ENVELOPE" parameter in the assembly from "NO" to "YES".
  • In the assembly, create a Mass Properties Analysis Feature. Name it "ENVLP_MASS_PROPOGATOR".  Configure it to Regenerate "Always", and create 12 of the 18 parameters that are available: Volume, Surface Area, Mass, the three *COG values, and six MP* values, leaving the default parameter names.  (The three INERTIA_* and three ROT_ANGLE_* values are not needed.)  Move this feature to the Footer of the model.  (If additional items are added to the assembly after the Mass Properties Analysis Feature, they are not included in the calculation, so it must always come at the end of the Model Tree, which is just what the Footer is for.)
  • Open the envelope model on its own, bring up the Relations dialog, and use the Import Relations function to bring in the text file described earlier, which sets the envelopes mass properties equal the values in that Mass Properties Analysis Feature just created.  (Follow instructions to set SessionID to point to correct model.)

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.

 

Complications:

  • When creating a new envelope, user has to retype entire filename manually (common name can be copy/pasted from model tree, filename cannot).  Must be instructed to name files properly (original assembly number with a _env suffix), select the right template (special one for envelope parts), adjust the shrinkwrap options, and go through the multi-step procedure to link the mass properties.
  • No prompts or indications that an envelope is out of date, and requires manual update. Envelope updates only need to be done at the end of a workday before check-in, when completing a change incorporation, etc.  You don't want to wait for the envelope to regenerate every time you make one little change; just when you're done.  But it would be nice if there was some sort of indication that parts have been added/subtracted, and the extra update steps are necessary.  And envelopes made out-of-context (so that the Default Rep can be used in lieu of Master Rep, or so cables can be included) just take too many steps to update.
  • I have not learned enough about PDMLink configuration to advise on the optimum settings there.  It is desired to minimize as much as possible the number of models brought into a user's workspace, as downloading the models can add to the load time, and working with a large number of models in a workspace is cumbersome.  As a result of a rule in the Default Rep of assemblies, that scans for the "USE_ENVELOPE" parameter in submodels...  One can expect that all assemblies will be brought into the workspace, just not any of the parts (except envelopes, as needed). While loading all the assemblies isn't ideal, the parts are bigger files, and omitting them is still a huge performance boost.  As of this time, I've only demonstrated this technique with a moderately large dataset in our PDMLink system.  I have tested various settings attempting to optimize performance, with some confusing and inconclusive results. 
  • Largest demonstration of this technique was done outside of a PDMLink system (and did not include the mass properties linking, as the mass properties of the dataset was unreliable to begin with).  While an effective demo, it revealed some mysterious behavior I still haven't been able to trace.  There were 12 gigs of data in a local windows folder; 1,500 assemblies & 6,000 parts, all treeing up into one top assembly.  It would never be possible to open the Master Rep of such a large assembly.  (If selected accidentally, you should best go to the task manager and kill xtop.exe, otherwise you'll be in for a long wait...)  But the Default Rep can be opened in a fresh Creo session in ~4 minutes.  (Opening the Symbolic Rep is instant, but then switching to Default Rep would take 4 minutes.) While this is itself a great victory, it's still a lot longer delay than I'd like.  The Default Rep only shows one envelope, why should it take so long to come up?  My best guess as to what's happening is that it's opening all the assemblies to check if they have envelopes, which makes a bit of sense. (The "include submodels" rule doesn't have a mechanism to stop scanning deeper once it finds a match.) But here's the part I don't understand...  If I then close the model, and "erase not displayed" to clear my session memory...  I can reopen the Default Rep in only 10 seconds. Shouldn't a session with its memory cleared be equivalent to a new session?  I spent a while looking for some configuration setting that would let me gain those 4 minutes back, but I haven't found anything that will do it, short of turning off the automatic rule evaluation entirely.

Conclusions:

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.

2 REPLIES 2
BillRyan
15-Moonstone
(To:dcokin)

This is an interesting problem to solve!  The challenging part of the equation for large assemblies involves the following parameters:

  1. Collaboration - 100 engineers adding information into a managed structure from different continents.
  2. Access to the Latest Information - 10 Engineers checking in content and having all 100 engineers working with the same information.
  3. Quickly Create Unique Backgrounds specific to their boundary conditions.  Example - Designing in a cab is much different than working in the Engine compartment.
  4. Minimize effort to maintain and update assemblies - An assemlby architect with intimate knowledge of the product, scope and individuals responsibilities is key for setting up the large assembly structure or a very good specifications document.
  5. Minimize the possibility for engineers to assemble components in incorrect positions in 3D space.  - Placement Control of Systems is managed from the top level assemblies where write access is strictly controlled.  Every one of us in the transportatin industry has cab, powertrain and chassis.  I'm speculating the enigne has a coordinate system and one person in your company is managing it's relative position to the airplane assemlby.
  6. Overloaded Assemblies versus Single Option/Single Level Assemblies - There is a significant difference in assemlby management when the top level product has limited options versus a large assembly with customers choosing from 19,000 options.  The world would be an ideal place if we could create an assembly for every option combination.  We are managing over 200 combinations just for the systems of cab, hood engine, front suspension and cooling modules.  There are efficiencies to be gained by having as an example, one engineer manage one bumper assemlby that has all the bumper options for every one of the hood and cab combinations.  

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.

dcokin
13-Aquamarine
(To:dcokin)

2018 UPDATE:

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.

Top Tags