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

[Plugin] triangulateFaces.rb v1.2 20101120

Scheduled Pinned Locked Moved Plugins
97 Posts 21 Posters 109.1k Views 21 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.
  • T Offline
    TIG Moderator
    last edited by 30 Nov 2009, 14:41

    def triangulateFace(face)
    ### if already a triangle leave alone...
     if face.vertices[3]
      mesh=face.mesh(3)
      ents=face.parent.entities
      mat=face.material
      bac=face.back_material
      ###
      p0=face.vertices[0].position
      p1=face.vertices[1].position
      p2=face.vertices[2].position
      p3=face.vertices[3].position
      ### get uvs
      tw=Sketchup.create_texture_writer
      uv_helperF=face.get_UVHelper(true,false,tw)
      uv_helperB=face.get_UVHelper(false,true,tw)
      uf0=uv_helperF.get_front_UVQ(p0)
      uf1=uv_helperF.get_front_UVQ(p1)
      uf2=uv_helperF.get_front_UVQ(p2)
      uf3=uv_helperF.get_front_UVQ(p3)
      ub0=uv_helperB.get_back_UVQ(p0)
      ub1=uv_helperB.get_back_UVQ(p1)
      ub2=uv_helperB.get_back_UVQ(p2)
      ub3=uv_helperB.get_back_UVQ(p3)
      ###
      grp=ents.add_group
      grp.entities.add_faces_from_mesh(mesh)
      grp.entities.each{|e|
        if e.class==Sketchup;;Edge
          e.smooth=false
          e.soft=false     
        elsif e.class==Sketchup;;Face
          if mat
            e.position_material(mat,[p0,uf0, p1,uf1, p2,uf2, p3,uf3], true)
          end#if
          if bac
            e.position_material(bac,[p0,ub0, p1,ub1, p2,ub2, p3,ub3], false)
          end#if
        end#if
      }
      face.erase!
      grp.explode
     end#if
    end#def
    

    Seems to me that this should work... but it doesn't - Thomthom, any ideas ๐Ÿ˜•

    TIG

    1 Reply Last reply Reply Quote 0
    • T Offline
      thomthom
      last edited by 3 Dec 2009, 22:12

      
      def triangulateFace(face)
      ### if already a triangle leave alone...
      if face.vertices[3]
        mesh=face.mesh(3)
        ents=face.parent.entities
        mat=face.material
        bac=face.back_material
        ###
      	# (TT)
      	# Instead sampling vertices we sample points of the face's plane.
      	# This is because we need four points, and some times a face only has tree vertices.
      	# And we also get the wrong result if any of the first four vertices are co-linear.
      	samples = []
      	samples << face.vertices[0].position			 # 0,0 | Origin
      	samples << samples[0].offset(face.normal.axes.x) # 1,0 | Offset Origin in X
      	samples << samples[0].offset(face.normal.axes.y) # 0,1 | Offset Origin in Y
      	samples << samples[1].offset(face.normal.axes.y) # 1,1 | Offset X in Y
        ### get uvs
        tw=Sketchup.create_texture_writer
      	# (TT)
      	uv_helper=face.get_UVHelper(true,true,tw) # (TT) Only need one UV Helper
      	xyz = []
      	uv_f = []
      	uv_b = []
      	samples.each { |position|
      		# XYZ 3D coordinates
      		xyz << position
      		# UV 2D coordinates
      		# Front
      		uvq = uv_helper.get_front_UVQ(position)
      		uv_f << flattenUVQ(uvq)
      		# Back
      		uvq = uv_helper.get_back_UVQ(position)
      		uv_b << flattenUVQ(uvq)
      	}
        ###
        grp=ents.add_group
        grp.entities.fill_from_mesh(mesh, true, 0) # (TT) Adds the mesh without soft/smooth edges. (and faster)
        grp.entities.each{|e|
          next unless e.class==Sketchup;;Face
            if mat
      		# (TT)
      		# Position texture.
      		pts = []
      		(0..3).each { |i|
      			pts << xyz[i]
      			pts << uv_f[i]
      		}
              e.position_material(mat,pts, true)
            end#if
            if bac
      		# (TT)
      		# Position texture.
      		pts = []
      		(0..3).each { |i|
      			pts << xyz[i]
      			pts << uv_b[i]
      		}
              e.position_material(bac,pts, false)
            end#if
        }
        face.erase!
        grp.explode
      end#if
      end#def
      # (TT)
      # Get UV coordinates from UVQ matrix.
      def flattenUVQ(uvq)
      	return Geom;;Point3d.new(uvq.x / uvq.z, uvq.y / uvq.z, 1.0)
      end
      
      

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

      1 Reply Last reply Reply Quote 0
      • T Offline
        TIG Moderator
        last edited by 3 Dec 2009, 22:28

        Thanks to CPhillips's inciteful ideas I have now made a 'joint' script called 'triangulateFaces.rb' which is attached. It uses CPhillips's triangulateFace(face) code [with a slight TIG addition for back_materials] and the TIG Plugin triangulateFaces(face_array)...
        Originally 2009 (c) CPhillips* then (c) TIG** THEN (c) ThomThom ***
        Script: triangulateFaces.rb
        Code Usage: triangulateFace(face)*
        Result: it triangulates a face... all Texture UVs are kept.
        Plugin Usage: triangulateFaces(faces_array)**
        Result: it triangulates faces in a selection...
        v1.0
        First Release: Def Code 'mesh' idea by CPhillips*,
        retained back_materials added by TIG [failed] ###,
        Plugin parts by TIG**. 20090729
        v1.1
        Rewritten entirely by TIG... THEN completely corrected by Thomthom (TT)!***
        It now retains all Texture mapping successfully. 20091203
        v1.2
        Triangulated faces with 4 sides glitch fixed using intersection.
        Get the latest version from here http://sketchucation.com/pluginstore?pln=triangulateFaces

        TIG

        1 Reply Last reply Reply Quote 0
        • T Offline
          TIG Moderator
          last edited by 3 Dec 2009, 22:32

          Here's v1.1 http://forums.sketchucation.com/viewtopic.php?p=175613#p175613
          โ˜€
          Thanks to Thomtom's knowledge of uvs mapping etc it now successfully triangulates any face [even with holes like Swiss Cheese] and keeps the front AND back uv texture mapping as it was ! Thanks!

          TIG

          1 Reply Last reply Reply Quote 0
          • GaieusG Offline
            Gaieus
            last edited by 4 Dec 2009, 00:31

            Hi TIG,

            Would it be possible for the plugin to triangulate faces with a more "even" or "regular" triangles? After this topic, I thought maybe pre-triangulating the face on the ramp would spare some extra hand-work but it seems that the plugin triangulates the faces just exactly the same way native SU does when autofolding.


            TriangulateFaces.jpg


            TriangulateFaces.skp

            Gai...

            1 Reply Last reply Reply Quote 0
            • T Offline
              TIG Moderator
              last edited by 4 Dec 2009, 11:24

              @gaieus said:

              Hi TIG,
              Would it be possible for the plugin to triangulate faces with a more "even" or "regular" triangles? After this topic, I thought maybe pre-triangulating the face on the ramp would spare some extra hand-work but it seems that the plugin triangulates the faces just exactly the same way native SU does when autofolding.

              TriangulateFaces uses the built-in SUp mesh making methods, which presumably match the auto-fold ones, hence the similarity.
              You might have noticed that my ExtendEdgesByRails script does produce a neat set of faces as that can't use the mesh methods directly but has to make up its own...
              Using EEbyRails is a MUCH simpler way of making a curved ramp - I've attached an example...EEbyRailsSimpleRamp1.pngEEbyRailsSimpleRamp2.pngEEbyRailsSimpleRamp.skp

              TIG

              1 Reply Last reply Reply Quote 0
              • GaieusG Offline
                Gaieus
                last edited by 4 Dec 2009, 12:18

                Thanks TIG for the examples - although my question was more a bit "academical" and theoretical - but at least I know why the two meshes are similar.

                Certainly the other twoo tools are also great and would probably fit more to this particular need - that moving of the face was just so simple method - too bad autofold screws it up.

                Gai...

                1 Reply Last reply Reply Quote 0
                • T Offline
                  thomthom
                  last edited by 4 Dec 2009, 12:24

                  @gaieus said:

                  Certainly the other twoo tools are also great and would probably fit more to this particular need - that moving of the face was just so simple method - too bad autofold screws it up.

                  This triangulation would be a separate plugin. It's just too specific. But I've been thinking of this myself. I often find I want such partitioning. It seems that it's usually long strip of a face where two of the sides runs parallel-ish to each other. So you want an edge to go between each opposite vertex. I've had it on my list of things to do - just not got around to it yet.

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

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    alz
                    last edited by 5 Jan 2010, 16:11

                    Yeah, I agree -- having a more uniform triangulation method is preferred. It makes things a lot easier developing models if it's more uniformed and less "meet all at one point".

                    With the current method, I have to spend time flip-flopping various divisions (and sometimes just recutting the face).

                    ๐Ÿ˜„

                    1 Reply Last reply Reply Quote 0
                    • W Offline
                      Woz2007
                      last edited by 31 May 2010, 18:54

                      @tig said:

                      ###,
                      Plugin parts by TIG**. 20090729
                      v1.1
                      Rewritten entirely by TIG... THEN completely corrected by Thomthom (TT)!***
                      It now retains all Texture mapping successfully. 20091203

                      [attachment=0:kz9i3jbr]<!-- ia0 -->triangulateFaces.rb<!-- ia0 -->[/attachment:kz9i3jbr]

                      Im using this & seeing the UV mapping failing...is this the latest version?!

                      1 Reply Last reply Reply Quote 0
                      • T Offline
                        thomthom
                        last edited by 31 May 2010, 19:19

                        Got a sample of where it fails?

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

                        1 Reply Last reply Reply Quote 0
                        • W Offline
                          Woz2007
                          last edited by 1 Jun 2010, 10:34

                          @thomthom said:

                          Got a sample of where it fails?

                          If you look at the texture in the tringle before & after you will see that it is affected. When I export the model as a mesh the surface is indeed messed up.

                          I hope the image is enough to work from?!
                          Thnaks for looking into this. This script could save me a lot of hassle if working correctly ๐Ÿ˜„


                          before & after shot

                          1 Reply Last reply Reply Quote 0
                          • T Offline
                            thomthom
                            last edited by 1 Jun 2010, 11:00

                            hmm...? Are you using Sandbox tools to modify the geometry afterwards?

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

                            1 Reply Last reply Reply Quote 0
                            • W Offline
                              Woz2007
                              last edited by 1 Jun 2010, 11:41

                              Yes.
                              Should I be using an alternative?!

                              1 Reply Last reply Reply Quote 0
                              • T Offline
                                thomthom
                                last edited by 1 Jun 2010, 11:47

                                That is causing the UV to distort, not the triangulation.
                                The flip function in sandbox doesn't preserve UV mapping when flipping.

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

                                1 Reply Last reply Reply Quote 0
                                • GaieusG Offline
                                  Gaieus
                                  last edited by 1 Jun 2010, 12:16

                                  @thomthom said:

                                  The flip function in sandbox doesn't preserve UV mapping when flipping.

                                  Sorry Woz; that was my suggestion I know...

                                  Thom; any other idea? Rewriting the sandbox tools for instance?
                                  ๐Ÿ˜‰

                                  (Or maybe some vertex edit tools?)
                                  ๐Ÿ˜ฎ

                                  Gai...

                                  1 Reply Last reply Reply Quote 0
                                  • W Offline
                                    Woz2007
                                    last edited by 1 Jun 2010, 12:36

                                    @gaieus said:

                                    Sorry Woz; that was my suggestion I know...
                                    ๐Ÿ˜ฎ

                                    No worries Gaeius Im grateful for whatever help I can get ๐Ÿ˜‰

                                    I should really introduce myself & what Im trying to achieve.
                                    So Im a hobby artist that fell upon Sketchup back in version 3. Ive found it to be the most user friendly UI for quickly pulling a model together albeit somewhat quirky. Ive tried other apps like 3DSM, Maya, Lightwave etc & those intefaces are just too over complex for simple modelling. PLUS they come with extreme pricetags. SU for me was a happy medium.
                                    The models Im creating are for use with the Unreal 2.5 engine for the development community of this application: http://avayalive.com/WaStore/Overview.aspx
                                    There are a few problems that I need to be able to overcome.

                                    Unreal uses meshes in a triangulated form & uses vertex lighting so I need to be able to see the mesh in a triangulated form prior to exporting & allow me to be able to edit those triangles so that the vertex lighting is shown correctly. At current some bad triangles are shown with hard shadows on flat surfaces due to the nature of the triangulation created. With the ability to edit those triangles I can quickly edit the mesh in SU PRE-EXPORT so the creation doesnt have these issues. Other apps such as 3DSM recommend re-tesselating the mesh to breakdown the triangles into smaller surfaces, however this also is detrimental as it increases the polycount, which is at a premium considering the overall level created.

                                    Gaeius recommended the use of this script along with the sandbox "flip edge" tool to see if it would solve the problem. Whilst the triangulation script works the UV as we now know is messed up with the flip edge tool affecting the polygons UV mapping.

                                    So is there a suitable solution that can meet my needs?
                                    BTW: the .alive project is something I plan to open up to the SU community in the coming weeks as there is a lot of potential for modelling, texturing etc & all with a small learning curve they could soon be developping whole environments ๐Ÿ˜„ Some projects also have funding!!

                                    1 Reply Last reply Reply Quote 0
                                    • T Offline
                                      thomthom
                                      last edited by 1 Jun 2010, 13:51

                                      @gaieus said:

                                      Thom; any other idea? Rewriting the sandbox tools for instance?

                                      something like that.

                                      @gaieus said:

                                      (Or maybe some vertex edit tools?) ๐Ÿ˜ฎ

                                      I do have plans of making Vertex Edit keep UV mapping when modifying geometry. But probably not fro initial release. But it won't help in this case as it would not flip edges.

                                      It's a real shame that UV coordinates doesn't stick in SU when you modify geometry - that each tool would need to implement a feature to keep them.

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

                                      1 Reply Last reply Reply Quote 0
                                      • W Offline
                                        Woz2007
                                        last edited by 1 Jun 2010, 14:02

                                        damn...sounds like theres no easy solution.
                                        Could a UV script not be written that uses a similiar situation to align face but align UV ? Please excuse my ignorance if Im talking gibberish.

                                        1 Reply Last reply Reply Quote 0
                                        • T Offline
                                          thomthom
                                          last edited by 1 Jun 2010, 14:05

                                          I do have plans for some UV tools, but I have some other projects lined up first.
                                          I have done some experimenting with making UVs "sticky".

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

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

                                          Advertisement