Community Tip - Stay updated on what is happening on the PTC Community by subscribing to PTC Community Announcements. X
How do I create a macro for IsoDraw CadProcess 7.2 to be able to edit the object id of the assembly group and then copy that over to the object name so that both the object id and object name are the same? Also I need to truncate the object id and name to only show the characters to the right of the hyphen.
Solved! Go to Solution.
Trevor,
You're the man. Thanks for the final help. It finally worked like a charm. Great!!! Thank you very much.
Here's the final code that worked.
Macro rename_assembly_name
Define el as Element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
select if Object_info exists
subselect if OBJECT_ID Contains "-"
el=ActiveDoc.FirstSelectedElement
WHILE (Exists (el) = true)
total=Len(el.info.id)
where=Find(el.info.id,"-",1)
good=(total - where)
If (where <> 0)
Output=Right(el.info.id,good)
el.info.id=Output
el.info.name=Output
end if
el = el.nextSelectedElement
End While
message "Assemblies have been renamed."
select none
End Macro
How do you intend to retain a unique ids if you use the content to the right of the hyphen?
I see multiples of many of the objects.
What happens is there is no hyphen or if there is no content after the hyphen or if there are multiple hyphens?
By default the object_id has an underscore and a different number (example,screw _1, screw _2, screw_3, screw_4) to the right of the hyphen. So the system has created a unique object_id. I just want to strip the engineering number out of the object_id and then copy that to the name_id. Having the object_id and object_name can be the same, I think. Isodraw does not mind that. I'm thinking a while statement would check to see if the condition exists. So those that don't match would have to be fixed manually, but at least the bulk of the list would fall under and be fixed by the macro. Right now I'm doing the renaming of object_id and object_name by hand and it takes too long. Hence the need for the macro. My end goal is to export the file once the renaming of the object_id and object_name has been done to a .u3d file that will be placed in an acrobat pdf file.
Okay I was able to make a macro that truncates the Object_id and copies the output over to the Object_name. The only problem that I'm having is that it is not looping. If I select and run the macro from the list it changes the next item on the list. Need to have it loop. I added a while statement but not sure what I did wrong to not make it loop down the selected list. Any help is much appreciated.
Macro to Truncate Object ID and Copy it Over to Object Name
Define Object_type as string
Define Object_info as string
Define el as element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
SELECT IF OBJECT_ID Contains "-"
WHILE (Exists (el) = true)
total=Len(ActiveDoc.FirstSelectedElement.info.id)
where=Find(ActiveDoc.FirstSelectedElement.info.id,"-",1)
good=(total - where)
Output=Right(activeDoc.firstSelectedElement.info.id,good)
activeDoc.firstSelectedElement.info.id=Output
activeDoc.firstSelectedElement.info.name=Output
Wait timer 30 else
message "No more assemblies to rename."
break
el = el.nextSelectedElement
End While
Select None
End Macro
First, I haven't tested this. Just went through some old code. Looks like you're not making a group to select from. Below is an update to the code in which I added 'el = ActiveDoc.FirstSelectedElement'. You should now be able to select multiple elements any way your prefer and then run the macro. If it just needs to run on the entire page just add before the command your selection criteria.
Macro to Truncate Object ID and Copy it Over to Object Name
Define Object_type as string
Define Object_info as string
Define el as element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
el = ActiveDoc.FirstSelectedElement
SELECT IF OBJECT_ID Contains "-"
WHILE (Exists (el) = true)
total=Len(ActiveDoc.FirstSelectedElement.info.id)
where=Find(ActiveDoc.FirstSelectedElement.info.id,"-",1)
good=(total - where)
Output=Right(activeDoc.firstSelectedElement.info.id,good)
activeDoc.firstSelectedElement.info.id=Output
activeDoc.firstSelectedElement.info.name=Output
Wait timer 30 else
message "No more assemblies to rename."
break
el = el.nextSelectedElement
End While
Select None
End Macro
Hi Trevor,
I copied your code and tried it and get sporatic results. One thing for sure the macro does not run through the selected list. It tends to try to change the first selected group on the list. If I continue to select and run the macro again, manually, then it continues down the list until the last renaming is done. Weird at best. This was the problem I was getting when I first posted the code. The macro will run, if I cycle it by selecting from the list and running it. It won't go through the list automatically. Looking at what i posted I realize now that I forgot to cut and paste the line you added, which was there in the code I pasted from. The macro code looks right but I don't know why it does not run automatically through the selected list. Attached is the .wrl file I'm testing the code with and using to open in IsoDraw Cadprocess 7.2.
Macro rename_assembly_name
Define Object_type as string
Define Object_info as string
Define el as element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
Define j as string
el=ActiveDoc.FirstSelectedElement
SELECT IF OBJECT_ID Contains "-"
WHILE (Exists (el) = true)
total=Len(ActiveDoc.FirstSelectedElement.info.id)
where=Find(ActiveDoc.FirstSelectedElement.info.id,"-",1)
good=(total - where) Output=Right(activeDoc.firstSelectedElement.info.id,good)
activeDoc.firstSelectedElement.info.id=Output
activeDoc.firstSelectedElement.info.name=Output
Wait timer 15 else
message "No more assemblies to rename."
break
el = el.nextSelectedElement
End While
Select none
End Macro
Move your select up a line. Might need to change it to a subselect.
Why 'break'? Take it out.
okay I tried making it into a subselect but I still find that the macro needs to be reselected manually each time so that it can do the next on the list. The following does change the object_id to what is desired but I can't get it to select and run for the next assembly automatically.
Macro rename_assembly_name
Define el as Element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
select if Object_info exists
subselect if OBJECT_ID Contains "-"
el=ActiveDoc.FirstSelectedElement
WHILE (Exists (el) = true)
total=Len(ActiveDoc.FirstSelectedElement.info.id)
where=Find(ActiveDoc.FirstSelectedElement.info.id,"-",1)
good=(total - where)
If (where <> 0)
Output=Right(activeDoc.firstSelectedElement.info.id,good)
activeDoc.firstSelectedElement.info.id=Output
activeDoc.firstSelectedElement.info.name=Output
message Output
end if
el = el.nextSelectedElement else
message "No more assemblies to rename."
End While
subselect none
select none
End Macro
Here's another untested version. If this doesn't work please try debugging the macro using the built in IsoDraw debug tool. It allows you to step through the macro and see where it's dropping out.
If that doesn't work, please provide a dumbed down example file that demonstrates the issue.
Here's the macro with some tweaks. I'm not sure that the else you had at the end works like that. If it does, I'm surprized.
Macro rename_assembly_name
Define el as Element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
select if Object_info exists
subselect if OBJECT_ID Contains "-"
el=ActiveDoc.FirstSelectedElement
WHILE (Exists (el) = true)
total=Len(el.info.id)
where=Find(el.info.id,"-",1)
good=(total - where)
If (where <> 0)
Output=Right(el.id,good)
activeDoc.firstSelectedElement.info.id=Output
activeDoc.el.info.name=Output
message Output
end if
el = el.nextSelectedElement
End While
message "No more assemblies to rename." |
select none
End Macro
Trevor,
You're the man. Thanks for the final help. It finally worked like a charm. Great!!! Thank you very much.
Here's the final code that worked.
Macro rename_assembly_name
Define el as Element
Define where as Integer
Define Output as String
Define bad as integer
Define good as integer
Define total as integer
select if Object_info exists
subselect if OBJECT_ID Contains "-"
el=ActiveDoc.FirstSelectedElement
WHILE (Exists (el) = true)
total=Len(el.info.id)
where=Find(el.info.id,"-",1)
good=(total - where)
If (where <> 0)
Output=Right(el.info.id,good)
el.info.id=Output
el.info.name=Output
end if
el = el.nextSelectedElement
End While
message "Assemblies have been renamed."
select none
End Macro