sketchucation logo sketchucation
    • Login
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Complex scripting/plugin - to create a component library

    Scheduled Pinned Locked Moved Plugins
    52 Posts 2 Posters 1.5k Views 2 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.
    • TIGT Offline
      TIG Moderator
      last edited by

      togos=[] d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup::Edge) and e.faces.length<2} d.entities.erase_entities(togos)
      This removes the four outer perimeter edges.
      Now for the holes...

      faces=[]
      d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
      (faces.length-1).times{
         for face in faces
          if face.valid?
            for edgeuse in face.outer_loop.edgeuses
               if not edgeuse.partners[0] ### outermost face
                  faces = faces - [face]
                  loops = face.loops
                  for loop in loops
                     for fac in faces
                        if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                           faces = faces - [fac]
                           fac.erase! if fac.valid?
                           ### fac abutts kept face so it must be erased...
                        end #if fac
                     end #for fac
                  end #for loop
               end #if outermost
            end #for edgeuse
          end #if valid
         end #for face
      }#times
      

      This looks complicated, BUT it ensures you end up with all faces that ought to be faces, it will get confused if you have made two overlapping rectangles the overlap is regarded as a hole even if you expected it to be solid...

      TIG

      1 Reply Last reply Reply Quote 0
      • L Offline
        Lersince1991
        last edited by

        haha absolutely genius!

        Would you be able to just consolodate this code into one script then so I could copy and paste it into the ruby console? Pretty please ๐Ÿ˜„

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

          Sorry... you try. ๐Ÿ˜•
          I do have real [paid] work to do too...
          It's not that hard to take the bits and get a single working tool...
          It'll be good experience ๐Ÿ˜’

          TIG

          1 Reply Last reply Reply Quote 0
          • L Offline
            Lersince1991
            last edited by

            Done
            I think?

            ` ### PURGE UNUSED COMPONENTS
            Sketchup.active_model.definitions.purge_unused

            SETUP LIST OF NAMES

            model=Sketchup.active_model
            defs=model.definitions
            cnames=[]
            defs.each{|d|cnames << d.name}
            cnames.sort!

            f='P:\02 General\Resource Library\People\JPEG'
            cnames.each{|name|
            d=defs[name]
            bb=Gem::Boundingbox.new
            d.entities.each{|e|bb.add(e.bounds)}

            ADD IMAGE TEXTURES

            img=d.entities.add_image(File.join(f, File.basename(f, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
            img.explode
            togos=[]
            d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup::Edge) and e.faces.length<2}
            d.entities.erase_entities(togos)
            d.entities.each{|e|e.reverse! if e.is_a?(Sketchup::Face) && e.normal!=Z_AXIS}

            STAND COMPONENT CONTENTS TO VERTICAL

            tr=Geom::Transformation.rotation(ORIGIN, X_AXIS, -90.degrees)
            d.entities.transform_entities(tr, d.entities.to_a)
            }

            FACE ME

            cnames.each{|name|
            defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
            }

            REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE

            img.explode
            togos=[]
            d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup::Edge) and e.faces.length<2}
            d.entities.erase_entities(togos)

            REMOVE HOLES

            faces=[]
            d.entities.each{|e|faces << e if e.is_a?(Sketchup::Face)}
            (faces.length-1).times{
            for face in faces
            if face.valid?
            for edgeuse in face.outer_loop.edgeuses
            if not edgeuse.partners[0] ### outermost face
            faces = faces - [face]
            loops = face.loops
            for loop in loops
            for fac in faces
            if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
            faces = faces - [fac]
            fac.erase! if fac.valid?
            ### fac abutts kept face so it must be erased...
            end #if fac
            end #for fac
            end #for loop
            end #if outermost
            end #for edgeuse
            end #if valid
            end #for face
            }#times`

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

              Needs testing - but looks reasonably convincing...
              Indent the various parts of the code to make it 'readable'...
              [Get Notepad++ - recommended for code editing etc]
              Put your code inside a module thus:

              module LukeR
                def self.importer()
                  ### add your code here
                end
              end
              

              Usage: in the Ruby Console type LukeR.importer + <enter>

              Change its name[s] as desired...

              Later you can add your own new methods too like LukeR.discombobulator ๐Ÿ˜‰

              TIG

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

                Last couple of points.
                Using jpeg images as textures allows the faces to display received shadows [provided the containing object is set to do so too].
                Using png images means they don't take shadows at all - the advantage is that they can have a transparent background so small 'holes' will be 'see-through' even if the face has no corresponding small hole.

                The other issue is hiding the edges of the faces within the component.
                This easily done by adding a block of code near the end of each definition's processing...
                d.entities.each{|e|e.hidden=true if e.is_a?(Sketchup::Edge)}
                Only the component's faces are visible.
                If View > Hidden Geometry is set ON the edges display as 'dotted' lines

                TIG

                1 Reply Last reply Reply Quote 0
                • L Offline
                  Lersince1991
                  last edited by

                  Managed to use a batch action in illustrator to successfully ungroup/explode all the components so that issue is solved.

                  Just tried saving the file as a .rb in the plugins folder and got and error. I am really not sure what I sould really do? Does the file name matter?

                  
                  module LukeR
                    def self.importer()
                  
                  ### PURGE UNUSED COMPONENTS
                  Sketchup.active_model.definitions.purge_unused
                  
                  ### SETUP LIST OF NAMES
                  model=Sketchup.active_model
                  defs=model.definitions
                  cnames=[]
                  defs.each{|d|cnames << d.name}
                  cnames.sort!
                  
                  f='P;\02 General\Resource Library\People\JPEG'
                  cnames.each{|name|
                  	d=defs[name]
                  	bb=Gem;;Boundingbox.new
                  	d.entities.each{|e|bb.add(e.bounds)}
                  	### ADD IMAGE TEXTURES
                  	img=d.entities.add_image(File.join(f, File.basename(f, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                  	img.explode
                  	togos=[]
                  	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                  	d.entities.erase_entities(togos)
                  	d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                  	### STAND COMPONENT CONTENTS TO VERTICAL
                  	tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, -90.degrees)
                  	d.entities.transform_entities(tr, d.entities.to_a)
                  	}
                  
                  ### FACE ME
                  cnames.each{|name|
                  	defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
                  	}
                  
                  ### REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE
                  img.explode
                  	togos=[]
                  	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                  	d.entities.erase_entities(togos)
                  
                  ### REMOVE HOLES
                  faces=[]
                  d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                  (faces.length-1).times{
                     for face in faces
                      if face.valid?
                        for edgeuse in face.outer_loop.edgeuses
                           if not edgeuse.partners[0] ### outermost face
                              faces = faces - [face]
                              loops = face.loops
                              for loop in loops
                                 for fac in faces
                                    if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                       faces = faces - [fac]
                                       fac.erase! if fac.valid?
                                       ### fac abutts kept face so it must be erased...
                                    end #if fac
                                 end #for fac
                              end #for loop
                           end #if outermost
                        end #for edgeuse
                      end #if valid
                     end #for face
                  }#times
                  
                  end
                  end
                  
                  

                  ERROR

                  
                  LukeR.importer
                  Error; #<NameError; C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;17;in `importer'; uninitialized constant LukeR;;Gem>
                  C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;17
                  C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `each'
                  C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `importer'
                  (eval);0
                  
                  

                  Nearly there now!
                  Thanks again TIG ๐Ÿ˜„

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

                    Typo
                    bb=Gem::Boundingbox.new
                    should be
                    bb=Geom::Boundingbox.new
                    ๐Ÿ˜’

                    The error messages show what's wrong 'Gem' and the line number - here '17'...

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • L Offline
                      Lersince1991
                      last edited by

                      Ahh thank you. Will try again.
                      I looked there and thought it was the double "::" that was the issue ๐Ÿ˜„

                      1 Reply Last reply Reply Quote 0
                      • L Offline
                        Lersince1991
                        last edited by

                        I got the same error:

                        
                        LukeR.importer
                        Error; #<NoMethodError; undefined method `new' for ;Boundingbox;Symbol>
                        C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;17
                        C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `each'
                        C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `importer'
                        (eval);17
                        
                        
                        
                        module LukeR
                          def self.importer()
                        
                        ### PURGE UNUSED COMPONENTS
                        Sketchup.active_model.definitions.purge_unused
                        
                        ### SETUP LIST OF NAMES
                        model=Sketchup.active_model
                        defs=model.definitions
                        cnames=[]
                        defs.each{|d|cnames << d.name}
                        cnames.sort!
                        
                        f='P;\02 General\Resource Library\People\JPEG'
                        cnames.each{|name|
                         d=defs[name]
                         bb=Geom;;Boundingbox.new
                         d.entities.each{|e|bb.add(e.bounds)}
                        
                         ### ADD IMAGE TEXTURES
                         img=d.entities.add_image(File.join(f, File.basename(f, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                         img.explode
                         togos=[]
                         d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                         d.entities.erase_entities(togos)
                         d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                        
                         ### STAND COMPONENT CONTENTS TO VERTICAL
                         tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, -90.degrees)
                         d.entities.transform_entities(tr, d.entities.to_a)
                         }
                        
                        ### FACE ME
                        cnames.each{|name|
                        	defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
                        	}
                        
                        ### REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE
                        img.explode
                        	togos=[]
                        	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                        	d.entities.erase_entities(togos)
                        
                        ### REMOVE HOLES
                        faces=[]
                        d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                        (faces.length-1).times{
                           for face in faces
                            if face.valid?
                              for edgeuse in face.outer_loop.edgeuses
                                 if not edgeuse.partners[0] ### outermost face
                                    faces = faces - [face]
                                    loops = face.loops
                                    for loop in loops
                                       for fac in faces
                                          if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                             faces = faces - [fac]
                                             fac.erase! if fac.valid?
                                             ### fac abutts kept face so it must be erased...
                                          end #if fac
                                       end #for fac
                                    end #for loop
                                 end #if outermost
                              end #for edgeuse
                            end #if valid
                           end #for face
                        }#times
                        
                        end
                        end
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • TIGT Offline
                          TIG Moderator
                          last edited by

                          If you read it although it's the same line of code it is ANOTHER error!
                          Another daft typo!
                          It should actually be Bounding**B**ox
                          NOT
                          Boundingbox
                          So the line should be
                          bb=Geom::BoundingBox.new

                          I didn't spot that either... ๐Ÿ˜’

                          Incidentally the double :: is used to show the Module::Class
                          A . shows the method [def] thus:
                          Module::Class.method()
                          You can also have a Module.method()
                          Sketchup and its related modules, like Geom, have both classes/methods and methods...

                          The 'o' was simply missed out of the 'Geom' module's name, causing the error...
                          When testing a script the line references in errors are very useful [Notepad++ will display line numbers under one of it's Settings...]
                          A , instead of a . [or vice versa], a missing ( or } etc, a simple spelling error etc, can mess everything up big time... But if you know the line you can usually find the error easily...

                          TIG

                          1 Reply Last reply Reply Quote 0
                          • L Offline
                            Lersince1991
                            last edited by

                            Ah ok Thankyou, I didn't realise it was case sensitive on commands! Will try again ๐Ÿ˜„

                            1 Reply Last reply Reply Quote 0
                            • L Offline
                              Lersince1991
                              last edited by

                              Can't work this one out:

                              
                              LukeR.importer
                              C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;21; warning; Could not create Image for P;/02 General/Resource Library/People/JPEG/JPEG.jpg
                              
                              Error; #<NoMethodError; undefined method `explode' for nil;NilClass>
                              C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;22
                              C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `each'
                              C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;15;in `importer'
                              (eval);0
                              
                              
                              
                              module LukeR
                                def self.importer()
                              
                              ### PURGE UNUSED COMPONENTS
                              Sketchup.active_model.definitions.purge_unused
                              
                              ### SETUP LIST OF NAMES
                              model=Sketchup.active_model
                              defs=model.definitions
                              cnames=[]
                              defs.each{|d|cnames << d.name}
                              cnames.sort!
                              
                              f='P;\02 General\Resource Library\People\JPEG'
                              cnames.each{|name|
                               d=defs[name]
                               bb=Geom;;BoundingBox.new
                               d.entities.each{|e|bb.add(e.bounds)}
                              
                               ### ADD IMAGE TEXTURES
                               img=d.entities.add_image(File.join(f, File.basename(f, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                               img.explode
                               togos=[]
                               d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                               d.entities.erase_entities(togos)
                               d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                              
                               ### STAND COMPONENT CONTENTS TO VERTICAL
                               tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, -90.degrees)
                               d.entities.transform_entities(tr, d.entities.to_a)
                               }
                              
                              ### FACE ME
                              cnames.each{|name|
                              	defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
                              	}
                              
                              ### REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE
                              img.explode
                              	togos=[]
                              	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                              	d.entities.erase_entities(togos)
                              
                              ### REMOVE HOLES
                              faces=[]
                              d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                              (faces.length-1).times{
                                 for face in faces
                                  if face.valid?
                                    for edgeuse in face.outer_loop.edgeuses
                                       if not edgeuse.partners[0] ### outermost face
                                          faces = faces - [face]
                                          loops = face.loops
                                          for loop in loops
                                             for fac in faces
                                                if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                                   faces = faces - [fac]
                                                   fac.erase! if fac.valid?
                                                   ### fac abutts kept face so it must be erased...
                                                end #if fac
                                             end #for fac
                                          end #for loop
                                       end #if outermost
                                    end #for edgeuse
                                  end #if valid
                                 end #for face
                              }#times
                              
                              end
                              end
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • TIGT Offline
                                TIG Moderator
                                last edited by

                                It's because it's another typo !
                                Line#21 should read
                                img=d.entities.add_image(File.join(f, File.basename(**name**, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                                ๐Ÿ˜• sorry...

                                TIG

                                1 Reply Last reply Reply Quote 0
                                • L Offline
                                  Lersince1991
                                  last edited by

                                  Got some more issues TIG ๐Ÿ˜„
                                  Its getting there!

                                  1. It was rotating them the wrong angle so I change "-90" to "90" - so this is solved.

                                  2. The result is just one component left - dont know where everything else went ๐Ÿ˜ฎ

                                  3. For the one component that is left the face me doesnt seem to be working

                                  4. I don't think it likes the img.explode on line 39

                                  
                                  LukeR.importer
                                  Error; #<NameError; undefined local variable or method `img' for LukeR;Module>
                                  C;/Program Files/Google/Google SketchUp 8/Plugins/component_import.rb;39
                                  (eval);0
                                  
                                  
                                  
                                  module LukeR
                                    def self.importer()
                                  
                                  ### PURGE UNUSED COMPONENTS
                                  Sketchup.active_model.definitions.purge_unused
                                  
                                  ### SETUP LIST OF NAMES
                                  model=Sketchup.active_model
                                  defs=model.definitions
                                  cnames=[]
                                  defs.each{|d|cnames << d.name}
                                  cnames.sort!
                                  
                                  f='P;\02 General\Resource Library\People\JPEG'
                                  cnames.each{|name|
                                   d=defs[name]
                                   bb=Geom;;BoundingBox.new
                                   d.entities.each{|e|bb.add(e.bounds)}
                                  
                                  ### ADD IMAGE TEXTURES
                                   img=d.entities.add_image(File.join(f, File.basename(name, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                                   img.explode
                                   togos=[]
                                   d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                                   d.entities.erase_entities(togos)
                                   d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                                  
                                  ### STAND COMPONENT CONTENTS TO VERTICAL
                                   tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, 90.degrees)
                                   d.entities.transform_entities(tr, d.entities.to_a)
                                   }
                                  
                                  ### FACE ME
                                   cnames.each{|name|
                                  	defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
                                  	}
                                  
                                  ### REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE
                                   img.explode
                                  	togos=[]
                                  	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                                  	d.entities.erase_entities(togos)
                                  
                                  ### REMOVE HOLES
                                  faces=[]
                                  d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                                  (faces.length-1).times{
                                     for face in faces
                                      if face.valid?
                                        for edgeuse in face.outer_loop.edgeuses
                                           if not edgeuse.partners[0] ### outermost face
                                              faces = faces - [face]
                                              loops = face.loops
                                              for loop in loops
                                                 for fac in faces
                                                    if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                                       faces = faces - [fac]
                                                       fac.erase! if fac.valid?
                                                       ### fac abutts kept face so it must be erased...
                                                    end #if fac
                                                 end #for fac
                                              end #for loop
                                           end #if outermost
                                        end #for edgeuse
                                      end #if valid
                                     end #for face
                                  }#times
                                  
                                  end
                                  end
                                  
                                  

                                  Progress.jpg

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

                                    I would have thought -90.degrees was the correct angle... but if +90 works use it ๐Ÿ˜‰

                                    I'm not sure how you are adding the initial components - importing as dxf/dwg outline ?
                                    Before you add the images to their matching components made from the CAD files... do you have one of every type of component in the model ?? Remember this code is just to add an image to each preexisting component with the same name...

                                    You have a spurious img.explode line of code at line#39 remove it: it must have got copied down from where it's used earlier... and I'd not noticed it before...

                                    There's currently no code to make each component a 'faceme' type...
                                    If you want that, then in the block {} that's processing the definition 'd' add a line
                                    d.behavior.always_face_camera=true
                                    ๐Ÿค“

                                    TIG

                                    1 Reply Last reply Reply Quote 0
                                    • L Offline
                                      Lersince1991
                                      last edited by

                                      @unknownuser said:

                                      I'm not sure how you are adding the initial components - importing as dxf/dwg outline ?
                                      Before you add the images to their matching components made from the CAD files... do you have one of every type of component in the model ?? Remember this code is just to add an image to each preexisting component with the same name...

                                      The .dwg files are imported into sketchup pro. But I used a batch import command I found elsewhere and it seems to work well. It will import every .dwg file in a selected folder, it imports all of these files into the current model - I used a new file so theres nothing else in it (apart from the default 2d woman!, but she got deleted). Each .dwg file is made into a component with the same name as the .dwg file. - so this should all match up with the file names of the jpegs in P:\02 General\Resource Library\People\JPEG
                                      I have also attached an image that should help show what the sketchup model is like.
                                      These components are all just outlines with no faces. just lines.

                                      example:
                                      0001 vyonyx_couple_001.jpg
                                      goes with
                                      0001 vyonyx_couple_001.dwg

                                      Hope this helps.

                                      @unknownuser said:

                                      You have a spurious img.explode line of code at line#39 remove it: it must have got copied down from where it's used earlier... and I'd not noticed it before...

                                      Ok will delete it.

                                      @unknownuser said:

                                      There's currently no code to make each component a 'faceme' type...
                                      If you want that, then in the block {} that's processing the definition 'd' add a line
                                      d.behavior.always_face_camera=true
                                      ๐Ÿค“

                                      Sorry I dont understand this ๐Ÿ˜„
                                      Shall I copy d.behavior.always_face_camera=true into the script? where does it go?

                                      If it helps I have also found that it is creating a file in "P:\02 General\Resource Library\People\JPEG" called "JPEG.skp" - this is empty though.

                                      If something is trying to save the components as .skp files, dont worry about this as long as they are in the same model I can just save all the components in the model via the components window.

                                      Heres the current code:

                                      
                                      module LukeR
                                        def self.importer()
                                      
                                      ### PURGE UNUSED COMPONENTS
                                      Sketchup.active_model.definitions.purge_unused
                                      
                                      ### SETUP LIST OF NAMES
                                      model=Sketchup.active_model
                                      defs=model.definitions
                                      cnames=[]
                                      defs.each{|d|cnames << d.name}
                                      cnames.sort!
                                      
                                      f='P;\02 General\Resource Library\People\JPEG'
                                      cnames.each{|name|
                                       d=defs[name]
                                       bb=Geom;;BoundingBox.new
                                       d.entities.each{|e|bb.add(e.bounds)}
                                      
                                      ### ADD IMAGE TEXTURES
                                       img=d.entities.add_image(File.join(f, File.basename(name, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                                       img.explode
                                       togos=[]
                                       d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                                       d.entities.erase_entities(togos)
                                       d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                                      
                                      ### STAND COMPONENT CONTENTS TO VERTICAL
                                       tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, 90.degrees)
                                       d.entities.transform_entities(tr, d.entities.to_a)
                                       }
                                      
                                      ### FACE ME
                                       cnames.each{|name|
                                      	defs[name].save_as(File.join(f, File.basename(f, ".*")+".skp"))
                                      	}
                                      
                                      ### REMOVE OUTER EDGE LEFT FROM EXPLODED IMAGE
                                      	togos=[]
                                      	d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                                      	d.entities.erase_entities(togos)
                                      
                                      ### REMOVE HOLES
                                      faces=[]
                                      d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                                      (faces.length-1).times{
                                         for face in faces
                                          if face.valid?
                                            for edgeuse in face.outer_loop.edgeuses
                                               if not edgeuse.partners[0] ### outermost face
                                                  faces = faces - [face]
                                                  loops = face.loops
                                                  for loop in loops
                                                     for fac in faces
                                                        if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                                           faces = faces - [fac]
                                                           fac.erase! if fac.valid?
                                                           ### fac abutts kept face so it must be erased...
                                                        end #if fac
                                                     end #for fac
                                                  end #for loop
                                               end #if outermost
                                            end #for edgeuse
                                          end #if valid
                                         end #for face
                                      }#times
                                      
                                      end
                                      end
                                      
                                      

                                      alldwgfiles.jpg

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

                                        You have got some of your coding steps in a tangle...
                                        I'll fix it and post a working [hopefully] version soonest...

                                        Incidentally, you don't need to open SketchUp with 'the 2d-woman' etc.
                                        You can delete her, Model Info > Statistics > Purge Unused...
                                        Then set other values exactly as desired - Units, number of dp's, no-snapping, no-unit-suffix, Text font/size, Dimension defaults etc.
                                        Then under File > Save as Template. Under Preferences set that as your default template, thereafter every time you open a new SKP it will be empty and have the exact settings you prefer...

                                        TIG

                                        1 Reply Last reply Reply Quote 0
                                        • L Offline
                                          Lersince1991
                                          last edited by

                                          Ok Thank you!!!!!!!!

                                          ~~I have used sketchup for 5 years and never bothered to change the default style! ๐Ÿ˜ฎ
                                          Thanks ~~
                                          CHANGED!

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

                                            Here it is:
                                            I can't try it because I have no paired dwg/image sets...

                                            ### Usage; Ruby Console type LukeR.importer
                                            require('sketchup.rb')
                                            module LukeR
                                              def self.importer()
                                              
                                            	model=Sketchup.active_model
                                            	defs=model.definitions
                                            	
                                            	### PURGE UNUSED COMPONENTS [NOT NEEDED IF YOU DO IT MANUALLY FIRST]
                                            	#defs.purge_unused
                                            
                                            	### SETUP LIST OF NAMES etc
                                            	cnames=[]
                                            	defs.each{|d|cnames << d.name if File.extname(d.name).downcase == '.dwg'}
                                            	cnames.sort!
                                            
                                            	fj='P;\02 General\Resource Library\People\JPEG' ### for images
                                            	ff='P;\02 General\Resource Library\People' ### for saved SKPs
                                            	
                                            	cnames.each{|name|
                                            		
                                            		puts name
                                            		
                                            		### SET UP defn etc
                                            		d=defs[name]
                                            		bb=Geom;;BoundingBox.new
                                            		d.entities.each{|e|bb.add(e.bounds)}
                                            
                                            		### ADD IMAGE TEXTURES
                                            		img=d.entities.add_image(File.join(fj, File.basename(name, ".*")+".jpg"), [-1.mm,-1.mm,0], bb.width+2.mm, bb.height+2.mm)
                                            		img.explode
                                            		
                                            		### REMOVE img's UNWANTED PERIMETER
                                            		togos=[]
                                            		d.entities.each{|e|togos << e if e.valid? and e.is_a?(Sketchup;;Edge) and e.faces.length<2}
                                            		d.entities.erase_entities(togos)
                                            		
                                            		### ENSURE FACES ARE 'UP'
                                            		d.entities.each{|e|e.reverse! if e.is_a?(Sketchup;;Face) && e.normal!=Z_AXIS}
                                            
                                            		### STAND COMPONENT'S CONTENTS TO BE VERTICAL
                                            		tr=Geom;;Transformation.rotation(ORIGIN, X_AXIS, 90.degrees)
                                            		d.entities.transform_entities(tr, d.entities.to_a)
                                            
                                            		### MAKE IT A FACE-ME COMPONENT
                                            		d.behavior.always_face_camera=true
                                            
                                            		### REMOVE ANY 'HOLES'
                                            		faces=[]
                                            		d.entities.each{|e|faces << e if e.is_a?(Sketchup;;Face)}
                                            		(faces.length-1).times{
                                            		   for face in faces
                                            			if face.valid?
                                            			  for edgeuse in face.outer_loop.edgeuses
                                            				 if not edgeuse.partners[0] ### outermost face
                                            					faces = faces - [face]
                                            					loops = face.loops
                                            					for loop in loops
                                            					   for fac in faces
                                            						  if fac.valid? and (fac.outer_loop.edges - loop.edges) == []
                                            							 faces = faces - [fac]
                                            							 fac.erase! if fac.valid?
                                            							 ### fac abutts kept face so it must be erased...
                                            						  end #if fac
                                            					   end #for fac
                                            					end #for loop
                                            				 end #if outermost
                                            			  end #for edgeuse
                                            			end #if valid
                                            		   end #for face
                                            		}#times
                                            		
                                            		### FINALLY... SAVE IT INTO 'PEOPLE' AS A' SKP'
                                            		d.save_as(File.join(ff, File.basename(name, ".*")+".skp"))
                                            		
                                            	}#names
                                            	
                                            	end#def
                                            end#module
                                            
                                            

                                            TIG

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

                                            Advertisement