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

    Faces area in a group ?

    Scheduled Pinned Locked Moved Developers' Forum
    15 Posts 7 Posters 1.8k Views 7 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
      Matt666
      last edited by

      Hi TIG!
      This is the second time you corrected me on this error! 😆 🤣

      Frenglish at its best !
      My scripts

      1 Reply Last reply Reply Quote 0
      • Didier BurD Offline
        Didier Bur
        last edited by

        TIG, you are my ☀
        Merci mate/Matt

        DB

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

          De rien mon initiateur de Ruby 😉

          Frenglish at its best !
          My scripts

          1 Reply Last reply Reply Quote 0
          • T Offline
            todd burch
            last edited by

            Personally, I'd call that a bug in the #area method if it is not taking the scaling factor into consideration.

            1 Reply Last reply Reply Quote 0
            • Didier BurD Offline
              Didier Bur
              last edited by

              Hi Todd,
              You know, groups are almost like component instances, they are stored in the model like "internal definitions" and a group is like an unique occurence of its definition, with or without a transformation applied. This is where the 'group' object in SU is wrong defined IMHO.
              It's a shame we can't apply a transformation to a face, this will solve quickly the problem. I've written Face::transform myself, but for some unknown reason it sometimes raises an error "points are not coplanar" when applying the method to the edges of the face. Go figure...

              PS: great presentation at 3DBC, but perhaps you need a little bit more training with the compo spray ?

              DB

              1 Reply Last reply Reply Quote 0
              • Didier BurD Offline
                Didier Bur
                last edited by

                @AdamB: just let me call you the ruby wizard Voilà, c'est touT !

                DB

                1 Reply Last reply Reply Quote 0
                • AdamBA Offline
                  AdamB
                  last edited by

                  (FWIW I'd say face.area giving objects space area is the correct behaviour.)

                  But people, this is all the wrong approach. You don't want to be building geometry, you just want to run through each face in the object and scale the area by the transformation. The trick is to project the scaling into the face's basis frame.

                  So the code in my book is:

                  def objectsurfacearea(container, xform)
                  
                  	total = 0
                  	for ent in container.entities
                  		next unless ent.kind_of? Sketchup;;Face	
                  
                  		# get face basis frame	
                  		normal = ent.normal
                  		binormal = Geom;;Vector3d.new(normal.y,normal.z,normal.x)
                  		tangent = (normal * binormal).normalize
                  		
                  		areascale = (xform * binormal).length * (xform * tangent).length
                  
                  		total += ent.area * areascale
                  	end
                  
                  	return total
                  end
                  
                  

                  So you'd do:
                  objectsurfacearea(mygroup, mygroup.transformation)

                  or

                  objectsurfacearea(myinstance.definition, myinstance.transformation)

                  Voila! C'est tous.

                  Adam

                  Developer of LightUp Click for website

                  1 Reply Last reply Reply Quote 0
                  • AdamBA Offline
                    AdamB
                    last edited by

                    @didier bur said:

                    Voilà, c'est touT !

                    Enfin! Apres vingt ans avec une epouse Francais, plus ca change avec mon Franglais..

                    Developer of LightUp Click for website

                    1 Reply Last reply Reply Quote 0
                    • Didier BurD Offline
                      Didier Bur
                      last edited by

                      @unknownuser said:

                      une epouse FrancaisE

                      En effet, en effet... 🤣

                      DB

                      1 Reply Last reply Reply Quote 0
                      • thomthomT Offline
                        thomthom
                        last edited by

                        Sweet! Just what I needed. 😄
                        How does it handle nested scaled groups/components? Do y ou have to add up the total transformation?

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

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

                          Hey thanks a lot AdamB for your super professional approach!
                          Finally found what I was looking for, now my code works fantasticly.

                          I did some additional reading about the Frennet-Serret/TNB frame but I don't really understand everything.
                          If I get it wel, the normal(N) is perpendicular to the face, the tangent(T)'touches' the face and de binormal(B) is perpendicular to both normal and tangent. But then how do you know on which side of the face formed by N and T, is B? I don't get the
                          @unknownuser said:

                          tangent = (normal * binormal)
                          multiplication. Isn't B supposed to be the cross product of N and T?
                          And why is gives
                          @unknownuser said:

                          (xform * binormal).length * (xform * tangent).length
                          

                          you the scale factor?

                          Could you give me some extra matematical information about this?
                          I would like to understand why this code works,

                          thanks, kat

                          1 Reply Last reply Reply Quote 0
                          • AdamBA Offline
                            AdamB
                            last edited by

                            @kat said:

                            I don't get the
                            tangent = (normal * binormal)
                            multiplication. Isn't B supposed to be the cross product of N and T?

                            Makes no odds. Binormal and tangent both lie in the plane.

                            @kat said:

                            And why is gives

                            @adamb said:

                            (xform * binormal).length * (xform * tangent).length

                            you the scale factor?

                            I'm taking the unit vectors in the plane of the face and transforming them by the Group transform which may scale them. Getting the length in the binormal and tangent direction allows me to figure out how much to scale the area of the face accounting for the transform.

                            Adam

                            Developer of LightUp Click for website

                            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