sketchup-api-stubs 0.6.1 → 0.7.4

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 (149) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/lib/sketchup-api-stubs.rb +1 -1
  4. data/lib/sketchup-api-stubs/sketchup.rb +145 -145
  5. data/lib/sketchup-api-stubs/stubs/Geom/BoundingBox.rb +318 -318
  6. data/lib/sketchup-api-stubs/stubs/Geom/Bounds2d.rb +172 -172
  7. data/lib/sketchup-api-stubs/stubs/Geom/LatLong.rb +126 -126
  8. data/lib/sketchup-api-stubs/stubs/Geom/OrientedBounds2d.rb +102 -102
  9. data/lib/sketchup-api-stubs/stubs/Geom/Point2d.rb +400 -401
  10. data/lib/sketchup-api-stubs/stubs/Geom/Point3d.rb +661 -661
  11. data/lib/sketchup-api-stubs/stubs/Geom/PolygonMesh.rb +492 -492
  12. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +478 -478
  13. data/lib/sketchup-api-stubs/stubs/Geom/Transformation2d.rb +263 -263
  14. data/lib/sketchup-api-stubs/stubs/Geom/UTM.rb +141 -141
  15. data/lib/sketchup-api-stubs/stubs/Geom/Vector2d.rb +522 -523
  16. data/lib/sketchup-api-stubs/stubs/Geom/Vector3d.rb +691 -691
  17. data/lib/sketchup-api-stubs/stubs/Layout.rb +25 -25
  18. data/lib/sketchup-api-stubs/stubs/Layout/AngularDimension.rb +573 -569
  19. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinition.rb +411 -411
  20. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinitions.rb +174 -186
  21. data/lib/sketchup-api-stubs/stubs/Layout/ConnectionPoint.rb +70 -70
  22. data/lib/sketchup-api-stubs/stubs/Layout/Document.rb +514 -455
  23. data/lib/sketchup-api-stubs/stubs/Layout/Ellipse.rb +29 -29
  24. data/lib/sketchup-api-stubs/stubs/Layout/Entities.rb +143 -155
  25. data/lib/sketchup-api-stubs/stubs/Layout/Entity.rb +353 -359
  26. data/lib/sketchup-api-stubs/stubs/Layout/FormattedText.rb +349 -349
  27. data/lib/sketchup-api-stubs/stubs/Layout/Grid.rb +311 -123
  28. data/lib/sketchup-api-stubs/stubs/Layout/Group.rb +261 -261
  29. data/lib/sketchup-api-stubs/stubs/Layout/Image.rb +91 -86
  30. data/lib/sketchup-api-stubs/stubs/Layout/Label.rb +371 -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 +220 -232
  34. data/lib/sketchup-api-stubs/stubs/Layout/LinearDimension.rb +567 -563
  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 +204 -216
  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 +694 -547
  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/Sketchup/Animation.rb +140 -140
  49. data/lib/sketchup-api-stubs/stubs/Sketchup/AppObserver.rb +157 -157
  50. data/lib/sketchup-api-stubs/stubs/Sketchup/ArcCurve.rb +209 -209
  51. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +152 -152
  52. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +281 -281
  53. data/lib/sketchup-api-stubs/stubs/Sketchup/Axes.rb +149 -149
  54. data/lib/sketchup-api-stubs/stubs/Sketchup/Behavior.rb +328 -328
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/Camera.rb +577 -577
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/ClassificationSchema.rb +63 -63
  57. data/lib/sketchup-api-stubs/stubs/Sketchup/Classifications.rb +122 -122
  58. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +281 -281
  59. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +562 -554
  60. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentInstance.rb +593 -593
  61. data/lib/sketchup-api-stubs/stubs/Sketchup/Console.rb +76 -76
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionLine.rb +257 -257
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionPoint.rb +32 -32
  64. data/lib/sketchup-api-stubs/stubs/Sketchup/Curve.rb +194 -194
  65. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionList.rb +329 -329
  66. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionObserver.rb +72 -72
  67. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionsObserver.rb +102 -102
  68. data/lib/sketchup-api-stubs/stubs/Sketchup/Dimension.rb +165 -165
  69. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionLinear.rb +312 -312
  70. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionObserver.rb +38 -38
  71. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionRadial.rb +87 -87
  72. data/lib/sketchup-api-stubs/stubs/Sketchup/Drawingelement.rb +390 -390
  73. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +508 -508
  74. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  75. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1119 -1097
  76. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +125 -125
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +544 -537
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +59 -59
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +125 -125
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +750 -750
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +104 -104
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +697 -697
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/Http.rb +27 -27
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +285 -285
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Response.rb +62 -62
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/Image.rb +409 -409
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/ImageRep.rb +226 -226
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/Importer.rb +190 -190
  89. data/lib/sketchup-api-stubs/stubs/Sketchup/InputPoint.rb +393 -393
  90. data/lib/sketchup-api-stubs/stubs/Sketchup/InstanceObserver.rb +82 -82
  91. data/lib/sketchup-api-stubs/stubs/Sketchup/InstancePath.rb +303 -303
  92. data/lib/sketchup-api-stubs/stubs/Sketchup/Layer.rb +285 -262
  93. data/lib/sketchup-api-stubs/stubs/Sketchup/Layers.rb +244 -231
  94. data/lib/sketchup-api-stubs/stubs/Sketchup/LayersObserver.rb +136 -136
  95. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing.rb +48 -48
  96. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing/ExtensionLicense.rb +86 -86
  97. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyle.rb +24 -24
  98. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyles.rb +112 -123
  99. data/lib/sketchup-api-stubs/stubs/Sketchup/Loop.rb +137 -137
  100. data/lib/sketchup-api-stubs/stubs/Sketchup/Material.rb +416 -416
  101. data/lib/sketchup-api-stubs/stubs/Sketchup/Materials.rb +311 -311
  102. data/lib/sketchup-api-stubs/stubs/Sketchup/MaterialsObserver.rb +141 -141
  103. data/lib/sketchup-api-stubs/stubs/Sketchup/Menu.rb +95 -95
  104. data/lib/sketchup-api-stubs/stubs/Sketchup/Model.rb +1638 -1483
  105. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +356 -356
  106. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +132 -132
  107. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +284 -282
  108. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  109. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +770 -650
  110. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +353 -353
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +76 -76
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +456 -456
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +364 -356
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptionsObserver.rb +44 -44
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/SectionPlane.rb +150 -150
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/Selection.rb +454 -454
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/SelectionObserver.rb +115 -115
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/Set.rb +212 -212
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfo.rb +257 -257
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfoObserver.rb +57 -57
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/Style.rb +69 -69
  123. data/lib/sketchup-api-stubs/stubs/Sketchup/Styles.rb +211 -211
  124. data/lib/sketchup-api-stubs/stubs/Sketchup/Text.rb +262 -262
  125. data/lib/sketchup-api-stubs/stubs/Sketchup/Texture.rb +225 -225
  126. data/lib/sketchup-api-stubs/stubs/Sketchup/TextureWriter.rb +237 -237
  127. data/lib/sketchup-api-stubs/stubs/Sketchup/Tool.rb +829 -829
  128. data/lib/sketchup-api-stubs/stubs/Sketchup/Tools.rb +132 -132
  129. data/lib/sketchup-api-stubs/stubs/Sketchup/ToolsObserver.rb +154 -154
  130. data/lib/sketchup-api-stubs/stubs/Sketchup/UVHelper.rb +61 -61
  131. data/lib/sketchup-api-stubs/stubs/Sketchup/Vertex.rb +142 -142
  132. data/lib/sketchup-api-stubs/stubs/Sketchup/View.rb +1301 -995
  133. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +43 -43
  134. data/lib/sketchup-api-stubs/stubs/UI/Command.rb +310 -310
  135. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +356 -356
  136. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +229 -229
  137. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +240 -240
  138. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +633 -633
  139. data/lib/sketchup-api-stubs/stubs/_top_level.rb +311 -303
  140. data/lib/sketchup-api-stubs/stubs/array.rb +741 -741
  141. data/lib/sketchup-api-stubs/stubs/geom.rb +348 -233
  142. data/lib/sketchup-api-stubs/stubs/languagehandler.rb +92 -92
  143. data/lib/sketchup-api-stubs/stubs/length.rb +278 -262
  144. data/lib/sketchup-api-stubs/stubs/numeric.rb +249 -249
  145. data/lib/sketchup-api-stubs/stubs/sketchup.rb +1310 -1310
  146. data/lib/sketchup-api-stubs/stubs/sketchupextension.rb +353 -353
  147. data/lib/sketchup-api-stubs/stubs/string.rb +24 -24
  148. data/lib/sketchup-api-stubs/stubs/ui.rb +667 -660
  149. metadata +2 -16
@@ -1,233 +1,348 @@
1
- # Copyright:: Copyright 2019 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
- end
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