Mass rename components
-
Sketchup.active_model.definitions.each{|d| d.name="MyPrefix-"+d.name+"-MySuffix" }
Adds a prefix AND a suffix to ALL component definition names !
If you want to match a particular kind of name then use a regexp......d.name=d.name+"-MyDoorSuffix" if d.name=~/Door/...
would only add '-MyDoorSuffix' onto the ends of any Component names that include the text 'Door' somewhere inside it...
-
Thanks, Master TIG
How about applying this on a selection of components?
What I'm trying is to add a banding information to the names of the components as a suffix. If I have a components that share the same banding, to first select them and attach that suffix at once. -
defs=[] Sketchup.active_model.selection.each{|e| defs<<e.definition if e.class==Sketchup;;ComponentInstance } defs.uniq! defs.each{|d|d.name=d.name+"-SUFFIX"}
This processes the definitions - I'm assuming that you want to rename the component-definition NOT the component-instance which can also have a separate name... It's easy to adjust the code if instances are to be renamed... like this...
insts=[] Sketchup.active_model.selection.each{|e| insts<<e if e.class==Sketchup;;ComponentInstance } insts.each{|i|i.name=i.name+"-SUFFIX"} ### NOTE; the component-definition's name is NOT changed by this...
-
Thanks!! Yes, I want to change component-definition.
I saved the ruby as a banding.rb in the Plugins folder, selected the components and run the script in the ruby console. Never been messed with this before - maybe I'm doing something wrong here?banding Error; #<NameError; (eval);42; undefined local variable or method `banding' for main;Object> (eval);42
-
Without seeing your code I don't know what's up - what have you pasted into the file - I only showed snippets which need some 'structure' ! You have to have
def banding() ### The code... end#def
To run it by typing 'banding'...
It'd be relatively easy to sort - please paste you code inside a [ code ][ /code ] set... -
I see. I thought it's a finished script ready to run. Never touched any scripting before. Thanks - will do it by hand.
-
Copy/paste this into a
banding.rb
file, then typingbanding "-suffix"
in the console should work on selected components...def banding(suffix="") suffix=suffix.to_s model=Sketchup.active_model model.start_operation("banding "+suffix) ss=model.selection defs=[] ss.each{|e| if e.class==Sketchup;;ComponentInstance defs<<e.definition if not defs.include?(e.definition) end#if } defnames=[] defs.each{|d| d.name=d.name+suffix defnames<<d.name } puts "Processed "+defs.length.to_s+" Component Definitions" defnames.each{|n|puts n} puts "" model.commit_operation end#def
PS: I've attached the .rb too...banding.rb
-
banding "-0W-1L" Processed 2 Component Definitions drawer_right-0W-1L drawer_left-0W-1L true
It works!!!!
-
It works great, but there is a problem. If I make a cabinet component with all the banding info for the parts set and then stretch with FredoScale to get new dimensions the components get renamed
drawer_left;0W-1L#1
- they become new components. Since i'm using the names as a way to export banding info into the CutList Plus using ";" as a delimiter i have to rename again. But if i put this info as a prefix then everything will be fine and no need to rename again. Can You please make this script do the same but as a prefix? Sorry, if i sound too insolent
-
true banding "0W-1L;" Processed 2 Component Definitions 0W-1L;drawer_right 0W-1L;drawer_left true
:+1: :+1: :+1: :+1:
-
Here's an update:banding.rb
Usage:
banding "prefix-" [or banding "prefix-","" or banding "prefix-",nil] adds a prefix
banding "","-suffix" [or banding nil,"-suffix"] adds a suffix
banding "prefix-","-suffix" adds a suffix and a prefix
-
Is there a plugin that would export list of component names, definitions and perhaps other details to .csv file
And the more tricky part - to import back the new filenames after you are done with editing?Or a plugin that would list all components with details in an editable spreadsheet within SU?
-
What "other details" ?
-
Hi,
Is there a way to remove certain words from multiple components at the same time?
for example I have 50 components that their name has "3D - johnsmith_google_com level 1" at the end of the name. like:
"10016001_S_DLGBldg1_Central_detached_rvt-1-3D - 3D - johnsmith_google_com level 1"
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1"
"Aluminum Sill Extension - Aluminum Sill Extension-2131210-3D - johnsmith_google_com level 1"Is there a script that can remove a certain prefix or suffix? or just removing the first/last 15 or 10 characters in the name would also work.
This issue is very annoying since the models imported from revit to sektchup end up having more than 100 characters.
Thanks
-
@jeynay said:
Hi,
Is there a way to remove certain words from multiple components at the same time?
for example I have 50 components that their name has "3D - johnsmith_google_com level 1" at the end of the name. like:
"10016001_S_DLGBldg1_Central_detached_rvt-1-3D - 3D - johnsmith_google_com level 1"
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1"
"Aluminum Sill Extension - Aluminum Sill Extension-2131210-3D - johnsmith_google_com level 1"Is there a script that can remove a certain prefix or suffix? or just removing the first/last 15 or 10 characters in the name would also work.
This issue is very annoying since the models imported from revit to sektchup end up having more than 100 characters.
Thanks
You can batch rename components.
I assume you mean component-definitions, rather than component-instances which can have individual names based on a shared definition...
Here's a simple one-liner to do it...
Edit the initialtogo="...";
to suit your needs...togo=" - 3D - johnsmith_google_com level 1";m=Sketchup.active_model;m.start_operation('rename defns',true);c=0;m.definitions.each{|d|(d.name=d.name.gsub(/#{togo}/,'');c+=1) if d.name=~/#{togo}/};puts"#{c} definitions renamed.";m.commit_operation;
Paste it into the Ruby Console + <enter>, it's one step undoable...
-
Thanks for the quick reply TIG.I'm assuming this would rename that portion of component's name as well? for exampe if i have 50 instances like
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-01"
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-02" so on so forth, would i be able to remove the" 3D - johnsmith_google_com level" portion of those instance names?Thanks in advance
@tig said:
@jeynay said:
Hi,
Is there a way to remove certain words from multiple components at the same time?
for example I have 50 components that their name has "3D - johnsmith_google_com level 1" at the end of the name. like:
"10016001_S_DLGBldg1_Central_detached_rvt-1-3D - 3D - johnsmith_google_com level 1"
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1"
"Aluminum Sill Extension - Aluminum Sill Extension-2131210-3D - johnsmith_google_com level 1"Is there a script that can remove a certain prefix or suffix? or just removing the first/last 15 or 10 characters in the name would also work.
This issue is very annoying since the models imported from revit to sektchup end up having more than 100 characters.
Thanks
You can batch rename components.
I assume you mean component-definitions, rather than component-instances which can have individual names based on a shared definition...
Here's a simple one-liner to do it...
Edit the initialtogo="...";
to suit your needs...togo=" - 3D - johnsmith_google_com level 1";m=Sketchup.active_model;m.start_operation('rename defns',true);c=0;m.definitions.each{|d|(d.name=d.name.gsub(/#{togo}/,'');c+=1) if d.name=~/#{togo}/};puts"#{c} definitions renamed.";m.commit_operation;
Paste it into the Ruby Console + <enter>, it's one step undoable...
-
The initial part of the code snippet
togo=" - 3D - johnsmith_google_com level 1";
specifies which string will be deleted in the components' names.
I you example:
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-01" "4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-02"
etc
become
"4_ Light Fixture - 4_ Light Fixture-1847101-01" "4_ Light Fixture - 4_ Light Fixture-1847101-02"
etcJust edit that to cover what you want to delete...
So to leave the final 'ref' as say "1-01", you simply change thetogo
to say:
togo=" - 3D - johnsmith_google_com level";
and the renaming is then:
"4_ Light Fixture - 4_ Light Fixture-1847101 1-01" "4_ Light Fixture - 4_ Light Fixture-1847101 1-02"
etcYou choose what's to be deleted...
You can always run the code a second time with a newtogo
string, e.g.
togo="4_ Light Fixture - ";
Would strip off the duplicated starting reference, leaving:
"4_ Light Fixture-1847101 1-01" "4_ Light Fixture-1847101 1-02"
etc -
@tig said:
The initial part of the code snippet
togo=" - 3D - johnsmith_google_com level 1";
specifies which string will be deleted in the components' names.
I you example:
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-01" "4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1-02"
etc
become
"4_ Light Fixture - 4_ Light Fixture-1847101-01" "4_ Light Fixture - 4_ Light Fixture-1847101-02"
etcJust edit that to cover what you want to delete...
So to leave the final 'ref' as say "1-01", you simply change thetogo
to say:
togo=" - 3D - johnsmith_google_com level";
and the renaming is then:
"4_ Light Fixture - 4_ Light Fixture-1847101 1-01" "4_ Light Fixture - 4_ Light Fixture-1847101 1-02"
etcYou choose what's to be deleted...
You can always run the code a second time with a newtogo
string, e.g.
togo="4_ Light Fixture - ";
Would strip off the duplicated starting reference, leaving:
"4_ Light Fixture-1847101 1-01" "4_ Light Fixture-1847101 1-02"
etcThis worked beautifully!!! thank you much appreciated
-
thanks TIG for those amazing scripts
i hope you could add the option for
removing the first/last 15 or 10 characters from the name@tig said:
@jeynay said:
Hi,
Is there a way to remove certain words from multiple components at the same time?
for example I have 50 components that their name has "3D - johnsmith_google_com level 1" at the end of the name. like:
"10016001_S_DLGBldg1_Central_detached_rvt-1-3D - 3D - johnsmith_google_com level 1"
"4_ Light Fixture - 4_ Light Fixture-1847101- 3D - johnsmith_google_com level 1"
"Aluminum Sill Extension - Aluminum Sill Extension-2131210-3D - johnsmith_google_com level 1"Is there a script that can remove a certain prefix or suffix? or just removing the first/last 15 or 10 characters in the name would also work.
This issue is very annoying since the models imported from revit to sektchup end up having more than 100 characters.
Thanks
You can batch rename components.
I assume you mean component-definitions, rather than component-instances which can have individual names based on a shared definition...
Here's a simple one-liner to do it...
Edit the initialtogo="...";
to suit your needs...togo=" - 3D - johnsmith_google_com level 1";m=Sketchup.active_model;m.start_operation('rename defns',true);c=0;m.definitions.each{|d|(d.name=d.name.gsub(/#{togo}/,'');c+=1) if d.name=~/#{togo}/};puts"#{c} definitions renamed.";m.commit_operation;
Paste it into the Ruby Console + <enter>, it's one step undoable...
-
You could try editing the code as follows - inside the
{}
block of
...each{|d|...}
substitute...
Change the value ofi=
to how many characters you want to loose...
To trim off the end usei=10;n=d.name;1.times{n=n.chop};d.name=n;
To trim off the start use
i=10;n=d.name;n=n[i..-1];d.name=n;
Advertisement