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

    Triangulate triangles ?

    Scheduled Pinned Locked Moved Plugins
    41 Posts 8 Posters 7.9k Views 8 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.
    • pilouP Offline
      pilou
      last edited by

      you make big progress and be near the success! β˜€

      @unknownuser said:

      Not as easy as using the center of face.bounds.center is it. πŸ˜•

      If I find the best way to do it with code I'll let you know.

      Why not take the image of the first post as "pseudo code" ?

      • Calculate the point x,y,z crossing of 2 lines from 2 vertices to their middle opposite edge
        (point can be also the calculate center of gravity of 3 points! πŸ˜‰
      • draw 3 lines from this point to the 3 vertices

      Tig has finalized his "triangulate" method!
      Medians stay in race! πŸ˜„

      Triangulate all faces by Tig (function was repeated for a sort of fractal system - only 3 triangles at start)
      nomedian.jpg

      Frenchy Pilou
      Is beautiful that please without concept!
      My Little site :)

      1 Reply Last reply Reply Quote 0
      • renderizaR Offline
        renderiza
        last edited by

        Thanks guys! Will definitely study your suggestions. πŸ‘

        [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

        1 Reply Last reply Reply Quote 0
        • jolranJ Offline
          jolran
          last edited by

          I Think you could use the circumcentre as well, for skewed triangles.. Maybe that's what Pilou is trying to Point out.

          Here's some code I'm using for that. You might have to rewrite it to fit your needs..
          I just ripped it out from a plugin I'm working on..

          # Arguments need 3 point3D objects from triangle.
          def points3_circumC(p1,p2,p3) #(Only 2 lines is actually needed for calculation)
          	
          	#Init Vectors for calculation.
          	vec1  = p1.vector_to(p2) 
          	vec2  = p1.vector_to(p3) 
          	fakeZ = vec1.cross(vec2) #cross Plane...
          	#midpoints
          	mp1 = p1.offset(vec1, vec1.length/2)
          	mp2 = p1.offset(vec2, vec2.length/2)
          	#cross vectors..
          	vec1 = vec1.cross(fakeZ)
          	vec2 = vec2.cross(fakeZ)
          	#lines
          	line1 = [mp1, vec1]
          	line2 = [mp2, vec2]
          	return c = Geom.intersect_line_line(line1, line2) #point3D
          end
          

          edit: Ehh.. looks like TIG already bashed out a working plugin for this.

          1 Reply Last reply Reply Quote 0
          • renderizaR Offline
            renderiza
            last edited by

            It works! 😍

            http://s9.postimg.org/3oou2krkf/yay.jpg

            Here is the code...

            
            model = Sketchup.active_model
            ents = model.active_entities
            sel = model.selection
            faces = sel.grep(Sketchup;;Face)
            
            model.start_operation('csplit')
              faces.each do |face|
                v = face.vertices
            
                cx = v[0].position.x + v[1].position.x + v[2].position.x
                cy = v[0].position.y + v[1].position.y + v[2].position.y   
                cz = v[0].position.z + v[1].position.z + v[2].position.z 
            
                px = cx / 3
                py = cy / 3 
                pz = cz / 3 
            
                v.each do |vertex|
                  p1 = [px, py, pz]
                  p2 = vertex
                  line = ents.add_line p1,p2
                end
              end
              sel.clear
            model.commit_operation
            

            Note: At the moment the above code works with triangles only.

            For squares we can use the code bellow...

            
            model = Sketchup.active_model
            ents = model.active_entities
            sel = model.selection
            faces = sel.grep(Sketchup;;Face)
            
            model.start_operation('csplit')
              faces.each do |face|
                v = face.vertices
            
                cx = v[0].position.x + v[1].position.x + v[2].position.x + v[3].position.x
                cy = v[0].position.y + v[1].position.y + v[2].position.y + v[3].position.y  
                cz = v[0].position.z + v[1].position.z + v[2].position.z + v[3].position.z 
            
                px = cx / 4
                py = cy / 4 
                pz = cz / 4 
            
                v.each do |vertex|
                  p1 = [px, py, pz]
                  p2 = vertex
                  line = ents.add_line p1,p2
                end
              end
              sel.clear
            model.commit_operation
            

            [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

            1 Reply Last reply Reply Quote 0
            • renderizaR Offline
              renderiza
              last edited by

              The following code will work on all geometry types like triangle, square, ect...

              model = Sketchup.active_model
              ents = model.active_entities
              sel = model.selection
              faces = sel.grep(Sketchup;;Face)
              @addx = []
              @addy = []
              @addz = []
              
              model.start_operation('csplit')
                faces.each do |face|
                  @addx.clear
                  @addy.clear
                  @addz.clear
              
                  v = face.vertices
                  num = v.length
              
                  v.each_with_index {|vert,i|
                    @addx << " + v[#{i}].position.x"
                    @addy << " + v[#{i}].position.y"
                    @addz << " + v[#{i}].position.z"
                  }
              
                  ax = @addx * ","
                  sumx = ax.delete ","
              
                  ay = @addy * ","
                  sumy = ay.delete ","
              
                  az = @addz * ","
                  sumz = az.delete ","
              
                  cx = eval("#{sumx}")
                  cy = eval("#{sumy}")
                  cz = eval("#{sumz}")
              
                  px = cx / num
                  py = cy / num
                  pz = cz / num
              
                  v.each do |vertex|
                    p1 = [px, py, pz]
                    p2 = vertex
                    line = ents.add_line p1,p2
                  end
              
                end
                sel.clear
              model.commit_operation
              
              

              Note: To test code above you can copy & paste it to one of this ruby consoles...
              http://renderizastudio.blogspot.com/2013/06/top-ruby-consoles-for-sketchup.html

              [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

              1 Reply Last reply Reply Quote 0
              • renderizaR Offline
                renderiza
                last edited by

                With the help of Dan Rathbun the code was improved! Because string manipulation in Ruby can be slow he figured a way to do it without strings.

                Here is the new code...

                  def csplit()
                    #
                    model = Sketchup.active_model
                    ents = model.active_entities
                    sel = model.selection
                    faces = sel.grep(Sketchup;;Face)
                    #
                    model.start_operation('csplit')
                      #
                      faces.each do |face|
                        #
                        sum = Geom;;Point3d.new(0,0,0)
                        #
                        verts = face.vertices
                        n = verts.size.to_f
                        # use API Geom;;Point3d.+ instance method;
                        verts.each {|v| sum += ORIGIN.vector_to(v.position) }
                        #
                        avg = Geom;;Point3d.new( sum.x/n, sum.y/n, sum.z/n )
                        #
                        verts.each {|v| ents.add_line( avg, v ) }
                        #
                      end # each face
                      #
                    model.commit_operation
                    #
                  rescue => e
                    #
                    puts "Error <#{e.class.name}; #{e.message} >"
                    puts e.backtrace if $VERBOSE
                    #
                    model.abort_operation
                    #
                  else # when no errors;
                    #
                    sel.clear
                    #
                  end # csplit()
                
                  csplit()
                
                

                If you have the time make sure to thank Dan...Cheers!

                [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                1 Reply Last reply Reply Quote 0
                • pilouP Offline
                  pilou
                  last edited by

                  Seems very cool! πŸ‘
                  Waiting the definitive little plugin more easy than a copy past inside the ruby console! πŸ˜‰

                  And you will your name in the index Plugin automatic list by Jim! 😎

                  Frenchy Pilou
                  Is beautiful that please without concept!
                  My Little site :)

                  1 Reply Last reply Reply Quote 0
                  • renderizaR Offline
                    renderiza
                    last edited by

                    Ok I will start working on that ASAP!!!

                    By the way you like the name "FaceSplit"?

                    [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                    1 Reply Last reply Reply Quote 0
                    • pilouP Offline
                      pilou
                      last edited by

                      "Bermuda's Triangles' Gravity" will be also funny! πŸ˜‰

                      https://encrypted-tbn0.gstatic.com/images?q=tbn;ANd9GcQVDrKcLEC7T4VaspbQcQc_3tRmnEFfnCvFR7lAKksR_Dcd6PSkIQ

                      Frenchy Pilou
                      Is beautiful that please without concept!
                      My Little site :)

                      1 Reply Last reply Reply Quote 0
                      • renderizaR Offline
                        renderiza
                        last edited by

                        I am glad you liked "FaceSplit"! 🀣

                        [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                        1 Reply Last reply Reply Quote 0
                        • renderizaR Offline
                          renderiza
                          last edited by

                          Here is the logo...

                          Big:

                          http://s8.postimg.org/f4mis2579/Face_Split.png

                          Small:

                          http://s14.postimg.org/4n72xxfrh/Face_Split54.png

                          [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                          1 Reply Last reply Reply Quote 0
                          • renderizaR Offline
                            renderiza
                            last edited by

                            Here is the plugin main page... http://sketchucation.com/forums/viewtopic.php?p=495689#p495689

                            I used FaceSplit as name but if you guys come up with better name that is short & catchy then it will be easy to change.'

                            Cheers! πŸ‘

                            [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                            1 Reply Last reply Reply Quote 0
                            • pilouP Offline
                              pilou
                              last edited by

                              Bravo!
                              Seems fabulous after this studious working weekend! 😎

                              Frenchy Pilou
                              Is beautiful that please without concept!
                              My Little site :)

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

                              Advertisement