sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Reload component script - anyone have one

    Scheduled Pinned Locked Moved Developers' Forum
    21 Posts 13 Posters 3.1k Views 13 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.
    • M Offline
      MartinRinehart
      last edited by

      Here's a start.

      I don't know how to find the component to delete. Do you have to cruise through entities looking for Component and then check name. Any less tedious way? I also don't know how to import a component. Looked at Model.import() but that doesn't seem quite right. I was looking for something that let me position the component. Having to position 300 new components would be a big improvement for zzm, but hardly optimal.

      zzm: by proceeding with this discussion you certify that your files are fully backed up and that you know, understand and will abide by all the terms and conditions of Murphy's Law.

      
      def zzm( )
      
          list = Dir;;glob( '*.skp' )
          
          if list.length == 0
              UI.messagebox( 'Found no SketchUp models (*.skp).' )
              return
          end
          
          ret = UI.messagebox( 'There are ' + list.length().to_s() + 
              ' files. Proceed?', MB_OKCANCEL )
          return if ret == 2 # CANCEL
          
          prompts = ['Name of component to delete; ',
              'Name of component to import; ']
          defaults = ['deleteme', 'importme']
          UI.inputbox( prompts, defaults, 'Delete/Import Box' )
      
          for fn in list do
              file = Sketchup.open_file( fn )
              UI.messagebox( fn + ' opened.' )
      
              # do the work here
      
              
          end
          
      end
      
      

      I'm gone for the day.

      Author, Edges to Rubies - The Complete SketchUp Tutorial at http://www.MartinRinehart.com/models/tutorial.

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        Importing an external component: model.definitions.load http://code.google.com/apis/sketchup/docs/ourdoc/definitionlist.html#load
        Position the component: Entities.add_instance(definition, transform) - just copy the transformation of the instance you replace.

        @martinrinehart said:

        I don't know how to find the component to delete. Do you have to cruise through entities looking for Component and then check name. Any less tedious way?

        If you have it's name, then it's easy: model.definitions['definitionName']

        I think the code would be something like this:

        
        newDef = model.definitions.load(path_to_new_component)
        oldDef = model.definitions['definitionName']
        oldDef.instances.each { |old_inst|
          t = old_inst.transformation
          ents = old_inst.parent.entities
          ents.add_instance(newDef, t)
          old_inst.erase!
        }
        
        

        Thomas Thomassen β€” SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • honoluludesktopH Offline
          honoluludesktop
          last edited by

          This is a great plugin, especially for landscape visulization.

          1 Reply Last reply Reply Quote 0
          • thomthomT Offline
            thomthom
            last edited by

            Moved this topic to the Developer section of the forum.

            Thomas Thomassen β€” SketchUp Monkey & Coding addict
            List of my plugins and link to the CookieWare fund

            1 Reply Last reply Reply Quote 0
            • S Offline
              sahi
              last edited by

              It is my experiment.
              Prompt me if that not so.

              1. we choose a file (this will be a folder )
              2. We enter the name of component
              3. we choose a component in which and will replace

              Attention!!!! Attention!!!! Attention!!!! before the use backup folder
              menu "Plugins >> reload_component"
              reload_component2.rb

              1 Reply Last reply Reply Quote 0
              • S Offline
                SLOf1Fan
                last edited by

                For some reason I have recently found that right-clicking a residence model in my site model to update the revised component does not work. I get the usual pop-up stating the component has been added and asks if I'd like to replace, however when I click yes, nothing happens. It used to open the file folder so I can select the replacement folder. Please help.

                1 Reply Last reply Reply Quote 0
                • T Offline
                  Technical Ben
                  last edited by

                  Sorry to post in an old thread. But I'm looking for something similar to this.
                  Just a hobby project, but I would really like a tool that checked for updates to components for me.

                  So, I have a large file separated into separate components, these are save in a folder (such as Floor 1, Floor 2, Floor 3 etc). These are constructed into one big model (Such as "House"). I would like a script that automatically loaded up the components from file, when I opened the main project. I thought Sketchup did this automatically, but I have to click "reload" and each component separately. 😞

                  1 Reply Last reply Reply Quote 0
                  • honoluludesktopH Offline
                    honoluludesktop
                    last edited by

                    Select Window > components, right click the component you want to change in the component's window, then "select instances", again right click the component in the component's window, and "reload", "yes", and find the .skp you want.

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

                      My old XrefManager does do this BUT you need to have added the items as an 'Xref'... It is long overdue an update, but does list components that have changed externally and then allows you to reload them...

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        Technical Ben
                        last edited by

                        Thanks honoluludesktop.
                        I'll have to do that, and force myself not to amend objects in the wrong file.

                        1 Reply Last reply Reply Quote 0
                        • B Offline
                          BigAl
                          last edited by

                          I'm using Thom Thom's lines of code below to batch replace a series of proxy components with hi-res versions.
                          newDef = model.definitions.load(path_to_new_component)
                          oldDef = model.definitions['definitionName']
                          oldDef.instances.each { |old_inst|
                          t = old_inst.transformation
                          ents = old_inst.parent.entities
                          ents.add_instance(newDef, t)
                          old_inst.erase!
                          }
                          To speed this process up I'd like to add a conditional test before this code such that the code to replace Component A with Component B only runs if Component A already exists within the model. Otherwise skip to the next component in the list.
                          Does such code or similar already exist somewhere?
                          Any help greatly appreciated.

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

                            It looks like it already does that.

                            Meaning ComponentA's defintion's instances collection is iterated, and the statements within the curly delimited block are run if the collection has any references pointing at instances that have been placed within the model.

                            IF the instances collection is empty, then the iteration loop is exited without running the block.

                            ❓

                            I'm not here much anymore.

                            1 Reply Last reply Reply Quote 0
                            • B Offline
                              BigAl
                              last edited by

                              Thanks Dan,
                              I hadn't noticed that behaviour before. Initially being only interested in getting a couple of components into the model it wasn't an issue and I would always have the proxies in the model to check that the swap worked ok.
                              Looking at this again it looks like the components are all loaded into the file in turn. When I repeat ThomThom's text as below only Comp4 gets deleted if not required to replace comp3 (being the last to be loaded). Comp2 get left behind.

                              newDef = model.definitions.load("J:/Comp2.skp")
                              oldDef = model.definitions['Comp1']
                              oldDef.instances.each{|old_inst|old_inst.definition=newDef
                              t = old_inst.transformation
                              ents = old_inst.parent.entities
                              ents.add_instance(newDef, t)
                              old_inst.erase!
                              }
                              newDef = model.definitions.load("J:/Comp4.skp")
                              oldDef = model.definitions['Comp3']
                              oldDef.instances.each{|old_inst|old_inst.definition=newDef
                              t = old_inst.transformation
                              ents = old_inst.parent.entities
                              ents.add_instance(newDef, t)
                              old_inst.erase!
                              }

                              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