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

    Questions about realization of tools

    Scheduled Pinned Locked Moved Developers' Forum
    20 Posts 4 Posters 370 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.
    • thomthomT Offline
      thomthom
      last edited by

      What if you also hook into the event callback of when the cursor moves? Ignoring the Tool class' events?

      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:

        any suggestions to prevent my tool display incomplete?

        ?

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

        1 Reply Last reply Reply Quote 0
        • J Offline
          Jim
          last edited by

          @thomthom said:

          @dacastror said:

          any suggestions to prevent my tool display incomplete?

          ?

          getExtents, maybe.

          http://www.sketchup.com/intl/en/developer/docs/ourdoc/tool#getExtents

          Hi

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

            @jim said:

            getExtents, maybe.

            thank you very much Jim!, this solved the problem, cost me a bit to understand how to implement it, but it goes

            @thomthom said:

            What if you also hook into the event callback of when the cursor moves? Ignoring the Tool class' events?

            I tried but it works very slow when the cursor is outside the window of Sketchup, 😞

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

              Got a bare bone example that shows this slowness?

              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:

                Got a bare bone example that shows this slowness?

                Yes,

                require 'Win32API'
                 
                Thread.new {
                   x=1 
                   while (x<1000) do
                     getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V')
                     lpPoint = " " * 8 # store two LONGs
                     getCursorPos.Call(lpPoint)
                     x, y = lpPoint.unpack("LL") # get the actual values
                     coor_mouse = "  #{x},  #{y}"
                     Sketchup;;set_status_text coor_mouse, SB_VCB_VALUE
                   end
                }
                

                Note : to see how slow returns coordinates, should be small the Sketchup window and put the cursor outside it, to stop the program move the cursor to the right until x >1000

                (Google Translator)

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

                  Threads doesn't work well in SketchUp Ruby. It's Ruby 1.8 and they are not true threads.

                  And I see you are polling GetCursorPos. I was thinking if there might be a callback function you could register instead.

                  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:

                    Threads doesn't work well in SketchUp Ruby. It's Ruby 1.8 and they are not true threads.

                    I did not know this 😲, thanks

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

                      I give up, I can not understand how to use view.pickray x, y for the intersection with the XY, XZ and YZ, and thereby be able to guide a tool, really I can not see how this is done 😞

                      I could only understand that returns two points, one coincides with the point of view and the other (I think) is a vector pointing toward the cursor, but do not understand how to use this to get the intersection with the respective flat front or behind me

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

                        View.pickray() can take ANY screen co-ordinate (it can be, or may not be the mouse position.)

                        It returns a ray

                        @unknownuser said:

                        A ray is a two element array containing a point and a vector [ Geom::Point3d, Geom::Vector3d ]. The point defines the start point of the ray and the vector defines the direction.

                        I'm not here much anymore.

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

                          Perhaps you wish to use model#raytest ?

                          It can return objects it hits.

                          View#pickray() does not, by itself, "hit" anything, but could be used for the 1st argument to Model#raytest().

                          I'm not here much anymore.

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

                            Guys, how to remove an observer of tools? I created an observer slightly modifying the example shown in the API

                            
                            class MyToolsObserver < Sketchup;;ToolsObserver
                               def onActiveToolChanged(tools, tool_name, tool_id)
                                  if tool_id == 21100
                                     puts "tool x"
                                  end
                               end
                            end
                            
                            Sketchup.active_model.tools.add_observer(MyToolsObserver.new)
                            
                            

                            I thought you could with something like this:

                            Sketchup.active_model.tools.remove_observer(MyToolsObserver)

                            What is the correct way to remove this observer?

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

                              Keep a reference to the observer instance.

                              <span class="syntaxdefault"><br /></span><span class="syntaxkeyword">@</span><span class="syntaxdefault">tool_observer&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">MyToolsObserver</span><span class="syntaxkeyword">.new<br /><br /></span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tools</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_observer</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">tool_observer</span><span class="syntaxkeyword">)<br /><br /></span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">tools</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">remove_observer</span><span class="syntaxkeyword">(@</span><span class="syntaxdefault">tool_observer</span><span class="syntaxkeyword">)<br />&nbsp;</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

                                @dan rathbun said:

                                A ray is a two element array containing a point and a vector [ Geom::Point3d, Geom::Vector3d ]. The point defines the start point of the ray and the vector defines the direction.

                                Thanks Dan, I now understand better 😄

                                @dan rathbun said:

                                Perhaps you wish to use model#raytest ?
                                It can return objects it hits.
                                View#pickray() does not, by itself, "hit" anything, but could be used for the 1st argument to Model#raytest().

                                I've never used it, looks interesting I'll give a look.
                                For now solve the problem using the parametric form of the line;

                                x = x0 + ta
                                y = y0 + t
                                b
                                z = z0 + t*c

                                in my case a, b, c is associated with Geom :: Vector3D (parallel to the line)
                                and x0, y0, z0 is associated with Geom :: Point3D (content in the line)
                                the intersection with plane z=0 (XY plane), for example would be

                                
                                ray = view.pickray x, y  #ray[0] -> Point3D, ray[1] -> Vector3d
                                if ray[1].z.abs>0
                                   z1 = 0 #Interesting plane
                                   t1 = (z1-ray[0].z)/ray[1].z
                                   x1 = ray[0].x + t1*ray[1].x
                                   y1 = ray[0].y + t1*ray[1].y 
                                end
                                #x1,y1,z1 are coordinates of the point of intersection with the plane
                                
                                

                                For the other two planes is very similar, although in my case I want to compare the different distances of the planes to the point of "eye" for this I did the following

                                
                                ray = view.pickray x, y
                                
                                if ray[1].z.abs>0
                                   z1 = 0 #Interesting plane
                                   t1 = (z1-ray[0].z)/ray[1].z
                                   d1 = (t1*ray[1].x)**2 + (t1*ray[1].y)**2 + (z1-ray[0].z)**2
                                end
                                #d1 is the square of the distance from the eye to the plane
                                
                                
                                
                                1 Reply Last reply Reply Quote 0
                                • D Offline
                                  dacastror
                                  last edited by

                                  Thom thank you very much, really I could not understand how to do this 👍 😄

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

                                    The API doc examples are confusing. One learn the hard way.

                                    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

                                      is true, on several occasions have been very frustrating these examples

                                      error

                                      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