[Plugin] Recall last tool v1.2
-
Bravo Matt !!
at the very beginning of my learning SketchUp, I was surprised not to have this feature at disposal. And then I was accustomed to always recall my tools. And Here comes your ruby. It is as if suddenly we had won a great lightness. (F2 is great)it already belongs to my toolbox. simon
-
Merci Simon !
@pecan said:
On different OS's, even the same OS with different menus, that magic number will have changed.
Hi pecan! Are you sure of that? I use only two different numbers in my code. The rest is a recall of the last number used.
But there's a biiig problem with Mac... On Mac, function "send_action" does not accept integers. Only strings!@edson said:
It did not work. i had done it that way before. below is the ruby console reading.
Thank you Edson!
Ouch. I will try to find a solution. Can you test this code below, please?Sketchup.send_action("21022")
-
it looks good!
-
Ok. But if you have rectangle tool called, when you copy and validate the code, is the selection tool activated?
-
i drew a rectangle, then pressed the space bar, then used the script from the menu. the result is in the picture.
-
Sorry Edson, and all mac users. But I can't do anything with this bug. Function 'send_action' doesn't accept integers (so tool IDs) on Mac.
-
Result from SU ruby console
(eval)
result = Sketchup.send_action "selectSelectionTool:"
trueI was in error suggesting it was a num.
-
Using the tool name should work:
def onActiveToolChanged (tools_object, toolname, toolid) print tools_object, toolname, toolid @@Matt_Model_Toolid = @@Matt_Model_Toolid2 if @@Matt_Model_Toolid2 #@@Matt_Model_Toolid2 = toolid if not([21022,10508].index toolid) @@Matt_Model_Toolid2 = "select#{toolname};"; puts "1; #{@@Matt_Model_Toolid} 2; #{@@Matt_Model_Toolid2}" end
-
@pecan said:
Using the tool name should work:
> def onActiveToolChanged (tools_object, toolname, toolid) > print tools_object, toolname, toolid > @@Matt_Model_Toolid = @@Matt_Model_Toolid2 if @@Matt_Model_Toolid2 > #@@Matt_Model_Toolid2 = toolid if not([21022,10508].index toolid) > @@Matt_Model_Toolid2 = "select#{toolname};"; > puts "1; #{@@Matt_Model_Toolid} 2; #{@@Matt_Model_Toolid2}" > end >
Well... almost.
"selectCameraOrbitTool:" doesnt work.
It's action name is simply OrbitTool.
So maybe a hash of returned tool names and the send_action name.sendActionToolName = {"CameraOrbitTool", "OrbitTool", } etc.
Or maybe a hash of just the exceptions.Its a shame SU has to be so inconsistent.
-
Here's a list of the send_actions and the actual tool name returned by the observer.
howRubyPanel; viewBack; viewBottom; viewFront; viewIso; viewLeft; viewRight; viewTop; viewPerspective; viewShowAxes; viewShowHidden; viewZoomExtents; viewZoomToSelection; viewUndo; selectOrbitTool; (CameraOrbitTool) ok selectPositionCameraTool; selectDollyTool; (CameraDollyTool selectTurnTool; selectWalkTool; (CameraWalkTool) selectZoomTool; (CameraZoomTool) selectFieldOfViewTool; (CameraFOVTool) <=== inconsistency selectZoomWindowTool; (CameraZoomWindowTool) pageAdd; pageDelete; pageUpdate; pageNext; pagePrevious; renderWireframe; renderHiddenLine; renderMonochrome: renderShaded; renderTextures; ok selectArcTool; selectAxisTool; (SketchCSTool) ok selectCircleTool; ok selectEraseTool; ok selectFreehandTool; selectLineTool; (SketchTool) ok selectMeasureTool; ok selectMoveTool; ok selectOffsetTool; ok selectPaintTool; selectPolygonTool; (PolyTool) ok selectProtractorTool; ok selectPushPullTool; ok selectRectangleTool; ok selectRotateTool; ok selectScaleTool; ok selectSectionPlaneTool; ok selectTextTool; ok selectDimensionTool; ok selectExtrudeTool; ok selectSelectionTool; editUndo; editRedo; editHide; editUnhide; fixNonPlanarFaces; axes is returning SketchCSTool 3d text is returning 3DTextTool plugins return RubyTool orbit return CameraOrbitTool pan returns CameraDollyTool zoom returns CameraZoomTool field of view returns CameraFDVTool zoom window returns CameraFOVTool zoom extends return CameraZoomWindowTool walk return CamerWalkTool look returns CameraPanTool line returns selectSketchTool
Except for "selectFieldOfViewTool: (CameraFOVTool)" you can remove "Camera" from the observer reported name and prefix "select".
Special cases are PolyTool, Line tool, and axis tool.On second thought, a hash like {reportedObserverName, sendSelectName} might be the best bet.
-
The following seems to work, and you can add to the exceptions hash when you find 'em.
Hope this helps some...
# Supports Organizer.rb =begin Copyright 2009, Matt All Rights Reserved THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. License; Free Author; Matthieu NOBLET Organization; Matt Name; Recall_lst_tool Version; 1.0 SU Version; 6 and 7 Date; 17/02/2009 Description; Recall last tool used Usage; If you want to have a shortcut, please try with native Sketchup shortcuts... History; 1.000 17/02/2009 First version 1.100 17/02/2009 Global variables replaced by Class variables =end require 'sketchup.rb' class Matt_Observer < Sketchup;;ToolsObserver def initialize @ToolExceptionsHash = { # observerName send_actionName "FOVTool", "FieldOfViewTool", "SketchCSTool", "AxisTool", "SketchTool", "LineTool", "PolyTool", "PolygonTool" } end @@Matt_Model_Toolid = nil @@Matt_Model_Toolid2 = nil def onActiveToolChanged (tools_object, toolname, toolid) print tools_object, " ", toolname, " ", toolid, "\n" tname = toolname; @@Matt_Model_Toolid = @@Matt_Model_Toolid2 if @@Matt_Model_Toolid2 # remove "Camera" prefix reported by ToolObserver" @@Matt_Model_Toolid2 = (tname[0,6]="" if (tname[0,6] == "Camera")); tname = @ToolExceptionsHash.fetch(tname, tname); @@Matt_Model_Toolid2 = "select#{tname};"; puts "1; #{@@Matt_Model_Toolid} 2; #{@@Matt_Model_Toolid2}" end def self.recall_last puts "sending action #{@@Matt_Model_Toolid}" if @@Matt_Model_Toolid return Sketchup.send_action(@@Matt_Model_Toolid) if @@Matt_Model_Toolid return Sketchup.send_action("selectSelectionTool;") end end unless file_loaded?(__FILE__) file_loaded(__FILE__) Sketchup.active_model.tools.add_observer(Matt_Observer.new) $submenu ? (organizer = $submenu) ; (organizer = UI.menu("Plugins")) organizer.add_item("Recall last tool"){ Matt_Observer.recall_last } end
-
Hi pecan!
Sorry, I didn"t test your plugin, but I think it doesn't work with plugins. So Non native tools...
I will test it! Thank you for that Pecan! -
Hi Pecan! Your method does not work with ruby tools, as expected...
A new version has been posted in the first post. It fixes a bug found by Simon Le Bon. Thank you Simon! -
Hi Matt,
Hip Hip! I've just installed your plug v 1.2 and it seems working very well (all tools are seemingly supported)! So cool!!
It's too young to see if it remain operative on duration, but i believe this is now fixed.Many thanks for that tool dear Matt
I take it!
simon.
-
@matt666 said:
Sorry Edson, and all mac users. But I can't do anything with this bug. Function 'send_action' doesn't accept integers (so tool IDs) on Mac.
would the last update make it usable in macs?
-
@unknownuser said:
I take it!
@unknownuser said:
would the last update make it usable in macs?
... Dear Edson... I'm so sorry! You (and all Mac users!)have some problems with many of my scripts... Included this one...
I can't be usable in mac. Mac has a bug with main function used in this script:Sketchup.send_action(ToolID)
. And I can't do anything.
Sorry again Edson... -
matt,
no problem. several other plugins you created work without problems. let's hope this bug gets solved in the future.
-
great plugin, Matthieu.
just a thought: does it make sense to have a similar tool go through several previously used tools when pressing the shortcut key repeatedly?
-
Hi plot_paris!
That's a good idea... I will give a try! I think we may go through 10 previously used tools, and may undo history (retrun to the last tool used) by activating selection tool.
-
Hey, I was just thinking about a plugin that would cycle through tools on repeated pressing of a button.
So assign it to the spacebar. Hit the spacebar once and its select. Twice it move, 3 is rotate. But I quickly decided against the silly plugin when I started thinking about having to hit the spacebar 26 times to get to "place camera" or something
But in this context, I think it is quite a good idea,
Chris
Advertisement