sketchucation logo sketchucation
    • Login
    πŸ€‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

    Mass rename components

    Scheduled Pinned Locked Moved Developers' Forum
    23 Posts 6 Posters 10.2k Views 6 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D Offline
      dedmin
      last edited by

      Is there a way to attach a same string to the names of different components?

      1 Reply Last reply Reply Quote 0
      • TIGT Offline
        TIG Moderator
        last edited by

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

        TIG

        1 Reply Last reply Reply Quote 0
        • D Offline
          dedmin
          last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • TIGT Offline
            TIG Moderator
            last edited by

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

            TIG

            1 Reply Last reply Reply Quote 0
            • D Offline
              dedmin
              last edited by

              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
              
              1 Reply Last reply Reply Quote 0
              • TIGT Offline
                TIG Moderator
                last edited by

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

                TIG

                1 Reply Last reply Reply Quote 0
                • D Offline
                  dedmin
                  last edited by

                  I see. I thought it's a finished script ready to run. Never touched any scripting before. Thanks - will do it by hand.

                  1 Reply Last reply Reply Quote 0
                  • TIGT Offline
                    TIG Moderator
                    last edited by

                    Copy/paste this into a banding.rb file, then typing banding "-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

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      dedmin
                      last edited by

                      banding "-0W-1L"
                      Processed 2 Component Definitions
                      drawer_right-0W-1L
                      drawer_left-0W-1L
                      
                      true
                      

                      It works!!!!

                      1 Reply Last reply Reply Quote 0
                      • D Offline
                        dedmin
                        last edited by

                        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 😳
                        1 Reply Last reply Reply Quote 0
                        • D Offline
                          dedmin
                          last edited by

                          true
                          banding "0W-1L;"
                          Processed 2 Component Definitions
                          0W-1L;drawer_right
                          0W-1L;drawer_left
                          
                          true
                          
                                     :+1:  :+1:  :+1:  :+1:
                          
                          1 Reply Last reply Reply Quote 0
                          • TIGT Offline
                            TIG Moderator
                            last edited by

                            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

                            TIG

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              DavorP
                              last edited by

                              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?

                              1 Reply Last reply Reply Quote 0
                              • Dan RathbunD Offline
                                Dan Rathbun
                                last edited by

                                What "other details" ?

                                I'm not here much anymore.

                                1 Reply Last reply Reply Quote 0
                                • J Offline
                                  jeynay
                                  last edited by

                                  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

                                  1 Reply Last reply Reply Quote 0
                                  • TIGT Offline
                                    TIG Moderator
                                    last edited by

                                    @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 initial togo="..."; 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...

                                    TIG

                                    1 Reply Last reply Reply Quote 0
                                    • J Offline
                                      jeynay
                                      last edited by

                                      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 initial togo="..."; 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...

                                      1 Reply Last reply Reply Quote 0
                                      • TIGT Offline
                                        TIG Moderator
                                        last edited by

                                        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"
                                        etc

                                        Just edit that to cover what you want to delete...
                                        So to leave the final 'ref' as say "1-01", you simply change the togo 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"
                                        etc

                                        You choose what's to be deleted...
                                        You can always run the code a second time with a new togo 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

                                        1 Reply Last reply Reply Quote 0
                                        • J Offline
                                          jeynay
                                          last edited by

                                          @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"
                                          etc

                                          Just edit that to cover what you want to delete...
                                          So to leave the final 'ref' as say "1-01", you simply change the togo 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"
                                          etc

                                          You choose what's to be deleted...
                                          You can always run the code a second time with a new togo 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

                                          This worked beautifully!!! thank you much appreciated πŸ˜„

                                          1 Reply Last reply Reply Quote 0
                                          • M Offline
                                            MAdel
                                            last edited by

                                            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 initial togo="..."; 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...

                                            1 Reply Last reply Reply Quote 0
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement