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

    Problems with PickHelper

    Scheduled Pinned Locked Moved Developers' Forum
    14 Posts 3 Posters 1.0k Views 3 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.
    • sdmitchS Offline
      sdmitch
      last edited by

      @hsmyers said:

      @thomthom said:

      Can you elaborate to what didn't work and what you expected to see happening?

      Never having used PickHelper, I really didn't have any expectations other than a vague notion of some indication that the code was in control of the 'pick' process but I saw no such indication during testing. I noticed that what I was printing to the console didn't appear which suggests an error of some sort...which I foolishly failed to save, I clear the console with each run head slap I'm not even all that clear on how I should integrate what I need with the tool under development—roll it into the tool or separate class within?

      In the API the ph = view.pick_helper statement does not does not have variables passed to it. Taking off the (x,y) made it work for me.

      class HSM_Picker
        def activate
          @@picks = []
          Sketchup.set_status_text('Select an object', SB_PROMPT)
        end
      
        def deactivate(view)
          view.invalidate
        end
      
        def onLButtonUp(_flags, x, y, view)
          ph = view.pick_helper
          ph.do_pick(x, y)
          @@picks << ph.best_picked
          if @@picks.length == 2
            p 'done'
            Sketchup.active_model.select_tool(nil)
          end
        end
      
        def onCancel(_flag, _view)
          Sketchup.send_action('selectSelectionTool;')
        end
      end # class HSM_Picker
      Sketchup.active_model.select_tool HSM_Picker.new
      

      Nothing is worthless, it can always be used as a bad example.

      http://sdmitch.blogspot.com/

      1 Reply Last reply Reply Quote 0
      • hsmyersH Offline
        hsmyers
        last edited by

        @sdmitch said:

        In the API the ph = view.pick_helper statement does not does not have variables passed to it. Taking off the (x,y) made it work for me.

        class HSM_Picker
        >   def activate
        >     @@picks = []
        >     Sketchup.set_status_text('Select an object', SB_PROMPT)
        >   end
        > 
        >   def deactivate(view)
        >     view.invalidate
        >   end
        > 
        >   def onLButtonUp(_flags, x, y, view)
        >     ph = view.pick_helper
        >     ph.do_pick(x, y)
        >     @@picks << ph.best_picked
        >     if @@picks.length == 2
        >       p 'done'
        >       Sketchup.active_model.select_tool(nil)
        >     end
        >   end
        > 
        >   def onCancel(_flag, _view)
        >     Sketchup.send_action('selectSelectionTool;')
        >   end
        > end # class HSM_Picker
        > Sketchup.active_model.select_tool HSM_Picker.new
        

        Ah! On such screw-ups as this are founded the bugs that plague us! 👍 👍 👍 😄 Much and many thanks sir.

        1 Reply Last reply Reply Quote 0
        • hsmyersH Offline
          hsmyers
          last edited by

          Back to debugging... The following appears to run without error—or actually without doing anything other than returning "[]"!

          mod = Sketchup.active_model # Open model
          ent = mod.entities # All entities in model
          sel = mod.selection # Current selection
          
          SKETCHUP_CONSOLE.clear
          
          class HSM_Picker
          
            @@picks = []
            
            def activate
              @@picks = []
              Sketchup.set_status_text('Select an object', SB_PROMPT)
            end
          
            def deactivate(view)
              view.invalidate
            end
          
            def onLButtonUp(_flags, x, y, view)
              ph = view.pick_helper
              ph.do_pick(x, y)
              @@picks << ph.best_picked
              if @@picks.length == 2
                p 'done'
                Sketchup.active_model.select_tool(nil)
              end
            end
          
            def onCancel(_flag, _view)
              Sketchup.send_action('selectSelectionTool;')
            end
            
            def picks
              @@picks
            end
          end # class HSM_Picker
          
          pk = HSM_Picker.new()
          ets = pk.picks
          
          

          Implication clearly being that I don't know what I'm doing (certainly true!) So once again begging for clues here... 😞 In line with previous I had expected

          ph.do_pick(x, y)
          

          to politely wait for the user to make a selection (or two) and then be available for interrogation but I fear that may have been naive. My initial understanding ( or miss in this case ) is often warped by my expectations based on years of building APIs more sigh 😞 😞

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

            What is the value you get from .best_picked?

            That should only return an entity - so I wouldn't expect @@picks.length to work. (Unless you accidentally picked an edge - in which case you are getting the length of the edge.)

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

            1 Reply Last reply Reply Quote 0
            • hsmyersH Offline
              hsmyers
              last edited by

              @thomthom said:

              What is the value you get from .best_picked?

              That should only return an entity - so I wouldn't expect @@picks.length to work. (Unless you accidentally picked an edge - in which case you are getting the length of the edge.)

              Don't know, will find out...oh the joys of print statements! 😄

              1 Reply Last reply Reply Quote 0
              • sdmitchS Offline
                sdmitch
                last edited by

                The class HSM_Picker works as a Tool but must be envoked by Sketchup.active_model.select_tool HSM_Picker.new. The problem is getting the two selected entities returned since the normal return is the model object.

                Nothing is worthless, it can always be used as a bad example.

                http://sdmitch.blogspot.com/

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

                  @hsmyers said:

                  @thomthom said:

                  What is the value you get from .best_picked?

                  That should only return an entity - so I wouldn't expect @@picks.length to work. (Unless you accidentally picked an edge - in which case you are getting the length of the edge.)

                  Don't know, will find out...oh the joys of print statements! 😄

                  Try the debugger: https://github.com/SketchUp/sketchup-ruby-debugger
                  I prefer RubyMine for debugging: http://forums.sketchup.com/t/please-help-me-to-setup-de-debugger-on-rubymine-for-mac/289

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

                  1 Reply Last reply Reply Quote 0
                  • hsmyersH Offline
                    hsmyers
                    last edited by

                    @thomthom said:

                    @hsmyers said:

                    @thomthom said:

                    What is the value you get from .best_picked?

                    That should only return an entity - so I wouldn't expect @@picks.length to work. (Unless you accidentally picked an edge - in which case you are getting the length of the edge.)

                    Don't know, will find out...oh the joys of print statements! 😄

                    Try the debugger: https://github.com/SketchUp/sketchup-ruby-debugger
                    I prefer RubyMine for debugging: http://forums.sketchup.com/t/please-help-me-to-setup-de-debugger-on-rubymine-for-mac/289

                    Hmmm...haven't used any, could be interesting...

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

                      So much nicer to debug - no more editing files to add print statements and reloading.

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

                      1 Reply Last reply Reply Quote 0
                      • hsmyersH Offline
                        hsmyers
                        last edited by

                        As is often the case the problem is simple—code in question works much better if properly invoked:

                        pk = HSM_Picker.new()
                        mod.select_tool(pk)
                        

                        Thanks all, sorry for the stupidity 😞

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

                          No worries - we all learn. Thanks for posting back your solution.

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

                          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