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,351 +1,351 @@
1
- # Copyright:: Copyright 2023 Trimble Inc.
2
- # License:: The MIT License (MIT)
3
-
4
- # The Geom module defines a number of Module methods that let you perform
5
- # different geometric operations.
6
- #
7
- # The methods in this module take lines
8
- # and planes as arguments. There is no special class for representing lines or
9
- # planes. Arrays are used for both.
10
- #
11
- # A line can be represented as either an Array of a point and a
12
- # vector, or as an Array of two points.
13
- # line1 = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
14
- # line2 = [Geom::Point3d.new(0, 0, 0), Geom::Point3d.new(0, 0, 100)]
15
- #
16
- # A plane can be represented as either an Array
17
- # of a point and a vector, or as an Array of 4 numbers that give the
18
- # coefficients of a plane equation.
19
- # plane1 = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
20
- # plane2 = [0, 0, 1, 0]
21
- #
22
- # There are several good books on 3D math if you are new to
23
- # the concepts of a line, plane, and vector.
24
- #
25
- # @note Lines and Planes are infinite.
26
- #
27
- # @version SketchUp 6.0
28
- module Geom
29
-
30
- # Class Methods
31
-
32
- # The {.closest_points} method is used to compute the closest points on two
33
- # lines.
34
- #
35
- # line.
36
- #
37
- # @example
38
- # line1 = [Geom::Point3d.new(0, 2, 0), Geom::Vector3d.new(1, 0, 0)]
39
- # line2 = [Geom::Point3d.new(3, 0, 0), Geom::Vector3d.new(0, 1, 0)]
40
- # # This will return a point Point3d(3, 2, 0).
41
- # points = Geom.closest_points(line1, line2)
42
- #
43
- # @param [Array(Geom::Point3d, Geom::Vector3d)] line1
44
- # The first line to
45
- # intersect
46
- #
47
- # @param [Array(Geom::Point3d, Geom::Vector3d)] line2
48
- # The second line to
49
- # intersect
50
- #
51
- # @return [Array(Geom::Point3d, Geom::Point3d)] An array of two points. The
52
- # first point is on the first line and the second point is on the second
53
- #
54
- # @version SketchUp 6.0
55
- def self.closest_points(line1, line2)
56
- end
57
-
58
- # The {.fit_plane_to_points} method is used to compute a plane that is a best
59
- # fit to an array of points. If more than three points are given some of the
60
- # points may not be on the plane.
61
- #
62
- # The plane is returned as an {Array} of 4 numbers which are the
63
- # coefficients of the plane equation <code>Ax + By + Cz + D = 0</code>.
64
- #
65
- # @example
66
- # point1 = Geom::Point3d.new(0, 0, 0)
67
- # point2 = Geom::Point3d.new(10, 10, 10)
68
- # point3 = Geom::Point3d.new(25, 25, 25)
69
- # plane = Geom.fit_plane_to_points(point1, point2, point3)
70
- #
71
- # @overload fit_plane_to_points(point1, point2, point3, ...)
72
- #
73
- # @param [Geom::Point3d] point1
74
- # @param [Geom::Point3d] point2
75
- # @param [Geom::Point3d] point3
76
- # @return [Array(Geom::Point3d, Geom::Vector3d)] A plane
77
- #
78
- # @overload fit_plane_to_points(points)
79
- #
80
- # @param [Array<Geom::Point3d>] points
81
- # @return [Array(Geom::Point3d, Geom::Vector3d)] A plane
82
- #
83
- # @version SketchUp 6.0
84
- def self.fit_plane_to_points(*args)
85
- end
86
-
87
- # The {.intersect_line_line} computes the intersection of two lines.
88
- #
89
- # @example
90
- # # Defines a line parallel to the Y axis, offset 20 units.
91
- # line1 = [Geom::Point3d.new(20, 0, 0), Geom::Vector3d.new(0, 1, 0)]
92
- # # Defines a line parallel to the X axis, offset 10 units.
93
- # line2 = [Geom::Point3d.new(0, 10, 0), Geom::Point3d.new(20, 10, 0)]
94
- # # This will return a point Point3d(20, 10, 0).
95
- # point = Geom.intersect_line_line(line1, line2)
96
- #
97
- # @param [Array(Geom::Point3d, Geom::Vector3d)] line1
98
- # The first line to
99
- # intersect.
100
- #
101
- # @param [Array(Geom::Point3d, Geom::Vector3d)] line2
102
- # The second line to
103
- # intersect.
104
- #
105
- # @return [Geom::Point3d, nil] The intersection point. Returns +nil+ if they
106
- # do not intersect.
107
- #
108
- # @see Geom
109
- # The Geom module for alternative versions of defining a line.
110
- #
111
- # @version SketchUp 6.0
112
- def self.intersect_line_line(line1, line2)
113
- end
114
-
115
- # The {.intersect_line_plane} method is used to compute the intersection of a
116
- # line and a plane.
117
- #
118
- # @example
119
- # # Defines a line parallel to the X axis, offset 20 units.
120
- # line = [Geom::Point3d.new(-10, 20, 0), Geom::Vector3d.new(1, 0, 0)]
121
- # # Defines a plane with it's normal parallel to the x axis.
122
- # plane = [Geom::Point3d.new(10, 0 ,0), Geom::Vector3d.new(1, 0, 0)]
123
- # # This will return a point Point3d(10, 20, 0).
124
- # point = Geom.intersect_line_plane(line, plane)
125
- #
126
- # @param [Array(Geom::Point3d, Geom::Vector3d)] line
127
- #
128
- # @param [Array(Geom::Point3d, Geom::Point3d)] plane
129
- #
130
- # @return [Geom::Point3d, nil] A Point3d object. Returns +nil+ if they do not
131
- # intersect.
132
- #
133
- # @see Geom
134
- # The Geom module for alternative versions of defining lines and
135
- # planes.
136
- #
137
- # @version SketchUp 6.0
138
- def self.intersect_line_plane(line, plane)
139
- end
140
-
141
- # The {.intersect_plane_plane} method is used to compute the intersection of
142
- # two planes.
143
- #
144
- # @example
145
- # # Defines a plane with it's normal parallel to the x axis.
146
- # plane1 = [Geom::Point3d.new(10, 0 ,0), Geom::Vector3d.new(1, 0, 0)]
147
- # # Defines a plane with it's normal parallel to the y axis.
148
- # plane2 = [Geom::Point3d.new(0, 20 ,0), Geom::Vector3d.new(0, 1, 0)]
149
- # # This will return a line [Point3d(10, 20, 0), Vector3d(0, 0, 1)].
150
- # line = Geom.intersect_plane_plane(plane1, plane2)
151
- #
152
- # @param [Array(Geom::Point3d, Geom::Point3d)] plane1
153
- # The first plane to
154
- # intersect
155
- #
156
- # @param [Array(Geom::Point3d, Geom::Point3d)] plane2
157
- # The second plane to
158
- # intersect
159
- #
160
- # @return [Array(Geom::Point3d, Geom::Vector3d)] A line where the planes
161
- # intersect if successful. Returns +nil+ if the planes do not intersect.
162
- #
163
- # @version SketchUp 6.0
164
- def self.intersect_plane_plane(plane1, plane2)
165
- end
166
-
167
- # The {.linear_combination} method is used to compute the linear combination of
168
- # points or vectors.
169
- #
170
- # A linear combination is a standard term for vector math. It is defined as
171
- # vector = weight1 * vector1 + weight2 * vector2.
172
- #
173
- # @example
174
- # point1 = Geom::Point3d.new(1, 1, 1)
175
- # point2 = Geom::Point3d.new(10, 10, 10)
176
- # # Gets the point on the line segment connecting point1 and point2 that is
177
- # # 3/4 the way from point1 to point2: Point3d(7.75, 7.75, 7.75).
178
- # point = Geom.linear_combination(0.25, point1, 0.75, point2)
179
- #
180
- # @overload linear_combination(weight1, point1, weight2, point2)
181
- #
182
- # @param [Float] weight1
183
- # @param [Geom::Point3d] point1
184
- # @param [Float] weight2
185
- # @param [Geom::Point3d] point2
186
- # @return [Geom::Point3d]
187
- #
188
- # @overload linear_combination(weight1, vector1, weight2, vector2)
189
- #
190
- # @param [Float] weight1
191
- # @param [Geom::Vector3d] vector1
192
- # @param [Float] weight2
193
- # @param [Geom::Vector3d] vector2
194
- # @return [Geom::Vector3d]
195
- #
196
- # @version SketchUp 6.0
197
- def self.linear_combination(weight1, pt_or_vect1, weight2, pt_or_vect2)
198
- end
199
-
200
- # The {.point_in_polygon_2D} method is used to determine whether a point is
201
- # inside a polygon. The z component of both the point you're checking and
202
- # the points in the polygon are ignored, effectively making it a 2-d check.
203
- #
204
- # @example
205
- # # Create a point that we want to check. (Note that the 3rd coordinate,
206
- # # the z, is ignored for purposes of the check.)
207
- # point = Geom::Point3d.new(5, 0, 10)
208
- #
209
- # # Create a series of points of a triangle we want to check against.
210
- # triangle = []
211
- # triangle << Geom::Point3d.new(0, 0, 0)
212
- # triangle << Geom::Point3d.new(10, 0, 0)
213
- # triangle << Geom::Point3d.new(0, 10, 0)
214
- #
215
- # # Test to see if our point is inside the triangle, counting hits on
216
- # # the border as an intersection in this case.
217
- # hits_on_border_count = true
218
- # status = Geom.point_in_polygon_2D(point, triangle, hits_on_border_count)
219
- #
220
- # @param [Geom::Point3d] point
221
- #
222
- # @param [Array<Geom::Point3d>] polygon
223
- # An array of points that represent the
224
- # corners of the polygon you are checking against.
225
- #
226
- # @param [Boolean] check_border
227
- # Pass true if a point on the border should be
228
- # counted as inside the polygon.
229
- #
230
- # @return [Boolean] +true+ if the point is inside the polygon.
231
- #
232
- # @version SketchUp 6.0
233
- def self.point_in_polygon_2D(point, polygon, check_border)
234
- end
235
-
236
- # Tessellates a polygon, represented as a collection of 3D points. Can include
237
- # holes by providing collections of points describing the inner loops. This is
238
- # intended to be used for planar polygons.
239
- #
240
- # Useful to draw concave polygons using {Sketchup::View#draw} or
241
- # {Sketchup::View#draw2d}.
242
- #
243
- # It can also be useful for importers where the input format describes only the
244
- # loops for a polygon and you want to work with a collection of triangles.
245
- #
246
- # <b>Polygon with two holes, one empty and one filled:</b>
247
- #
248
- # <i>(See "Drawing a polygon with holes from a custom tool" example)</i>
249
- #
250
- # rdoc-image:images/geom-tesselation-polygon-with-holes.png
251
- #
252
- # @example Iterate over each triangle in the returned set
253
- # polygon = [
254
- # Geom::Point3d.new(0, 0, 0),
255
- # Geom::Point3d.new(90, 0, 0),
256
- # Geom::Point3d.new(60, 40, 0),
257
- # Geom::Point3d.new(90, 90, 0),
258
- # Geom::Point3d.new(30, 70, 0),
259
- # ]
260
- # triangles = Geom.tesselate(polygon)
261
- # triangles.each_slice(3) { |triangle|
262
- # # Work with each triangle set...
263
- # }
264
- # # Or get an array of triangles:
265
- # triangles_set = triangles.each_slice(3).to_a
266
- #
267
- # @example Drawing a polygon with holes from a custom tool
268
- # class ExampleTool
269
- #
270
- # def initialize
271
- # polygon = [
272
- # Geom::Point3d.new(0, 0, 0),
273
- # Geom::Point3d.new(90, 0, 0),
274
- # Geom::Point3d.new(60, 40, 0),
275
- # Geom::Point3d.new(90, 90, 0),
276
- # Geom::Point3d.new(30, 70, 0),
277
- # ] # Counter-clockwise order
278
- # hole1 = [
279
- # Geom::Point3d.new(20, 10, 0),
280
- # Geom::Point3d.new(40, 10, 0),
281
- # Geom::Point3d.new(45, 25, 0),
282
- # Geom::Point3d.new(30, 20, 0),
283
- # Geom::Point3d.new(25, 25, 0),
284
- # ].reverse # Clockwise order - empty hole
285
- # hole2 = [
286
- # Geom::Point3d.new(30, 40, 0),
287
- # Geom::Point3d.new(50, 40, 0),
288
- # Geom::Point3d.new(50, 50, 0),
289
- # Geom::Point3d.new(30, 50, 0),
290
- # ].reverse # Counter-clockwise order - filled hole
291
- # @triangles = Geom.tesselate(polygon, hole1, hole2)
292
- # end
293
- #
294
- # def activate
295
- # Sketchup.active_model.active_view.invalidate
296
- # end
297
- #
298
- # def onMouseMove(flags, x, y, view)
299
- # view.invalidate
300
- # end
301
- #
302
- # def getExtents
303
- # bounds = Geom::BoundingBox.new
304
- # bounds.add(@triangles)
305
- # bounds
306
- # end
307
- #
308
- # def draw(view)
309
- # view.drawing_color = Sketchup::Color.new(192, 0, 0)
310
- # view.draw(GL_TRIANGLES, @triangles)
311
- # end
312
- #
313
- # end
314
- #
315
- # Sketchup.active_model.select_tool(ExampleTool.new)
316
- #
317
- # @note The winding order of the polygons matter. The outer loop should be
318
- # in counter-clockwise order. To cut an empty hole the inner loops should be
319
- # in clockwise order, otherwise they will create a loop filled with
320
- # triangles.
321
- #
322
- # @note The tesselation is using the same logic as SketchUp its rendering
323
- # pipeline. But the exact result is an implementation detail which may change
324
- # between versions. In particularly the results of degenerate polygons and
325
- # non-planar polygons is undefined as part of the API contract. Such
326
- # polygons are for example polygons where all points are colinear, polygons
327
- # with duplicate points, non-planar polygons.
328
- #
329
- # @note If you want the triangles from an existing {Sketchup::Face} it's better
330
- # to use {Sketchup::Face#mesh}.
331
- #
332
- # @param [Array<Geom::Point3d>] polygon_loop_points
333
- #
334
- # @param [Array<Array<Geom::Point3d>>] inner_loop_points
335
- #
336
- # @raise [ArgumentError] if any of the loops contain less than three points.
337
- #
338
- # @raise [RuntimeError] if the tesselator returned an error.
339
- #
340
- # @return [Array<Geom::Point3d>] an array of points with a stride of three
341
- # representing a set of triangles.
342
- #
343
- # @see Sketchup::View#draw
344
- #
345
- # @see Sketchup::View#draw2d
346
- #
347
- # @version SketchUp 2020.0
348
- def self.tesselate(polygon_loop_points, *inner_loop_points)
349
- end
350
-
351
- end
1
+ # Copyright:: Copyright 2026 Trimble Inc.
2
+ # License:: The MIT License (MIT)
3
+
4
+ # The Geom module defines a number of Module methods that let you perform
5
+ # different geometric operations.
6
+ #
7
+ # The methods in this module take lines
8
+ # and planes as arguments. There is no special class for representing lines or
9
+ # planes. Arrays are used for both.
10
+ #
11
+ # A line can be represented as either an Array of a point and a
12
+ # vector, or as an Array of two points.
13
+ # line1 = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
14
+ # line2 = [Geom::Point3d.new(0, 0, 0), Geom::Point3d.new(0, 0, 100)]
15
+ #
16
+ # A plane can be represented as either an Array
17
+ # of a point and a vector, or as an Array of 4 numbers that give the
18
+ # coefficients of a plane equation.
19
+ # plane1 = [Geom::Point3d.new(0, 0, 0), Geom::Vector3d.new(0, 0, 1)]
20
+ # plane2 = [0, 0, 1, 0]
21
+ #
22
+ # There are several good books on 3D math if you are new to
23
+ # the concepts of a line, plane, and vector.
24
+ #
25
+ # @note Lines and Planes are infinite.
26
+ #
27
+ # @version SketchUp 6.0
28
+ module Geom
29
+
30
+ # Class Methods
31
+
32
+ # The {.closest_points} method is used to compute the closest points on two
33
+ # lines.
34
+ #
35
+ # line.
36
+ #
37
+ # @example
38
+ # line1 = [Geom::Point3d.new(0, 2, 0), Geom::Vector3d.new(1, 0, 0)]
39
+ # line2 = [Geom::Point3d.new(3, 0, 0), Geom::Vector3d.new(0, 1, 0)]
40
+ # # This will return a point Point3d(3, 2, 0).
41
+ # points = Geom.closest_points(line1, line2)
42
+ #
43
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] line1
44
+ # The first line to
45
+ # intersect
46
+ #
47
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] line2
48
+ # The second line to
49
+ # intersect
50
+ #
51
+ # @return [Array(Geom::Point3d, Geom::Point3d)] An array of two points. The
52
+ # first point is on the first line and the second point is on the second
53
+ #
54
+ # @version SketchUp 6.0
55
+ def self.closest_points(line1, line2)
56
+ end
57
+
58
+ # The {.fit_plane_to_points} method is used to compute a plane that is a best
59
+ # fit to an array of points. If more than three points are given some of the
60
+ # points may not be on the plane.
61
+ #
62
+ # The plane is returned as an {Array} of 4 numbers which are the
63
+ # coefficients of the plane equation <code>Ax + By + Cz + D = 0</code>.
64
+ #
65
+ # @example
66
+ # point1 = Geom::Point3d.new(0, 0, 0)
67
+ # point2 = Geom::Point3d.new(10, 10, 10)
68
+ # point3 = Geom::Point3d.new(25, 25, 25)
69
+ # plane = Geom.fit_plane_to_points(point1, point2, point3)
70
+ #
71
+ # @overload fit_plane_to_points(point1, point2, point3, ...)
72
+ #
73
+ # @param [Geom::Point3d] point1
74
+ # @param [Geom::Point3d] point2
75
+ # @param [Geom::Point3d] point3
76
+ # @return [Array(Float, Float, Float, Float)] A plane
77
+ #
78
+ # @overload fit_plane_to_points(points)
79
+ #
80
+ # @param [Array<Geom::Point3d>] points
81
+ # @return [Array(Float, Float, Float, Float)] A plane
82
+ #
83
+ # @version SketchUp 6.0
84
+ def self.fit_plane_to_points(*args)
85
+ end
86
+
87
+ # The {.intersect_line_line} computes the intersection of two lines.
88
+ #
89
+ # @example
90
+ # # Defines a line parallel to the Y axis, offset 20 units.
91
+ # line1 = [Geom::Point3d.new(20, 0, 0), Geom::Vector3d.new(0, 1, 0)]
92
+ # # Defines a line parallel to the X axis, offset 10 units.
93
+ # line2 = [Geom::Point3d.new(0, 10, 0), Geom::Point3d.new(20, 10, 0)]
94
+ # # This will return a point Point3d(20, 10, 0).
95
+ # point = Geom.intersect_line_line(line1, line2)
96
+ #
97
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] line1
98
+ # The first line to
99
+ # intersect.
100
+ #
101
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] line2
102
+ # The second line to
103
+ # intersect.
104
+ #
105
+ # @return [Geom::Point3d, nil] The intersection point. Returns +nil+ if they
106
+ # do not intersect.
107
+ #
108
+ # @see Geom
109
+ # The Geom module for alternative versions of defining a line.
110
+ #
111
+ # @version SketchUp 6.0
112
+ def self.intersect_line_line(line1, line2)
113
+ end
114
+
115
+ # The {.intersect_line_plane} method is used to compute the intersection of a
116
+ # line and a plane.
117
+ #
118
+ # @example
119
+ # # Defines a line parallel to the X axis, offset 20 units.
120
+ # line = [Geom::Point3d.new(-10, 20, 0), Geom::Vector3d.new(1, 0, 0)]
121
+ # # Defines a plane with it's normal parallel to the x axis.
122
+ # plane = [Geom::Point3d.new(10, 0 ,0), Geom::Vector3d.new(1, 0, 0)]
123
+ # # This will return a point Point3d(10, 20, 0).
124
+ # point = Geom.intersect_line_plane(line, plane)
125
+ #
126
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] line
127
+ #
128
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] plane
129
+ #
130
+ # @return [Geom::Point3d, nil] A Point3d object. Returns +nil+ if they do not
131
+ # intersect.
132
+ #
133
+ # @see Geom
134
+ # The Geom module for alternative versions of defining lines and
135
+ # planes.
136
+ #
137
+ # @version SketchUp 6.0
138
+ def self.intersect_line_plane(line, plane)
139
+ end
140
+
141
+ # The {.intersect_plane_plane} method is used to compute the intersection of
142
+ # two planes.
143
+ #
144
+ # @example
145
+ # # Defines a plane with it's normal parallel to the x axis.
146
+ # plane1 = [Geom::Point3d.new(10, 0 ,0), Geom::Vector3d.new(1, 0, 0)]
147
+ # # Defines a plane with it's normal parallel to the y axis.
148
+ # plane2 = [Geom::Point3d.new(0, 20 ,0), Geom::Vector3d.new(0, 1, 0)]
149
+ # # This will return a line [Point3d(10, 20, 0), Vector3d(0, 0, 1)].
150
+ # line = Geom.intersect_plane_plane(plane1, plane2)
151
+ #
152
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] plane1
153
+ # The first plane to
154
+ # intersect
155
+ #
156
+ # @param [Array(Geom::Point3d, Geom::Vector3d)] plane2
157
+ # The second plane to
158
+ # intersect
159
+ #
160
+ # @return [Array(Geom::Point3d, Geom::Vector3d)] A line where the planes
161
+ # intersect if successful. Returns +nil+ if the planes do not intersect.
162
+ #
163
+ # @version SketchUp 6.0
164
+ def self.intersect_plane_plane(plane1, plane2)
165
+ end
166
+
167
+ # The {.linear_combination} method is used to compute the linear combination of
168
+ # points or vectors.
169
+ #
170
+ # A linear combination is a standard term for vector math. It is defined as
171
+ # vector = weight1 * vector1 + weight2 * vector2.
172
+ #
173
+ # @example
174
+ # point1 = Geom::Point3d.new(1, 1, 1)
175
+ # point2 = Geom::Point3d.new(10, 10, 10)
176
+ # # Gets the point on the line segment connecting point1 and point2 that is
177
+ # # 3/4 the way from point1 to point2: Point3d(7.75, 7.75, 7.75).
178
+ # point = Geom.linear_combination(0.25, point1, 0.75, point2)
179
+ #
180
+ # @overload linear_combination(weight1, point1, weight2, point2)
181
+ #
182
+ # @param [Float] weight1
183
+ # @param [Geom::Point3d] point1
184
+ # @param [Float] weight2
185
+ # @param [Geom::Point3d] point2
186
+ # @return [Geom::Point3d]
187
+ #
188
+ # @overload linear_combination(weight1, vector1, weight2, vector2)
189
+ #
190
+ # @param [Float] weight1
191
+ # @param [Geom::Vector3d] vector1
192
+ # @param [Float] weight2
193
+ # @param [Geom::Vector3d] vector2
194
+ # @return [Geom::Vector3d]
195
+ #
196
+ # @version SketchUp 6.0
197
+ def self.linear_combination(weight1, pt_or_vect1, weight2, pt_or_vect2)
198
+ end
199
+
200
+ # The {.point_in_polygon_2D} method is used to determine whether a point is
201
+ # inside a polygon. The z component of both the point you're checking and
202
+ # the points in the polygon are ignored, effectively making it a 2-d check.
203
+ #
204
+ # @example
205
+ # # Create a point that we want to check. (Note that the 3rd coordinate,
206
+ # # the z, is ignored for purposes of the check.)
207
+ # point = Geom::Point3d.new(5, 0, 10)
208
+ #
209
+ # # Create a series of points of a triangle we want to check against.
210
+ # triangle = []
211
+ # triangle << Geom::Point3d.new(0, 0, 0)
212
+ # triangle << Geom::Point3d.new(10, 0, 0)
213
+ # triangle << Geom::Point3d.new(0, 10, 0)
214
+ #
215
+ # # Test to see if our point is inside the triangle, counting hits on
216
+ # # the border as an intersection in this case.
217
+ # hits_on_border_count = true
218
+ # status = Geom.point_in_polygon_2D(point, triangle, hits_on_border_count)
219
+ #
220
+ # @param [Geom::Point3d] point
221
+ #
222
+ # @param [Array<Geom::Point3d>] polygon
223
+ # An array of points that represent the
224
+ # corners of the polygon you are checking against.
225
+ #
226
+ # @param [Boolean] check_border
227
+ # Pass true if a point on the border should be
228
+ # counted as inside the polygon.
229
+ #
230
+ # @return [Boolean] +true+ if the point is inside the polygon.
231
+ #
232
+ # @version SketchUp 6.0
233
+ def self.point_in_polygon_2D(point, polygon, check_border)
234
+ end
235
+
236
+ # Tessellates a polygon, represented as a collection of 3D points. Can include
237
+ # holes by providing collections of points describing the inner loops. This is
238
+ # intended to be used for planar polygons.
239
+ #
240
+ # Useful to draw concave polygons using {Sketchup::View#draw} or
241
+ # {Sketchup::View#draw2d}.
242
+ #
243
+ # It can also be useful for importers where the input format describes only the
244
+ # loops for a polygon and you want to work with a collection of triangles.
245
+ #
246
+ # <b>Polygon with two holes, one empty and one filled:</b>
247
+ #
248
+ # <i>(See "Drawing a polygon with holes from a custom tool" example)</i>
249
+ #
250
+ # rdoc-image:images/geom-tesselation-polygon-with-holes.png
251
+ #
252
+ # @example Iterate over each triangle in the returned set
253
+ # polygon = [
254
+ # Geom::Point3d.new(0, 0, 0),
255
+ # Geom::Point3d.new(90, 0, 0),
256
+ # Geom::Point3d.new(60, 40, 0),
257
+ # Geom::Point3d.new(90, 90, 0),
258
+ # Geom::Point3d.new(30, 70, 0),
259
+ # ]
260
+ # triangles = Geom.tesselate(polygon)
261
+ # triangles.each_slice(3) { |triangle|
262
+ # # Work with each triangle set...
263
+ # }
264
+ # # Or get an array of triangles:
265
+ # triangles_set = triangles.each_slice(3).to_a
266
+ #
267
+ # @example Drawing a polygon with holes from a custom tool
268
+ # class ExampleTool
269
+ #
270
+ # def initialize
271
+ # polygon = [
272
+ # Geom::Point3d.new(0, 0, 0),
273
+ # Geom::Point3d.new(90, 0, 0),
274
+ # Geom::Point3d.new(60, 40, 0),
275
+ # Geom::Point3d.new(90, 90, 0),
276
+ # Geom::Point3d.new(30, 70, 0),
277
+ # ] # Counter-clockwise order
278
+ # hole1 = [
279
+ # Geom::Point3d.new(20, 10, 0),
280
+ # Geom::Point3d.new(40, 10, 0),
281
+ # Geom::Point3d.new(45, 25, 0),
282
+ # Geom::Point3d.new(30, 20, 0),
283
+ # Geom::Point3d.new(25, 25, 0),
284
+ # ].reverse # Clockwise order - empty hole
285
+ # hole2 = [
286
+ # Geom::Point3d.new(30, 40, 0),
287
+ # Geom::Point3d.new(50, 40, 0),
288
+ # Geom::Point3d.new(50, 50, 0),
289
+ # Geom::Point3d.new(30, 50, 0),
290
+ # ].reverse # Counter-clockwise order - filled hole
291
+ # @triangles = Geom.tesselate(polygon, hole1, hole2)
292
+ # end
293
+ #
294
+ # def activate
295
+ # Sketchup.active_model.active_view.invalidate
296
+ # end
297
+ #
298
+ # def onMouseMove(flags, x, y, view)
299
+ # view.invalidate
300
+ # end
301
+ #
302
+ # def getExtents
303
+ # bounds = Geom::BoundingBox.new
304
+ # bounds.add(@triangles)
305
+ # bounds
306
+ # end
307
+ #
308
+ # def draw(view)
309
+ # view.drawing_color = Sketchup::Color.new(192, 0, 0)
310
+ # view.draw(GL_TRIANGLES, @triangles)
311
+ # end
312
+ #
313
+ # end
314
+ #
315
+ # Sketchup.active_model.select_tool(ExampleTool.new)
316
+ #
317
+ # @note The winding order of the polygons matter. The outer loop should be
318
+ # in counter-clockwise order. To cut an empty hole the inner loops should be
319
+ # in clockwise order, otherwise they will create a loop filled with
320
+ # triangles.
321
+ #
322
+ # @note The tesselation is using the same logic as SketchUp its rendering
323
+ # pipeline. But the exact result is an implementation detail which may change
324
+ # between versions. In particularly the results of degenerate polygons and
325
+ # non-planar polygons is undefined as part of the API contract. Such
326
+ # polygons are for example polygons where all points are colinear, polygons
327
+ # with duplicate points, non-planar polygons.
328
+ #
329
+ # @note If you want the triangles from an existing {Sketchup::Face} it's better
330
+ # to use {Sketchup::Face#mesh}.
331
+ #
332
+ # @param [Array<Geom::Point3d>] polygon_loop_points
333
+ #
334
+ # @param [Array<Array<Geom::Point3d>>] inner_loop_points
335
+ #
336
+ # @raise [ArgumentError] if any of the loops contain less than three points.
337
+ #
338
+ # @raise [RuntimeError] if the tesselator returned an error.
339
+ #
340
+ # @return [Array<Geom::Point3d>] an array of points with a stride of three
341
+ # representing a set of triangles.
342
+ #
343
+ # @see Sketchup::View#draw
344
+ #
345
+ # @see Sketchup::View#draw2d
346
+ #
347
+ # @version SketchUp 2020.0
348
+ def self.tesselate(polygon_loop_points, *inner_loop_points)
349
+ end
350
+
351
+ end