sketchup-api-stubs 0.7.9 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sketchup-api-stubs/sketchup.rb +151 -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 +172 -172
  6. data/lib/sketchup-api-stubs/stubs/Geom/LatLong.rb +126 -126
  7. data/lib/sketchup-api-stubs/stubs/Geom/OrientedBounds2d.rb +102 -102
  8. data/lib/sketchup-api-stubs/stubs/Geom/Point2d.rb +400 -400
  9. data/lib/sketchup-api-stubs/stubs/Geom/Point3d.rb +661 -661
  10. data/lib/sketchup-api-stubs/stubs/Geom/PolygonMesh.rb +509 -509
  11. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +476 -476
  12. data/lib/sketchup-api-stubs/stubs/Geom/Transformation2d.rb +263 -263
  13. data/lib/sketchup-api-stubs/stubs/Geom/UTM.rb +141 -141
  14. data/lib/sketchup-api-stubs/stubs/Geom/Vector2d.rb +522 -522
  15. data/lib/sketchup-api-stubs/stubs/Geom/Vector3d.rb +693 -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 +747 -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/Document.rb +569 -517
  23. data/lib/sketchup-api-stubs/stubs/Layout/Ellipse.rb +29 -29
  24. data/lib/sketchup-api-stubs/stubs/Layout/Entities.rb +148 -148
  25. data/lib/sketchup-api-stubs/stubs/Layout/Entity.rb +356 -353
  26. data/lib/sketchup-api-stubs/stubs/Layout/FormattedText.rb +354 -354
  27. data/lib/sketchup-api-stubs/stubs/Layout/Grid.rb +311 -311
  28. data/lib/sketchup-api-stubs/stubs/Layout/Group.rb +261 -261
  29. data/lib/sketchup-api-stubs/stubs/Layout/Image.rb +91 -91
  30. data/lib/sketchup-api-stubs/stubs/Layout/Label.rb +370 -370
  31. data/lib/sketchup-api-stubs/stubs/Layout/Layer.rb +218 -218
  32. data/lib/sketchup-api-stubs/stubs/Layout/LayerInstance.rb +128 -128
  33. data/lib/sketchup-api-stubs/stubs/Layout/Layers.rb +225 -225
  34. data/lib/sketchup-api-stubs/stubs/Layout/LinearDimension.rb +567 -567
  35. data/lib/sketchup-api-stubs/stubs/Layout/LockedEntityError.rb +10 -10
  36. data/lib/sketchup-api-stubs/stubs/Layout/LockedLayerError.rb +11 -11
  37. data/lib/sketchup-api-stubs/stubs/Layout/Page.rb +183 -183
  38. data/lib/sketchup-api-stubs/stubs/Layout/PageInfo.rb +459 -387
  39. data/lib/sketchup-api-stubs/stubs/Layout/Pages.rb +209 -209
  40. data/lib/sketchup-api-stubs/stubs/Layout/Path.rb +344 -344
  41. data/lib/sketchup-api-stubs/stubs/Layout/Rectangle.rb +174 -174
  42. data/lib/sketchup-api-stubs/stubs/Layout/ReferenceEntity.rb +82 -82
  43. data/lib/sketchup-api-stubs/stubs/Layout/SketchUpModel.rb +714 -692
  44. data/lib/sketchup-api-stubs/stubs/Layout/Style.rb +1519 -1519
  45. data/lib/sketchup-api-stubs/stubs/Layout/Table.rb +290 -290
  46. data/lib/sketchup-api-stubs/stubs/Layout/TableCell.rb +149 -149
  47. data/lib/sketchup-api-stubs/stubs/Layout/TableColumn.rb +139 -139
  48. data/lib/sketchup-api-stubs/stubs/Layout/TableRow.rb +135 -135
  49. data/lib/sketchup-api-stubs/stubs/Layout.rb +25 -25
  50. data/lib/sketchup-api-stubs/stubs/Length.rb +278 -278
  51. data/lib/sketchup-api-stubs/stubs/Numeric.rb +249 -249
  52. data/lib/sketchup-api-stubs/stubs/Sketchup/Animation.rb +144 -144
  53. data/lib/sketchup-api-stubs/stubs/Sketchup/AppObserver.rb +169 -169
  54. data/lib/sketchup-api-stubs/stubs/Sketchup/ArcCurve.rb +226 -209
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +150 -150
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +281 -281
  57. data/lib/sketchup-api-stubs/stubs/Sketchup/Axes.rb +149 -149
  58. data/lib/sketchup-api-stubs/stubs/Sketchup/Behavior.rb +302 -302
  59. data/lib/sketchup-api-stubs/stubs/Sketchup/Camera.rb +478 -478
  60. data/lib/sketchup-api-stubs/stubs/Sketchup/ClassificationSchema.rb +63 -63
  61. data/lib/sketchup-api-stubs/stubs/Sketchup/Classifications.rb +121 -121
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +294 -294
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +659 -659
  64. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentInstance.rb +593 -593
  65. data/lib/sketchup-api-stubs/stubs/Sketchup/Console.rb +76 -76
  66. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionLine.rb +257 -257
  67. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionPoint.rb +32 -32
  68. data/lib/sketchup-api-stubs/stubs/Sketchup/Curve.rb +201 -201
  69. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionList.rb +449 -449
  70. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionObserver.rb +74 -74
  71. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionsObserver.rb +104 -104
  72. data/lib/sketchup-api-stubs/stubs/Sketchup/Dimension.rb +165 -165
  73. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionLinear.rb +306 -306
  74. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionObserver.rb +42 -42
  75. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionRadial.rb +87 -87
  76. data/lib/sketchup-api-stubs/stubs/Sketchup/Drawingelement.rb +406 -406
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +397 -397
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1242 -1239
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesBuilder.rb +261 -261
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +127 -127
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +519 -545
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +60 -60
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +125 -125
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +937 -937
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +102 -102
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +750 -750
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +282 -282
  89. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Response.rb +62 -62
  90. data/lib/sketchup-api-stubs/stubs/Sketchup/Http.rb +27 -27
  91. data/lib/sketchup-api-stubs/stubs/Sketchup/Image.rb +468 -468
  92. data/lib/sketchup-api-stubs/stubs/Sketchup/ImageRep.rb +266 -266
  93. data/lib/sketchup-api-stubs/stubs/Sketchup/Importer.rb +189 -189
  94. data/lib/sketchup-api-stubs/stubs/Sketchup/InputPoint.rb +406 -406
  95. data/lib/sketchup-api-stubs/stubs/Sketchup/InstanceObserver.rb +84 -84
  96. data/lib/sketchup-api-stubs/stubs/Sketchup/InstancePath.rb +306 -306
  97. data/lib/sketchup-api-stubs/stubs/Sketchup/Layer.rb +326 -326
  98. data/lib/sketchup-api-stubs/stubs/Sketchup/LayerFolder.rb +422 -422
  99. data/lib/sketchup-api-stubs/stubs/Sketchup/Layers.rb +427 -427
  100. data/lib/sketchup-api-stubs/stubs/Sketchup/LayersObserver.rb +249 -249
  101. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing/ExtensionLicense.rb +86 -86
  102. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing.rb +48 -48
  103. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyle.rb +24 -24
  104. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyles.rb +114 -114
  105. data/lib/sketchup-api-stubs/stubs/Sketchup/Loop.rb +137 -137
  106. data/lib/sketchup-api-stubs/stubs/Sketchup/Material.rb +414 -414
  107. data/lib/sketchup-api-stubs/stubs/Sketchup/Materials.rb +317 -317
  108. data/lib/sketchup-api-stubs/stubs/Sketchup/MaterialsObserver.rb +142 -142
  109. data/lib/sketchup-api-stubs/stubs/Sketchup/Menu.rb +93 -93
  110. data/lib/sketchup-api-stubs/stubs/Sketchup/Model.rb +1656 -1652
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +357 -357
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +130 -130
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +271 -271
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/Overlay.rb +490 -490
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/OverlaysManager.rb +116 -116
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +797 -797
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +361 -361
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +77 -77
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +480 -478
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +373 -361
  123. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptionsObserver.rb +45 -45
  124. data/lib/sketchup-api-stubs/stubs/Sketchup/SectionPlane.rb +150 -150
  125. data/lib/sketchup-api-stubs/stubs/Sketchup/Selection.rb +458 -458
  126. data/lib/sketchup-api-stubs/stubs/Sketchup/SelectionObserver.rb +115 -115
  127. data/lib/sketchup-api-stubs/stubs/Sketchup/Set.rb +212 -212
  128. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfo.rb +255 -255
  129. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfoObserver.rb +59 -59
  130. data/lib/sketchup-api-stubs/stubs/Sketchup/Skp.rb +40 -40
  131. data/lib/sketchup-api-stubs/stubs/Sketchup/Style.rb +69 -69
  132. data/lib/sketchup-api-stubs/stubs/Sketchup/Styles.rb +217 -217
  133. data/lib/sketchup-api-stubs/stubs/Sketchup/Text.rb +262 -262
  134. data/lib/sketchup-api-stubs/stubs/Sketchup/Texture.rb +217 -217
  135. data/lib/sketchup-api-stubs/stubs/Sketchup/TextureWriter.rb +237 -237
  136. data/lib/sketchup-api-stubs/stubs/Sketchup/Tool.rb +834 -834
  137. data/lib/sketchup-api-stubs/stubs/Sketchup/Tools.rb +132 -132
  138. data/lib/sketchup-api-stubs/stubs/Sketchup/ToolsObserver.rb +156 -156
  139. data/lib/sketchup-api-stubs/stubs/Sketchup/UVHelper.rb +75 -75
  140. data/lib/sketchup-api-stubs/stubs/Sketchup/Vertex.rb +142 -142
  141. data/lib/sketchup-api-stubs/stubs/Sketchup/View.rb +1329 -1311
  142. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +45 -45
  143. data/lib/sketchup-api-stubs/stubs/Sketchup.rb +1394 -1377
  144. data/lib/sketchup-api-stubs/stubs/SketchupExtension.rb +353 -353
  145. data/lib/sketchup-api-stubs/stubs/String.rb +24 -24
  146. data/lib/sketchup-api-stubs/stubs/UI/Command.rb +387 -389
  147. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +505 -494
  148. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +269 -269
  149. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +241 -241
  150. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +633 -635
  151. data/lib/sketchup-api-stubs/stubs/UI.rb +728 -683
  152. data/lib/sketchup-api-stubs/stubs/_top_level.rb +303 -303
  153. data/lib/sketchup-api-stubs.rb +1 -1
  154. metadata +3 -3
@@ -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 2024 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