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

    [Req] Check for N-Gons

    Scheduled Pinned Locked Moved Plugins
    25 Posts 6 Posters 3.3k Views 6 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.
    • K Offline
      Khai
      last edited by

      would it be possible to write a Ruby (or Tig, for you to add this to Manifold...!) that checks a mesh for N-Gons? (N-Gon face that is greater than 4 sides)

      1 Reply Last reply Reply Quote 0
      • R Offline
        remus
        last edited by

        Your wish is my command. Give me 5 mins...

        Version 3:
        works over the entire model (in groups and components), thanks to TIGs handy little snippet.
        Adds all N-gons to a new selection
        Tells you how many N-Gons there are in the model
        Added a Tri check which can be accessed by typing tri_check() in to the ruby console


        ngon_check.rb

        http://remusrendering.wordpress.com/

        1 Reply Last reply Reply Quote 0
        • R Offline
          remus
          last edited by

          Here you go, copy and paste this in to jims/alexs web console and click run.

          model = Sketchup.active_model
          entities = model.entities
          selection = model.selection
          
          n = 0
          
          entities.each{|e|
            if e.is_a? Sketchup;;Face
              if e.edges.length > 4
                n += 1
              end      
            end
          }
          
          if n > 0
            UI.messagebox("Contains N-Gons (Faces with >4 sides)")
          else
            UI.messagebox("N-gon free!")
          end
          

          http://remusrendering.wordpress.com/

          1 Reply Last reply Reply Quote 0
          • R Offline
            remus
            last edited by

            ...or just install this script as usual.


            ngon_check.rb

            http://remusrendering.wordpress.com/

            1 Reply Last reply Reply Quote 0
            • K Offline
              Khai
              last edited by

              thanks πŸ˜„ I owe you one πŸ˜„

              1 Reply Last reply Reply Quote 0
              • K Offline
                Khai
                last edited by

                oops.... it's not working... everythings coming up as N-Gon free....

                1 Reply Last reply Reply Quote 0
                • jeff hammondJ Offline
                  jeff hammond
                  last edited by

                  khai, i'm pretty sure it's not looking inside groups/components otherwise it appears to be working.

                  dotdotdot

                  1 Reply Last reply Reply Quote 0
                  • K Offline
                    Khai
                    last edited by

                    aah explode it first... I tried with just groups and selecting the group... did'nt think to explode it first..

                    1 Reply Last reply Reply Quote 0
                    • R Offline
                      remus
                      last edited by

                      Sorry i didnt reply, internet cut out.

                      As jeff pointed out its not gong through faces that are within groups/components for some reason. This version will go through all the faces in the current context, so a slight improvement but not much better. Not sure why it doesnt work on all the faces in the model straight off πŸ˜•


                      ngon_check.rb

                      http://remusrendering.wordpress.com/

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

                        Remus
                        Your current script finds all faces in the the active_entities - those in the current 'edit' session.
                        Perhaps do that if selection.length==0, but do it on selection if >0 ?
                        You could also do it on entities which would be all faces in the base model.
                        To get absolutely all faces in the model and its definitions [components and groups] use

                        
                        faces=[]
                        model=Sketchup.active_model
                        model.entities.each{|e|faces<< e if e.class==Sketchup;;Face}
                        model definitions.each{|d|d.entities.each{|e|faces<< e if e.class==Sketchup;;Face}}
                        ### then test 'faces' array for 4-sidedness ones...
                        
                        

                        It depends which faces you want to list - i.e. all or all-active or all-selected ???

                        TIG

                        1 Reply Last reply Reply Quote 0
                        • soloS Offline
                          solo
                          last edited by

                          Wondering out aloud.... so what then? you find the N-gons what do you do with them? divide them into triangles?

                          http://www.solos-art.com

                          If you see a toilet in your dreams do not use it.

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

                            @solo said:

                            Wondering out aloud.... so what then? you find the N-gons what do you do with them? divide them into triangles?

                            My triangulateFaces or triangulateQuads already does that ?
                            I expect he wants to find un-triangulated faces > quads for some other esoteric processing .................
                            πŸ˜•

                            TIG

                            1 Reply Last reply Reply Quote 0
                            • K Offline
                              Khai
                              last edited by

                              actually to divide them into Quads (preferred) or Tris - I use Sketchup as a modeler for other programs you see, they prefer no N-Gons... (Mainly poser content)

                              1 Reply Last reply Reply Quote 0
                              • R Offline
                                remus
                                last edited by

                                TIG, i realise the current script only works in the current context (in a group etc.), it was on purpose as i thought it was more useful than only being able to check the faces in the highest context.

                                On another note, does entities not include faces, edges etc. that are within components? If so that would explain why khai was having trouble with it...

                                http://remusrendering.wordpress.com/

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

                                  @remus said:

                                  TIG, i realise the current script only works in the current context (in a group etc.), it was on purpose as i thought it was more useful than only being able to check the faces in the highest context.

                                  On another note, does entities not include faces, edges etc. that are within components? If so that would explain why khai was having trouble with it...

                                  active_entities is everything in the current edit session - i.e. in the model or a group or component being edited.
                                  entities is everything in the model - as in model.entities but stops short of nested stuff so it lists all geometry, groups, instances etc.
                                  You also use entities for other containers like groups or component_definitions - e.g. group.entities and definition.entities. again these stop short of listing nested stuff.
                                  To find ALL entities you need to do my trick of iterating through the model.definitions and going through the entities of each definition...
                                  Remember too that if you are changing entities always use an array as in ents.to_a - changing entities as you ' each' loop through them leads to unpredictable results as the entities list constantly changes and so it becomes confused...

                                  TIG

                                  1 Reply Last reply Reply Quote 0
                                  • R Offline
                                    remus
                                    last edited by

                                    Cheers for the explanation πŸ‘

                                    http://remusrendering.wordpress.com/

                                    1 Reply Last reply Reply Quote 0
                                    • K Offline
                                      Khai
                                      last edited by

                                      presto reserectus!

                                      http://forums.sketchucation.com/viewtopic.php?f=169&t=24681&p=247955#p247955

                                      I'm wondering if this can be expanded now to highlight the Ngons? we're finding with Sculptis it rejects any faces with more than 4 faces....

                                      1 Reply Last reply Reply Quote 0
                                      • R Offline
                                        remus
                                        last edited by

                                        Try this in the webconsole. To be honest your probably better off using TIGs triangulate faces ruby, though...

                                        model = Sketchup.active_model
                                        entities = model.active_entities
                                        selection = model.selection
                                        
                                        n = 0
                                        
                                        entities.each{|e|
                                          if e.is_a? Sketchup;;Face
                                            if e.edges.length > 4
                                              n += 1
                                              selection.add(e)
                                            end      
                                          end
                                        }
                                        
                                        if n > 0
                                          UI.messagebox("Contains N-Gons (Faces with >4 sides)")
                                        else
                                          UI.messagebox("N-gon free!")
                                        end
                                        

                                        http://remusrendering.wordpress.com/

                                        1 Reply Last reply Reply Quote 0
                                        • K Offline
                                          Khai
                                          last edited by

                                          webconsole?

                                          and I explained back in this thread.. I can't tri the mesh. I'm moving from here (I love the modeler!) to app that don't like things being totally tri's... so that ruby's no good to me.

                                          1 Reply Last reply Reply Quote 0
                                          • R Offline
                                            remus
                                            last edited by

                                            Webconsole is a handy little ruby that lets you run bits of ruby in SU without having to package it as a separate file. You can find it here: http://sketchuptips.blogspot.com/2007/08/plugin-webconsolerb.html

                                            Just install it as usual, open SU, hit the appropriate menu item, copy and paste the code in and click run.

                                            I'll get going on a normal version, but no promises. Its been a while since ive written a ruby.

                                            http://remusrendering.wordpress.com/

                                            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