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

    Fit_plane_to_points problem

    Scheduled Pinned Locked Moved Developers' Forum
    9 Posts 4 Posters 550 Views 4 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.
    • D Offline
      dacastror
      last edited by

      Hi guys, I'm trying to adjust hundreds of points to a plane, my problem is that I do not understand the output format fit_plane_to_points, I expected a Point3d and Vector3D, but it seems I get different, I do not know how to interpret the result, appreciate the help in advance

      point1 = Geom::Point3d.new 0,0,0 point2 = Geom::Point3d.new 1,2,3 point3 = Geom::Point3d.new 5,5,5 plane = Geom.fit_plane_to_points point1, point2, point3 plane.size

      1 Reply Last reply Reply Quote 0
      • Dan RathbunD Offline
        Dan Rathbun
        last edited by

        The plane is returned as an [A,B,C,D] Array of 4 numbers which are the coefficients of the plane equation Ax + By + Cz + D = 0.

        I'm not here much anymore.

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

          Fit plane to Points returns a plane on which you can use SU-API methods.
          It also returns what Dan said.

          A plane is infinite, and so is a Line [point3d, vector]

          I suspect what you acctually want to do is Project your Points on to that plane with the point.project_to_plane method?

          1 Reply Last reply Reply Quote 0
          • D Offline
            dacastror
            last edited by

            thank you very much Dan, is exactly what I needed 😄

            thank jolran, that's not my next step, but I thank you, I had not seen the command project_to_plane 👍

            1 Reply Last reply Reply Quote 0
            • D Offline
              dacastror
              last edited by

              I thought of a way to put the plane in the format [point, vector], at some point it might be useful to someone

              p1 = Geom;;Point3d.new 1,1,1
              p2 = Geom;;Point3d.new 2,1,1
              p3 = Geom;;Point3d.new 1,2,1
              p4 = Geom;;Point3d.new 1,2,0
              pl = Geom.fit_plane_to_points p1, p2, p3, p4
              
              tolerance = 0.0001
              if pl[2].abs > tolerance
                 point = Geom;;Point3d.new(0,0,-pl[3]/ pl[2])
              elsif pl[1].abs > tolerance
                 point = Geom;;Point3d.new(0,-pl[3]/ pl[1],0)
              else
                 point = Geom;;Point3d.new(-pl[3]/ pl[0],0,0)
              end
              vector = Geom;;Vector3d.new(pl[0],pl[1],pl[2])
              
              plane = [point,vector]
              
              1 Reply Last reply Reply Quote 0
              • jolranJ Offline
                jolran
                last edited by

                @unknownuser said:

                thank jolran, that's not my next step, but I thank you, I had not seen the command project_to_plane 👍

                Ahh, I see. You ARE just interested in getting Point and vector, for some reason. 😄

                Then if I'm not misstaken I think p4 is redudant in you calculation ?

                You only have to feed 3 Points for fit_plane_to_points.

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

                  https://bitbucket.org/thomthom/tt-library-2/src/2bb264f27d9bc00c1b1f9a969e481c19385042ad/TT_Lib2/geom3d.rb?at=Version%202.9#cl-20

                  <span class="syntaxdefault">&nbsp;&nbsp;</span><span class="syntaxcomment">#&nbsp;Returns&nbsp;+plane+&nbsp;in&nbsp;the&nbsp;format&nbsp;+[&nbsp;point3d,&nbsp;vector3d&nbsp;]+.<br />&nbsp;&nbsp;#<br />&nbsp;&nbsp;#&nbsp;@param&nbsp;[Array<Geom;;Point3d,&nbsp;Geom;;Vector3d>,&nbsp;Array<Number,&nbsp;Number,&nbsp;Number,&nbsp;Number>]&nbsp;plane<br />&nbsp;&nbsp;#<br />&nbsp;&nbsp;#&nbsp;@return&nbsp;[Array<Geom;;Point3d,&nbsp;Geom;;Vector3d>]<br />&nbsp;&nbsp;#&nbsp;@since&nbsp;2.0.0<br />&nbsp;&nbsp;</span><span class="syntaxdefault">def&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">normalize_plane</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">plane</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span class="syntaxdefault">plane&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">plane</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length&nbsp;</span><span class="syntaxkeyword">==&nbsp;</span><span class="syntaxdefault">2<br />&nbsp;&nbsp;&nbsp;&nbsp;a</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">b</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">c</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">d&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">plane<br />&nbsp;&nbsp;&nbsp;&nbsp;v&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">b</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">c</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">p&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">ORIGIN</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">offset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">d</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[</span><span class="syntaxdefault">p</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;</span><span class="syntaxdefault">end<br /></span>
                  

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

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

                    @dacastror said:

                    I expected a Point3d and Vector3D, but it seems I get different,

                    The definition of a plane in SketchUp is described in the introduction to Geom3d: sketchucation.com/forums/posting.php?mode=quote&f=180&p=485589

                    @unknownuser said:

                    A line can be represented as either an Array of a point and a vector, or as an Array of two points.

                    <span class="syntaxdefault">     line </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)]<br /></span><span class="syntaxdefault">     line </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">100</span><span class="syntaxkeyword">)]</span><span class="syntaxdefault"> </span>
                    

                    A plane can be represented as either an Array of a point and a vector, or as an Array of 4 numbers that give the coefficients of a plane equation.

                    <span class="syntaxdefault">     plane </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Point3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">     Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Vector3d</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">)]<br /></span><span class="syntaxdefault">     plane </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span>
                    

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

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      dacastror
                      last edited by

                      I did not understand point.offset, with this example I understand a little more, thank you very much Thom, very interesting this 😄

                      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