sketchup-api-stubs 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sketchup-api-stubs/sketchup.rb +157 -151
  3. data/lib/sketchup-api-stubs/stubs/Array.rb +741 -741
  4. data/lib/sketchup-api-stubs/stubs/Geom/BoundingBox.rb +322 -322
  5. data/lib/sketchup-api-stubs/stubs/Geom/Bounds2d.rb +182 -172
  6. data/lib/sketchup-api-stubs/stubs/Geom/LatLong.rb +111 -126
  7. data/lib/sketchup-api-stubs/stubs/Geom/OrientedBounds2d.rb +102 -102
  8. data/lib/sketchup-api-stubs/stubs/Geom/Point2d.rb +423 -400
  9. data/lib/sketchup-api-stubs/stubs/Geom/Point3d.rb +693 -661
  10. data/lib/sketchup-api-stubs/stubs/Geom/PolygonMesh.rb +535 -509
  11. data/lib/sketchup-api-stubs/stubs/Geom/Transformation.rb +500 -476
  12. data/lib/sketchup-api-stubs/stubs/Geom/Transformation2d.rb +267 -263
  13. data/lib/sketchup-api-stubs/stubs/Geom/UTM.rb +133 -141
  14. data/lib/sketchup-api-stubs/stubs/Geom/Vector2d.rb +547 -522
  15. data/lib/sketchup-api-stubs/stubs/Geom/Vector3d.rb +678 -693
  16. data/lib/sketchup-api-stubs/stubs/Geom.rb +351 -351
  17. data/lib/sketchup-api-stubs/stubs/LanguageHandler.rb +93 -93
  18. data/lib/sketchup-api-stubs/stubs/Layout/AngularDimension.rb +595 -595
  19. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinition.rb +751 -747
  20. data/lib/sketchup-api-stubs/stubs/Layout/AutoTextDefinitions.rb +183 -183
  21. data/lib/sketchup-api-stubs/stubs/Layout/ConnectionPoint.rb +70 -70
  22. data/lib/sketchup-api-stubs/stubs/Layout/Dictionary.rb +234 -0
  23. data/lib/sketchup-api-stubs/stubs/Layout/Document.rb +683 -517
  24. data/lib/sketchup-api-stubs/stubs/Layout/Ellipse.rb +29 -29
  25. data/lib/sketchup-api-stubs/stubs/Layout/Entities.rb +148 -148
  26. data/lib/sketchup-api-stubs/stubs/Layout/Entity.rb +464 -353
  27. data/lib/sketchup-api-stubs/stubs/Layout/FormattedText.rb +354 -354
  28. data/lib/sketchup-api-stubs/stubs/Layout/Grid.rb +311 -311
  29. data/lib/sketchup-api-stubs/stubs/Layout/Group.rb +261 -261
  30. data/lib/sketchup-api-stubs/stubs/Layout/Image.rb +91 -91
  31. data/lib/sketchup-api-stubs/stubs/Layout/Label.rb +370 -370
  32. data/lib/sketchup-api-stubs/stubs/Layout/Layer.rb +218 -218
  33. data/lib/sketchup-api-stubs/stubs/Layout/LayerInstance.rb +128 -128
  34. data/lib/sketchup-api-stubs/stubs/Layout/Layers.rb +225 -225
  35. data/lib/sketchup-api-stubs/stubs/Layout/LinearDimension.rb +614 -567
  36. data/lib/sketchup-api-stubs/stubs/Layout/LockedEntityError.rb +10 -10
  37. data/lib/sketchup-api-stubs/stubs/Layout/LockedLayerError.rb +11 -11
  38. data/lib/sketchup-api-stubs/stubs/Layout/Page.rb +282 -183
  39. data/lib/sketchup-api-stubs/stubs/Layout/PageInfo.rb +458 -387
  40. data/lib/sketchup-api-stubs/stubs/Layout/Pages.rb +209 -209
  41. data/lib/sketchup-api-stubs/stubs/Layout/Path.rb +346 -344
  42. data/lib/sketchup-api-stubs/stubs/Layout/Rectangle.rb +174 -174
  43. data/lib/sketchup-api-stubs/stubs/Layout/ReferenceEntity.rb +82 -82
  44. data/lib/sketchup-api-stubs/stubs/Layout/SketchUpModel.rb +714 -692
  45. data/lib/sketchup-api-stubs/stubs/Layout/Style.rb +1565 -1519
  46. data/lib/sketchup-api-stubs/stubs/Layout/Table.rb +290 -290
  47. data/lib/sketchup-api-stubs/stubs/Layout/TableCell.rb +149 -149
  48. data/lib/sketchup-api-stubs/stubs/Layout/TableColumn.rb +139 -139
  49. data/lib/sketchup-api-stubs/stubs/Layout/TableRow.rb +135 -135
  50. data/lib/sketchup-api-stubs/stubs/Layout.rb +25 -25
  51. data/lib/sketchup-api-stubs/stubs/Length.rb +286 -278
  52. data/lib/sketchup-api-stubs/stubs/Numeric.rb +249 -249
  53. data/lib/sketchup-api-stubs/stubs/Sketchup/Animation.rb +196 -144
  54. data/lib/sketchup-api-stubs/stubs/Sketchup/AppObserver.rb +169 -169
  55. data/lib/sketchup-api-stubs/stubs/Sketchup/ArcCurve.rb +226 -209
  56. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionaries.rb +145 -150
  57. data/lib/sketchup-api-stubs/stubs/Sketchup/AttributeDictionary.rb +294 -281
  58. data/lib/sketchup-api-stubs/stubs/Sketchup/Axes.rb +149 -149
  59. data/lib/sketchup-api-stubs/stubs/Sketchup/Behavior.rb +296 -302
  60. data/lib/sketchup-api-stubs/stubs/Sketchup/Camera.rb +473 -478
  61. data/lib/sketchup-api-stubs/stubs/Sketchup/ClassificationSchema.rb +63 -63
  62. data/lib/sketchup-api-stubs/stubs/Sketchup/Classifications.rb +121 -121
  63. data/lib/sketchup-api-stubs/stubs/Sketchup/Color.rb +294 -294
  64. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentDefinition.rb +673 -659
  65. data/lib/sketchup-api-stubs/stubs/Sketchup/ComponentInstance.rb +600 -593
  66. data/lib/sketchup-api-stubs/stubs/Sketchup/Console.rb +76 -76
  67. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionLine.rb +252 -257
  68. data/lib/sketchup-api-stubs/stubs/Sketchup/ConstructionPoint.rb +32 -32
  69. data/lib/sketchup-api-stubs/stubs/Sketchup/Curve.rb +201 -201
  70. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionList.rb +443 -449
  71. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionObserver.rb +74 -74
  72. data/lib/sketchup-api-stubs/stubs/Sketchup/DefinitionsObserver.rb +104 -104
  73. data/lib/sketchup-api-stubs/stubs/Sketchup/Dimension.rb +167 -165
  74. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionLinear.rb +306 -306
  75. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionObserver.rb +42 -42
  76. data/lib/sketchup-api-stubs/stubs/Sketchup/DimensionRadial.rb +87 -87
  77. data/lib/sketchup-api-stubs/stubs/Sketchup/Drawingelement.rb +403 -406
  78. data/lib/sketchup-api-stubs/stubs/Sketchup/Edge.rb +397 -397
  79. data/lib/sketchup-api-stubs/stubs/Sketchup/EdgeUse.rb +211 -211
  80. data/lib/sketchup-api-stubs/stubs/Sketchup/Entities.rb +1282 -1239
  81. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesBuilder.rb +261 -261
  82. data/lib/sketchup-api-stubs/stubs/Sketchup/EntitiesObserver.rb +127 -127
  83. data/lib/sketchup-api-stubs/stubs/Sketchup/Entity.rb +519 -545
  84. data/lib/sketchup-api-stubs/stubs/Sketchup/EntityObserver.rb +60 -60
  85. data/lib/sketchup-api-stubs/stubs/Sketchup/Environment.rb +406 -0
  86. data/lib/sketchup-api-stubs/stubs/Sketchup/Environments.rb +185 -0
  87. data/lib/sketchup-api-stubs/stubs/Sketchup/EnvironmentsObserver.rb +113 -0
  88. data/lib/sketchup-api-stubs/stubs/Sketchup/ExtensionsManager.rb +122 -125
  89. data/lib/sketchup-api-stubs/stubs/Sketchup/Face.rb +1006 -937
  90. data/lib/sketchup-api-stubs/stubs/Sketchup/FrameChangeObserver.rb +102 -102
  91. data/lib/sketchup-api-stubs/stubs/Sketchup/Group.rb +740 -750
  92. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Request.rb +289 -282
  93. data/lib/sketchup-api-stubs/stubs/Sketchup/Http/Response.rb +64 -62
  94. data/lib/sketchup-api-stubs/stubs/Sketchup/Http.rb +27 -27
  95. data/lib/sketchup-api-stubs/stubs/Sketchup/Image.rb +405 -468
  96. data/lib/sketchup-api-stubs/stubs/Sketchup/ImageRep.rb +266 -266
  97. data/lib/sketchup-api-stubs/stubs/Sketchup/Importer.rb +189 -189
  98. data/lib/sketchup-api-stubs/stubs/Sketchup/InputPoint.rb +432 -406
  99. data/lib/sketchup-api-stubs/stubs/Sketchup/InstanceObserver.rb +84 -84
  100. data/lib/sketchup-api-stubs/stubs/Sketchup/InstancePath.rb +307 -306
  101. data/lib/sketchup-api-stubs/stubs/Sketchup/Layer.rb +332 -326
  102. data/lib/sketchup-api-stubs/stubs/Sketchup/LayerFolder.rb +380 -422
  103. data/lib/sketchup-api-stubs/stubs/Sketchup/Layers.rb +409 -427
  104. data/lib/sketchup-api-stubs/stubs/Sketchup/LayersObserver.rb +241 -249
  105. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing/ExtensionLicense.rb +86 -86
  106. data/lib/sketchup-api-stubs/stubs/Sketchup/Licensing.rb +55 -48
  107. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyle.rb +24 -24
  108. data/lib/sketchup-api-stubs/stubs/Sketchup/LineStyles.rb +114 -114
  109. data/lib/sketchup-api-stubs/stubs/Sketchup/LoadHandler.rb +70 -0
  110. data/lib/sketchup-api-stubs/stubs/Sketchup/Loop.rb +137 -137
  111. data/lib/sketchup-api-stubs/stubs/Sketchup/Material.rb +1115 -414
  112. data/lib/sketchup-api-stubs/stubs/Sketchup/Materials.rb +330 -317
  113. data/lib/sketchup-api-stubs/stubs/Sketchup/MaterialsObserver.rb +142 -142
  114. data/lib/sketchup-api-stubs/stubs/Sketchup/Menu.rb +93 -93
  115. data/lib/sketchup-api-stubs/stubs/Sketchup/Model.rb +1714 -1652
  116. data/lib/sketchup-api-stubs/stubs/Sketchup/ModelObserver.rb +372 -357
  117. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsManager.rb +133 -130
  118. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProvider.rb +271 -271
  119. data/lib/sketchup-api-stubs/stubs/Sketchup/OptionsProviderObserver.rb +58 -58
  120. data/lib/sketchup-api-stubs/stubs/Sketchup/Overlay.rb +463 -490
  121. data/lib/sketchup-api-stubs/stubs/Sketchup/OverlaysManager.rb +104 -116
  122. data/lib/sketchup-api-stubs/stubs/Sketchup/Page.rb +939 -797
  123. data/lib/sketchup-api-stubs/stubs/Sketchup/Pages.rb +388 -361
  124. data/lib/sketchup-api-stubs/stubs/Sketchup/PagesObserver.rb +77 -77
  125. data/lib/sketchup-api-stubs/stubs/Sketchup/PickHelper.rb +501 -478
  126. data/lib/sketchup-api-stubs/stubs/Sketchup/RegionalSettings.rb +43 -43
  127. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptions.rb +385 -361
  128. data/lib/sketchup-api-stubs/stubs/Sketchup/RenderingOptionsObserver.rb +45 -45
  129. data/lib/sketchup-api-stubs/stubs/Sketchup/SectionPlane.rb +150 -150
  130. data/lib/sketchup-api-stubs/stubs/Sketchup/Selection.rb +451 -458
  131. data/lib/sketchup-api-stubs/stubs/Sketchup/SelectionObserver.rb +115 -115
  132. data/lib/sketchup-api-stubs/stubs/Sketchup/Set.rb +211 -212
  133. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfo.rb +259 -255
  134. data/lib/sketchup-api-stubs/stubs/Sketchup/ShadowInfoObserver.rb +59 -59
  135. data/lib/sketchup-api-stubs/stubs/Sketchup/Skp.rb +40 -40
  136. data/lib/sketchup-api-stubs/stubs/Sketchup/Snap.rb +125 -0
  137. data/lib/sketchup-api-stubs/stubs/Sketchup/Style.rb +88 -69
  138. data/lib/sketchup-api-stubs/stubs/Sketchup/Styles.rb +263 -217
  139. data/lib/sketchup-api-stubs/stubs/Sketchup/Text.rb +283 -262
  140. data/lib/sketchup-api-stubs/stubs/Sketchup/Texture.rb +199 -217
  141. data/lib/sketchup-api-stubs/stubs/Sketchup/TextureWriter.rb +237 -237
  142. data/lib/sketchup-api-stubs/stubs/Sketchup/Tool.rb +924 -834
  143. data/lib/sketchup-api-stubs/stubs/Sketchup/Tools.rb +132 -132
  144. data/lib/sketchup-api-stubs/stubs/Sketchup/ToolsObserver.rb +156 -156
  145. data/lib/sketchup-api-stubs/stubs/Sketchup/UVHelper.rb +75 -75
  146. data/lib/sketchup-api-stubs/stubs/Sketchup/Vertex.rb +143 -142
  147. data/lib/sketchup-api-stubs/stubs/Sketchup/View.rb +1566 -1311
  148. data/lib/sketchup-api-stubs/stubs/Sketchup/ViewObserver.rb +71 -45
  149. data/lib/sketchup-api-stubs/stubs/Sketchup.rb +1429 -1377
  150. data/lib/sketchup-api-stubs/stubs/SketchupExtension.rb +353 -353
  151. data/lib/sketchup-api-stubs/stubs/String.rb +24 -24
  152. data/lib/sketchup-api-stubs/stubs/UI/Command.rb +399 -389
  153. data/lib/sketchup-api-stubs/stubs/UI/HtmlDialog.rb +580 -494
  154. data/lib/sketchup-api-stubs/stubs/UI/Notification.rb +280 -269
  155. data/lib/sketchup-api-stubs/stubs/UI/Toolbar.rb +258 -241
  156. data/lib/sketchup-api-stubs/stubs/UI/WebDialog.rb +636 -635
  157. data/lib/sketchup-api-stubs/stubs/UI.rb +791 -683
  158. data/lib/sketchup-api-stubs/stubs/_top_level.rb +303 -303
  159. data/lib/sketchup-api-stubs.rb +1 -1
  160. metadata +10 -24
@@ -1,261 +1,261 @@
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
1
+ # Copyright:: Copyright 2026 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