sketchup-api-stubs 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sketchup-api-stubs/sketchup.rb +157 -151
  3. data/lib/sketchup-api-stubs/stubs/Array.rb +741 -741
  4. data/lib/sketchup-api-stubs/stubs/Geom/BoundingBox.rb +322 -322
  5. data/lib/sketchup-api-stubs/stubs/Geom/Bounds2d.rb +182 -172
  6. data/lib/sketchup-api-stubs/stubs/Geom/LatLong.rb +111 -126
  7. data/lib/sketchup-api-stubs/stubs/Geom/OrientedBounds2d.rb +102 -102
  8. data/lib/sketchup-api-stubs/stubs/Geom/Point2d.rb +423 -400
  9. data/lib/sketchup-api-stubs/stubs/Geom/Point3d.rb +693 -661
  10. data/lib/sketchup-api-stubs/stubs/Geom/PolygonMesh.rb +535 -509
  11. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +500 -476
  12. data/lib/sketchup-api-stubs/stubs/Geom/Transformation2d.rb +267 -263
  13. data/lib/sketchup-api-stubs/stubs/Geom/UTM.rb +133 -141
  14. data/lib/sketchup-api-stubs/stubs/Geom/Vector2d.rb +547 -522
  15. data/lib/sketchup-api-stubs/stubs/Geom/Vector3d.rb +678 -693
  16. data/lib/sketchup-api-stubs/stubs/Geom.rb +351 -351
  17. data/lib/sketchup-api-stubs/stubs/LanguageHandler.rb +93 -93
  18. data/lib/sketchup-api-stubs/stubs/Layout/AngularDimension.rb +595 -595
  19. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinition.rb +751 -747
  20. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinitions.rb +183 -183
  21. data/lib/sketchup-api-stubs/stubs/Layout/ConnectionPoint.rb +70 -70
  22. data/lib/sketchup-api-stubs/stubs/Layout/Dictionary.rb +234 -0
  23. data/lib/sketchup-api-stubs/stubs/Layout/Document.rb +683 -517
  24. data/lib/sketchup-api-stubs/stubs/Layout/Ellipse.rb +29 -29
  25. data/lib/sketchup-api-stubs/stubs/Layout/Entities.rb +148 -148
  26. data/lib/sketchup-api-stubs/stubs/Layout/Entity.rb +464 -353
  27. data/lib/sketchup-api-stubs/stubs/Layout/FormattedText.rb +354 -354
  28. data/lib/sketchup-api-stubs/stubs/Layout/Grid.rb +311 -311
  29. data/lib/sketchup-api-stubs/stubs/Layout/Group.rb +261 -261
  30. data/lib/sketchup-api-stubs/stubs/Layout/Image.rb +91 -91
  31. data/lib/sketchup-api-stubs/stubs/Layout/Label.rb +370 -370
  32. data/lib/sketchup-api-stubs/stubs/Layout/Layer.rb +218 -218
  33. data/lib/sketchup-api-stubs/stubs/Layout/LayerInstance.rb +128 -128
  34. data/lib/sketchup-api-stubs/stubs/Layout/Layers.rb +225 -225
  35. data/lib/sketchup-api-stubs/stubs/Layout/LinearDimension.rb +614 -567
  36. data/lib/sketchup-api-stubs/stubs/Layout/LockedEntityError.rb +10 -10
  37. data/lib/sketchup-api-stubs/stubs/Layout/LockedLayerError.rb +11 -11
  38. data/lib/sketchup-api-stubs/stubs/Layout/Page.rb +282 -183
  39. data/lib/sketchup-api-stubs/stubs/Layout/PageInfo.rb +458 -387
  40. data/lib/sketchup-api-stubs/stubs/Layout/Pages.rb +209 -209
  41. data/lib/sketchup-api-stubs/stubs/Layout/Path.rb +346 -344
  42. data/lib/sketchup-api-stubs/stubs/Layout/Rectangle.rb +174 -174
  43. data/lib/sketchup-api-stubs/stubs/Layout/ReferenceEntity.rb +82 -82
  44. data/lib/sketchup-api-stubs/stubs/Layout/SketchUpModel.rb +714 -692
  45. data/lib/sketchup-api-stubs/stubs/Layout/Style.rb +1565 -1519
  46. data/lib/sketchup-api-stubs/stubs/Layout/Table.rb +290 -290
  47. data/lib/sketchup-api-stubs/stubs/Layout/TableCell.rb +149 -149
  48. data/lib/sketchup-api-stubs/stubs/Layout/TableColumn.rb +139 -139
  49. data/lib/sketchup-api-stubs/stubs/Layout/TableRow.rb +135 -135
  50. data/lib/sketchup-api-stubs/stubs/Layout.rb +25 -25
  51. data/lib/sketchup-api-stubs/stubs/Length.rb +286 -278
  52. data/lib/sketchup-api-stubs/stubs/Numeric.rb +249 -249
  53. data/lib/sketchup-api-stubs/stubs/Sketchup/Animation.rb +196 -144
  54. data/lib/sketchup-api-stubs/stubs/Sketchup/AppObserver.rb +169 -169
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/ArcCurve.rb +226 -209
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +145 -150
  57. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +294 -281
  58. data/lib/sketchup-api-stubs/stubs/Sketchup/Axes.rb +149 -149
  59. data/lib/sketchup-api-stubs/stubs/Sketchup/Behavior.rb +296 -302
  60. data/lib/sketchup-api-stubs/stubs/Sketchup/Camera.rb +473 -478
  61. data/lib/sketchup-api-stubs/stubs/Sketchup/ClassificationSchema.rb +63 -63
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/Classifications.rb +121 -121
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +294 -294
  64. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +673 -659
  65. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentInstance.rb +600 -593
  66. data/lib/sketchup-api-stubs/stubs/Sketchup/Console.rb +76 -76
  67. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionLine.rb +252 -257
  68. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionPoint.rb +32 -32
  69. data/lib/sketchup-api-stubs/stubs/Sketchup/Curve.rb +201 -201
  70. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionList.rb +443 -449
  71. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionObserver.rb +74 -74
  72. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionsObserver.rb +104 -104
  73. data/lib/sketchup-api-stubs/stubs/Sketchup/Dimension.rb +167 -165
  74. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionLinear.rb +306 -306
  75. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionObserver.rb +42 -42
  76. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionRadial.rb +87 -87
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/Drawingelement.rb +403 -406
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +397 -397
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1282 -1239
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesBuilder.rb +261 -261
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +127 -127
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +519 -545
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +60 -60
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/Environment.rb +406 -0
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/Environments.rb +185 -0
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/EnvironmentsObserver.rb +113 -0
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +122 -125
  89. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +1006 -937
  90. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +102 -102
  91. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +740 -750
  92. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +289 -282
  93. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Response.rb +64 -62
  94. data/lib/sketchup-api-stubs/stubs/Sketchup/Http.rb +27 -27
  95. data/lib/sketchup-api-stubs/stubs/Sketchup/Image.rb +405 -468
  96. data/lib/sketchup-api-stubs/stubs/Sketchup/ImageRep.rb +266 -266
  97. data/lib/sketchup-api-stubs/stubs/Sketchup/Importer.rb +189 -189
  98. data/lib/sketchup-api-stubs/stubs/Sketchup/InputPoint.rb +432 -406
  99. data/lib/sketchup-api-stubs/stubs/Sketchup/InstanceObserver.rb +84 -84
  100. data/lib/sketchup-api-stubs/stubs/Sketchup/InstancePath.rb +307 -306
  101. data/lib/sketchup-api-stubs/stubs/Sketchup/Layer.rb +332 -326
  102. data/lib/sketchup-api-stubs/stubs/Sketchup/LayerFolder.rb +380 -422
  103. data/lib/sketchup-api-stubs/stubs/Sketchup/Layers.rb +409 -427
  104. data/lib/sketchup-api-stubs/stubs/Sketchup/LayersObserver.rb +241 -249
  105. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing/ExtensionLicense.rb +86 -86
  106. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing.rb +55 -48
  107. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyle.rb +24 -24
  108. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyles.rb +114 -114
  109. data/lib/sketchup-api-stubs/stubs/Sketchup/LoadHandler.rb +70 -0
  110. data/lib/sketchup-api-stubs/stubs/Sketchup/Loop.rb +137 -137
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/Material.rb +1115 -414
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/Materials.rb +330 -317
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/MaterialsObserver.rb +142 -142
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/Menu.rb +93 -93
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/Model.rb +1714 -1652
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +372 -357
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +133 -130
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +271 -271
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/Overlay.rb +463 -490
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/OverlaysManager.rb +104 -116
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +939 -797
  123. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +388 -361
  124. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +77 -77
  125. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +501 -478
  126. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  127. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +385 -361
  128. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptionsObserver.rb +45 -45
  129. data/lib/sketchup-api-stubs/stubs/Sketchup/SectionPlane.rb +150 -150
  130. data/lib/sketchup-api-stubs/stubs/Sketchup/Selection.rb +451 -458
  131. data/lib/sketchup-api-stubs/stubs/Sketchup/SelectionObserver.rb +115 -115
  132. data/lib/sketchup-api-stubs/stubs/Sketchup/Set.rb +211 -212
  133. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfo.rb +259 -255
  134. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfoObserver.rb +59 -59
  135. data/lib/sketchup-api-stubs/stubs/Sketchup/Skp.rb +40 -40
  136. data/lib/sketchup-api-stubs/stubs/Sketchup/Snap.rb +125 -0
  137. data/lib/sketchup-api-stubs/stubs/Sketchup/Style.rb +88 -69
  138. data/lib/sketchup-api-stubs/stubs/Sketchup/Styles.rb +263 -217
  139. data/lib/sketchup-api-stubs/stubs/Sketchup/Text.rb +283 -262
  140. data/lib/sketchup-api-stubs/stubs/Sketchup/Texture.rb +199 -217
  141. data/lib/sketchup-api-stubs/stubs/Sketchup/TextureWriter.rb +237 -237
  142. data/lib/sketchup-api-stubs/stubs/Sketchup/Tool.rb +924 -834
  143. data/lib/sketchup-api-stubs/stubs/Sketchup/Tools.rb +132 -132
  144. data/lib/sketchup-api-stubs/stubs/Sketchup/ToolsObserver.rb +156 -156
  145. data/lib/sketchup-api-stubs/stubs/Sketchup/UVHelper.rb +75 -75
  146. data/lib/sketchup-api-stubs/stubs/Sketchup/Vertex.rb +143 -142
  147. data/lib/sketchup-api-stubs/stubs/Sketchup/View.rb +1566 -1311
  148. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +71 -45
  149. data/lib/sketchup-api-stubs/stubs/Sketchup.rb +1429 -1377
  150. data/lib/sketchup-api-stubs/stubs/SketchupExtension.rb +353 -353
  151. data/lib/sketchup-api-stubs/stubs/String.rb +24 -24
  152. data/lib/sketchup-api-stubs/stubs/UI/Command.rb +399 -389
  153. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +580 -494
  154. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +280 -269
  155. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +258 -241
  156. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +636 -635
  157. data/lib/sketchup-api-stubs/stubs/UI.rb +791 -683
  158. data/lib/sketchup-api-stubs/stubs/_top_level.rb +303 -303
  159. data/lib/sketchup-api-stubs.rb +1 -1
  160. metadata +10 -24
@@ -1,834 +1,924 @@
1
- # Copyright:: Copyright 2023 Trimble Inc.
2
- # License:: The MIT License (MIT)
3
-
4
- # Tool is the interface that you implement to create a SketchUp tool.
5
- # See
6
- # {our code
7
- # example}[https://github.com/SketchUp/sketchup-ruby-api-tutorials/tree/main/examples/02_custom_tool]
8
- # for how to create a custom tool in Ruby.
9
- #
10
- # To create a new tool in Ruby, you must define a new class that implements
11
- # the methods for the events that you want to respond to. You do not have
12
- # to implement methods for every possible event that a Tool can respond to.
13
- #
14
- # Once you have defined a tool class, you select that tool by creating an
15
- # instance of it and passing it to {Sketchup::Model#select_tool}. For
16
- # example:
17
- #
18
- # class MyTool
19
- # def activate
20
- # puts 'Your tool has been activated.'
21
- # end
22
- # end
23
- #
24
- # my_tool = MyTool.new
25
- # Sketchup.active_model.select_tool(my_tool)
26
- #
27
- # The following table contains several constants you can use when check for
28
- # certain key presses inside the keyboard handling callbacks:
29
- #
30
- # - +CONSTRAIN_MODIFIER_KEY+ = Shift Key
31
- # - +CONSTRAIN_MODIFIER_MASK+ = Shift Key
32
- # - +COPY_MODIFIER_KEY+ = Alt/Option on Mac, Ctrl on PC
33
- # - +COPY_MODIFIER_MASK+ = Alt/Option on Mac, Ctrl on PC
34
- # - +ALT_MODIFIER_KEY+ = Command on Mac, Alt on PC
35
- # - +ALT_MODIFIER_MASK+ = Command on Mac, Alt on PC
36
- #
37
- # @abstract Implement the methods described in this class to create a tool.
38
- # You can not sub-class this class because it is not defined by the API.
39
- #
40
- # @version SketchUp 6.0
41
- class Sketchup::Tool
42
-
43
- # Instance Methods
44
-
45
- # The {#activate} method is called by SketchUp when the tool is selected.
46
- # It is a good place to put most of your initialization, such as instance
47
- # variables to track the state of the tool.
48
- #
49
- # @example
50
- # def activate
51
- # puts 'Your tool has been activated.'
52
- # end
53
- #
54
- # @version SketchUp 6.0
55
- def activate
56
- end
57
-
58
- # The {#deactivate} method is called when the tool is deactivated because a
59
- # different tool was selected.
60
- #
61
- # @example
62
- # def deactivate(view)
63
- # puts "Your tool has been deactivated in view: #{view}"
64
- # end
65
- #
66
- # @param [Sketchup::View] view
67
- #
68
- # @version SketchUp 6.0
69
- def deactivate(view)
70
- end
71
-
72
- # The {#draw} method is called by SketchUp whenever the view is refreshed to
73
- # allow the tool to do its own drawing. If the tool has some temporary graphics
74
- # that it wants displayed while it is active, it should implement this method
75
- # and draw to the {Sketchup::View}.
76
- #
77
- # @example
78
- # def draw(view)
79
- # # Draw a square.
80
- # points = [
81
- # Geom::Point3d.new(0, 0, 0),
82
- # Geom::Point3d.new(9, 0, 0),
83
- # Geom::Point3d.new(9, 9, 0),
84
- # Geom::Point3d.new(0, 9, 0)
85
- # ]
86
- # # Fill
87
- # view.drawing_color = Sketchup::Color.new(255, 128, 128)
88
- # view.draw(GL_QUADS, points)
89
- # # Outline
90
- # view.line_stipple = '' # Solid line
91
- # view.drawing_color = Sketchup::Color.new(64, 0, 0)
92
- # view.draw(GL_LINE_LOOP, points)
93
- # end
94
- #
95
- # @note If you draw outside the model bounds you need to implement
96
- # {Tool#getExtents} which return a bounding box large enough to include the
97
- # points you draw. Otherwise your drawing will be clipped.
98
- #
99
- # @param [Sketchup::View] view
100
- # A View object where the method was invoked.
101
- #
102
- # @see getExtents
103
- #
104
- # @see Sketchup::View#draw
105
- #
106
- # @version SketchUp 6.0
107
- def draw(view)
108
- end
109
-
110
- # The {#enableVCB?} method is used to tell SketchUp whether to allow the user
111
- # to enter text into the VCB (value control box, aka the "measurements" panel).
112
- # If you do not implement this method, then the vcb is disabled by default.
113
- #
114
- # @example
115
- # # For this tool, allow vcb text entry while the tool is active.
116
- # def enableVCB?
117
- # return true
118
- # end
119
- #
120
- # @return [Boolean] Return +true+ if you want the VCB enabled
121
- #
122
- # @version SketchUp 6.0
123
- def enableVCB?
124
- end
125
-
126
- # In order to accurately draw things, SketchUp needs to know the extents of
127
- # what it is drawing. If the tool is doing its own drawing, it may need to
128
- # implement this method to tell SketchUp the extents of what it will be
129
- # drawing. If you don't implement this method, you may find that part of what
130
- # the tool is drawing gets clipped to the extents of the rest of the
131
- # model.
132
- #
133
- # This must return a {Geom::BoundingBox}. In a typical implementation, you
134
- # will create a new {Geom::BoundingBox}, add points to set the extents of the
135
- # drawing that the tool will do and then return it.
136
- #
137
- # @example
138
- # def getExtents
139
- # bb = Sketchup.active_model.bounds
140
- # return bb
141
- # end
142
- #
143
- # @return [Geom::BoundingBox]
144
- #
145
- # @version SketchUp 6.0
146
- def getExtents
147
- end
148
-
149
- # The {#getInstructorContentDirectory} method is used to tell SketchUp the
150
- # directory containing your Tool's instructor content. To use this, create
151
- # a custom instructor directory, put an index.html file inside of it, and then
152
- # return that path via this method. If the SketchUp user has the Instructor
153
- # window open when they activate your tool, they will see your html file.
154
- #
155
- # @example
156
- # def getInstructorContentDirectory
157
- # extension_path = Sketchup.extensions['MyExtension].extension_path
158
- # instructor_path = File.join(extension_path, 'MyExtension', 'instructor')
159
- # return instructor_path
160
- # end
161
- #
162
- # @note Prior to SketchUp 2014 this method would assume the path was relative
163
- # to the SketchUp resource folder. From 2014 and onwards you can specify the
164
- # absolute path to an HTML file or the absolute path to a directory
165
- # containing an index.html file.
166
- #
167
- # @return [String] the directory path where the Instructor content exists.
168
- #
169
- # @version SketchUp 6.0
170
- def getInstructorContentDirectory
171
- end
172
-
173
- # The {#getMenu} method is called by SketchUp to let the tool provide its own
174
- # context menu. Most tools will not want to implement this method and,
175
- # instead, use the normal context menu found on all entities.
176
- #
177
- # If you do implement this method, the argument is a Menu. You should use the
178
- # {Sketchup::Menu#add_item} method to build the context menu.
179
- #
180
- # Your tool will use a standard context menu by default if you do not
181
- # implement this method. Implement this method if you want a context-click to
182
- # display something other than this default context menu.
183
- #
184
- # In SketchUp 2015 the flags, x, y and view parameters were added. They are
185
- # needed if you need to pick the entities under the mouse position. The new
186
- # parameters are optional, but if you need to use one you must include them
187
- # all.
188
- #
189
- # @example
190
- # if Sketchup.version.to_i < 15
191
- # # Compatible with SketchUp 2014 and older:
192
- # def getMenu(menu)
193
- # menu.add_item('Say Hello') {
194
- # UI.messagebox('Hello')
195
- # }
196
- # end
197
- # else
198
- # # Only works with SketchUp 2015 and newer:
199
- # def getMenu(menu, flags, x, y, view)
200
- # ph = view.pick_helper(x, y)
201
- # entity = ph.best_picked
202
- # if entity
203
- # view.model.selection.clear
204
- # view.model.selection.add(entity)
205
- # menu.add_item("Erase #{entity.typename}") {
206
- # entity.erase!
207
- # }
208
- # end
209
- # end
210
- # end
211
- #
212
- # @overload getMenu(menu)
213
- #
214
- # @param [Sketchup::Menu] menu
215
- #
216
- # @overload getMenu(menu, flags, x, y, view)
217
- #
218
- # @version SketchUp 2015
219
- # @param [Sketchup::Menu] menu
220
- # @param [Integer] flags
221
- # A bit mask that tells the state of the modifier keys and other mouse
222
- # buttons at the time.
223
- # @param [Integer] x
224
- # The X coordinate on the screen where the event occurred.
225
- # @param [Integer] y
226
- # The Y coordinate on the screen where the event occurred.
227
- # @param [Sketchup::View] view
228
- #
229
- # @return [nil]
230
- #
231
- # @version SketchUp 6.0
232
- def getMenu
233
- end
234
-
235
- # The {#onCancel} method is called by SketchUp to cancel the current operation
236
- # of the tool. The typical response will be to reset the tool to its initial
237
- # state.
238
- #
239
- # The reason identifies the action that triggered the call. The reason can be
240
- # one of the following values:
241
- #
242
- # - +0+: the user canceled the current operation by hitting the escape key.
243
- # - +1+: the user re-selected the same tool from the toolbar or menu.
244
- # - +2+: the user did an undo while the tool was active.
245
- #
246
- # @example
247
- # def onCancel(reason, view)
248
- # puts "MyTool was canceled for reason ##{reason} in view: #{view}"
249
- # end
250
- #
251
- # @note When something is undone {#onCancel} is called before the undo is
252
- # actually executed. If you need to do something with the model after an undo
253
- # use {Sketchup::ModelObserver#onTransactionUndo}.
254
- #
255
- # @note When {#onKeyDown} is implemented and returns +true+, pressing Esc
256
- # doesn't trigger {#onCancel}.
257
- #
258
- # @param [Integer] reason
259
- # A reason value (see comments).
260
- #
261
- # @param [Sketchup::View] view
262
- #
263
- # @version SketchUp 6.0
264
- def onCancel(reason, view)
265
- end
266
-
267
- # The {#onKeyDown} method is called by SketchUp when the user presses a key on
268
- # the keyboard. If you want to get input from the VCB, you should implement
269
- # onUserText rather than this method.
270
- #
271
- # This method is can be used for special keys such as the Shift key, Ctrl key,
272
- # and so on, or for just determining which key a user pressed. This method is
273
- # actually called for all keys that are pressed.
274
- #
275
- # There are several
276
- # "virtual keys" defined as constants you can use. Their use is cross
277
- # platform. They are:
278
- #
279
- # - +VK_ALT+
280
- # - +VK_COMMAND+
281
- # - +VK_CONTROL+
282
- # - +VK_DELETE+
283
- # - +VK_DOWN+
284
- # - +VK_END+
285
- # - +VK_HOME+
286
- # - +VK_INSERT+
287
- # - +VK_LEFT+
288
- # - +VK_MENU+
289
- # - +VK_NEXT+
290
- # - +VK_PRIOR+
291
- # - +VK_RIGHT+
292
- # - +VK_SHIFT+
293
- # - +VK_SPACE+
294
- # - +VK_UP+
295
- #
296
- # V6: There is a bug on Windows where the typematic effect does
297
- # not work. Typematic effects work fine on a Mac.
298
- #
299
- # @example
300
- # def onKeyDown(key, repeat, flags, view)
301
- # puts "onKeyDown: key = #{key}"
302
- # puts " repeat = #{repeat}"
303
- # puts " flags = #{flags}"
304
- # puts " view = #{view}"
305
- # end
306
- #
307
- # @param [Integer] key
308
- # The key that was pressed.
309
- #
310
- # @param [Integer] repeat
311
- # A value of 1 for a single press of a key. A value
312
- # of 2 if the user has pressed a key and is holding
313
- # it down.
314
- #
315
- # @param [Integer] flags
316
- # A bit mask that tells the state of the modifier
317
- # keys at the time of the event.
318
- #
319
- # @param [Sketchup::View] view
320
- #
321
- # @return [Boolean] Return +true+ to prevent SketchUp from processing the
322
- # event.
323
- #
324
- # @version SketchUp 6.0
325
- def onKeyDown(key, repeat, flags, view)
326
- end
327
-
328
- # The {#onKeyUp} method is called by SketchUp when the user releases a key on
329
- # the keyboard.
330
- #
331
- # @example
332
- # def onKeyUp(key, repeat, flags, view)
333
- # puts "onKeyUp: key = #{key}"
334
- # puts " repeat = #{repeat}"
335
- # puts " flags = #{flags}"
336
- # puts " view = #{view}"
337
- # end
338
- #
339
- # @param [Integer] key
340
- # The key that was pressed.
341
- #
342
- # @param [Integer] repeat
343
- # A value of 1 for a single press of a key. A value
344
- # of 2 if the user has pressed a key and is holding
345
- # it down.
346
- #
347
- # @param [Integer] flags
348
- # A bit mask that tells the state of the modifier
349
- # keys at the time of the event.
350
- #
351
- # @param [Sketchup::View] view
352
- #
353
- # @return [Boolean] Return +true+ to prevent SketchUp from processing the
354
- # event.
355
- #
356
- # @version SketchUp 6.0
357
- def onKeyUp(key, repeat, flags, view)
358
- end
359
-
360
- # The {#onLButtonDoubleClick} is called by SketchUp when the user double clicks
361
- # with the left mouse button.
362
- #
363
- # @example
364
- # def onLButtonDoubleClick(flags, x, y, view)
365
- # puts "onLButtonDoubleClick: flags = #{flags}"
366
- # puts " x = #{x}"
367
- # puts " y = #{y}"
368
- # puts " view = #{view}"
369
- # end
370
- #
371
- # @param [Integer] flags
372
- # A bit mask that tells the state of the modifier
373
- # keys and other mouse buttons at the time.
374
- #
375
- # @param [Integer] x
376
- # The X coordinate on the screen where the event occurred.
377
- #
378
- # @param [Integer] y
379
- # The Y coordinate on the screen where the event occurred.
380
- #
381
- # @param [Sketchup::View] view
382
- #
383
- # @version SketchUp 6.0
384
- def onLButtonDoubleClick(flags, x, y, view)
385
- end
386
-
387
- # The {#onLButtonDown} method is called by SketchUp when the left mouse button
388
- # is pressed. Most tools will implement this method.
389
- #
390
- # @example
391
- # def onLButtonDown(flags, x, y, view)
392
- # puts "onLButtonDown: flags = #{flags}"
393
- # puts " x = #{x}"
394
- # puts " y = #{y}"
395
- # puts " view = #{view}"
396
- # end
397
- #
398
- # @param [Integer] flags
399
- # A bit mask that tells the state of the modifier
400
- # keys and other mouse buttons at the time.
401
- #
402
- # @param [Integer] x
403
- # The X coordinate on the screen where the event occurred.
404
- #
405
- # @param [Integer] y
406
- # The Y coordinate on the screen where the event occurred.
407
- #
408
- # @param [Sketchup::View] view
409
- #
410
- # @version SketchUp 6.0
411
- def onLButtonDown(flags, x, y, view)
412
- end
413
-
414
- # The {#onLButtonUp} method is called by SketchUp when the left mouse button is
415
- # released.
416
- #
417
- # @example
418
- # def onLButtonUp(flags, x, y, view)
419
- # puts "onLButtonUp: flags = #{flags}"
420
- # puts " x = #{x}"
421
- # puts " y = #{y}"
422
- # puts " view = #{view}"
423
- # end
424
- #
425
- # @param [Integer] flags
426
- # A bit mask that tells the state of the modifier
427
- # keys and other mouse buttons at the time.
428
- #
429
- # @param [Integer] x
430
- # The X coordinate on the screen where the event occurred.
431
- #
432
- # @param [Integer] y
433
- # The Y coordinate on the screen where the event occurred.
434
- #
435
- # @param [Sketchup::View] view
436
- #
437
- # @version SketchUp 6.0
438
- def onLButtonUp(flags, x, y, view)
439
- end
440
-
441
- # The {#onMButtonDoubleClick} method is called by SketchUp when the middle
442
- # mouse button (on a three button mouse) is double-clicked.
443
- #
444
- # Only implement this method if you want SketchUp to react to a middle mouse
445
- # button being double-clicked.
446
- #
447
- # @example
448
- # def onMButtonDoubleClick(flags, x, y, view)
449
- # puts "onMButtonDoubleClick: flags = #{flags}"
450
- # puts " x = #{x}"
451
- # puts " y = #{y}"
452
- # puts " view = #{view}"
453
- # end
454
- #
455
- # @note Though this method has been documented in the Ruby API for many years,
456
- # it has never worked properly. We are leaving this documentation in place
457
- # for now in the hopes of fixing the implementation, but you won't have any
458
- # luck trying to use it in SU7 and earlier.
459
- #
460
- # @param [Integer] flags
461
- # A bit mask that tells the state of the modifier
462
- # keys and other mouse buttons at the time.
463
- #
464
- # @param [Integer] x
465
- # The X coordinate on the screen where the event occurred.
466
- #
467
- # @param [Integer] y
468
- # The Y coordinate on the screen where the event occurred.
469
- #
470
- # @param [Sketchup::View] view
471
- #
472
- # @version SketchUp 6.0
473
- def onMButtonDoubleClick(flags, x, y, view)
474
- end
475
-
476
- # The {#onMButtonDown} method is called by SketchUp when the middle mouse
477
- # button (on a three button mouse) is down.
478
- #
479
- # The Orbit tool is activated by default when the middle mouse button is down.
480
- # Implement this method if you want a middle mouse button to do something
481
- # other than invoke the Orbit tool.
482
- #
483
- # @example
484
- # def onMButtonDown(flags, x, y, view)
485
- # puts "onMButtonDown: flags = #{flags}"
486
- # puts " x = #{x}"
487
- # puts " y = #{y}"
488
- # puts " view = #{view}"
489
- # end
490
- #
491
- # @param [Integer] flags
492
- # A bit mask that tells the state of the modifier
493
- # keys and other mouse buttons at the time.
494
- #
495
- # @param [Integer] x
496
- # The X coordinate on the screen where the event occurred.
497
- #
498
- # @param [Integer] y
499
- # The Y coordinate on the screen where the event occurred.
500
- #
501
- # @param [Sketchup::View] view
502
- #
503
- # @version SketchUp 6.0
504
- def onMButtonDown(flags, x, y, view)
505
- end
506
-
507
- # The {#onMButtonUp} method is called by SketchUp when the middle mouse button
508
- # (on a three button mouse) is released.
509
- #
510
- # SketchUp returns to the previous tool from the Orbit tool when the middle
511
- # mouse button is released. Implement this method if you want a middle mouse
512
- # button to do something other than return to the previous tool when in the
513
- # Orbit tool.
514
- #
515
- # @example
516
- # def onMButtonUp(flags, x, y, view)
517
- # puts "onMButtonUp: flags = #{flags}"
518
- # puts " x = #{x}"
519
- # puts " y = #{y}"
520
- # puts " view = #{view}"
521
- # end
522
- #
523
- # @param [Integer] flags
524
- # A bit mask that tells the state of the modifier
525
- # keys and other mouse buttons at the time.
526
- #
527
- # @param [Integer] x
528
- # The X coordinate on the screen where the event occurred.
529
- #
530
- # @param [Integer] y
531
- # The Y coordinate on the screen where the event occurred.
532
- #
533
- # @param [Sketchup::View] view
534
- #
535
- # @version SketchUp 6.0
536
- def onMButtonUp(flags, x, y, view)
537
- end
538
-
539
- # The {#onMouseEnter} method is called by SketchUp when the mouse enters the
540
- # viewport.
541
- #
542
- # @example
543
- # def onMouseEnter(view)
544
- # puts "onMouseEnter: view = #{view}"
545
- # end
546
- #
547
- # @param [Sketchup::View] view
548
- #
549
- # @version SketchUp 6.0
550
- def onMouseEnter(view)
551
- end
552
-
553
- # The {#onMouseLeave} method is called by SketchUp when the mouse leaves the
554
- # viewport.
555
- #
556
- # @example
557
- # def onMouseLeave(view)
558
- # puts "onMouseLeave: view = #{view}"
559
- # end
560
- #
561
- # @param [Sketchup::View] view
562
- #
563
- # @version SketchUp 6.0
564
- def onMouseLeave(view)
565
- end
566
-
567
- # The {#onMouseMove} method is called by SketchUp whenever the mouse is moved.
568
- # You will often want to implement this method.
569
- #
570
- # Try to make this method as efficient as possible because this method is
571
- # called often.
572
- #
573
- # @example
574
- # def onMouseMove(flags, x, y, view)
575
- # puts "onMouseMove: flags = #{flags}"
576
- # puts " x = #{x}"
577
- # puts " y = #{y}"
578
- # puts " view = #{view}"
579
- # end
580
- #
581
- # @param [Integer] flags
582
- # A bit mask that tells the state of the modifier
583
- # keys and other mouse buttons at the time.
584
- #
585
- # @param [Integer] x
586
- # The X coordinate on the screen where the event occurred.
587
- #
588
- # @param [Integer] y
589
- # The Y coordinate on the screen where the event occurred.
590
- #
591
- # @param [Sketchup::View] view
592
- #
593
- # @version SketchUp 6.0
594
- def onMouseMove(flags, x, y, view)
595
- end
596
-
597
- # The {#onMouseWheel} method is called by SketchUp when the mouse scroll wheel
598
- # is used.
599
- #
600
- # @example
601
- # class ExampleTool
602
- #
603
- # def initialize
604
- # @property_value = 0
605
- # @rect = [
606
- # Geom::Point3d.new(100, 150, 0),
607
- # Geom::Point3d.new(300, 150, 0),
608
- # Geom::Point3d.new(300, 250, 0),
609
- # Geom::Point3d.new(100, 250, 0),
610
- # ]
611
- # end
612
- #
613
- # def onMouseMove(flags, x, y, view)
614
- # view.invalidate
615
- # end
616
- #
617
- # def onMouseWheel(flags, delta, x, y, view)
618
- # # If the cursor is not within the bounds of the rectangle, return false
619
- # # to let SketchUp do its default action (zoom).
620
- # point = Geom::Point3d.new(x, y)
621
- # return false unless Geom.point_in_polygon_2D(point, @rect, true)
622
- #
623
- # # If cursor is within the bounds of the rectangle, update the value
624
- # # and prevent the default zoom.
625
- # @property_value += delta
626
- # view.invalidate
627
- # true
628
- # end
629
- #
630
- # def draw(view)
631
- # view.line_width = 2
632
- # view.line_stipple = ''
633
- # view.drawing_color = 'red'
634
- # view.draw2d(GL_QUADS, @rect)
635
- #
636
- # point = Geom::Point3d.new(120, 170)
637
- # view.draw_text(point, "Value: #{@property_value}",
638
- # size: 20, bold: true, color: 'black')
639
- # end
640
- #
641
- # end
642
- #
643
- # Sketchup.active_model.select_tool(ExampleTool.new)
644
- #
645
- # @param [Integer] flags
646
- # A bit mask that tells the state of the modifier
647
- # keys and other mouse buttons at the time.
648
- #
649
- # @param [Integer] delta
650
- # Either +1+ or +-1+ depending on which direction the
651
- # mouse wheel scrolled.
652
- #
653
- # @param [Float] x
654
- # The X coordinate on the screen where the event occurred.
655
- #
656
- # @param [Float] y
657
- # The Y coordinate on the screen where the event occurred.
658
- #
659
- # @param [Sketchup::View] view
660
- #
661
- # @return [Boolean] Return +true+ to prevent SketchUp from performing default
662
- # zoom action.
663
- #
664
- # @version SketchUp 2019.2
665
- def onMouseWheel(flags, delta, x, y, view)
666
- end
667
-
668
- # The {#onRButtonDoubleClick} is called by SketchUp when the user double clicks
669
- # with the right mouse button.
670
- #
671
- # @example
672
- # def onRButtonDoubleClick(flags, x, y, view)
673
- # puts "onRButtonDoubleClick: flags = #{flags}"
674
- # puts " x = #{x}"
675
- # puts " y = #{y}"
676
- # puts " view = #{view}"
677
- # end
678
- #
679
- # @param [Integer] flags
680
- # A bit mask that tells the state of the modifier
681
- # keys and other mouse buttons at the time.
682
- #
683
- # @param [Integer] x
684
- # The X coordinate on the screen where the event occurred.
685
- #
686
- # @param [Integer] y
687
- # The Y coordinate on the screen where the event occurred.
688
- #
689
- # @param [Sketchup::View] view
690
- #
691
- # @version SketchUp 6.0
692
- def onRButtonDoubleClick(flags, x, y, view)
693
- end
694
-
695
- # The {#onRButtonDown} method is called by SketchUp when the user presses
696
- # the right mouse button. Implement this method, along with the tool.getMenu
697
- # method, when you want your tool to do something other than display the
698
- # default context menu when the right mouse button is clicked.
699
- #
700
- # @example
701
- # def onRButtonDown(flags, x, y, view)
702
- # puts "onRButtonDown: flags = #{flags}"
703
- # puts " x = #{x}"
704
- # puts " y = #{y}"
705
- # puts " view = #{view}"
706
- # end
707
- #
708
- # @param [Integer] flags
709
- # A bit mask that tells the state of the modifier
710
- # keys and other mouse buttons at the time.
711
- #
712
- # @param [Integer] x
713
- # The X coordinate on the screen where the event occurred.
714
- #
715
- # @param [Integer] y
716
- # The Y coordinate on the screen where the event occurred.
717
- #
718
- # @param [Sketchup::View] view
719
- #
720
- # @version SketchUp 6.0
721
- def onRButtonDown(flags, x, y, view)
722
- end
723
-
724
- # The {#onRButtonUp} method is called by SketchUp when the user releases the
725
- # right mouse button.
726
- #
727
- # @example
728
- # def onRButtonUp(flags, x, y, view)
729
- # puts "onRButtonUp: flags = #{flags}"
730
- # puts " x = #{x}"
731
- # puts " y = #{y}"
732
- # puts " view = #{view}"
733
- # end
734
- #
735
- # @param [Integer] flags
736
- # A bit mask that tells the state of the modifier
737
- # keys and other mouse buttons at the time.
738
- #
739
- # @param [Integer] x
740
- # The X coordinate on the screen where the event occurred.
741
- #
742
- # @param [Integer] y
743
- # The Y coordinate on the screen where the event occurred.
744
- #
745
- # @param [Sketchup::View] view
746
- #
747
- # @version SketchUp 6.0
748
- def onRButtonUp(flags, x, y, view)
749
- end
750
-
751
- # The {#onReturn} method is called by SketchUp when the user hit the Return key
752
- # to complete an operation in the tool. This method will rarely need to be
753
- # implemented.
754
- #
755
- # @example
756
- # def onReturn(view)
757
- # puts "onReturn(#{view})"
758
- # end
759
- #
760
- # @param [Sketchup::View] view
761
- #
762
- # @return [nil]
763
- #
764
- # @version SketchUp 6.0
765
- def onReturn(view)
766
- end
767
-
768
- # The {#onSetCursor} method is called by SketchUp when the tool wants to set
769
- # the cursor.
770
- #
771
- # @example
772
- # def onSetCursor
773
- # puts "onSetCursor: view = #{view}"
774
- # # You would set your cursor here. See UI.set_cursor method.
775
- # UI.set_cursor(@cursor_id) # UI.set_cursor return true
776
- # end
777
- #
778
- # @return [Boolean] Return +true+ to prevent SketchUp using the default cursor.
779
- #
780
- # @version SketchUp 6.0
781
- def onSetCursor
782
- end
783
-
784
- # The {#onUserText} method is called by SketchUp when the user has typed text
785
- # into the VCB and hit return.
786
- #
787
- # @example
788
- # def onUserText(text, view)
789
- # @distance = text.to_l
790
- # rescue ArgumentError
791
- # view.tooltip = 'Invalid length'
792
- # end
793
- #
794
- # @param [String] text
795
- # The text string that was typed into the VCB.
796
- #
797
- # @param [Sketchup::View] view
798
- # A view object where the method was invoked.
799
- #
800
- # @version SketchUp 6.0
801
- def onUserText(text, view)
802
- end
803
-
804
- # The {#resume} method is called by SketchUp when the tool becomes active again
805
- # after being suspended.
806
- #
807
- # @example
808
- # def resume(view)
809
- # puts "resume: view = #{view}"
810
- # end
811
- #
812
- # @param [Sketchup::View] view
813
- #
814
- # @version SketchUp 6.0
815
- def resume(view)
816
- end
817
-
818
- # The {#suspend} method is called by SketchUp when the tool temporarily becomes
819
- # inactive because another tool has been activated. This typically happens
820
- # when a viewing tool is activated, such as when orbit is active due to the
821
- # middle mouse button.
822
- #
823
- # @example
824
- # def suspend(view)
825
- # puts "suspend: view = #{view}"
826
- # end
827
- #
828
- # @param [Sketchup::View] view
829
- #
830
- # @version SketchUp 6.0
831
- def suspend(view)
832
- end
833
-
834
- end
1
+ # Copyright:: Copyright 2026 Trimble Inc.
2
+ # License:: The MIT License (MIT)
3
+
4
+ # Tool is the interface that you implement to create a SketchUp tool.
5
+ # See
6
+ # {our code
7
+ # example}[https://github.com/SketchUp/sketchup-ruby-api-tutorials/tree/main/examples/02_custom_tool]
8
+ # for how to create a custom tool in Ruby.
9
+ #
10
+ # To create a new tool in Ruby, you must define a new class that implements
11
+ # the methods for the events that you want to respond to. You do not have
12
+ # to implement methods for every possible event that a Tool can respond to.
13
+ #
14
+ # Once you have defined a tool class, you select that tool by creating an
15
+ # instance of it and passing it to {Sketchup::Model#select_tool}. For
16
+ # example:
17
+ #
18
+ # class MyTool
19
+ # def activate
20
+ # puts 'Your tool has been activated.'
21
+ # end
22
+ # end
23
+ #
24
+ # my_tool = MyTool.new
25
+ # Sketchup.active_model.select_tool(my_tool)
26
+ #
27
+ # The following table contains several constants you can use when check for
28
+ # certain key presses inside the keyboard handling callbacks:
29
+ #
30
+ # - {CONSTRAIN_MODIFIER_KEY} = Shift Key
31
+ # - {CONSTRAIN_MODIFIER_MASK} = Shift Key
32
+ # - {COPY_MODIFIER_KEY} = Alt/Option on Mac, Ctrl on PC
33
+ # - {COPY_MODIFIER_MASK} = Alt/Option on Mac, Ctrl on PC
34
+ # - {ALT_MODIFIER_KEY} = Command on Mac, Alt on PC
35
+ # - {ALT_MODIFIER_MASK} = Command on Mac, Alt on PC
36
+ #
37
+ # @abstract Implement the methods described in this class to create a tool.
38
+ # You can not sub-class this class because it is not defined by the API.
39
+ #
40
+ # @version SketchUp 6.0
41
+ class Sketchup::Tool
42
+
43
+ # Instance Methods
44
+
45
+ # The {#activate} method is called by SketchUp when the tool is selected.
46
+ # It is a good place to put most of your initialization, such as instance
47
+ # variables to track the state of the tool.
48
+ #
49
+ # @example
50
+ # def activate
51
+ # puts 'Your tool has been activated.'
52
+ # end
53
+ #
54
+ # @version SketchUp 6.0
55
+ def activate
56
+ end
57
+
58
+ # The {#deactivate} method is called when the tool is deactivated because a
59
+ # different tool was selected.
60
+ #
61
+ # @example
62
+ # def deactivate(view)
63
+ # puts "Your tool has been deactivated in view: #{view}"
64
+ # end
65
+ #
66
+ # @param [Sketchup::View] view
67
+ #
68
+ # @version SketchUp 6.0
69
+ def deactivate(view)
70
+ end
71
+
72
+ # The {#draw} method is called by SketchUp whenever the view is refreshed to
73
+ # allow the tool to do its own drawing. If the tool has some temporary graphics
74
+ # that it wants displayed while it is active, it should implement this method
75
+ # and draw to the {Sketchup::View}.
76
+ #
77
+ # @example
78
+ # def draw(view)
79
+ # # Draw a square.
80
+ # points = [
81
+ # Geom::Point3d.new(0, 0, 0),
82
+ # Geom::Point3d.new(9, 0, 0),
83
+ # Geom::Point3d.new(9, 9, 0),
84
+ # Geom::Point3d.new(0, 9, 0)
85
+ # ]
86
+ # # Fill
87
+ # view.drawing_color = Sketchup::Color.new(255, 128, 128)
88
+ # view.draw(GL_QUADS, points)
89
+ # # Outline
90
+ # view.line_stipple = '' # Solid line
91
+ # view.drawing_color = Sketchup::Color.new(64, 0, 0)
92
+ # view.draw(GL_LINE_LOOP, points)
93
+ # end
94
+ #
95
+ # @note If you draw outside the model bounds you need to implement
96
+ # {Tool#getExtents} which return a bounding box large enough to include the
97
+ # points you draw. Otherwise your drawing will be clipped.
98
+ #
99
+ # @param [Sketchup::View] view
100
+ # A View object where the method was invoked.
101
+ #
102
+ # @see getExtents
103
+ #
104
+ # @see Sketchup::View#draw
105
+ #
106
+ # @version SketchUp 6.0
107
+ def draw(view)
108
+ end
109
+
110
+ # The {#enableVCB?} method is used to tell SketchUp whether to allow the user
111
+ # to enter text into the VCB (value control box, aka the "measurements" panel).
112
+ # If you do not implement this method, then the vcb is disabled by default.
113
+ #
114
+ # @example
115
+ # # For this tool, allow vcb text entry while the tool is active.
116
+ # def enableVCB?
117
+ # return true
118
+ # end
119
+ #
120
+ # @return [Boolean] Return +true+ if you want the VCB enabled
121
+ #
122
+ # @version SketchUp 6.0
123
+ def enableVCB?
124
+ end
125
+
126
+ # In order to accurately draw things, SketchUp needs to know the extents of
127
+ # what it is drawing. If the tool is doing its own drawing, it may need to
128
+ # implement this method to tell SketchUp the extents of what it will be
129
+ # drawing. If you don't implement this method, you may find that part of what
130
+ # the tool is drawing gets clipped to the extents of the rest of the
131
+ # model.
132
+ #
133
+ # @example
134
+ # def getExtents
135
+ # bb = Sketchup.active_model.bounds
136
+ # return bb
137
+ # end
138
+ #
139
+ # @return [Geom::BoundingBox]
140
+ #
141
+ # @version SketchUp 6.0
142
+ def getExtents
143
+ end
144
+
145
+ # The {#getInstructorContentDirectory} method is used to tell SketchUp the
146
+ # directory containing your Tool's instructor content. To use this, create
147
+ # a custom instructor directory, put an index.html file inside of it, and then
148
+ # return that path via this method. If the SketchUp user has the Instructor
149
+ # window open when they activate your tool, they will see your html file.
150
+ #
151
+ # @example
152
+ # def getInstructorContentDirectory
153
+ # extension_path = Sketchup.extensions['MyExtension].extension_path
154
+ # instructor_path = File.join(extension_path, 'MyExtension', 'instructor')
155
+ # return instructor_path
156
+ # end
157
+ #
158
+ # @note Prior to SketchUp 2014 this method would assume the path was relative
159
+ # to the SketchUp resource folder. From 2014 and onwards you can specify the
160
+ # absolute path to an HTML file or the absolute path to a directory
161
+ # containing an index.html file.
162
+ #
163
+ # @return [String] the directory path where the Instructor content exists.
164
+ #
165
+ # @version SketchUp 6.0
166
+ def getInstructorContentDirectory
167
+ end
168
+
169
+ # The {#getMenu} method is called by SketchUp to let the tool provide its own
170
+ # context menu. Most tools will not want to implement this method and,
171
+ # instead, use the normal context menu found on all entities.
172
+ #
173
+ # If you do implement this method, the argument is a Menu. You should use the
174
+ # {Sketchup::Menu#add_item} method to build the context menu.
175
+ #
176
+ # Your tool will use a standard context menu by default if you do not
177
+ # implement this method. Implement this method if you want a context-click to
178
+ # display something other than this default context menu.
179
+ #
180
+ # @example
181
+ # if Sketchup.version.to_i < 15
182
+ # # Compatible with SketchUp 2014 and older:
183
+ # def getMenu(menu)
184
+ # menu.add_item('Say Hello') {
185
+ # UI.messagebox('Hello')
186
+ # }
187
+ # end
188
+ # else
189
+ # # Only works with SketchUp 2015 and newer:
190
+ # def getMenu(menu, flags, x, y, view)
191
+ # ph = view.pick_helper(x, y)
192
+ # entity = ph.best_picked
193
+ # if entity
194
+ # view.model.selection.clear
195
+ # view.model.selection.add(entity)
196
+ # menu.add_item("Erase #{entity.typename}") {
197
+ # entity.erase!
198
+ # }
199
+ # end
200
+ # end
201
+ # end
202
+ #
203
+ # @note In SketchUp 2015 the flags, x, y and view parameters were added. They are
204
+ # needed if you need to pick the entities under the mouse position. The new
205
+ # parameters are optional, but if you need to use one you must include them
206
+ # all.
207
+ #
208
+ # @overload getMenu(menu)
209
+ #
210
+ # @param [Sketchup::Menu] menu
211
+ #
212
+ # @overload getMenu(menu, flags, x, y, view)
213
+ #
214
+ # @note Signature for versions prior to SketchUp 2025.0
215
+ # @version SketchUp 2015
216
+ # @param [Sketchup::Menu] menu
217
+ # @param [Integer] flags
218
+ # A bit mask that tells the state of the modifier keys and other mouse
219
+ # buttons at the time.
220
+ # @param [Integer] x Screen coordinate in physical pixels.
221
+ # @param [Integer] y Screen coordinate in physical pixels.
222
+ # @param [Sketchup::View] view
223
+ #
224
+ # @overload getMenu(menu, flags, x, y, view)
225
+ #
226
+ # @version SketchUp 2025.0
227
+ # @param [Sketchup::Menu] menu
228
+ # @param [Integer] flags
229
+ # A bit mask that tells the state of the modifier keys and other mouse
230
+ # buttons at the time.
231
+ # @param [Float] x Screen coordinate in logical pixels.
232
+ # @param [Float] y Screen coordinate in logical pixels.
233
+ # @param [Sketchup::View] view
234
+ #
235
+ # @return [nil]
236
+ #
237
+ # @version SketchUp 6.0
238
+ def getMenu
239
+ end
240
+
241
+ # The {#onCancel} method is called by SketchUp to cancel the current operation
242
+ # of the tool. The typical response will be to reset the tool to its initial
243
+ # state.
244
+ #
245
+ # The reason identifies the action that triggered the call. The reason can be
246
+ # one of the following values:
247
+ #
248
+ # - +0+: the user canceled the current operation by hitting the escape key.
249
+ # - +1+: the user re-selected the same tool from the toolbar or menu.
250
+ # - +2+: the user did an undo while the tool was active.
251
+ #
252
+ # @example
253
+ # def onCancel(reason, view)
254
+ # puts "MyTool was canceled for reason ##{reason} in view: #{view}"
255
+ # end
256
+ #
257
+ # @note When something is undone {#onCancel} is called before the undo is
258
+ # actually executed. If you need to do something with the model after an undo
259
+ # use {Sketchup::ModelObserver#onTransactionUndo}.
260
+ #
261
+ # @note When {#onKeyDown} is implemented and returns +true+, pressing Esc
262
+ # doesn't trigger {#onCancel}.
263
+ #
264
+ # @param [Integer] reason
265
+ # A reason value (see comments).
266
+ #
267
+ # @param [Sketchup::View] view
268
+ #
269
+ # @version SketchUp 6.0
270
+ def onCancel(reason, view)
271
+ end
272
+
273
+ # The {#onKeyDown} method is called by SketchUp when the user presses a key on
274
+ # the keyboard. If you want to get input from the VCB, you should implement
275
+ # onUserText rather than this method.
276
+ #
277
+ # This method is can be used for special keys such as the Shift key, Ctrl key,
278
+ # and so on, or for just determining which key a user pressed. This method is
279
+ # actually called for all keys that are pressed.
280
+ #
281
+ # There are several
282
+ # "virtual keys" defined as constants you can use. Their use is cross
283
+ # platform. They are:
284
+ #
285
+ # - {VK_ALT}
286
+ # - {VK_COMMAND}
287
+ # - {VK_CONTROL}
288
+ # - {VK_DELETE}
289
+ # - {VK_DOWN}
290
+ # - {VK_END}
291
+ # - {VK_HOME}
292
+ # - {VK_INSERT}
293
+ # - {VK_LEFT}
294
+ # - {VK_MENU}
295
+ # - {VK_NEXT}
296
+ # - {VK_PRIOR}
297
+ # - {VK_RIGHT}
298
+ # - {VK_SHIFT}
299
+ # - {VK_SPACE}
300
+ # - {VK_UP}
301
+ #
302
+ # V6: There is a bug on Windows where the typematic effect does
303
+ # not work. Typematic effects work fine on a Mac.
304
+ #
305
+ # @bug SketchUp 2026.0 (Windows) introduced a regression in {Sketchup::Tool#onKeyDown}
306
+ # where the event didn't trigger when Return/Enter was pressed. This was fixed
307
+ # in SketchUp 2026.1.
308
+ #
309
+ # @example
310
+ # def onKeyDown(key, repeat, flags, view)
311
+ # puts "onKeyDown: key = #{key}"
312
+ # puts " repeat = #{repeat}"
313
+ # puts " flags = #{flags}"
314
+ # puts " view = #{view}"
315
+ # end
316
+ #
317
+ # @param [Integer] key
318
+ # The key that was pressed.
319
+ #
320
+ # @param [Integer] repeat
321
+ # A value of 1 for a single press of a key. A value
322
+ # of 2 if the user has pressed a key and is holding
323
+ # it down.
324
+ #
325
+ # @param [Integer] flags
326
+ # A bit mask that tells the state of the modifier
327
+ # keys at the time of the event.
328
+ #
329
+ # @param [Sketchup::View] view
330
+ #
331
+ # @return [Boolean] Return +true+ to prevent SketchUp from processing the
332
+ # event.
333
+ #
334
+ # @version SketchUp 6.0
335
+ def onKeyDown(key, repeat, flags, view)
336
+ end
337
+
338
+ # The {#onKeyUp} method is called by SketchUp when the user releases a key on
339
+ # the keyboard.
340
+ #
341
+ # @example
342
+ # def onKeyUp(key, repeat, flags, view)
343
+ # puts "onKeyUp: key = #{key}"
344
+ # puts " repeat = #{repeat}"
345
+ # puts " flags = #{flags}"
346
+ # puts " view = #{view}"
347
+ # end
348
+ #
349
+ # @param [Integer] key
350
+ # The key that was pressed.
351
+ #
352
+ # @param [Integer] repeat
353
+ # A value of 1 for a single press of a key. A value
354
+ # of 2 if the user has pressed a key and is holding
355
+ # it down.
356
+ #
357
+ # @param [Integer] flags
358
+ # A bit mask that tells the state of the modifier
359
+ # keys at the time of the event.
360
+ #
361
+ # @param [Sketchup::View] view
362
+ #
363
+ # @return [Boolean] Return +true+ to prevent SketchUp from processing the
364
+ # event.
365
+ #
366
+ # @version SketchUp 6.0
367
+ def onKeyUp(key, repeat, flags, view)
368
+ end
369
+
370
+ # The {#onLButtonDoubleClick} is called by SketchUp when the user double clicks
371
+ # with the left mouse button.
372
+ #
373
+ # @example
374
+ # def onLButtonDoubleClick(flags, x, y, view)
375
+ # puts "onLButtonDoubleClick: flags = #{flags}"
376
+ # puts " x = #{x}"
377
+ # puts " y = #{y}"
378
+ # puts " view = #{view}"
379
+ # end
380
+ #
381
+ # @overload onLButtonDoubleClick(flags, x, y, view)
382
+ #
383
+ # @note Signature for versions prior to SketchUp 2025.0
384
+ # @version SketchUp 6.0
385
+ # @param [Integer] flags A bit mask that tells the state of the modifier
386
+ # keys and other mouse buttons at the time.
387
+ # @param [Integer] x Screen coordinate in physical pixels.
388
+ # @param [Integer] y Screen coordinate in physical pixels.
389
+ # @param [Sketchup::View] view
390
+ #
391
+ # @overload onLButtonDoubleClick(flags, x, y, view)
392
+ #
393
+ # @version SketchUp 2025.0
394
+ # @param [Integer] flags A bit mask that tells the state of the modifier
395
+ # keys and other mouse buttons at the time.
396
+ # @param [Float] x Screen coordinate in logical pixels.
397
+ # @param [Float] y Screen coordinate in logical pixels.
398
+ # @param [Sketchup::View] view
399
+ #
400
+ # @version SketchUp 6.0
401
+ def onLButtonDoubleClick
402
+ end
403
+
404
+ # The {#onLButtonDown} method is called by SketchUp when the left mouse button
405
+ # is pressed. Most tools will implement this method.
406
+ #
407
+ # @example
408
+ # def onLButtonDown(flags, x, y, view)
409
+ # puts "onLButtonDown: flags = #{flags}"
410
+ # puts " x = #{x}"
411
+ # puts " y = #{y}"
412
+ # puts " view = #{view}"
413
+ # end
414
+ #
415
+ # @overload onLButtonDown(flags, x, y, view)
416
+ #
417
+ # @note Signature for versions prior to SketchUp 2025.0
418
+ # @version SketchUp 6.0
419
+ # @param [Integer] flags A bit mask that tells the state of the modifier
420
+ # keys and other mouse buttons at the time.
421
+ # @param [Integer] x Screen coordinate in physical pixels.
422
+ # @param [Integer] y Screen coordinate in physical pixels.
423
+ # @param [Sketchup::View] view
424
+ #
425
+ # @overload onLButtonDown(flags, x, y, view)
426
+ #
427
+ # @version SketchUp 2025.0
428
+ # @param [Integer] flags A bit mask that tells the state of the modifier
429
+ # keys and other mouse buttons at the time.
430
+ # @param [Float] x Screen coordinate in logical pixels.
431
+ # @param [Float] y Screen coordinate in logical pixels.
432
+ # @param [Sketchup::View] view
433
+ #
434
+ # @version SketchUp 6.0
435
+ def onLButtonDown
436
+ end
437
+
438
+ # The {#onLButtonUp} method is called by SketchUp when the left mouse button is
439
+ # released.
440
+ #
441
+ # @example
442
+ # def onLButtonUp(flags, x, y, view)
443
+ # puts "onLButtonUp: flags = #{flags}"
444
+ # puts " x = #{x}"
445
+ # puts " y = #{y}"
446
+ # puts " view = #{view}"
447
+ # end
448
+ #
449
+ # @overload onLButtonUp(flags, x, y, view)
450
+ #
451
+ # @note Signature for versions prior to SketchUp 2025.0
452
+ # @version SketchUp 6.0
453
+ # @param [Integer] flags A bit mask that tells the state of the modifier
454
+ # keys and other mouse buttons at the time.
455
+ # @param [Integer] x Screen coordinate in physical pixels.
456
+ # @param [Integer] y Screen coordinate in physical pixels.
457
+ # @param [Sketchup::View] view
458
+ #
459
+ # @overload onLButtonUp(flags, x, y, view)
460
+ #
461
+ # @version SketchUp 2025.0
462
+ # @param [Integer] flags A bit mask that tells the state of the modifier
463
+ # keys and other mouse buttons at the time.
464
+ # @param [Float] x Screen coordinate in logical pixels.
465
+ # @param [Float] y Screen coordinate in logical pixels.
466
+ # @param [Sketchup::View] view
467
+ #
468
+ # @version SketchUp 6.0
469
+ def onLButtonUp
470
+ end
471
+
472
+ # The {#onMButtonDoubleClick} method is called by SketchUp when the middle
473
+ # mouse button (on a three button mouse) is double-clicked.
474
+ #
475
+ # Only implement this method if you want SketchUp to react to a middle mouse
476
+ # button being double-clicked.
477
+ #
478
+ # @example
479
+ # def onMButtonDoubleClick(flags, x, y, view)
480
+ # puts "onMButtonDoubleClick: flags = #{flags}"
481
+ # puts " x = #{x}"
482
+ # puts " y = #{y}"
483
+ # puts " view = #{view}"
484
+ # end
485
+ #
486
+ # @note Though this method has been documented in the Ruby API for many years,
487
+ # it has never worked properly. We are leaving this documentation in place
488
+ # for now in the hopes of fixing the implementation, but you won't have any
489
+ # luck trying to use it in SU7 and earlier.
490
+ #
491
+ # @overload onMButtonDoubleClick(flags, x, y, view)
492
+ #
493
+ # @note Signature for versions prior to SketchUp 2025.0
494
+ # @version SketchUp 6.0
495
+ # @param [Integer] flags A bit mask that tells the state of the modifier
496
+ # keys and other mouse buttons at the time.
497
+ # @param [Integer] x Screen coordinate in physical pixels.
498
+ # @param [Integer] y Screen coordinate in physical pixels.
499
+ # @param [Sketchup::View] view
500
+ #
501
+ # @overload onMButtonDoubleClick(flags, x, y, view)
502
+ #
503
+ # @version SketchUp 2025.0
504
+ # @param [Integer] flags A bit mask that tells the state of the modifier
505
+ # keys and other mouse buttons at the time.
506
+ # @param [Float] x Screen coordinate in logical pixels.
507
+ # @param [Float] y Screen coordinate in logical pixels.
508
+ # @param [Sketchup::View] view
509
+ #
510
+ # @version SketchUp 6.0
511
+ def onMButtonDoubleClick
512
+ end
513
+
514
+ # The {#onMButtonDown} method is called by SketchUp when the middle mouse
515
+ # button (on a three button mouse) is down.
516
+ #
517
+ # The Orbit tool is activated by default when the middle mouse button is down.
518
+ # Implement this method if you want a middle mouse button to do something
519
+ # other than invoke the Orbit tool.
520
+ #
521
+ # @example
522
+ # def onMButtonDown(flags, x, y, view)
523
+ # puts "onMButtonDown: flags = #{flags}"
524
+ # puts " x = #{x}"
525
+ # puts " y = #{y}"
526
+ # puts " view = #{view}"
527
+ # end
528
+ #
529
+ # @overload onMButtonDown(flags, x, y, view)
530
+ #
531
+ # @note Signature for versions prior to SketchUp 2025.0
532
+ # @version SketchUp 6.0
533
+ # @param [Integer] flags A bit mask that tells the state of the modifier
534
+ # keys and other mouse buttons at the time.
535
+ # @param [Integer] x Screen coordinate in physical pixels.
536
+ # @param [Integer] y Screen coordinate in physical pixels.
537
+ # @param [Sketchup::View] view
538
+ #
539
+ # @overload onMButtonDown(flags, x, y, view)
540
+ #
541
+ # @version SketchUp 2025.0
542
+ # @param [Integer] flags A bit mask that tells the state of the modifier
543
+ # keys and other mouse buttons at the time.
544
+ # @param [Float] x Screen coordinate in logical pixels.
545
+ # @param [Float] y Screen coordinate in logical pixels.
546
+ # @param [Sketchup::View] view
547
+ #
548
+ # @version SketchUp 6.0
549
+ def onMButtonDown
550
+ end
551
+
552
+ # The {#onMButtonUp} method is called by SketchUp when the middle mouse button
553
+ # (on a three button mouse) is released.
554
+ #
555
+ # SketchUp returns to the previous tool from the Orbit tool when the middle
556
+ # mouse button is released. Implement this method if you want a middle mouse
557
+ # button to do something other than return to the previous tool when in the
558
+ # Orbit tool.
559
+ #
560
+ # @example
561
+ # def onMButtonUp(flags, x, y, view)
562
+ # puts "onMButtonUp: flags = #{flags}"
563
+ # puts " x = #{x}"
564
+ # puts " y = #{y}"
565
+ # puts " view = #{view}"
566
+ # end
567
+ #
568
+ # @overload onMButtonUp(flags, x, y, view)
569
+ #
570
+ # @note Signature for versions prior to SketchUp 2025.0
571
+ # @version SketchUp 6.0
572
+ # @param [Integer] flags A bit mask that tells the state of the modifier
573
+ # keys and other mouse buttons at the time.
574
+ # @param [Integer] x Screen coordinate in physical pixels.
575
+ # @param [Integer] y Screen coordinate in physical pixels.
576
+ # @param [Sketchup::View] view
577
+ #
578
+ # @overload onMButtonUp(flags, x, y, view)
579
+ #
580
+ # @version SketchUp 2025.0
581
+ # @param [Integer] flags A bit mask that tells the state of the modifier
582
+ # keys and other mouse buttons at the time.
583
+ # @param [Float] x Screen coordinate in logical pixels.
584
+ # @param [Float] y Screen coordinate in logical pixels.
585
+ # @param [Sketchup::View] view
586
+ #
587
+ # @version SketchUp 6.0
588
+ def onMButtonUp
589
+ end
590
+
591
+ # The {#onMouseEnter} method is called by SketchUp when the mouse enters the
592
+ # viewport.
593
+ #
594
+ # @example
595
+ # def onMouseEnter(view)
596
+ # puts "onMouseEnter: view = #{view}"
597
+ # end
598
+ #
599
+ # @param [Sketchup::View] view
600
+ #
601
+ # @version SketchUp 6.0
602
+ def onMouseEnter(view)
603
+ end
604
+
605
+ # The {#onMouseLeave} method is called by SketchUp when the mouse leaves the
606
+ # viewport.
607
+ #
608
+ # @example
609
+ # def onMouseLeave(view)
610
+ # puts "onMouseLeave: view = #{view}"
611
+ # end
612
+ #
613
+ # @param [Sketchup::View] view
614
+ #
615
+ # @version SketchUp 6.0
616
+ def onMouseLeave(view)
617
+ end
618
+
619
+ # The {#onMouseMove} method is called by SketchUp whenever the mouse is moved.
620
+ # You will often want to implement this method.
621
+ #
622
+ # Try to make this method as efficient as possible because this method is
623
+ # called often.
624
+ #
625
+ # @example
626
+ # def onMouseMove(flags, x, y, view)
627
+ # puts "onMouseMove: flags = #{flags}"
628
+ # puts " x = #{x}"
629
+ # puts " y = #{y}"
630
+ # puts " view = #{view}"
631
+ # end
632
+ #
633
+ # @overload onMouseMove(flags, x, y, view)
634
+ #
635
+ # @note Signature for versions prior to SketchUp 2025.0
636
+ # @version SketchUp 6.0
637
+ # @param [Integer] flags A bit mask that tells the state of the modifier
638
+ # keys and other mouse buttons at the time.
639
+ # @param [Integer] x Screen coordinate in physical pixels.
640
+ # @param [Integer] y Screen coordinate in physical pixels.
641
+ # @param [Sketchup::View] view
642
+ #
643
+ # @overload onMouseMove(flags, x, y, view)
644
+ #
645
+ # @version SketchUp 2025.0
646
+ # @param [Integer] flags A bit mask that tells the state of the modifier
647
+ # keys and other mouse buttons at the time.
648
+ # @param [Float] x Screen coordinate in logical pixels.
649
+ # @param [Float] y Screen coordinate in logical pixels.
650
+ # @param [Sketchup::View] view
651
+ #
652
+ # @version SketchUp 6.0
653
+ def onMouseMove
654
+ end
655
+
656
+ # The {#onMouseWheel} method is called by SketchUp when the mouse scroll wheel
657
+ # is used.
658
+ #
659
+ # @example
660
+ # class ExampleTool
661
+ #
662
+ # def initialize
663
+ # @property_value = 0
664
+ # @rect = [
665
+ # Geom::Point3d.new(100, 150, 0),
666
+ # Geom::Point3d.new(300, 150, 0),
667
+ # Geom::Point3d.new(300, 250, 0),
668
+ # Geom::Point3d.new(100, 250, 0),
669
+ # ]
670
+ # end
671
+ #
672
+ # def onMouseMove(flags, x, y, view)
673
+ # view.invalidate
674
+ # end
675
+ #
676
+ # def onMouseWheel(flags, delta, x, y, view)
677
+ # # If the cursor is not within the bounds of the rectangle, return false
678
+ # # to let SketchUp do its default action (zoom).
679
+ # point = Geom::Point3d.new(x, y)
680
+ # return false unless Geom.point_in_polygon_2D(point, @rect, true)
681
+ #
682
+ # # If cursor is within the bounds of the rectangle, update the value
683
+ # # and prevent the default zoom.
684
+ # @property_value += delta
685
+ # view.invalidate
686
+ # true
687
+ # end
688
+ #
689
+ # def draw(view)
690
+ # view.line_width = 2
691
+ # view.line_stipple = ''
692
+ # view.drawing_color = 'red'
693
+ # view.draw2d(GL_QUADS, @rect)
694
+ #
695
+ # point = Geom::Point3d.new(120, 170)
696
+ # view.draw_text(point, "Value: #{@property_value}",
697
+ # size: 20, bold: true, color: 'black')
698
+ # end
699
+ #
700
+ # end
701
+ #
702
+ # Sketchup.active_model.select_tool(ExampleTool.new)
703
+ #
704
+ # @overload onMouseWheel(flags, delta, x, y, view)
705
+ #
706
+ # @note Signature for versions prior to SketchUp 2025.0
707
+ # @version SketchUp 2019.2
708
+ # @param [Integer] flags A bit mask that tells the state of the modifier
709
+ # keys and other mouse buttons at the time.
710
+ # @param [Integer] delta Either +1+ or +-1+ depending on which direction the
711
+ # mouse wheel scrolled.
712
+ # @param [Integer] x Screen coordinate in physical pixels.
713
+ # @param [Integer] y Screen coordinate in physical pixels.
714
+ # @param [Sketchup::View] view
715
+ #
716
+ # @overload onMouseWheel(flags, delta, x, y, view)
717
+ #
718
+ # @version SketchUp 2025.0
719
+ # @param [Integer] flags A bit mask that tells the state of the modifier
720
+ # keys and other mouse buttons at the time.
721
+ # @param [Integer] delta Either +1+ or +-1+ depending on which direction the
722
+ # mouse wheel scrolled.
723
+ # @param [Float] x Screen coordinate in logical pixels.
724
+ # @param [Float] y Screen coordinate in logical pixels.
725
+ # @param [Sketchup::View] view
726
+ #
727
+ # @return [Boolean] Return +true+ to prevent SketchUp from performing default
728
+ # zoom action.
729
+ #
730
+ # @version SketchUp 2019.2
731
+ def onMouseWheel
732
+ end
733
+
734
+ # The {#onRButtonDoubleClick} is called by SketchUp when the user double clicks
735
+ # with the right mouse button.
736
+ #
737
+ # @example
738
+ # def onRButtonDoubleClick(flags, x, y, view)
739
+ # puts "onRButtonDoubleClick: flags = #{flags}"
740
+ # puts " x = #{x}"
741
+ # puts " y = #{y}"
742
+ # puts " view = #{view}"
743
+ # end
744
+ #
745
+ # @overload onRButtonDoubleClick(flags, x, y, view)
746
+ #
747
+ # @note Signature for versions prior to SketchUp 2025.0
748
+ # @version SketchUp 6.0
749
+ # @param [Integer] flags A bit mask that tells the state of the modifier
750
+ # keys and other mouse buttons at the time.
751
+ # @param [Integer] x Screen coordinate in physical pixels.
752
+ # @param [Integer] y Screen coordinate in physical pixels.
753
+ # @param [Sketchup::View] view
754
+ #
755
+ # @overload onRButtonDoubleClick(flags, x, y, view)
756
+ #
757
+ # @version SketchUp 2025.0
758
+ # @param [Integer] flags A bit mask that tells the state of the modifier
759
+ # keys and other mouse buttons at the time.
760
+ # @param [Float] x Screen coordinate in logical pixels.
761
+ # @param [Float] y Screen coordinate in logical pixels.
762
+ # @param [Sketchup::View] view
763
+ #
764
+ # @version SketchUp 6.0
765
+ def onRButtonDoubleClick
766
+ end
767
+
768
+ # The {#onRButtonDown} method is called by SketchUp when the user presses
769
+ # the right mouse button. Implement this method, along with the tool.getMenu
770
+ # method, when you want your tool to do something other than display the
771
+ # default context menu when the right mouse button is clicked.
772
+ #
773
+ # @example
774
+ # def onRButtonDown(flags, x, y, view)
775
+ # puts "onRButtonDown: flags = #{flags}"
776
+ # puts " x = #{x}"
777
+ # puts " y = #{y}"
778
+ # puts " view = #{view}"
779
+ # end
780
+ #
781
+ # @overload onRButtonDown(flags, x, y, view)
782
+ #
783
+ # @note Signature for versions prior to SketchUp 2025.0
784
+ # @version SketchUp 6.0
785
+ # @param [Integer] flags A bit mask that tells the state of the modifier
786
+ # keys and other mouse buttons at the time.
787
+ # @param [Integer] x Screen coordinate in physical pixels.
788
+ # @param [Integer] y Screen coordinate in physical pixels.
789
+ # @param [Sketchup::View] view
790
+ #
791
+ # @overload onRButtonDown(flags, x, y, view)
792
+ #
793
+ # @version SketchUp 2025.0
794
+ # @param [Integer] flags A bit mask that tells the state of the modifier
795
+ # keys and other mouse buttons at the time.
796
+ # @param [Float] x Screen coordinate in logical pixels.
797
+ # @param [Float] y Screen coordinate in logical pixels.
798
+ # @param [Sketchup::View] view
799
+ #
800
+ # @version SketchUp 6.0
801
+ def onRButtonDown
802
+ end
803
+
804
+ # The {#onRButtonUp} method is called by SketchUp when the user releases the
805
+ # right mouse button.
806
+ #
807
+ # @example
808
+ # def onRButtonUp(flags, x, y, view)
809
+ # puts "onRButtonUp: flags = #{flags}"
810
+ # puts " x = #{x}"
811
+ # puts " y = #{y}"
812
+ # puts " view = #{view}"
813
+ # end
814
+ #
815
+ # @overload onRButtonUp(flags, x, y, view)
816
+ #
817
+ # @note Signature for versions prior to SketchUp 2025.0
818
+ # @version SketchUp 6.0
819
+ # @param [Integer] flags A bit mask that tells the state of the modifier
820
+ # keys and other mouse buttons at the time.
821
+ # @param [Integer] x Screen coordinate in physical pixels.
822
+ # @param [Integer] y Screen coordinate in physical pixels.
823
+ # @param [Sketchup::View] view
824
+ #
825
+ # @overload onRButtonUp(flags, x, y, view)
826
+ #
827
+ # @version SketchUp 2025.0
828
+ # @param [Integer] flags A bit mask that tells the state of the modifier
829
+ # keys and other mouse buttons at the time.
830
+ # @param [Float] x Screen coordinate in logical pixels.
831
+ # @param [Float] y Screen coordinate in logical pixels.
832
+ # @param [Sketchup::View] view
833
+ #
834
+ # @version SketchUp 6.0
835
+ def onRButtonUp
836
+ end
837
+
838
+ # The {#onReturn} method is called by SketchUp when the user hit the Return key
839
+ # to complete an operation in the tool. This method will rarely need to be
840
+ # implemented.
841
+ #
842
+ # @bug SketchUp 2025.0 (Windows) introduced a regression where the event didn't
843
+ # trigger when Return/Enter was pressed. This was fixed in SketchUp 2026.0.
844
+ #
845
+ # @example
846
+ # def onReturn(view)
847
+ # puts "onReturn(#{view})"
848
+ # end
849
+ #
850
+ # @param [Sketchup::View] view
851
+ #
852
+ # @return [nil]
853
+ #
854
+ # @version SketchUp 6.0
855
+ def onReturn(view)
856
+ end
857
+
858
+ # The {#onSetCursor} method is called by SketchUp when the tool wants to set
859
+ # the cursor.
860
+ #
861
+ # @example
862
+ # def onSetCursor
863
+ # puts "onSetCursor: view = #{view}"
864
+ # # You would set your cursor here. See UI.set_cursor method.
865
+ # UI.set_cursor(@cursor_id) # UI.set_cursor return true
866
+ # end
867
+ #
868
+ # @return [Boolean] Return +true+ to prevent SketchUp using the default cursor.
869
+ #
870
+ # @version SketchUp 6.0
871
+ def onSetCursor
872
+ end
873
+
874
+ # The {#onUserText} method is called by SketchUp when the user has typed text
875
+ # into the VCB and hit return.
876
+ #
877
+ # @example
878
+ # def onUserText(text, view)
879
+ # @distance = text.to_l
880
+ # rescue ArgumentError
881
+ # view.tooltip = 'Invalid length'
882
+ # end
883
+ #
884
+ # @param [String] text
885
+ # The text string that was typed into the VCB.
886
+ #
887
+ # @param [Sketchup::View] view
888
+ # A view object where the method was invoked.
889
+ #
890
+ # @version SketchUp 6.0
891
+ def onUserText(text, view)
892
+ end
893
+
894
+ # The {#resume} method is called by SketchUp when the tool becomes active again
895
+ # after being suspended.
896
+ #
897
+ # @example
898
+ # def resume(view)
899
+ # puts "resume: view = #{view}"
900
+ # end
901
+ #
902
+ # @param [Sketchup::View] view
903
+ #
904
+ # @version SketchUp 6.0
905
+ def resume(view)
906
+ end
907
+
908
+ # The {#suspend} method is called by SketchUp when the tool temporarily becomes
909
+ # inactive because another tool has been activated. This typically happens
910
+ # when a viewing tool is activated, such as when orbit is active due to the
911
+ # middle mouse button.
912
+ #
913
+ # @example
914
+ # def suspend(view)
915
+ # puts "suspend: view = #{view}"
916
+ # end
917
+ #
918
+ # @param [Sketchup::View] view
919
+ #
920
+ # @version SketchUp 6.0
921
+ def suspend(view)
922
+ end
923
+
924
+ end