sketchup-api-stubs 0.7.8 → 0.7.9

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 -148
  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 -523
  11. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +476 -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 -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 -698
  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 +517 -516
  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 +353 -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 +387 -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 -0
  43. data/lib/sketchup-api-stubs/stubs/Layout/SketchUpModel.rb +692 -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 +209 -209
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +150 -152
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +281 -286
  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 -122
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +294 -294
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +659 -619
  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 -426
  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 -396
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +397 -502
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1239 -1205
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesBuilder.rb +261 -272
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +127 -127
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +545 -545
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +60 -60
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +125 -126
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +937 -937
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +102 -104
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +750 -750
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +282 -292
  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 -407
  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 -112
  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 -318
  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 +1652 -1651
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +357 -357
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +130 -131
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +271 -284
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/Overlay.rb +490 -0
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/OverlaysManager.rb +116 -0
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +797 -797
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +361 -363
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +77 -77
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +478 -477
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +361 -364
  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 -459
  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 -260
  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 -837
  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 +1311 -1317
  142. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +45 -45
  143. data/lib/sketchup-api-stubs/stubs/Sketchup.rb +1377 -1360
  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 +389 -389
  147. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +494 -496
  148. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +269 -269
  149. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +241 -240
  150. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +635 -635
  151. data/lib/sketchup-api-stubs/stubs/UI.rb +683 -683
  152. data/lib/sketchup-api-stubs/stubs/_top_level.rb +303 -311
  153. data/lib/sketchup-api-stubs.rb +1 -1
  154. metadata +10 -7
@@ -1,272 +1,261 @@
1
- # Copyright:: Copyright 2022 Trimble Inc.
2
- # License:: The MIT License (MIT)
3
-
4
- # The {Sketchup::EntitiesBuilder} is an interface to generate bulk geometry
5
- # with performance in mind.
6
- #
7
- # This is particularly useful for importers where the geometry is already well
8
- # defined and one wants to recreate it without further processing.
9
- #
10
- # Before the Entities Builder was introduced there were two ways of adding
11
- # geometry; the +add_*+ methods of {Sketchup::Entities} and {Geom::PolygonMesh}.
12
- #
13
- # The former is slow as the methods perform intersection, splitting and merging
14
- # of overlapping geometry. This is useful when creating tools similar to the
15
- # Line and Rectangle tool.
16
- #
17
- # {Geom::PolygonMesh} is fast, but it doesn't provide granular control per
18
- # face or edge added.
19
- #
20
- # Entities Builder is similar to {Geom::PolygonMesh} in speed, but with the
21
- # flexibility of {Sketchup::Entities}'s +add_*+ methods.
22
- #
23
- # <i>(See "Creating a triangulated grid" example)</i>
24
- #
25
- # rdoc-image:../images/entities-builder-grid-example.png
26
- #
27
- # @api EntitiesBuilder
28
- #
29
- # @example Creating a triangulated grid
30
- # model = Sketchup.active_model
31
- # model.start_operation('Create Grid', true)
32
- # model.entities.build { |builder|
33
- # # Creates a grid similar to Sandbox Tools, with each square
34
- # # triangulated with a soft+smooth edge.
35
- # 10.times { |x|
36
- # 10.times { |y|
37
- # # 4 +--+ 3
38
- # # |\ |
39
- # # | \|
40
- # # 1 +--+ 2
41
- # pt1 = Geom::Point3d.new(x, y, 0)
42
- # pt2 = Geom::Point3d.new(x + 1, y, 0)
43
- # pt3 = Geom::Point3d.new(x + 1, y + 1, 0)
44
- # pt4 = Geom::Point3d.new(x, y + 1, 0)
45
- # face1 = builder.add_face([pt1, pt2, pt4])
46
- # face2 = builder.add_face([pt2, pt3, pt4])
47
- # material = (x + y).odd? ? 'red' : 'maroon'
48
- # face1.material = material
49
- # face2.material = material
50
- # edge = builder.add_edge(pt2, pt4)
51
- # edge.soft = true
52
- # edge.smooth = true
53
- # }
54
- # }
55
- # }
56
- # model.commit_operation
57
- #
58
- # @note Like {Geom::PolygonMesh} there is minimal validation checks made on
59
- # the input to the creation of the geometry. Vertices are de-duplicated and
60
- # edges sharing the same vertices will be de-duplicated. But no intersection
61
- # of overlapping entities is made. It leaves a higher responsibility on the
62
- # API user to produce valid geometry.
63
- #
64
- # @note While using {Sketchup::Entities#build} it is important to not
65
- # add or remove vertices by other means of the builder. Also don't modify the
66
- # position of the vertices in the {Sketchup::Entities} container geometry is
67
- # added to. Doing so can break the vertex-cache that de-duplicates the vertices.
68
- #
69
- # @see file:pages/generating_geometry.md
70
- # Guide on Generating Geometry
71
- #
72
- # @see Sketchup::Entities#build
73
- #
74
- # @see Sketchup::Entities
75
- #
76
- # @see Geom::PolygonMesh
77
- #
78
- # @version SketchUp 2022.0
79
- class Sketchup::EntitiesBuilder
80
-
81
- # Instance Methods
82
-
83
- # Adds a {Sketchup::Edge} to the {#entities} collection.
84
- #
85
- # @api EntitiesBuilder
86
- #
87
- # @example
88
- # model = Sketchup.active_model
89
- # model.entities.build { |builder|
90
- # edge = builder.add_edge([0, 0, 0], [9, 0, 0])
91
- # edge.material = 'red'
92
- # }
93
- #
94
- # @note Does not split intersecting faces or edges.
95
- #
96
- # @overload add_edge(point1, point2)
97
- #
98
- # @param [Geom::Point3d] point1
99
- # @param [Geom::Point3d] point2
100
- #
101
- # @overload add_edge(points)
102
- #
103
- # @param [Array(Geom::Point3d, Geom::Point3d)] points
104
- #
105
- # @raise [ArgumentError] If the points are considered equal.
106
- #
107
- # @raise [RuntimeError] If the builder is not valid.
108
- #
109
- # @return [Sketchup::Edge]
110
- #
111
- # @see Sketchup::Entities#add_line
112
- #
113
- # @version SketchUp 2022.0
114
- def add_edge(*args)
115
- end
116
- alias_method :add_line, :add_edge
117
-
118
- # Adds a continuous set of {Sketchup::Edge}'s to the {#entities} collection.
119
- #
120
- # @api EntitiesBuilder
121
- #
122
- # @example
123
- # model = Sketchup.active_model
124
- # model.entities.build { |builder|
125
- # edges = builder.add_edges([0, 0, 0], [6, 0, 0], [9, 0, 8]) # => 2 edges
126
- # edges.each { |edge|
127
- # edge.material = 'red'
128
- # }
129
- # }
130
- #
131
- # @note Does not split intersecting faces or edges.
132
- #
133
- # @overload add_edges(points)
134
- #
135
- # @param [Array<Geom::Point3d>] points
136
- #
137
- # @overload add_edges(*points)
138
- #
139
- # @param [Array<Geom::Point3d>] points
140
- #
141
- # @raise [RuntimeError] If the builder is not valid.
142
- #
143
- # @return [Array<Sketchup::Edge, nil>] In the array, for each pair in +points+ an edge is returned.
144
- # If two point are so close they are considered identical then +nil+ is returned.
145
- #
146
- # @see Sketchup::Entities#add_edges
147
- #
148
- # @version SketchUp 2022.0
149
- def add_edges(*args)
150
- end
151
-
152
- # Adds a {Sketchup::Face} to the {#entities} collection.
153
- #
154
- # @api EntitiesBuilder
155
- #
156
- # @example Adding a simple face
157
- # model = Sketchup.active_model
158
- # model.entities.build { |builder|
159
- # face = builder.add_face([[0, 0, 0], [6, 0, 0], [6, 8, 0], [0, 8, 0]])
160
- # face.material = 'red'
161
- # }
162
- #
163
- # @example Adding an edge with two holes
164
- # model = Sketchup.active_model
165
- # model.entities.build { |builder|
166
- # outer_loop = [[0, 0, 0], [8, 0, 0], [8, 9, 0], [0, 9, 0]]
167
- # hole1 = [[1, 1, 0], [3, 1, 0], [3, 8, 0], [1, 8, 0]]
168
- # hole2 = [[4, 1, 0], [7, 1, 0], [7, 8, 0], [4, 8, 0]]
169
- # face = builder.add_face(outer_loop, holes: [hole1, hole2])
170
- # }
171
- #
172
- # @note Does not split intersecting faces or edges.
173
- #
174
- # @overload add_face(outer_loop)
175
- #
176
- # @param [Array<Geom::Point3d>] outer_loop
177
- #
178
- # @overload add_face(*outer_loop)
179
- #
180
- # @param [Array<Geom::Point3d>] outer_loop
181
- #
182
- # @overload add_face(outer_loop, holes: inner_loops)
183
- #
184
- # Adds a face with holes.
185
- # @note The inner loops are not validated to be within the bounds of the outer loop.
186
- # @param [Array<Geom::Point3d>] outer_loop
187
- # @param [Array<Array<Geom::Point3d>>] inner_loops
188
- #
189
- # @overload add_face(*outer_loop, holes: inner_loops)
190
- #
191
- # Adds a face with holes.
192
- # @note The inner loops are not validated to be within the bounds of the outer loop.
193
- # @param [Array<Geom::Point3d>] outer_loop
194
- # @param [Array<Array<Geom::Point3d>>] inner_loops
195
- #
196
- # @raise [ArgumentError] If points are not planar.
197
- #
198
- # @raise [ArgumentError] If any of the loops doesn't have at least 3 points.
199
- #
200
- # @raise [RuntimeError] If the builder is not valid.
201
- #
202
- # @return [Sketchup::Face]
203
- #
204
- # @see Sketchup::Entities#add_face
205
- #
206
- # @version SketchUp 2022.0
207
- def add_face(*args)
208
- end
209
-
210
- # The {Sketchup::Entities} collection the {Sketchup::EntitiesBuilder} will add
211
- # the geometry to.
212
- #
213
- # @api EntitiesBuilder
214
- #
215
- # @example
216
- # model = Sketchup.active_model
217
- # model.entities.build { |builder|
218
- # p builder.entities == model.entities # => true
219
- # }
220
- #
221
- # @raise [RuntimeError] If the builder is not valid.
222
- #
223
- # @return [Sketchup::Entities]
224
- #
225
- # @version SketchUp 2022.0
226
- def entities
227
- end
228
-
229
- # Indicates whether the builder object is valid and can be used.
230
- #
231
- # A builder object is only valid within the scope of the block given to
232
- # {Sketchup::Entities#build}.
233
- #
234
- # When this return +false+, calling any other method on the builder will raise
235
- # an error.
236
- #
237
- # @api EntitiesBuilder
238
- #
239
- # @example
240
- # model = Sketchup.active_model
241
- # cached_builder = nil
242
- # model.entities.build { |builder|
243
- # p builder.valid? # => true
244
- # cached_builder = builder # Don't hold on to builder objects.
245
- # }
246
- # p cached_builder.valid? # => false
247
- #
248
- # @return [Boolean]
249
- #
250
- # @version SketchUp 2022.0
251
- def valid?
252
- end
253
-
254
- # Finds an existing {Sketchup::Vertex} for the given position, otherwise returns +nil+.
255
- #
256
- # @api EntitiesBuilder
257
- #
258
- # @example
259
- # model = Sketchup.active_model
260
- # model.entities.build { |builder|
261
- # edge = builder.add_edge([1, 0, 0], [9, 0, 0])
262
- # builder.vertex_at([0, 0, 0]) => nil
263
- # builder.vertex_at([9, 0, 0]) => #<Sketchup::Vertex>
264
- # }
265
- #
266
- # @return [Sketchup::Vertex, nil]
267
- #
268
- # @version SketchUp 2022.0
269
- def vertex_at(position)
270
- end
271
-
272
- end
1
+ # Copyright:: Copyright 2023 Trimble Inc.
2
+ # License:: The MIT License (MIT)
3
+
4
+ # The {Sketchup::EntitiesBuilder} is an interface to generate bulk geometry
5
+ # with performance in mind.
6
+ #
7
+ # This is particularly useful for importers where the geometry is already well
8
+ # defined and one wants to recreate it without further processing.
9
+ #
10
+ # Before the Entities Builder was introduced there were two ways of adding
11
+ # geometry; the +add_*+ methods of {Sketchup::Entities} and {Geom::PolygonMesh}.
12
+ #
13
+ # The former is slow as the methods perform intersection, splitting and merging
14
+ # of overlapping geometry. This is useful when creating tools similar to the
15
+ # Line and Rectangle tool.
16
+ #
17
+ # {Geom::PolygonMesh} is fast, but it doesn't provide granular control per
18
+ # face or edge added.
19
+ #
20
+ # Entities Builder is similar to {Geom::PolygonMesh} in speed, but with the
21
+ # flexibility of {Sketchup::Entities}'s +add_*+ methods.
22
+ #
23
+ # <i>(See "Creating a triangulated grid" example)</i>
24
+ #
25
+ # rdoc-image:../images/entities-builder-grid-example.png
26
+ #
27
+ # @example Creating a triangulated grid
28
+ # model = Sketchup.active_model
29
+ # model.start_operation('Create Grid', true)
30
+ # model.entities.build { |builder|
31
+ # # Creates a grid similar to Sandbox Tools, with each square
32
+ # # triangulated with a soft+smooth edge.
33
+ # 10.times { |x|
34
+ # 10.times { |y|
35
+ # # 4 +--+ 3
36
+ # # |\ |
37
+ # # | \|
38
+ # # 1 +--+ 2
39
+ # pt1 = Geom::Point3d.new(x, y, 0)
40
+ # pt2 = Geom::Point3d.new(x + 1, y, 0)
41
+ # pt3 = Geom::Point3d.new(x + 1, y + 1, 0)
42
+ # pt4 = Geom::Point3d.new(x, y + 1, 0)
43
+ # face1 = builder.add_face([pt1, pt2, pt4])
44
+ # face2 = builder.add_face([pt2, pt3, pt4])
45
+ # material = (x + y).odd? ? 'red' : 'maroon'
46
+ # face1.material = material
47
+ # face2.material = material
48
+ # edge = builder.add_edge(pt2, pt4)
49
+ # edge.soft = true
50
+ # edge.smooth = true
51
+ # }
52
+ # }
53
+ # }
54
+ # model.commit_operation
55
+ #
56
+ # @note Like {Geom::PolygonMesh} there is minimal validation checks made on
57
+ # the input to the creation of the geometry. Vertices are de-duplicated and
58
+ # edges sharing the same vertices will be de-duplicated. But no intersection
59
+ # of overlapping entities is made. It leaves a higher responsibility on the
60
+ # API user to produce valid geometry.
61
+ #
62
+ # @note While using {Sketchup::Entities#build} it is important to not
63
+ # add or remove vertices by other means of the builder. Also don't modify the
64
+ # position of the vertices in the {Sketchup::Entities} container geometry is
65
+ # added to. Doing so can break the vertex-cache that de-duplicates the vertices.
66
+ #
67
+ # @see file:pages/generating_geometry.md
68
+ # Guide on Generating Geometry
69
+ #
70
+ # @see Sketchup::Entities#build
71
+ #
72
+ # @see Sketchup::Entities
73
+ #
74
+ # @see Geom::PolygonMesh
75
+ #
76
+ # @version SketchUp 2022.0
77
+ class Sketchup::EntitiesBuilder
78
+
79
+ # Instance Methods
80
+
81
+ # Adds a {Sketchup::Edge} to the {#entities} collection.
82
+ #
83
+ # @example
84
+ # model = Sketchup.active_model
85
+ # model.entities.build { |builder|
86
+ # edge = builder.add_edge([0, 0, 0], [9, 0, 0])
87
+ # edge.material = 'red'
88
+ # }
89
+ #
90
+ # @note Does not split intersecting faces or edges.
91
+ #
92
+ # @overload add_edge(point1, point2)
93
+ #
94
+ # @param [Geom::Point3d] point1
95
+ # @param [Geom::Point3d] point2
96
+ #
97
+ # @overload add_edge(points)
98
+ #
99
+ # @param [Array(Geom::Point3d, Geom::Point3d)] points
100
+ #
101
+ # @raise [ArgumentError] If the points are considered equal.
102
+ #
103
+ # @raise [RuntimeError] If the builder is not valid.
104
+ #
105
+ # @return [Sketchup::Edge]
106
+ #
107
+ # @see Sketchup::Entities#add_line
108
+ #
109
+ # @version SketchUp 2022.0
110
+ def add_edge(*args)
111
+ end
112
+ alias_method :add_line, :add_edge
113
+
114
+ # Adds a continuous set of {Sketchup::Edge}'s to the {#entities} collection.
115
+ #
116
+ # @example
117
+ # model = Sketchup.active_model
118
+ # model.entities.build { |builder|
119
+ # edges = builder.add_edges([0, 0, 0], [6, 0, 0], [9, 0, 8]) # => 2 edges
120
+ # edges.each { |edge|
121
+ # edge.material = 'red'
122
+ # }
123
+ # }
124
+ #
125
+ # @note Does not split intersecting faces or edges.
126
+ #
127
+ # @overload add_edges(points)
128
+ #
129
+ # @param [Array<Geom::Point3d>] points
130
+ #
131
+ # @overload add_edges(*points)
132
+ #
133
+ # @param [Array<Geom::Point3d>] points
134
+ #
135
+ # @raise [RuntimeError] If the builder is not valid.
136
+ #
137
+ # @return [Array<Sketchup::Edge, nil>] In the array, for each pair in +points+ an edge is returned.
138
+ # If two point are so close they are considered identical then +nil+ is returned.
139
+ #
140
+ # @see Sketchup::Entities#add_edges
141
+ #
142
+ # @version SketchUp 2022.0
143
+ def add_edges(*args)
144
+ end
145
+
146
+ # Adds a {Sketchup::Face} to the {#entities} collection.
147
+ #
148
+ # @example Adding a simple face
149
+ # model = Sketchup.active_model
150
+ # model.entities.build { |builder|
151
+ # face = builder.add_face([[0, 0, 0], [6, 0, 0], [6, 8, 0], [0, 8, 0]])
152
+ # face.material = 'red'
153
+ # }
154
+ #
155
+ # @example Adding an edge with two holes
156
+ # model = Sketchup.active_model
157
+ # model.entities.build { |builder|
158
+ # outer_loop = [[0, 0, 0], [8, 0, 0], [8, 9, 0], [0, 9, 0]]
159
+ # hole1 = [[1, 1, 0], [3, 1, 0], [3, 8, 0], [1, 8, 0]]
160
+ # hole2 = [[4, 1, 0], [7, 1, 0], [7, 8, 0], [4, 8, 0]]
161
+ # face = builder.add_face(outer_loop, holes: [hole1, hole2])
162
+ # }
163
+ #
164
+ # @note Does not split intersecting faces or edges.
165
+ #
166
+ # @overload add_face(outer_loop)
167
+ #
168
+ # @param [Array<Geom::Point3d>] outer_loop
169
+ #
170
+ # @overload add_face(*outer_loop)
171
+ #
172
+ # @param [Array<Geom::Point3d>] outer_loop
173
+ #
174
+ # @overload add_face(outer_loop, holes: inner_loops)
175
+ #
176
+ # Adds a face with holes.
177
+ # @note The inner loops are not validated to be within the bounds of the outer loop.
178
+ # @param [Array<Geom::Point3d>] outer_loop
179
+ # @param [Array<Array<Geom::Point3d>>] inner_loops
180
+ #
181
+ # @overload add_face(*outer_loop, holes: inner_loops)
182
+ #
183
+ # Adds a face with holes.
184
+ # @note The inner loops are not validated to be within the bounds of the outer loop.
185
+ # @param [Array<Geom::Point3d>] outer_loop
186
+ # @param [Array<Array<Geom::Point3d>>] inner_loops
187
+ #
188
+ # @raise [ArgumentError] If points are not planar.
189
+ #
190
+ # @raise [ArgumentError] If any of the loops doesn't have at least 3 points.
191
+ #
192
+ # @raise [RuntimeError] If the builder is not valid.
193
+ #
194
+ # @return [Sketchup::Face]
195
+ #
196
+ # @see Sketchup::Entities#add_face
197
+ #
198
+ # @version SketchUp 2022.0
199
+ def add_face(*args)
200
+ end
201
+
202
+ # The {Sketchup::Entities} collection the {Sketchup::EntitiesBuilder} will add
203
+ # the geometry to.
204
+ #
205
+ # @example
206
+ # model = Sketchup.active_model
207
+ # model.entities.build { |builder|
208
+ # p builder.entities == model.entities # => true
209
+ # }
210
+ #
211
+ # @raise [RuntimeError] If the builder is not valid.
212
+ #
213
+ # @return [Sketchup::Entities]
214
+ #
215
+ # @version SketchUp 2022.0
216
+ def entities
217
+ end
218
+
219
+ # Indicates whether the builder object is valid and can be used.
220
+ #
221
+ # A builder object is only valid within the scope of the block given to
222
+ # {Sketchup::Entities#build}.
223
+ #
224
+ # When this return +false+, calling any other method on the builder will raise
225
+ # an error.
226
+ #
227
+ # @bug Prior to SketchUp 2023.0 this returned +0+ for success instead of +true+.
228
+ # In Ruby +0+ evaluates as +true+ so conditional logic still worked.
229
+ #
230
+ # @example
231
+ # model = Sketchup.active_model
232
+ # cached_builder = nil
233
+ # model.entities.build { |builder|
234
+ # p builder.valid? # => true
235
+ # cached_builder = builder # Don't hold on to builder objects.
236
+ # }
237
+ # p cached_builder.valid? # => false
238
+ #
239
+ # @return [Boolean]
240
+ #
241
+ # @version SketchUp 2022.0
242
+ def valid?
243
+ end
244
+
245
+ # Finds an existing {Sketchup::Vertex} for the given position, otherwise returns +nil+.
246
+ #
247
+ # @example
248
+ # model = Sketchup.active_model
249
+ # model.entities.build { |builder|
250
+ # edge = builder.add_edge([1, 0, 0], [9, 0, 0])
251
+ # builder.vertex_at([0, 0, 0]) => nil
252
+ # builder.vertex_at([9, 0, 0]) => #<Sketchup::Vertex>
253
+ # }
254
+ #
255
+ # @return [Sketchup::Vertex, nil]
256
+ #
257
+ # @version SketchUp 2022.0
258
+ def vertex_at(position)
259
+ end
260
+
261
+ end