sketchup-api-stubs 0.7.4 → 0.7.8

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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sketchup-api-stubs/sketchup.rb +148 -145
  3. data/lib/sketchup-api-stubs/stubs/{array.rb → Array.rb} +741 -741
  4. data/lib/sketchup-api-stubs/stubs/Geom/BoundingBox.rb +322 -318
  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 +523 -492
  11. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +478 -478
  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 -691
  16. data/lib/sketchup-api-stubs/stubs/{geom.rb → Geom.rb} +351 -348
  17. data/lib/sketchup-api-stubs/stubs/{languagehandler.rb → LanguageHandler.rb} +93 -92
  18. data/lib/sketchup-api-stubs/stubs/Layout/AngularDimension.rb +595 -573
  19. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinition.rb +698 -411
  20. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinitions.rb +183 -174
  21. data/lib/sketchup-api-stubs/stubs/Layout/ConnectionPoint.rb +70 -70
  22. data/lib/sketchup-api-stubs/stubs/Layout/Document.rb +516 -514
  23. data/lib/sketchup-api-stubs/stubs/Layout/Ellipse.rb +29 -29
  24. data/lib/sketchup-api-stubs/stubs/Layout/Entities.rb +148 -143
  25. data/lib/sketchup-api-stubs/stubs/Layout/Entity.rb +353 -353
  26. data/lib/sketchup-api-stubs/stubs/Layout/FormattedText.rb +354 -349
  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 -371
  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 -220
  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 +387 -387
  39. data/lib/sketchup-api-stubs/stubs/Layout/Pages.rb +209 -204
  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/SketchUpModel.rb +692 -694
  43. data/lib/sketchup-api-stubs/stubs/Layout/Style.rb +1519 -1519
  44. data/lib/sketchup-api-stubs/stubs/Layout/Table.rb +290 -290
  45. data/lib/sketchup-api-stubs/stubs/Layout/TableCell.rb +149 -149
  46. data/lib/sketchup-api-stubs/stubs/Layout/TableColumn.rb +139 -139
  47. data/lib/sketchup-api-stubs/stubs/Layout/TableRow.rb +135 -135
  48. data/lib/sketchup-api-stubs/stubs/Layout.rb +25 -25
  49. data/lib/sketchup-api-stubs/stubs/{length.rb → Length.rb} +278 -278
  50. data/lib/sketchup-api-stubs/stubs/{numeric.rb → Numeric.rb} +249 -249
  51. data/lib/sketchup-api-stubs/stubs/Sketchup/Animation.rb +144 -140
  52. data/lib/sketchup-api-stubs/stubs/Sketchup/AppObserver.rb +169 -157
  53. data/lib/sketchup-api-stubs/stubs/Sketchup/ArcCurve.rb +209 -209
  54. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +152 -152
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +286 -281
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/Axes.rb +149 -149
  57. data/lib/sketchup-api-stubs/stubs/Sketchup/Behavior.rb +302 -328
  58. data/lib/sketchup-api-stubs/stubs/Sketchup/Camera.rb +478 -577
  59. data/lib/sketchup-api-stubs/stubs/Sketchup/ClassificationSchema.rb +63 -63
  60. data/lib/sketchup-api-stubs/stubs/Sketchup/Classifications.rb +122 -122
  61. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +294 -281
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +619 -562
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentInstance.rb +593 -593
  64. data/lib/sketchup-api-stubs/stubs/Sketchup/Console.rb +76 -76
  65. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionLine.rb +257 -257
  66. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionPoint.rb +32 -32
  67. data/lib/sketchup-api-stubs/stubs/Sketchup/Curve.rb +201 -194
  68. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionList.rb +426 -329
  69. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionObserver.rb +74 -72
  70. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionsObserver.rb +104 -102
  71. data/lib/sketchup-api-stubs/stubs/Sketchup/Dimension.rb +165 -165
  72. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionLinear.rb +306 -312
  73. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionObserver.rb +42 -38
  74. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionRadial.rb +87 -87
  75. data/lib/sketchup-api-stubs/stubs/Sketchup/Drawingelement.rb +396 -390
  76. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +502 -508
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1205 -1119
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesBuilder.rb +272 -0
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +127 -125
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +545 -544
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +60 -59
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +126 -125
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +937 -750
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +104 -104
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +750 -697
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +292 -285
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Response.rb +62 -62
  89. data/lib/sketchup-api-stubs/stubs/Sketchup/Http.rb +27 -27
  90. data/lib/sketchup-api-stubs/stubs/Sketchup/Image.rb +468 -409
  91. data/lib/sketchup-api-stubs/stubs/Sketchup/ImageRep.rb +266 -226
  92. data/lib/sketchup-api-stubs/stubs/Sketchup/Importer.rb +189 -190
  93. data/lib/sketchup-api-stubs/stubs/Sketchup/InputPoint.rb +407 -393
  94. data/lib/sketchup-api-stubs/stubs/Sketchup/InstanceObserver.rb +84 -82
  95. data/lib/sketchup-api-stubs/stubs/Sketchup/InstancePath.rb +306 -303
  96. data/lib/sketchup-api-stubs/stubs/Sketchup/Layer.rb +326 -285
  97. data/lib/sketchup-api-stubs/stubs/Sketchup/LayerFolder.rb +422 -0
  98. data/lib/sketchup-api-stubs/stubs/Sketchup/Layers.rb +427 -244
  99. data/lib/sketchup-api-stubs/stubs/Sketchup/LayersObserver.rb +249 -136
  100. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing/ExtensionLicense.rb +86 -86
  101. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing.rb +48 -48
  102. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyle.rb +24 -24
  103. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyles.rb +112 -112
  104. data/lib/sketchup-api-stubs/stubs/Sketchup/Loop.rb +137 -137
  105. data/lib/sketchup-api-stubs/stubs/Sketchup/Material.rb +414 -416
  106. data/lib/sketchup-api-stubs/stubs/Sketchup/Materials.rb +318 -311
  107. data/lib/sketchup-api-stubs/stubs/Sketchup/MaterialsObserver.rb +142 -141
  108. data/lib/sketchup-api-stubs/stubs/Sketchup/Menu.rb +93 -95
  109. data/lib/sketchup-api-stubs/stubs/Sketchup/Model.rb +1651 -1638
  110. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +357 -356
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +131 -132
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +284 -284
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +797 -770
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +363 -353
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +77 -76
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +477 -456
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +364 -364
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptionsObserver.rb +45 -44
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/SectionPlane.rb +150 -150
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/Selection.rb +459 -454
  123. data/lib/sketchup-api-stubs/stubs/Sketchup/SelectionObserver.rb +115 -115
  124. data/lib/sketchup-api-stubs/stubs/Sketchup/Set.rb +212 -212
  125. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfo.rb +260 -257
  126. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfoObserver.rb +59 -57
  127. data/lib/sketchup-api-stubs/stubs/Sketchup/Skp.rb +40 -0
  128. data/lib/sketchup-api-stubs/stubs/Sketchup/Style.rb +69 -69
  129. data/lib/sketchup-api-stubs/stubs/Sketchup/Styles.rb +217 -211
  130. data/lib/sketchup-api-stubs/stubs/Sketchup/Text.rb +262 -262
  131. data/lib/sketchup-api-stubs/stubs/Sketchup/Texture.rb +217 -225
  132. data/lib/sketchup-api-stubs/stubs/Sketchup/TextureWriter.rb +237 -237
  133. data/lib/sketchup-api-stubs/stubs/Sketchup/Tool.rb +837 -829
  134. data/lib/sketchup-api-stubs/stubs/Sketchup/Tools.rb +132 -132
  135. data/lib/sketchup-api-stubs/stubs/Sketchup/ToolsObserver.rb +156 -154
  136. data/lib/sketchup-api-stubs/stubs/Sketchup/UVHelper.rb +75 -61
  137. data/lib/sketchup-api-stubs/stubs/Sketchup/Vertex.rb +142 -142
  138. data/lib/sketchup-api-stubs/stubs/Sketchup/View.rb +1317 -1301
  139. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +45 -43
  140. data/lib/sketchup-api-stubs/stubs/{sketchup.rb → Sketchup.rb} +1360 -1310
  141. data/lib/sketchup-api-stubs/stubs/{sketchupextension.rb → SketchupExtension.rb} +353 -353
  142. data/lib/sketchup-api-stubs/stubs/{string.rb → String.rb} +24 -24
  143. data/lib/sketchup-api-stubs/stubs/UI/Command.rb +389 -310
  144. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +496 -356
  145. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +269 -229
  146. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +240 -240
  147. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +635 -633
  148. data/lib/sketchup-api-stubs/stubs/{ui.rb → UI.rb} +683 -667
  149. data/lib/sketchup-api-stubs/stubs/_top_level.rb +311 -311
  150. data/lib/sketchup-api-stubs.rb +1 -1
  151. metadata +15 -12
@@ -1,348 +1,351 @@
1
- # Copyright:: Copyright 2020 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
- # @example
171
- # point1 = Geom::Point3d.new(1, 1, 1)
172
- # point2 = Geom::Point3d.new(10, 10, 10)
173
- # # Gets the point on the line segment connecting point1 and point2 that is
174
- # # 3/4 the way from point1 to point2: Point3d(7.75, 7.75, 7.75).
175
- # point = Geom.linear_combination(0.25, point1, 0.75, point2)
176
- #
177
- # @overload linear_combination(weight1, point1, weight2, point2)
178
- #
179
- # @param [Float] weight1
180
- # @param [Geom::Point3d] point1
181
- # @param [Float] weight2
182
- # @param [Geom::Point3d] point2
183
- # @return [Geom::Point3d]
184
- #
185
- # @overload linear_combination(weight1, vector1, weight2, vector2)
186
- #
187
- # @param [Float] weight1
188
- # @param [Geom::Vector3d] vector1
189
- # @param [Float] weight2
190
- # @param [Geom::Vector3d] vector2
191
- # @return [Geom::Vector3d]
192
- #
193
- # @version SketchUp 6.0
194
- def self.linear_combination(weight1, pt_or_vect1, weight2, pt_or_vect2)
195
- end
196
-
197
- # The {.point_in_polygon_2D} method is used to determine whether a point is
198
- # inside a polygon. The z component of both the point you're checking and
199
- # the points in the polygon are ignored, effectively making it a 2-d check.
200
- #
201
- # @example
202
- # # Create a point that we want to check. (Note that the 3rd coordinate,
203
- # # the z, is ignored for purposes of the check.)
204
- # point = Geom::Point3d.new(5, 0, 10)
205
- #
206
- # # Create a series of points of a triangle we want to check against.
207
- # triangle = []
208
- # triangle << Geom::Point3d.new(0, 0, 0)
209
- # triangle << Geom::Point3d.new(10, 0, 0)
210
- # triangle << Geom::Point3d.new(0, 10, 0)
211
- #
212
- # # Test to see if our point is inside the triangle, counting hits on
213
- # # the border as an intersection in this case.
214
- # hits_on_border_count = true
215
- # status = Geom.point_in_polygon_2D(point, triangle, hits_on_border_count)
216
- #
217
- # @param [Geom::Point3d] point
218
- #
219
- # @param [Array<Geom::Point3d>] polygon
220
- # An array of points that represent the
221
- # corners of the polygon you are checking against.
222
- #
223
- # @param [Boolean] check_border
224
- # Pass true if a point on the border should be
225
- # counted as inside the polygon.
226
- #
227
- # @return [Boolean] +true+ if the point is inside the polygon.
228
- #
229
- # @version SketchUp 6.0
230
- def self.point_in_polygon_2D(point, polygon, check_border)
231
- end
232
-
233
- # Tessellates a polygon, represented as a collection of 3D points. Can include
234
- # holes by providing collections of points describing the inner loops. This is
235
- # intended to be used for planar polygons.
236
- #
237
- # Useful to draw concave polygons using {Sketchup::View#draw} or
238
- # {Sketchup::View#draw2d}.
239
- #
240
- # It can also be useful for importers where the input format describes only the
241
- # loops for a polygon and you want to work with a collection of triangles.
242
- #
243
- # <b>Polygon with two holes, one empty and one filled:</b>
244
- #
245
- # <i>(See "Drawing a polygon with holes from a custom tool" example)</i>
246
- #
247
- # rdoc-image:images/geom-tesselation-polygon-with-holes.png
248
- #
249
- # @example Iterate over each triangle in the returned set
250
- # polygon = [
251
- # Geom::Point3d.new(0, 0, 0),
252
- # Geom::Point3d.new(90, 0, 0),
253
- # Geom::Point3d.new(60, 40, 0),
254
- # Geom::Point3d.new(90, 90, 0),
255
- # Geom::Point3d.new(30, 70, 0),
256
- # ]
257
- # triangles = Geom.tesselate(polygon)
258
- # triangles.each_slice(3) { |triangle|
259
- # # Work with each triangle set...
260
- # }
261
- # # Or get an array of triangles:
262
- # triangles_set = triangles.each_slice(3).to_a
263
- #
264
- # @example Drawing a polygon with holes from a custom tool
265
- # class ExampleTool
266
- #
267
- # def initialize
268
- # polygon = [
269
- # Geom::Point3d.new(0, 0, 0),
270
- # Geom::Point3d.new(90, 0, 0),
271
- # Geom::Point3d.new(60, 40, 0),
272
- # Geom::Point3d.new(90, 90, 0),
273
- # Geom::Point3d.new(30, 70, 0),
274
- # ] # Counter-clockwise order
275
- # hole1 = [
276
- # Geom::Point3d.new(20, 10, 0),
277
- # Geom::Point3d.new(40, 10, 0),
278
- # Geom::Point3d.new(45, 25, 0),
279
- # Geom::Point3d.new(30, 20, 0),
280
- # Geom::Point3d.new(25, 25, 0),
281
- # ].reverse # Clockwise order - empty hole
282
- # hole2 = [
283
- # Geom::Point3d.new(30, 40, 0),
284
- # Geom::Point3d.new(50, 40, 0),
285
- # Geom::Point3d.new(50, 50, 0),
286
- # Geom::Point3d.new(30, 50, 0),
287
- # ].reverse # Counter-clockwise order - filled hole
288
- # @triangles = Geom.tesselate(polygon, hole1, hole2)
289
- # end
290
- #
291
- # def activate
292
- # Sketchup.active_model.active_view.invalidate
293
- # end
294
- #
295
- # def onMouseMove(flags, x, y, view)
296
- # view.invalidate
297
- # end
298
- #
299
- # def getExtents
300
- # bounds = Geom::BoundingBox.new
301
- # bounds.add(@triangles)
302
- # bounds
303
- # end
304
- #
305
- # def draw(view)
306
- # view.drawing_color = Sketchup::Color.new(192, 0, 0)
307
- # view.draw(GL_TRIANGLES, @triangles)
308
- # end
309
- #
310
- # end
311
- #
312
- # Sketchup.active_model.select_tool(ExampleTool.new)
313
- #
314
- # @note The winding order of the polygons matter. The outer loop should be
315
- # in counter-clockwise order. To cut an empty hole the inner loops should be
316
- # in clockwise order, otherwise they will create a loop filled with
317
- # triangles.
318
- #
319
- # @note The tesselation is using the same logic as SketchUp its rendering
320
- # pipeline. But the exact result is an implementation detail which may change
321
- # between versions. In particularly the results of degenerate polygons and
322
- # non-planar polygons is undefined as part of the API contract. Such
323
- # polygons are for example polygons where all points are colinear, polygons
324
- # with duplicate points, non-planar polygons.
325
- #
326
- # @note If you want the triangles from an existing {Sketchup::Face} it's better
327
- # to use {Sketchup::Face#mesh}.
328
- #
329
- # @param [Array<Geom::Point3d>] polygon_loop_points
330
- #
331
- # @param [Array<Array<Geom::Point3d>>] inner_loop_points
332
- #
333
- # @raise [ArgumentError] if any of the loops contain less than three points.
334
- #
335
- # @raise [RuntimeError] if the tesselator returned an error.
336
- #
337
- # @return [Array<Geom::Point3d>] an array of points with a stride of three
338
- # representing a set of triangles.
339
- #
340
- # @see Sketchup::View#draw
341
- #
342
- # @see Sketchup::View#draw2d
343
- #
344
- # @version SketchUp 2020.0
345
- def self.tesselate(polygon_loop_points, *inner_loop_points)
346
- end
347
-
348
- end
1
+ # Copyright:: Copyright 2022 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