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!
    ⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update

    [Code] Print the transformation matrix

    Scheduled Pinned Locked Moved Developers' Forum
    14 Posts 5 Posters 2.2k Views 5 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 dacastror

      Hi, I'm trying to print a transformation matrix, I tried the following:

      pointdd = Geom::Point3d.new 11,22,33 tdd = Geom::Transformation.new pointdd a = tdd.to_a text="-------------------------------------------------------\n" 4.times do |b| 4.times do |e| if ((e+1)%4==0) text << a[e*4+b].to_s+"\n" else text << a[e*4+b].to_s+" "+" "+" "+" "+" "+" "+" "+" "+" "+" " end end end text<<"------------------------------------------------------\n" UI.messagebox( text, MB_MULTILINE)

      I wanted to hear suggestions of more elegant ways to do this. (I wrote several times +" " for failure to escrbir several spaces followed here)

      thank you for your attention.

      1 Reply Last reply Reply Quote 0
      • danielbowringD Offline
        danielbowring
        last edited by

        Here's one in your format, although you should probably use one of the ones above (More info here)

        
        def inspect_transformation_adv(t, args={})
            format = "%.#{args[;places] || 3}f"
            ta = t.to_a.map() {|i|
                format%[i]
            }
            maxlength = ta.max() {|i, j| i.length <=> j.length }.length
            ta = ta.map() {|i|
                i.ljust(maxlength)
            }
            return (0...4).map() {|i|
                (0...4).map() {|j|
                    ta[j*4+i]
                }.join(args[;separator] || ', ')
            }.join("\n")
        end
        
        
        >>> point = Geom;;Point3d.new 11,22,33
        >>> tdd = Geom;;Transformation.new pointdd
        >>> puts inspect_transformation_adv(tdd)
        1.000 , 0.000 , 0.000 , 11.000
        0.000 , 1.000 , 0.000 , 22.000
        0.000 , 0.000 , 1.000 , 33.000
        0.000 , 0.000 , 0.000 , 1.000 
        >>> puts inspect_transformation_adv(t, {;separator => ' '})
        1.000  0.000  0.000  11.000
        0.000  1.000  0.000  22.000
        0.000  0.000  1.000  33.000
        0.000  0.000  0.000  1.000 
        
        
        1 Reply Last reply Reply Quote 0
        • danielbowringD Offline
          danielbowring
          last edited by

          
          def inspect_transformation(t)
              ta = t.to_a
              return (0...4).collect() {|i|
                  ta[i*4, 4].join(', ')
              }.join("\n")
          end
          
          
          
          >>> point = Geom;;Point3d.new 11,22,33
          >>> tdd = Geom;;Transformation.new pointdd
          >>> puts inspect_transformation(tdd)
          1.0, 0.0, 0.0, 0.0
          0.0, 1.0, 0.0, 0.0
          0.0, 0.0, 1.0, 0.0
          11.0, 22.0, 33.0, 1.0
          
          

          Edit: And if you like things to line up:

          
          def inspect_transformation_adv(t, args={})
              format = "%.#{args[;places] || 3}f"
              ta = t.to_a.map() {|i|
                  format%[i]
              }
              maxlength = ta.max() {|i, j| i.length <=> j.length }.length
              ta = ta.map() {|i|
                  i.ljust(maxlength)
              }
              return (0...4).collect() {|i|
                  ta[i*4, 4].join(args[;separator] || ', ')
              }.join("\n")
          end
          
          
          
          >>> point = Geom;;Point3d.new 11,22,33
          >>> tdd = Geom;;Transformation.new pointdd
          >>> puts inspect_transformation_adv(tdd)
          1.000 , 0.000 , 0.000 , 0.000 
          0.000 , 1.000 , 0.000 , 0.000 
          0.000 , 0.000 , 1.000 , 0.000 
          11.000, 22.000, 33.000, 1.000 
          
          

          Edit: although that's not the orientation you use

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

            Is it to visually inspect the matrix of entities, if so you can use this tool: http://forums.sketchucation.com/viewtopic.php?t=44859

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

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

              Here's my simple brute force method:

                def trans_matrix_text( gt )
              
                  return "Not a trnasformation object!" unless gt.is_a?(Geom;;Transformation)
                  
                  a = gt.to_a
                  
                  w = 3  # width
                  a.each{|n| s = n.to_s.size; w = s if s>w }
                  l = (w*4)+3
                  
                  # create a line output format string;
                  fmt = "  | %#{w}s %#{w}s %#{w}s %#{w}s |\n"
                  
                  text = "\n"
                  
                  text << (32.chr*2)<<151.chr<<151.chr<<(32.chr*l)<<151.chr<<151.chr<<"\n"
                  text << fmt % [  a[0].to_s,  a[1].to_s,   a[2].to_s,  a[3].to_s ]
                  text << fmt % [  a[4].to_s,  a[5].to_s,   a[6].to_s,  a[7].to_s ]
                  text << fmt % [  a[8].to_s,  a[9].to_s,  a[10].to_s, a[11].to_s ]
                  text << fmt % [ a[12].to_s, a[13].to_s,  a[14].to_s, a[15].to_s ]
                  text << (32.chr*2)<<151.chr<<151.chr<<(32.chr*l)<<151.chr<<151.chr<<"\n"
                  
                  return text
              
                end # def
              
                pt = Geom;;Point3d.new( 11,22,33 )
                text = trans_matrix_text( Geom;;Transformation.new(pt) )
                
                UI.messagebox( text, MB_MULTILINE, "Tranformation Matrix" )
              
              

              I have tweaked my system by copying Consolas font to the font used by dialogs, so I have monospaced text output. (It was easier than tweaking the resources in the executable after each update.)

              trans_matrix_MB.png

              trans_matrix_IO.png

              💭

              I'm not here much anymore.

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

                Thanks for responding, I have helped a lot. 😄

                me a question arises about the transformations. if I need to apply a transformation to an object but not in the principal coordinate axes, but the coordinate axes of a group (rotated) what should I use?

                (sorry for my bad English)

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

                  You mean, transform an object around its own axis and not world axis?

                  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

                    @thomthom said:

                    You mean, transform an object around its own axis and not world axis?

                    yes, exactly

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

                      Create a local transformation and apply with with .transform!( tramsformation ) instead of setting the .transformation matrix manually. Or am I missing something?

                      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

                        @thomthom said:

                        Create a local transformation and apply with with .transform!( tramsformation ) instead of setting the .transformation matrix manually. Or am I missing something?

                        How to create a local transformation? I would like to see some sample piece of code to guide me

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

                          I wonder if there is any way to know the orientation of a group with respect to the axis of the world

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

                            You have the model's axes from X_AXIS etc and ORIGIN.
                            Then you have group.transformation.axes or group.transformation.xaxis etc... and group.transformation.origin too...
                            So you can find the relative locations [which are points3ds] and angles between axes [which are vector3ds] - see the methods for those types...

                            TIG

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

                              @dacastror said:

                              @thomthom said:

                              Create a local transformation and apply with with .transform!( tramsformation ) instead of setting the .transformation matrix manually. Or am I missing something?

                              How to create a local transformation? I would like to see some sample piece of code to guide me

                              <span class="syntaxdefault"><br />point </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> instance</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">transformation</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">origin<br />vector </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> instance</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">transformation</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">yaxis<br />rotation </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Transformation</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">rotation</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> point</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> vector</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 30</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">degrees </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">instance</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">transform</span><span class="syntaxkeyword">!(</span><span class="syntaxdefault"> rotation </span><span class="syntaxkeyword">)<br /></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

                                thank you very much Thomas and Tig that prompt reply! 😄

                                I will try to implement your suggestions right now

                                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