I have an assembly that is configurable via Pro/Program (modified dimensions, substituted parts, etc. Lets call it "widget1.asm". It contains about 100 parts in total, and can be configured in virtually countless ways.
Under this assembly are all of the possible parts, depending on the configuration.
Using a program parameter called "ignore_program", along with an "or" operator on all of the program statements, it's easy enough to get all of the parts assembled at once and and then perform a save-as in order to create a complete independently configurable copy, such as "widget2.asm", along with all of it's "widget2_xxx" parts.
Here's my problem...
I also have 117 drawing templates, which are obviously not all named "widget1.drw". 🙂 More like:
widget1_no big hole.drw
So... how do I get a new independent copy of the assembly, parts, and drawing templates, without having to load 117 drawings into memory, rename and save the assembly/parts, and then manually rename and save all of those templates one at a time? (I actually need 4 versions of widget, to incorporate into a higher level assembly. So, imagine that process times 4...every time we change the widget design in some minor way. 😬)
The only thing I can come up with is to maybe make a trail file for loading, regenerating, and saving all of the templates after the assembly has been renamed and is still in session, but even that is tedious. (not sure about renaming them also).
I sure miss the very early days when Pro/E's database files were ascii text. 🙂
Do the drawing templates have any connection to the assembly/part - they should not if they are true drawing templates in creo.
Or are your drawing templates - basically pre-defined drawings of specific (generic) components already placed and you are renaming them at the end of your design process? I am betting this is your use case.
If my assumption is correct ... it could be done with a batch process in Nitro-CELL (which uses Excel to setup the automation script) - OR- you could use CREOSON to perform these operations if you feel like scripting/coding a bit in your language of choice using JSON Transactions.
I don't think you can do it "at one time" - more like a batch or loop through the files. And what is in memory is crucial to the files you are working with. So if you have the SAME models showing up on multiple drawing templates, that could be a problem... BUT I don't think it will be an issue with the approach I have outlined below.
The basic workflow would be as follows (psudo code) in Nitro-CELL:
Execute Worksheet -> getData
list all the drawings from the workspace/working directory write them to myBatchDrawings
Batch Worksheet -> myBatchDrawings
<contains the list of drawings to batch process>
Execute Worksheet -> processDrawing
open curDrawing (should open the models associated with it)
get list of models associated with drawing -- write myBatchModels
start myBatchModels Worksheet using processModel Worksheet
rename curDrawing insession
Batch Worksheet -> myBatchModels
<contains the list of drawings to batch process>
Execute Worksheet -> processModel
rename curModel based on whatever logic you determine (e.g. lookup of name or whatever)
CREOSON would follow the same basic process above, but without the Excel Worksheets as the mechanism for containing your commands and data to process. It would look something more like this (again psudo code):
myDrawings = creo : list_files
for each drawing in myDrawings
file : open <drawing>
modelsOnDrawing - drawing : list_models
for each modelName in modelsOnDrawing
file : rename <modelName> <new_name> onlysession = true
file : save -or- file : backup
CREOSON would be simpler - but a bit more has to be considered for the logic to make the renames of the cur drawing template and models to the new ones (e.g. array or something to say fileA will be renamed to fileX ,etc.)
If you have any questions or I have over simplified the issue you are facing, please let me know. But based on my read of your question/problem -- either of the above would do the trick. Hope this helps or gives you a different thought process on solving the problem.
My use of the phrase "drawing templates" wasn't the best choice. They are actually completed drawings with all dimensions (driven, created in the drawing for more flexibility), automated BOM, notes, etc... each of a certain configuration.
Each configuration contains certain parts and is assembled in a certain way. But, it's dimensions can change from time to time. So when I need to generate a new version (different dimensions) of a certain configuration, I simply load the drawing "template" and regenerate and/or fix any dimensions, alignments, etc.
This is all done with one master model and it's associated parts. The models don't get saved between runs; only a new drawing, if one doesn't already exist for that particular configuration.
15 years ago I started with one drawing, named the same as the top assembly, and drawing states, drawing program, etc...you know, like PTC wants everyone to work. :). But drawing states are difficult to use in dynamic situations, and since then designs have been expanded, options added, and now we are up to 117 different configurations... with a seemingly almost infinite number of dimensional variations within each one.
The problem is just getting all those drawings into memory before the master model is saved off to a new copy, so that all those drawings go with it (and get renamed to have a matching prefix)...since each of the 4 assembly copies can be any one of the 117 configurations.
Does that help clarify it a little?
Thanks for the input Dave.
Each of the drawings does contain different models, since any given configuration will use parts that others don't. And each drawing has it's own individual sheets with detail views of certain parts (necessary part models added to the drawing to create those detail views).
But, I'm not worried about the drawings looking correct when they are saved, since they will update when the master assembly is regenerated with parameters and the proper suppressed/resumed parts that each configuration and it's associated drawing needs.
I always use a parameter called "ignore_program", and "or" it with any other conditional lines in pro/program. Setting that one parameter to "yes" will cause every component part to be assembled, regardless of the configuration. That way, when a save-as is performed, all of the models are included and can be renamed with a new prefix and saved. At the same time, it ensures that any loaded drawing will have it's required parts in memory, even if the drawing isn't exactly pretty in that state. 🙂
A bit more info... the master assembly model's driving parameters are all controlled externally with an application that I built on Excel and it's VBA back-end. (They can also be entered with program prompts of course, but normally everything is driven externally, so that configuration data can be stored and manipulated outside of Creo).
I'll definitely check those out. Thanks for the help.
For quick reference, is NITRO-cell an Excel add-in, or a standalone spreadsheet with code on the backend?
Just as an FYI -- Nitro-CELL uses a standard Excel Workbook - your existing Workbook or you can allow it to create one from scratch. No "add-in" or "special" Workbook required.
Nitro-CELL's execution is on-demand using the Nitro-CELL interface - so there is no special hook required into your models (no baggage). It connects, processes the Workbook and then disconnects from Creo.
For existing Workbooks, you just need to select the Workbook you want to use and press the "Upgrade Workbook" Button on the UI - Nitro-CELL will all the command reference/help sheet automatically. Then you just have to create any Execute Sheet(s) and Batch Sheet(s) as you need them to put the rest of your workflow together.
On the Execute Sheets - the command are entered in a specific format.. Here is an overview of how that works - the command format to make it more efficient to find all the functions that are available within Nitro-CELL:
The Getting Started Overview is a good place to start with Nitro-CELL:
Hope that helps!
Have you taken a look at the setting rename_drawings_with_object both? If you set this setting to "both", you will get correctly named drawings as a result of the save as when a CAD model is selected for Save A Copy. The drawings do not need to be in session before executing the save as.
Would you mind sharing how you implemented the ignore_program parameter into your program? I'm struggling with that as we have the same scenario as you. Large assembly with a lot of parts but I need to rename and not break the model after the rename