sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    πŸ«› Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    Best Strategy for Clean Geometry

    Scheduled Pinned Locked Moved Developers' Forum
    7 Posts 3 Posters 520 Views 3 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

      I have a box method that Rectangles from one corner to a second corner, then PushPulls the rectangle to create a box. It works well if it doesn't mingle with other geometry. I want a nice, clean box not touching other geometry so I can group or component it, then let it go play with the other geometry. So far I've thought of

      a) Push the current model onto a stack. File/New. Draw box. Save. Pop model. Import. (Can you File/Import in Ruby?)

      b) Same as a) but use fresh layer, not model. Group/Component before moving to existing layer.

      c) Code my own PushPull so I can keep references to rectangle's face and edges and all eight new edges and 5 new faces.

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

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

        Why not group it first ?

        
        group=model.active.entities.add_group()
        group.entities.add_edges(...)
        ### etc
        ### Why wait till afterwards to group it ?
        ### You can always explode at at the end !
        
        

        This also lets you find faces, edges etc more easily...

        TIG

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

          @tig said:

          Why not group it first ?

          
          > group=model.active.entities.add_group()
          > group.entities.add_edges(...)
          > ...
          > 
          

          This also lets you find faces, edges etc more easily...

          The implication is abandoning face.pushpull in favor of writing my own pushpull?

          Be careful how you advise me, TIG. I have enough respect for you to actually take your advice.

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

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

            Separating your new geometry inside a new group's entities [or component definitions entities] and then pushpulling it [or whatever you want to do to it] inside the group quite safely, and away from other geometry clashes is a good [English understatement for 'the correct'] way to make new stuff like this.

            When you are done then you can explode the group and the geometry can intermingle with other stuff, if desired...

            Personally I prefer to leave my new geometry grouped for the user to decide on the explode - see ExtrudeEdgesByRails et al... ❓

            TIG

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

              @tig said:

              Personally I prefer to leave my new geometry grouped for the user to decide on the explode

              
              # /r/t.rb
              
              # Work in progress. Do not put into service. 
              # Finished version will be in my tutorial, Chapter 14.
              
              def pp_add( pt, vec )
                  return [ pt[0]+vec[0], pt[1]+vec[1], pt[2]+vec[2] ]
              end 
              
              def pp( face, distance )
              
                  # the full vector is the face's normal times the pushpull distance
                  norm = face.normal.to_a()
                  vec = [ norm[0]*distance, norm[1]*distance, norm[2]*distance ]
                  
                  # create a new set of vertices 'vec' away from the original
                  vs = face.vertices()
                  new_vs = []
                  
                  for i in 0..vs.length-1
                      new_vs[i] = pp_add( vs[i].position, vec )
                  end
                  
                  # TIG's idea;
                  ents1 = Sketchup.active_model.entities
                  grp = ents1.add_group()
                  inst = grp.to_component()
                  defi = inst.definition()
                  ents2 = defi.entities()
                  a = []
                  for v in face.vertices 
                      a.push( v.position )
                  end
                  old_face = ents2.add_face( a )
                  ents1.erase_entities( face )
              
                  # add a face with the new vertices
                  new_face = ents2.add_face( new_vs )
                  
                  # draw faces around the outside
                  for i in 0..(vs.length-1)
                      f = ents2.add_face( 
                          new_vs[ i%vs.length ],
                          new_vs[ (i+1)%vs.length ],
                          vs[ (i+1)%vs.length ], 
                          vs[ i % vs.length ]
                      )
                      f.reverse! if distance < 0
                  end # loop over vertices
                  
                  # flip a face so they all face outside
                  new_face.reverse! if distance < 0
                  old_face.reverse! if distance > 0
                  
                  return inst
                  
              end # of pp()
              
              
              

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

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

                I'm not understanding. This draws a box within the context of a Group.

                
                pts = [ [0, 0], [0, 10], [10, 10], [10, 0] ]
                group = Sketchup.active_model.entities.add_group()
                face = group.entities.add_face(pts)
                face.pushpull(10)
                
                

                Hi

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

                  Martin is/was making it far too complex... it even converted the group to a pointless component ?
                  KISS... πŸ˜‰
                  Jim's example is the better way to do it... Explode the group at the end if desired...

                  TIG

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

                  Advertisement