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,937 +1,1006 @@
1
- # Copyright:: Copyright 2023 Trimble Inc.
2
- # License:: The MIT License (MIT)
3
-
4
- # Faces in SketchUp are flat, 2-sided polygons with 3 or more sides.
5
- #
6
- # @version SketchUp 6.0
7
- class Sketchup::Face < Sketchup::Drawingelement
8
-
9
- # Constants
10
-
11
- PointInside = nil # Stub value.
12
- PointNotOnPlane = nil # Stub value.
13
- PointOnEdge = nil # Stub value.
14
- PointOnFace = nil # Stub value.
15
- PointOnVertex = nil # Stub value.
16
- PointOutside = nil # Stub value.
17
- PointUnknown = nil # Stub value.
18
-
19
- # Instance Methods
20
-
21
- # The all_connected method retrieves all of the entities connected to a face.
22
- #
23
- # @example
24
- # depth = 100
25
- # width = 100
26
- # model = Sketchup.active_model
27
- # entities = model.active_entities
28
- # pts = []
29
- # pts[0] = [0, 0, 0]
30
- # pts[1] = [width, 0, 0]
31
- # pts[2] = [width, depth, 0]
32
- # pts[3] = [0, depth, 0]
33
- #
34
- # # Add the face to the entities in the model
35
- # face = entities.add_face(pts)
36
- # connected = face.all_connected
37
- #
38
- # @return [Array<Sketchup::Entity>] the entities connected to the face
39
- #
40
- # @version SketchUp 6.0
41
- def all_connected
42
- end
43
-
44
- # The area method is used to retrieve the area of a face.
45
- #
46
- # You can pass in an optional Transformation (or an array that can represent a
47
- # transformation), to correct for a parent group's transformation. For example,
48
- # if a face is inside of a group that is scaled to 200%, the area method will
49
- # return the unscaled area of the face. So by passing a 200% transformation
50
- # object to this method, you can account for that to get the "visual" area
51
- # of the face.
52
- #
53
- # @example
54
- # depth = 100
55
- # width = 100
56
- # model = Sketchup.active_model
57
- # entities = model.active_entities
58
- # pts = []
59
- # pts[0] = [0, 0, 0]
60
- # pts[1] = [width, 0, 0]
61
- # pts[2] = [width, depth, 0]
62
- # pts[3] = [0, depth, 0]
63
- # # Add the face to the entities in the model
64
- # face = entities.add_face(pts)
65
- # area = face.area
66
- #
67
- # @overload area
68
- #
69
- # @return [Float] the area of the face in square inches.
70
- #
71
- # @overload area(transform)
72
- #
73
- # @param [Geom::Transformation] transform
74
- # A Transformation object or array that can be interpreted as a
75
- # Transformation object.
76
- # @return [Float] the area of the face in square inches.
77
- #
78
- # @version SketchUp 6.0
79
- def area(*args)
80
- end
81
-
82
- # The back_material method is used to retrieve the material assigned to the
83
- # back side of the face.
84
- #
85
- # @example
86
- # depth = 100
87
- # width = 100
88
- # model = Sketchup.active_model
89
- # entities = model.active_entities
90
- # pts = []
91
- # pts[0] = [0, 0, 0]
92
- # pts[1] = [width, 0, 0]
93
- # pts[2] = [width, depth, 0]
94
- # pts[3] = [0, depth, 0]
95
- #
96
- # # Add the face to the entities in the model
97
- # face = entities.add_face(pts)
98
- #
99
- # # Add a material to the back face, then check to see that it was added
100
- # face.back_material = "red"
101
- # material = face.back_material
102
- #
103
- # @return [Sketchup::Material, nil] a Material object representing the material
104
- # on the back of the face (if successful)
105
- #
106
- # @version SketchUp 6.0
107
- def back_material
108
- end
109
-
110
- # The back_material= method is used to set the material assigned to the back
111
- # side of the face.
112
- #
113
- # @example
114
- # depth = 100
115
- # width = 100
116
- # model = Sketchup.active_model
117
- # entities = model.active_entities
118
- # pts = []
119
- # pts[0] = [0, 0, 0]
120
- # pts[1] = [width, 0, 0]
121
- # pts[2] = [width, depth, 0]
122
- # pts[3] = [0, depth, 0]
123
- # # Add the face to the entities in the model
124
- # face = entities.add_face(pts)
125
- # status = face.back_material = "red"
126
- #
127
- # @param [Sketchup::Material] material
128
- # A Material object or the name of a valid material.
129
- #
130
- # @return [Sketchup::Material] the name of the valid material or the new
131
- # Material object (if successful)
132
- #
133
- # @version SketchUp 6.0
134
- def back_material=(material)
135
- end
136
-
137
- # The classify_point method is used to determine if a given Point3d is on the
138
- # referenced Face.
139
- #
140
- # It is important that return value comparisons be made against the
141
- # symbolic constants (i.e. {Sketchup::Face::PointUnknown},
142
- # {Sketchup::Face::PointInside}, {Sketchup::Face::PointOnVertex}, etc.) rather
143
- # than the absolute integer values as these values may change from one
144
- # release to the next.
145
- #
146
- # @example
147
- # model = Sketchup.active_model
148
- # entities = model.active_entities
149
- # pts = []
150
- # pts[0] = [0, 0, 0]
151
- # pts[1] = [9, 0, 0]
152
- # pts[2] = [9, 9, 0]
153
- # pts[3] = [0, 9, 0]
154
- #
155
- # # Add the face to the entities in the model
156
- # face = entities.add_face(pts)
157
- #
158
- # # Check a point that should be outside the face.
159
- # pt = Geom::Point3d.new(50, 50, 0)
160
- # result = face.classify_point(pt)
161
- # if result == Sketchup::Face::PointOutside
162
- # puts "#{pt.to_s} is outside the face"
163
- # end
164
- #
165
- # # Check a point that should be outside inside the face.
166
- # pt = Geom::Point3d.new(1, 1, 0)
167
- # result = face.classify_point(pt)
168
- # if result == Sketchup::Face::PointInside
169
- # puts "#{pt.to_s} is inside the face"
170
- # end
171
- #
172
- # # Check a point that should be on the vertex of the face.
173
- # pt = Geom::Point3d.new(0, 0, 0)
174
- # result = face.classify_point(pt)
175
- # if result == Sketchup::Face::PointOnVertex
176
- # puts "#{pt.to_s} is on a vertex"
177
- # end
178
- #
179
- # # Check a point that should be on the edge of the face.
180
- # pt = Geom::Point3d.new(0, 1, 0)
181
- # result = face.classify_point(pt)
182
- # if result == Sketchup::Face::PointOnEdge
183
- # puts "#{pt.to_s} is on an edge of the face"
184
- # end
185
- #
186
- # # Check a point that should be off the plane of the face.
187
- # pt = Geom::Point3d.new(1, 1, 10)
188
- # result = face.classify_point(pt)
189
- # if result == Sketchup::Face::PointNotOnPlane
190
- # puts "#{pt.to_s} is not on the same plane as the face"
191
- # end
192
- #
193
- # @param [Geom::Point3d] point
194
- # A Point3d.
195
- #
196
- # @return [Integer] an integer describing where a Point3d is in
197
- # relation to the referenced Face.
198
- #
199
- # @version SketchUp 6.0
200
- def classify_point(point)
201
- end
202
-
203
- # The {#clear_texture_position} method is used to remove any explicit
204
- # texture positioning for a face and have SketchUp display it with the
205
- # default texture positioning.
206
- #
207
- # @param [Boolean] front
208
- # +true+ Clears on the front side of the face, +false+
209
- # the back side.
210
- #
211
- # @version SketchUp 2022.0
212
- def clear_texture_position(front)
213
- end
214
-
215
- # The {#clear_texture_projection} method is used to clear the texture
216
- # projection. This is similar to toggling off Projection from the Position
217
- # Texture tool in the UI.
218
- #
219
- # @param [Boolean] frontside
220
- # +true+ for front side, +false+ for back side.
221
- #
222
- # @see #position_material
223
- #
224
- # @see #get_texture_projection
225
- #
226
- # @version SketchUp 2021.1
227
- def clear_texture_projection(frontside)
228
- end
229
-
230
- # The edges method is used to get an array of edges that bound the face.
231
- #
232
- # @example
233
- # depth = 100
234
- # width = 100
235
- # model = Sketchup.active_model
236
- # entities = model.active_entities
237
- # pts = []
238
- # pts[0] = [0, 0, 0]
239
- # pts[1] = [width, 0, 0]
240
- # pts[2] = [width, depth, 0]
241
- # pts[3] = [0, depth, 0]
242
- # # Add the face to the entities in the model
243
- # face = entities.add_face(pts)
244
- # edges = face.edges
245
- #
246
- # @return [Array<Sketchup::Edge>] an array of Edge objects (if successful)
247
- #
248
- # @version SketchUp 6.0
249
- def edges
250
- end
251
-
252
- # The {#followme} method is used to create a shape by making the face follow
253
- # along an array of edges.
254
- #
255
- # @example
256
- # model = Sketchup.active_model
257
- # entities = model.active_entities
258
- #
259
- # depth = 100
260
- # width = 100
261
- #
262
- # # Add the face to the entities in the model
263
- # points = [
264
- # Geom::Point3d.new(0, 0, 0),
265
- # Geom::Point3d.new(width, 0, 0),
266
- # Geom::Point3d.new(width, depth, 0),
267
- # Geom::Point3d.new(0, depth, 0)
268
- # ]
269
- # face = entities.add_face(points)
270
- #
271
- # # Add the line which we will "follow" to the entities in the model
272
- # point1 = Geom::Point3d.new(0, 0, 0)
273
- # point2 = Geom::Point3d.new(0, 0, 100)
274
- # edge = entities.add_line(point1, point2)
275
- # face.followme(edge)
276
- #
277
- # @overload followme(edges)
278
- #
279
- # @param [Array<Sketchup::Edge>] edges An array of edge objects to follow.
280
- # @return [Boolean]
281
- #
282
- # @overload followme(edge)
283
- #
284
- # @param [Sketchup::Edge] edge An edge to follow.
285
- # @return [Boolean]
286
- #
287
- # @version SketchUp 6.0
288
- def followme(*args)
289
- end
290
-
291
- # The get_UVHelper object is used to retrieve a UVHelper object for use in
292
- # texture manipulation on a face.
293
- #
294
- # @example
295
- # model = Sketchup.active_model
296
- # entities = model.active_entities
297
- # pts = []
298
- # pts[0] = [0, 0, 0]
299
- # pts[1] = [9, 0, 0]
300
- # pts[2] = [9, 9, 0]
301
- # pts[3] = [0, 9, 0]
302
- #
303
- # # Add the face to the entities in the model
304
- # face = entities.add_face(pts)
305
- # tw = Sketchup.create_texture_writer
306
- # uvHelp = face.get_UVHelper(true, true, tw)
307
- #
308
- # @overload get_UVHelper(front = true, back = true)
309
- #
310
- # @param [Boolean] front
311
- # True if you want the texture coordinates for the front
312
- # face, false if not.
313
- #
314
- # @param [Boolean] back
315
- # True if you want the texture coordinates for the back
316
- # face, false if not.
317
- #
318
- # @overload get_UVHelper(front = true, back = true, texturewriter)
319
- #
320
- # @param [Boolean] front
321
- # True if you want the texture coordinates for the front
322
- # face, false if not.
323
- #
324
- # @param [Boolean] back
325
- # True if you want the texture coordinates for the back
326
- # face, false if not.
327
- #
328
- # @param [Sketchup::TextureWriter] texturewriter
329
- # An optional TextureWriter object.
330
- #
331
- # @return [Sketchup::UVHelper]
332
- #
333
- # @version SketchUp 6.0
334
- def get_UVHelper(*args)
335
- end
336
-
337
- # The get_glued_instances method returns an Array any ComponentInstances
338
- # that are glued to the face.
339
- #
340
- # ComponentInstance objects that are currently glued to the face.
341
- #
342
- # @example
343
- # # Create a series of points that define a new face.
344
- # model = Sketchup.active_model
345
- # entities = model.active_entities
346
- # pts = []
347
- # pts[0] = [0, 0, 0]
348
- # pts[1] = [9, 0, 0]
349
- # pts[2] = [9, 9, 0]
350
- # pts[3] = [0, 9, 0]
351
- #
352
- # # Add the face to the entities in the model
353
- # face = entities.add_face(pts)
354
- # glued_array = face.get_glued_instances
355
- #
356
- # @return [Array<Sketchup::ComponentInstance, Sketchup::Group, Sketchup::Image>] An array of
357
- #
358
- # @version SketchUp 7.0 M1
359
- def get_glued_instances
360
- end
361
-
362
- # The {#get_texture_projection} method will return a vector representing the
363
- # projection for either the front or back side of the face.
364
- #
365
- # @example
366
- # model = Sketchup.active_model
367
- # entities = model.active_entities
368
- # materials = model.materials
369
- #
370
- # # Create a face and add it to the model entities
371
- # pts = []
372
- # pts[0] = [0, 0, 1]
373
- # pts[1] = [10, 0, 1]
374
- # pts[2] = [10, 10, 1]
375
- # face = entities.add_face(pts)
376
- #
377
- # # Export an image to use as a texture
378
- # path = Sketchup.temp_dir
379
- # full_name = File.join(path, "temp_image.jpg")
380
- # model.active_view.write_image(full_name, 500, 500, false, 0.0)
381
- #
382
- # # Create a material and assign the texture to it
383
- # material = materials.add("Test Material")
384
- # material.texture = full_name
385
- #
386
- # # Assign the new material to our face we created
387
- # face.material = material
388
- #
389
- # # Set the projection of the applied material
390
- # face.set_texture_projection(face.normal, true)
391
- #
392
- # # Get the projection of the applied material
393
- # vector = face.get_texture_projection(true)
394
- #
395
- # @param [Boolean] frontside
396
- # +true+ for front side, +false+ for back side.
397
- #
398
- # @return [Geom::Vector3d, nil] a vector on success, +nil+ if face is not
399
- # textured with a projected texture mapping.
400
- #
401
- # @see #position_material
402
- #
403
- # @see #texture_projected?
404
- #
405
- # @version SketchUp 2014
406
- def get_texture_projection(frontside)
407
- end
408
-
409
- # The loops method is used to get an array of all of the loops that bound the
410
- # face.
411
- #
412
- # @example
413
- # depth = 100
414
- # width = 100
415
- # model = Sketchup.active_model
416
- # entities = model.active_entities
417
- # pts = []
418
- # pts[0] = [0, 0, 0]
419
- # pts[1] = [width, 0, 0]
420
- # pts[2] = [width, depth, 0]
421
- # pts[3] = [0, depth, 0]
422
- #
423
- # # Add the face to the entities in the model
424
- # face = entities.add_face(pts)
425
- # loops = face.loops
426
- #
427
- # @return [Array<Sketchup::Loop>] an array of Loop objects if successful
428
- #
429
- # @version SketchUp 6.0
430
- def loops
431
- end
432
-
433
- # The material method is used to retrieve the material assigned to the
434
- # front of the face. (This method is inherited from the Drawingelement
435
- # parent class.)
436
- #
437
- # @example
438
- # depth = 100
439
- # width = 100
440
- # model = Sketchup.active_model
441
- # entities = model.active_entities
442
- # pts = []
443
- # pts[0] = [0, 0, 0]
444
- # pts[1] = [width, 0, 0]
445
- # pts[2] = [width, depth, 0]
446
- # pts[3] = [0, depth, 0]
447
- #
448
- # # Add the face to the entities in the model
449
- # face = entities.add_face(pts)
450
- #
451
- # # Add a material to the face, then check to see that it was added
452
- # face.material = "red"
453
- # material = face.material
454
- #
455
- # @return [Sketchup::Material, nil] a Material object representing the material
456
- # on the front of the face (if successful)
457
- #
458
- # @version SketchUp 6.0
459
- def material
460
- end
461
-
462
- # The material= method is used to set the material assigned to the front
463
- # side of the face. (This method is inherited from the Drawingelement
464
- # parent class.)
465
- #
466
- # @example
467
- # depth = 100
468
- # width = 100
469
- # model = Sketchup.active_model
470
- # entities = model.active_entities
471
- # pts = []
472
- # pts[0] = [0, 0, 0]
473
- # pts[1] = [width, 0, 0]
474
- # pts[2] = [width, depth, 0]
475
- # pts[3] = [0, depth, 0]
476
- # # Add the face to the entities in the model
477
- # face = entities.add_face(pts)
478
- # status = face.material = "red"
479
- #
480
- # @param [Sketchup::Material] material
481
- # A Material object or the name of a valid material.
482
- #
483
- # @return [Sketchup::Material] the name of the valid material or the new
484
- # Material object (if successful)
485
- #
486
- # @version SketchUp 6.0
487
- def material=(material)
488
- end
489
-
490
- # The mesh method creates a polygon mesh that represents the face. See the
491
- # {Geom::PolygonMesh} class for more information.
492
- #
493
- # Valid flags are:
494
- #
495
- # - +0+: Include PolygonMeshPoints,
496
- # - +1+: Include PolygonMeshUVQFront,
497
- # - +2+: Include PolygonMeshUVQBack,
498
- # - +4+: Include PolygonMeshNormals.
499
- #
500
- # Use bitwise OR to combine flags. A value of +7+ will include all
501
- # flags, for example.
502
- #
503
- # @example
504
- # depth = 100
505
- # width = 100
506
- # model = Sketchup.active_model
507
- # entities = model.active_entities
508
- # pts = []
509
- # pts[0] = [0, 0, 0]
510
- # pts[1] = [width, 0, 0]
511
- # pts[2] = [width, depth, 0]
512
- # pts[3] = [0, depth, 0]
513
- #
514
- # # Add the face to the entities in the model
515
- # face = entities.add_face(pts)
516
- #
517
- # kPoints = 0
518
- # kUVQFront = 1
519
- # kUVQBack = 2
520
- # kNormals = 4
521
- # flags = kPoints | kUVQFront | kUVQBack | kNormals # equals to 7
522
- # mesh = face.mesh(flags)
523
- #
524
- # @param [Integer] flags
525
- # One or more flags used to generate a mesh.
526
- #
527
- # @return [Geom::PolygonMesh]
528
- #
529
- # @version SketchUp 6.0
530
- def mesh(flags = 0)
531
- end
532
-
533
- # The normal method is used to retrieve the 3D vector normal to the face in
534
- # the front direction.
535
- #
536
- # @example
537
- # depth = 100
538
- # width = 100
539
- # model = Sketchup.active_model
540
- # entities = model.active_entities
541
- # pts = []
542
- # pts[0] = [0, 0, 0]
543
- # pts[1] = [width, 0, 0]
544
- # pts[2] = [width, depth, 0]
545
- # pts[3] = [0, depth, 0]
546
- #
547
- # # Add the face to the entities in the model
548
- # face = entities.add_face(pts)
549
- # normal = face.normal
550
- #
551
- # @return [Geom::Vector3d] a Vector3d object if successful
552
- #
553
- # @version SketchUp 6.0
554
- def normal
555
- end
556
-
557
- # This method is used to retrieve the outer loop that bounds the face.
558
- #
559
- # @example
560
- # # Create a series of points that define a new face.
561
- # model = Sketchup.active_model
562
- # entities = model.active_entities
563
- # pts = []
564
- # pts[0] = [0, 0, 0]
565
- # pts[1] = [9, 0, 0]
566
- # pts[2] = [9, 9, 0]
567
- # pts[3] = [0, 9, 0]
568
- #
569
- # # Add the face to the entities in the model
570
- # face = entities.add_face(pts)
571
- # loop = face.outer_loop
572
- #
573
- # @return [Sketchup::Loop] a Loop object representing the outer loop (if
574
- # successful)
575
- #
576
- # @version SketchUp 6.0
577
- def outer_loop
578
- end
579
-
580
- # The plane method is used to retrieve the plane of the face. See the Array
581
- # class for information on how planes are stored.
582
- #
583
- # @example
584
- # depth = 100
585
- # width = 100
586
- # model = Sketchup.active_model
587
- # entities = model.active_entities
588
- # pts = []
589
- # pts[0] = [0, 0, 0]
590
- # pts[1] = [width, 0, 0]
591
- # pts[2] = [width, depth, 0]
592
- # pts[3] = [0, depth, 0]
593
- #
594
- # # Add the face to the entities in the model
595
- # face = entities.add_face(pts)
596
- # plane = face.plane
597
- #
598
- # @return [Array(Float, Float, Float, Float)] a plane that contains the face (if successful)
599
- #
600
- # @version SketchUp 6.0
601
- def plane
602
- end
603
-
604
- # The {#position_material} method is used to position a material on a face.
605
- #
606
- # The +points+ argument must contain 2, 4, 6 or 8 points. The points are used
607
- # in pairs to describe where a point in the texture image is positioned on the
608
- # Face. The first point in each pair is a 3D point in the model. The second
609
- # point in each pair of points is a 2D point that gives the (u,v) coordinates
610
- # of a point in the image to match up with the 3D point.
611
- #
612
- # @example
613
- # model = Sketchup.active_model
614
- # entities = model.active_entities
615
- #
616
- # # Create a face and add it to the model entities
617
- # points = [
618
- # Geom::Point3d.new(0, 0, 1),
619
- # Geom::Point3d.new(9, 0, 1),
620
- # Geom::Point3d.new(9, 9, 1),
621
- # Geom::Point3d.new(0, 9, 1),
622
- # ]
623
- # face = entities.add_face(points)
624
- #
625
- # # Export an image to use as a texture
626
- # path = Sketchup.temp_dir
627
- # full_name = File.join(path, "temp_image.jpg")
628
- # model.active_view.write_image(full_name, 500, 500, false, 0.0)
629
- #
630
- # # Create a material and assign the texture to it
631
- # material = model.materials.add("Test Material")
632
- # material.texture = full_name
633
- #
634
- # # Assign the new material to our face we created
635
- # face.material = material
636
- #
637
- # mapping = [
638
- # Geom::Point3d.new(3,0,0), # Model coordinate
639
- # Geom::Point3d.new(0,0,0), # UV coordinate
640
- # ]
641
- # on_front = true
642
- # face.position_material(material, mapping, on_front)
643
- #
644
- # @overload position_material(material, points, on_front)
645
- #
646
- # This variant positions a material on the face's plane without projection.
647
- #
648
- # @param [Sketchup::Material] material
649
- #
650
- # @param [Array<Geom::Point3d>] points
651
- # An array of Point3d objects used to position the material.
652
- # The points should be on the plane of the face. If they are not they will
653
- # be projected to the face's plane.
654
- #
655
- # @param [Boolean] on_front
656
- # +true+ to position the texture on the front of the Face or
657
- # +false+ to position it on the back of the Face.
658
- #
659
- # @overload position_material(material, points, on_front, projection)
660
- #
661
- # @version SketchUp 2021.1
662
- #
663
- # This variant positions a material on the face's plane with projection.
664
- #
665
- # @param [Sketchup::Material] material
666
- #
667
- # @param [Array<Geom::Point3d>] points
668
- # An array of Point3d objects used to position the material.
669
- # The points should be on the same plane. The plane should be parallel to
670
- # the +projection+ vector. If they are not on a plane parallel to the
671
- # projection vector they will be projected to such a plane.
672
- #
673
- # @param [Boolean] on_front
674
- # +true+ to position the texture on the front of the Face or
675
- # +false+ to position it on the back of the Face.
676
- #
677
- # @param [Geom::Vector3d] projection_vector
678
- # The direction of the texture projection.
679
- #
680
- # @raise ArgumentError if the provided points are not in the size of 2, 4, 6 or 8.
681
- #
682
- # @raise ArgumentError if the provided points could not be computed to a valid UV mapping.
683
- #
684
- # @return [Sketchup::Face, false] the face upon success, +false+ if material or
685
- # texture if not valid.
686
- #
687
- # @see #texture_positioned?
688
- #
689
- # @see #texture_projected?
690
- #
691
- # @see #get_texture_projection
692
- #
693
- # @see #clear_texture_projection
694
- #
695
- # @version SketchUp 6.0
696
- def position_material(*args)
697
- end
698
-
699
- # The pushpull method is used to perform a push/pull on a face.
700
- #
701
- # The distance is measured in the direction that the face normal is pointing.
702
- #
703
- # @example
704
- # depth = 100
705
- # width = 100
706
- # model = Sketchup.active_model
707
- # entities = model.active_entities
708
- # pts = []
709
- # pts[0] = [0, 0, 0]
710
- # pts[1] = [width, 0, 0]
711
- # pts[2] = [width, depth, 0]
712
- # pts[3] = [0, depth, 0]
713
- # # Add the face to the entities in the model
714
- # face = entities.add_face(pts)
715
- # status = face.pushpull(100, true)
716
- #
717
- # @param [Length] distance
718
- # The distance to push/pull the face.
719
- #
720
- # @param [Boolean] copy
721
- # Create a new push/pull starting face if true (equivalent
722
- # of pressing CTRL while in SketchUp), do not create a
723
- # push/pull starting face if false.
724
- #
725
- # @return [nil]
726
- #
727
- # @version SketchUp 6.0
728
- def pushpull(distance, copy = false)
729
- end
730
-
731
- # The reverse! method is used to reverse the face's orientation, meaning the
732
- # front becomes the back.
733
- #
734
- # @example
735
- # depth = 100
736
- # width = 100
737
- # model = Sketchup.active_model
738
- # entities = model.active_entities
739
- # pts = []
740
- # pts[0] = [0, 0, 0]
741
- # pts[1] = [width, 0, 0]
742
- # pts[2] = [width, depth, 0]
743
- # pts[3] = [0, depth, 0]
744
- # # Add the face to the entities in the model
745
- # face = entities.add_face(pts)
746
- # status = face.reverse!
747
- #
748
- # @return [Sketchup::Face, false] the reversed Face object if successful, false if
749
- # unsuccessful
750
- #
751
- # @version SketchUp 6.0
752
- def reverse!
753
- end
754
-
755
- # The {#set_texture_projection} method is used to set the texture projection
756
- # direction.
757
- #
758
- # @deprecated This function never worked correctly. It's not capable of
759
- # controlling the position and orientation of the texture. In some cases it
760
- # produced an invalid model. As of SketchUp 2021.1 the method simply raises
761
- # +NotImplementedError+.
762
- #
763
- # @param [Geom::Vector3d] vector
764
- # representing the direction of the projection. Use +nil+ to remove the
765
- # projection.
766
- #
767
- # @param [Boolean] frontside
768
- # +true+ for front side, +false+ for back side.
769
- #
770
- # @return [Boolean]
771
- #
772
- # @see #position_material
773
- #
774
- # @see #clear_texture_projection
775
- #
776
- # @version SketchUp 2014
777
- def set_texture_projection(vector, frontside)
778
- end
779
-
780
- # The {#texture_positioned?} method is used to check if the face has a
781
- # texture that is positioned.
782
- #
783
- # A texture is positioned when it's not using the default texture coordinates.
784
- #
785
- # When a user uses the Paint Bucket Tool to apply a material sampled from the
786
- # Material Browser it will use default texture coordinates and not be
787
- # positioned. It will be positioned if the user uses the Position Texture Tool.
788
- #
789
- # When an API user uses {Sketchup::Drawinglement#material=} the texture is not
790
- # positioned. It will be positioned when the API user uses
791
- # {Sketchup::Face#position_material}. It it also positioned of the face was
792
- # crafted via {Geom::PolygonMesh}.
793
- #
794
- # @example
795
- # model = Sketchup.active_model
796
- # entities = model.active_entities
797
- # faces = entities.grep(Sketchup::Face).select { |face|
798
- # face.texture_positioned?(true) || face.texture_positioned?(false)
799
- # }
800
- #
801
- # @param [Boolean] front
802
- # +true+ Checks the front side of the face, +false+
803
- # the back side.
804
- #
805
- # @return [Boolean]
806
- #
807
- # @see #position_material
808
- #
809
- # @see #material=
810
- #
811
- # @see #back_material=
812
- #
813
- # @version SketchUp 2021.1
814
- def texture_positioned?(front)
815
- end
816
-
817
- # The {#texture_projected?} method is used to check if the face has a
818
- # texture that is projected.
819
- #
820
- # A texture is projected when the user enables this property via the
821
- # Position Texture Tool.
822
- #
823
- # It is also projected when the API user passes a projection vector to
824
- # {#position_material}.
825
- #
826
- # @param [Boolean] front
827
- # +true+ Checks the front side of the face, +false+
828
- # the back side.
829
- #
830
- # @return [Boolean]
831
- #
832
- # @see #get_texture_projection
833
- #
834
- # @see #clear_texture_projection
835
- #
836
- # @see #position_material
837
- #
838
- # @version SketchUp 2021.1
839
- def texture_projected?(front)
840
- end
841
-
842
- # The {#uv_tile_at} method is used to get the corner positions (model and UV)
843
- # of a UV tile.
844
- #
845
- # The UV tile bounds the given reference point on the plane of the face. If the
846
- # reference isn't on the plane of the face it will be projected onto it.
847
- #
848
- # The world coordinates are on the plane of the face unless the texture is
849
- # projected. When the texture is projected the the world points are on an
850
- # arbitrary plane that is perpendicular to the projection direction.
851
- #
852
- # The returned coordinates are arranged to be compatible with {#position_material}.
853
- #
854
- # <b>Getting the bounds of the UV tile under the cursor:</b>
855
- #
856
- # <i>The red quadrilateral represents the model points returned.</i>
857
- #
858
- # rdoc-image:../images/face-uv-tile-at.png
859
- #
860
- # @bug Fixed in SketchUp 2022.0: If the +position+ argument should line up exact
861
- # U or V axes of the UV coordinate system the returned set of points won't
862
- # be correct. A workaround for older SketchUp versions would be to slightly
863
- # offset the +position+ argument.
864
- #
865
- # @example Copy material from front to back
866
- # model = Sketchup.active_model
867
- # model.active_entities.grep(Sketchup::Face) { |face|
868
- # material = face.material
869
- #
870
- # if material&.texture.nil?
871
- # face.back_material = material
872
- # end
873
- #
874
- # reference = face.vertices.first.position
875
- # mapping = face.uv_tile_at(reference, true)
876
- # if face.texture_projected?(true)
877
- # projection = face.get_texture_projection(true)
878
- # face.position_material(material, mapping, false, projection)
879
- # else
880
- # face.position_material(material, mapping, false)
881
- # end
882
- # }
883
- #
884
- # @example Iterate each set of world and UV coordinates
885
- # model = Sketchup.active_model
886
- # faces = model.active_entities.grep(Sketchup::Face)
887
- # face = faces.find { |face| face.material&.texture }
888
- # reference = face.vertices.first.position
889
- # mapping = face.uv_tile_at(reference, true)
890
- # mapping.each_slice(2) { |position, uv|
891
- # puts "World: #{position.inspect} - UV: #{uv.inspect}"
892
- # }
893
- #
894
- # @param [Geom::Point3d] position
895
- # Model position on the face's plane that will be
896
- # bounded by the UV tile.
897
- #
898
- # @param [Boolean] front
899
- # +true+ Checks the front side of the face, +false+
900
- # the back side.
901
- #
902
- # @return [Array<Geom::Point3d>, nil] A set of 8 points. Each stride of two is
903
- # first a model space point, the second a UV
904
- # coordinate. +nil+ if the face doesn't have
905
- # a texture on the given side.
906
- #
907
- # @see #position_material
908
- #
909
- # @version SketchUp 2021.1
910
- def uv_tile_at(position, front)
911
- end
912
-
913
- # The vertices method is used to get an array of all of the vertices that
914
- # bound the face.
915
- #
916
- # @example
917
- # depth = 100
918
- # width = 100
919
- # model = Sketchup.active_model
920
- # entities = model.active_entities
921
- # pts = []
922
- # pts[0] = [0, 0, 0]
923
- # pts[1] = [width, 0, 0]
924
- # pts[2] = [width, depth, 0]
925
- # pts[3] = [0, depth, 0]
926
- #
927
- # # Add the face to the entities in the model
928
- # face = entities.add_face(pts)
929
- # vertices = face.vertices
930
- #
931
- # @return [Array<Sketchup::Vertex>] an array of Vertex objects if successful
932
- #
933
- # @version SketchUp 6.0
934
- def vertices
935
- end
936
-
937
- end
1
+ # Copyright:: Copyright 2026 Trimble Inc.
2
+ # License:: The MIT License (MIT)
3
+
4
+ # Faces in SketchUp are flat, 2-sided polygons with 3 or more sides.
5
+ #
6
+ # @version SketchUp 6.0
7
+ class Sketchup::Face < Sketchup::Drawingelement
8
+
9
+ # Constants
10
+
11
+ PointInside = nil # Stub value.
12
+ PointNotOnPlane = nil # Stub value.
13
+ PointOnEdge = nil # Stub value.
14
+ PointOnFace = nil # Stub value.
15
+ PointOnVertex = nil # Stub value.
16
+ PointOutside = nil # Stub value.
17
+ PointUnknown = nil # Stub value.
18
+
19
+ # Instance Methods
20
+
21
+ # The all_connected method retrieves all of the entities connected to a face.
22
+ #
23
+ # @example
24
+ # depth = 100
25
+ # width = 100
26
+ # model = Sketchup.active_model
27
+ # entities = model.active_entities
28
+ # pts = []
29
+ # pts[0] = [0, 0, 0]
30
+ # pts[1] = [width, 0, 0]
31
+ # pts[2] = [width, depth, 0]
32
+ # pts[3] = [0, depth, 0]
33
+ #
34
+ # # Add the face to the entities in the model
35
+ # face = entities.add_face(pts)
36
+ # connected = face.all_connected
37
+ #
38
+ # @return [Array<Sketchup::Entity>] the entities connected to the face
39
+ #
40
+ # @version SketchUp 6.0
41
+ def all_connected
42
+ end
43
+
44
+ # The area method is used to retrieve the area of a face.
45
+ #
46
+ # You can pass in an optional Transformation (or an array that can represent a
47
+ # transformation), to correct for a parent group's transformation. For example,
48
+ # if a face is inside of a group that is scaled to 200%, the area method will
49
+ # return the unscaled area of the face. So by passing a 200% transformation
50
+ # object to this method, you can account for that to get the "visual" area
51
+ # of the face.
52
+ #
53
+ # @example
54
+ # depth = 100
55
+ # width = 100
56
+ # model = Sketchup.active_model
57
+ # entities = model.active_entities
58
+ # pts = []
59
+ # pts[0] = [0, 0, 0]
60
+ # pts[1] = [width, 0, 0]
61
+ # pts[2] = [width, depth, 0]
62
+ # pts[3] = [0, depth, 0]
63
+ # # Add the face to the entities in the model
64
+ # face = entities.add_face(pts)
65
+ # area = face.area
66
+ #
67
+ # @overload area
68
+ #
69
+ # @return [Float] the area of the face in square inches.
70
+ #
71
+ # @overload area(transform)
72
+ #
73
+ # @param [Geom::Transformation] transform
74
+ # A Transformation object or array that can be interpreted as a
75
+ # Transformation object.
76
+ # @return [Float] the area of the face in square inches.
77
+ #
78
+ # @version SketchUp 6.0
79
+ def area(*args)
80
+ end
81
+
82
+ # The back_material method is used to retrieve the material assigned to the
83
+ # back side of the face.
84
+ #
85
+ # @example
86
+ # depth = 100
87
+ # width = 100
88
+ # model = Sketchup.active_model
89
+ # entities = model.active_entities
90
+ # pts = []
91
+ # pts[0] = [0, 0, 0]
92
+ # pts[1] = [width, 0, 0]
93
+ # pts[2] = [width, depth, 0]
94
+ # pts[3] = [0, depth, 0]
95
+ #
96
+ # # Add the face to the entities in the model
97
+ # face = entities.add_face(pts)
98
+ #
99
+ # # Add a material to the back face, then check to see that it was added
100
+ # face.back_material = "red"
101
+ # material = face.back_material
102
+ #
103
+ # @return [Sketchup::Material, nil] a Material object representing the material
104
+ # on the back of the face (if successful)
105
+ #
106
+ # @version SketchUp 6.0
107
+ def back_material
108
+ end
109
+
110
+ # The back_material= method is used to set the material assigned to the back
111
+ # side of the face.
112
+ #
113
+ # @example
114
+ # depth = 100
115
+ # width = 100
116
+ # model = Sketchup.active_model
117
+ # entities = model.active_entities
118
+ # pts = []
119
+ # pts[0] = [0, 0, 0]
120
+ # pts[1] = [width, 0, 0]
121
+ # pts[2] = [width, depth, 0]
122
+ # pts[3] = [0, depth, 0]
123
+ # # Add the face to the entities in the model
124
+ # face = entities.add_face(pts)
125
+ # status = face.back_material = "red"
126
+ #
127
+ # @param [Sketchup::Material] material
128
+ # A Material object or the name of a valid material.
129
+ #
130
+ # @return [Sketchup::Material] the name of the valid material or the new
131
+ # Material object (if successful)
132
+ #
133
+ # @version SketchUp 6.0
134
+ def back_material=(material)
135
+ end
136
+
137
+ # The classify_point method is used to determine if a given Point3d is on the
138
+ # referenced Face.
139
+ #
140
+ # It is important that return value comparisons be made against the
141
+ # symbolic constants (i.e. {Sketchup::Face::PointUnknown},
142
+ # {Sketchup::Face::PointInside}, {Sketchup::Face::PointOnVertex}, etc.) rather
143
+ # than the absolute integer values as these values may change from one
144
+ # release to the next.
145
+ #
146
+ # @example
147
+ # model = Sketchup.active_model
148
+ # entities = model.active_entities
149
+ # pts = []
150
+ # pts[0] = [0, 0, 0]
151
+ # pts[1] = [9, 0, 0]
152
+ # pts[2] = [9, 9, 0]
153
+ # pts[3] = [0, 9, 0]
154
+ #
155
+ # # Add the face to the entities in the model
156
+ # face = entities.add_face(pts)
157
+ #
158
+ # # Check a point that should be outside the face.
159
+ # pt = Geom::Point3d.new(50, 50, 0)
160
+ # result = face.classify_point(pt)
161
+ # if result == Sketchup::Face::PointOutside
162
+ # puts "#{pt.to_s} is outside the face"
163
+ # end
164
+ #
165
+ # # Check a point that should be inside the face.
166
+ # pt = Geom::Point3d.new(1, 1, 0)
167
+ # result = face.classify_point(pt)
168
+ # if result == Sketchup::Face::PointInside
169
+ # puts "#{pt.to_s} is inside the face"
170
+ # end
171
+ #
172
+ # # Check a point that should be on the vertex of the face.
173
+ # pt = Geom::Point3d.new(0, 0, 0)
174
+ # result = face.classify_point(pt)
175
+ # if result == Sketchup::Face::PointOnVertex
176
+ # puts "#{pt.to_s} is on a vertex"
177
+ # end
178
+ #
179
+ # # Check a point that should be on the edge of the face.
180
+ # pt = Geom::Point3d.new(0, 1, 0)
181
+ # result = face.classify_point(pt)
182
+ # if result == Sketchup::Face::PointOnEdge
183
+ # puts "#{pt.to_s} is on an edge of the face"
184
+ # end
185
+ #
186
+ # # Check a point that should be off the plane of the face.
187
+ # pt = Geom::Point3d.new(1, 1, 10)
188
+ # result = face.classify_point(pt)
189
+ # if result == Sketchup::Face::PointNotOnPlane
190
+ # puts "#{pt.to_s} is not on the same plane as the face"
191
+ # end
192
+ #
193
+ # @param [Geom::Point3d] point
194
+ # A Point3d.
195
+ #
196
+ # @return [Integer] an integer describing where a Point3d is in
197
+ # relation to the referenced Face.
198
+ #
199
+ # @version SketchUp 6.0
200
+ def classify_point(point)
201
+ end
202
+
203
+ # The {#clear_texture_position} method is used to remove any explicit
204
+ # texture positioning for a face and have SketchUp display it with the
205
+ # default texture positioning.
206
+ #
207
+ # @param [Boolean] front
208
+ # +true+ Clears on the front side of the face, +false+
209
+ # the back side.
210
+ #
211
+ # @version SketchUp 2022.0
212
+ def clear_texture_position(front)
213
+ end
214
+
215
+ # The {#clear_texture_projection} method is used to clear the texture
216
+ # projection. This is similar to toggling off Projection from the Position
217
+ # Texture tool in the UI.
218
+ #
219
+ # @param [Boolean] frontside
220
+ # +true+ for front side, +false+ for back side.
221
+ #
222
+ # @see #position_material
223
+ #
224
+ # @see #get_texture_projection
225
+ #
226
+ # @version SketchUp 2021.1
227
+ def clear_texture_projection(frontside)
228
+ end
229
+
230
+ # The {#coplanar_with?} method is used determine whether a face is coplanar with `other_face`.
231
+ #
232
+ # @example
233
+ # model = Sketchup.active_model
234
+ # entities = model.active_entities
235
+ #
236
+ # # Add the faces to the entities in the model
237
+ # face = entities.add_face([0, 0, 0], [4, 0, 0], [4, 5, 0])
238
+ # other_face = entities.add_face([5, 0, 0], [9, 0, 0], [9, 6, 0])
239
+ #
240
+ # face.coplanar_with?(other_face)
241
+ #
242
+ # @param [Sketchup::Face] other_face
243
+ # The face to compare with.
244
+ #
245
+ # @return [Boolean]
246
+ #
247
+ # @version SketchUp 2025.0
248
+ def coplanar_with?(other_face)
249
+ end
250
+
251
+ # The edges method is used to get an array of edges that bound the face.
252
+ #
253
+ # @example
254
+ # depth = 100
255
+ # width = 100
256
+ # model = Sketchup.active_model
257
+ # entities = model.active_entities
258
+ # pts = []
259
+ # pts[0] = [0, 0, 0]
260
+ # pts[1] = [width, 0, 0]
261
+ # pts[2] = [width, depth, 0]
262
+ # pts[3] = [0, depth, 0]
263
+ # # Add the face to the entities in the model
264
+ # face = entities.add_face(pts)
265
+ # edges = face.edges
266
+ #
267
+ # @return [Array<Sketchup::Edge>] an array of Edge objects (if successful)
268
+ #
269
+ # @version SketchUp 6.0
270
+ def edges
271
+ end
272
+
273
+ # The {#followme} method is used to create a shape by making the face follow
274
+ # along an array of edges.
275
+ #
276
+ # @example
277
+ # model = Sketchup.active_model
278
+ # entities = model.active_entities
279
+ #
280
+ # depth = 100
281
+ # width = 100
282
+ #
283
+ # # Add the face to the entities in the model
284
+ # points = [
285
+ # Geom::Point3d.new(0, 0, 0),
286
+ # Geom::Point3d.new(width, 0, 0),
287
+ # Geom::Point3d.new(width, depth, 0),
288
+ # Geom::Point3d.new(0, depth, 0)
289
+ # ]
290
+ # face = entities.add_face(points)
291
+ #
292
+ # # Add the line which we will "follow" to the entities in the model
293
+ # point1 = Geom::Point3d.new(0, 0, 0)
294
+ # point2 = Geom::Point3d.new(0, 0, 100)
295
+ # edge = entities.add_line(point1, point2)
296
+ # face.followme(edge)
297
+ #
298
+ # @overload followme(edges)
299
+ #
300
+ # @param [Array<Sketchup::Edge>] edges An array of edge objects to follow.
301
+ # @return [Boolean]
302
+ #
303
+ # @overload followme(edge)
304
+ #
305
+ # @param [Sketchup::Edge] edge An edge to follow.
306
+ # @return [Boolean]
307
+ #
308
+ # @version SketchUp 6.0
309
+ def followme(*args)
310
+ end
311
+
312
+ # The get_UVHelper object is used to retrieve a UVHelper object for use in
313
+ # texture manipulation on a face.
314
+ #
315
+ # @example
316
+ # model = Sketchup.active_model
317
+ # entities = model.active_entities
318
+ # pts = []
319
+ # pts[0] = [0, 0, 0]
320
+ # pts[1] = [9, 0, 0]
321
+ # pts[2] = [9, 9, 0]
322
+ # pts[3] = [0, 9, 0]
323
+ #
324
+ # # Add the face to the entities in the model
325
+ # face = entities.add_face(pts)
326
+ # tw = Sketchup.create_texture_writer
327
+ # uvHelp = face.get_UVHelper(true, true, tw)
328
+ #
329
+ # @overload get_UVHelper(front = true, back = true)
330
+ #
331
+ # @param [Boolean] front
332
+ # True if you want the texture coordinates for the front
333
+ # face, false if not.
334
+ #
335
+ # @param [Boolean] back
336
+ # True if you want the texture coordinates for the back
337
+ # face, false if not.
338
+ #
339
+ # @overload get_UVHelper(front = true, back = true, texturewriter)
340
+ #
341
+ # @param [Boolean] front
342
+ # True if you want the texture coordinates for the front
343
+ # face, false if not.
344
+ #
345
+ # @param [Boolean] back
346
+ # True if you want the texture coordinates for the back
347
+ # face, false if not.
348
+ #
349
+ # @param [Sketchup::TextureWriter] texturewriter
350
+ # An optional TextureWriter object.
351
+ #
352
+ # @return [Sketchup::UVHelper]
353
+ #
354
+ # @version SketchUp 6.0
355
+ def get_UVHelper(*args)
356
+ end
357
+
358
+ # The get_glued_instances method returns an Array any ComponentInstances
359
+ # that are glued to the face.
360
+ #
361
+ # @example
362
+ # # Create a series of points that define a new face.
363
+ # model = Sketchup.active_model
364
+ # entities = model.active_entities
365
+ #
366
+ # # Create a rectangle face
367
+ # pts = []
368
+ # pts[0] = [0, 0, 0]
369
+ # pts[1] = [9, 0, 0]
370
+ # pts[2] = [9, 9, 0]
371
+ # pts[3] = [0, 9, 0]
372
+ #
373
+ # # Add the face to the entities in the model
374
+ # face = entities.add_face(pts)
375
+ #
376
+ # # Create a component definition with 3D geometry
377
+ # component_definition = model.definitions.add("ComponentExample")
378
+ # component_entities = component_definition.entities
379
+ #
380
+ # comp_face = component_entities.add_face([0, 0, 0], [2, 0, 0], [2, 2, 0], [0, 2, 0])
381
+ # comp_face.pushpull(2)
382
+ #
383
+ # # Place the component instance on the face
384
+ # component_instance = entities.add_instance(component_definition, Geom::Transformation.new([3,
385
+ # 3, 0]))
386
+ #
387
+ # # Enable gluing behavior and glue component to face
388
+ # component_definition.behavior.is2d = true
389
+ # component_instance.glued_to = face
390
+ #
391
+ # # Get all component instances glued to the face
392
+ # glued_array = face.get_glued_instances
393
+ #
394
+ # @return [Array<Sketchup::ComponentInstance, Sketchup::Group, Sketchup::Image>] An array of
395
+ # ComponentInstance objects that are currently glued to the face.
396
+ #
397
+ # @version SketchUp 7.0 M1
398
+ def get_glued_instances
399
+ end
400
+
401
+ # The {#get_texture_projection} method will return a vector representing the
402
+ # projection for either the front or back side of the face.
403
+ #
404
+ # @example
405
+ # model = Sketchup.active_model
406
+ # entities = model.active_entities
407
+ # materials = model.materials
408
+ #
409
+ # # Create a face and add it to the model entities
410
+ # pts = []
411
+ # pts[0] = [0, 0, 1]
412
+ # pts[1] = [10, 0, 1]
413
+ # pts[2] = [10, 10, 1]
414
+ # pts[3] = [0, 10, 1]
415
+ # face = entities.add_face(pts)
416
+ #
417
+ # view = model.active_view
418
+ # screenshot_path = File.join(Dir.tmpdir,"screenshot.png")
419
+ # view.write_image(screenshot_path)
420
+ #
421
+ # material = materials.add("Test Material")
422
+ # material.texture = screenshot_path
423
+ #
424
+ # # Assign the new material to our face we created
425
+ # face.material = material
426
+ #
427
+ # # Set the projection of the applied material
428
+ # mapping = [
429
+ # Geom::Point3d.new(0, 0, 0), # Model coordinate
430
+ # Geom::Point3d.new(0, 0, 0), # UV coordinate
431
+ # Geom::Point3d.new(10, 0, 0), # Model coordinate
432
+ # Geom::Point3d.new(1, 0, 0), # UV coordinate
433
+ # Geom::Point3d.new(0, 10, 0), # Model coordinate
434
+ # Geom::Point3d.new(0, 1, 0) # UV coordinate
435
+ # ]
436
+ #
437
+ # direction = Geom::Vector3d.new(0, 0, 1) # Adjust direction vector
438
+ #
439
+ # on_front = true
440
+ # face.position_material(material, mapping, on_front, direction)
441
+ #
442
+ # # Get the projection of the applied material
443
+ # vector = face.get_texture_projection(true)
444
+ # puts "Texture projection vector : #{vector.inspect}"
445
+ #
446
+ # @param [Boolean] frontside
447
+ # +true+ for front side, +false+ for back side.
448
+ #
449
+ # @return [Geom::Vector3d, nil] a vector on success, +nil+ if face is not
450
+ # textured with a projected texture mapping.
451
+ #
452
+ # @see #position_material
453
+ #
454
+ # @see #texture_projected?
455
+ #
456
+ # @version SketchUp 2014
457
+ def get_texture_projection(frontside)
458
+ end
459
+
460
+ # The loops method is used to get an array of all of the loops that bound the
461
+ # face.
462
+ #
463
+ # @example
464
+ # model = Sketchup.active_model
465
+ # entities= model.active_entities
466
+ #
467
+ # # Define points for the outer loop
468
+ # outer_points = []
469
+ # outer_points << Geom::Point3d.new(0, 0, 0)
470
+ # outer_points << Geom::Point3d.new(100, 0, 0)
471
+ # outer_points << Geom::Point3d.new(100, 100, 0)
472
+ # outer_points << Geom::Point3d.new(0, 100, 0)
473
+ #
474
+ # # Create the outer face
475
+ # outer_face = entities.add_face(outer_points)
476
+ #
477
+ # # Define points for the inner loop (hole)
478
+ # inner_points = []
479
+ # inner_points << Geom::Point3d.new(25, 25, 0)
480
+ # inner_points << Geom::Point3d.new(75, 25, 0)
481
+ # inner_points << Geom::Point3d.new(75, 75, 0)
482
+ # inner_points << Geom::Point3d.new(25, 75, 0)
483
+ #
484
+ # # Create the inner face and erase it to create a second loop
485
+ # inner_face = entities.add_face(inner_points)
486
+ # inner_face.erase!
487
+ #
488
+ # # Get all loops of the outer face
489
+ # loops = outer_face.loops
490
+ #
491
+ # @return [Array<Sketchup::Loop>] an array of Loop objects if successful
492
+ #
493
+ # @version SketchUp 6.0
494
+ def loops
495
+ end
496
+
497
+ # The material method is used to retrieve the material assigned to the
498
+ # front of the face. (This method is inherited from the Drawingelement
499
+ # parent class.)
500
+ #
501
+ # @example
502
+ # depth = 100
503
+ # width = 100
504
+ # model = Sketchup.active_model
505
+ # entities = model.active_entities
506
+ # pts = []
507
+ # pts[0] = [0, 0, 0]
508
+ # pts[1] = [width, 0, 0]
509
+ # pts[2] = [width, depth, 0]
510
+ # pts[3] = [0, depth, 0]
511
+ #
512
+ # # Add the face to the entities in the model
513
+ # face = entities.add_face(pts)
514
+ #
515
+ # # Add a material to the face, then check to see that it was added
516
+ # face.material = "red"
517
+ # material = face.material
518
+ #
519
+ # @return [Sketchup::Material, nil] a Material object representing the material
520
+ # on the front of the face (if successful)
521
+ #
522
+ # @version SketchUp 6.0
523
+ def material
524
+ end
525
+
526
+ # The material= method is used to set the material assigned to the front
527
+ # side of the face. (This method is inherited from the Drawingelement
528
+ # parent class.)
529
+ #
530
+ # @example
531
+ # depth = 100
532
+ # width = 100
533
+ # model = Sketchup.active_model
534
+ # entities = model.active_entities
535
+ # pts = []
536
+ # pts[0] = [0, 0, 0]
537
+ # pts[1] = [width, 0, 0]
538
+ # pts[2] = [width, depth, 0]
539
+ # pts[3] = [0, depth, 0]
540
+ # # Add the face to the entities in the model
541
+ # face = entities.add_face(pts)
542
+ # status = face.material = "red"
543
+ #
544
+ # @param [Sketchup::Material] material
545
+ # A Material object or the name of a valid material.
546
+ #
547
+ # @return [Sketchup::Material] the name of the valid material or the new
548
+ # Material object (if successful)
549
+ #
550
+ # @version SketchUp 6.0
551
+ def material=(material)
552
+ end
553
+
554
+ # The mesh method creates a polygon mesh that represents the face. See the
555
+ # {Geom::PolygonMesh} class for more information.
556
+ #
557
+ # Valid flags are:
558
+ #
559
+ # - +0+: Include PolygonMeshPoints,
560
+ # - +1+: Include PolygonMeshUVQFront,
561
+ # - +2+: Include PolygonMeshUVQBack,
562
+ # - +4+: Include PolygonMeshNormals.
563
+ #
564
+ # Use bitwise OR to combine flags. A value of +7+ will include all
565
+ # flags, for example.
566
+ #
567
+ # @example
568
+ # depth = 100
569
+ # width = 100
570
+ # model = Sketchup.active_model
571
+ # entities = model.active_entities
572
+ # pts = []
573
+ # pts[0] = [0, 0, 0]
574
+ # pts[1] = [width, 0, 0]
575
+ # pts[2] = [width, depth, 0]
576
+ # pts[3] = [0, depth, 0]
577
+ #
578
+ # # Add the face to the entities in the model
579
+ # face = entities.add_face(pts)
580
+ #
581
+ # kPoints = 0
582
+ # kUVQFront = 1
583
+ # kUVQBack = 2
584
+ # kNormals = 4
585
+ # flags = kPoints | kUVQFront | kUVQBack | kNormals # equals to 7
586
+ # mesh = face.mesh(flags)
587
+ #
588
+ # @param [Integer] flags
589
+ # One or more flags used to generate a mesh.
590
+ #
591
+ # @return [Geom::PolygonMesh]
592
+ #
593
+ # @version SketchUp 6.0
594
+ def mesh(flags = 0)
595
+ end
596
+
597
+ # The normal method is used to retrieve the 3D vector normal to the face in
598
+ # the front direction.
599
+ #
600
+ # @example
601
+ # depth = 100
602
+ # width = 100
603
+ # model = Sketchup.active_model
604
+ # entities = model.active_entities
605
+ # pts = []
606
+ # pts[0] = [0, 0, 0]
607
+ # pts[1] = [width, 0, 0]
608
+ # pts[2] = [width, depth, 0]
609
+ # pts[3] = [0, depth, 0]
610
+ #
611
+ # # Add the face to the entities in the model
612
+ # face = entities.add_face(pts)
613
+ # normal = face.normal
614
+ #
615
+ # @return [Geom::Vector3d] a Vector3d object if successful
616
+ #
617
+ # @version SketchUp 6.0
618
+ def normal
619
+ end
620
+
621
+ # This method is used to retrieve the outer loop that bounds the face.
622
+ #
623
+ # @example
624
+ # # Create a series of points that define a new face.
625
+ # model = Sketchup.active_model
626
+ # entities = model.active_entities
627
+ # pts = []
628
+ # pts[0] = [0, 0, 0]
629
+ # pts[1] = [9, 0, 0]
630
+ # pts[2] = [9, 9, 0]
631
+ # pts[3] = [0, 9, 0]
632
+ #
633
+ # # Add the face to the entities in the model
634
+ # face = entities.add_face(pts)
635
+ # loop = face.outer_loop
636
+ #
637
+ # @return [Sketchup::Loop] a Loop object representing the outer loop (if
638
+ # successful)
639
+ #
640
+ # @version SketchUp 6.0
641
+ def outer_loop
642
+ end
643
+
644
+ # The plane method is used to retrieve the plane of the face. See the Array
645
+ # class for information on how planes are stored.
646
+ #
647
+ # @example
648
+ # depth = 100
649
+ # width = 100
650
+ # model = Sketchup.active_model
651
+ # entities = model.active_entities
652
+ # pts = []
653
+ # pts[0] = [0, 0, 0]
654
+ # pts[1] = [width, 0, 0]
655
+ # pts[2] = [width, depth, 0]
656
+ # pts[3] = [0, depth, 0]
657
+ #
658
+ # # Add the face to the entities in the model
659
+ # face = entities.add_face(pts)
660
+ # plane = face.plane
661
+ #
662
+ # @return [Array(Float, Float, Float, Float)] a plane that contains the face (if successful)
663
+ #
664
+ # @version SketchUp 6.0
665
+ def plane
666
+ end
667
+
668
+ # The {#position_material} method is used to position a material on a face.
669
+ #
670
+ # The +points+ argument must contain 2, 4, 6 or 8 points. The points are used
671
+ # in pairs to describe where a point in the texture image is positioned on the
672
+ # Face. The first point in each pair is a 3D point in the model. The second
673
+ # point in each pair of points is a 2D point that gives the (u,v) coordinates
674
+ # of a point in the image to match up with the 3D point.
675
+ #
676
+ # @example
677
+ # model = Sketchup.active_model
678
+ # entities = model.active_entities
679
+ #
680
+ # # Create a face and add it to the model entities
681
+ # points = [
682
+ # Geom::Point3d.new(0, 0, 1),
683
+ # Geom::Point3d.new(9, 0, 1),
684
+ # Geom::Point3d.new(9, 9, 1),
685
+ # Geom::Point3d.new(0, 9, 1),
686
+ # ]
687
+ # face = entities.add_face(points)
688
+ #
689
+ # # Export an image to use as a texture
690
+ # path = Sketchup.temp_dir
691
+ # full_name = File.join(path, "temp_image.jpg")
692
+ # model.active_view.write_image(full_name, 500, 500, false, 0.0)
693
+ #
694
+ # # Create a material and assign the texture to it
695
+ # material = model.materials.add("Test Material")
696
+ # material.texture = full_name
697
+ #
698
+ # # Assign the new material to our face we created
699
+ # face.material = material
700
+ #
701
+ # mapping = [
702
+ # Geom::Point3d.new(3,0,0), # Model coordinate
703
+ # Geom::Point3d.new(0,0,0), # UV coordinate
704
+ # ]
705
+ # on_front = true
706
+ # face.position_material(material, mapping, on_front)
707
+ #
708
+ # @overload position_material(material, points, on_front)
709
+ #
710
+ # This variant positions a material on the face's plane without projection.
711
+ # @version SketchUp 6.0
712
+ #
713
+ # @param [Sketchup::Material] material
714
+ #
715
+ # @param [Array<Geom::Point3d>] points
716
+ # An array of Point3d objects used to position the material.
717
+ # The points should be on the plane of the face. If they are not they will
718
+ # be projected to the face's plane.
719
+ #
720
+ # @param [Boolean] on_front
721
+ # +true+ to position the texture on the front of the Face or
722
+ # +false+ to position it on the back of the Face.
723
+ #
724
+ # @overload position_material(material, points, on_front, projection)
725
+ #
726
+ # @version SketchUp 6.0
727
+ #
728
+ # This variant positions a material on the face's plane with projection.
729
+ #
730
+ # @param [Sketchup::Material] material
731
+ #
732
+ # @param [Array<Geom::Point3d>] points
733
+ # An array of Point3d objects used to position the material.
734
+ # The points should be on the same plane. The plane should be parallel to
735
+ # the +projection+ vector. If they are not on a plane parallel to the
736
+ # projection vector they will be projected to such a plane.
737
+ #
738
+ # @param [Boolean] on_front
739
+ # +true+ to position the texture on the front of the Face or
740
+ # +false+ to position it on the back of the Face.
741
+ #
742
+ # @param [Geom::Vector3d] projection_vector
743
+ # The direction of the texture projection.
744
+ #
745
+ # @raise ArgumentError if the provided points are not in the size of 2, 4, 6 or 8.
746
+ #
747
+ # @raise ArgumentError if the provided points could not be computed to a valid UV mapping.
748
+ #
749
+ # @return [Sketchup::Face, false] the face upon success, +false+ if material or
750
+ # texture if not valid.
751
+ #
752
+ # @see #texture_positioned?
753
+ #
754
+ # @see #texture_projected?
755
+ #
756
+ # @see #get_texture_projection
757
+ #
758
+ # @see #clear_texture_projection
759
+ def position_material(*args)
760
+ end
761
+
762
+ # The pushpull method is used to perform a push/pull on a face.
763
+ #
764
+ # The distance is measured in the direction that the face normal is pointing.
765
+ #
766
+ # @example
767
+ # depth = 100
768
+ # width = 100
769
+ # model = Sketchup.active_model
770
+ # entities = model.active_entities
771
+ # pts = []
772
+ # pts[0] = [0, 0, 0]
773
+ # pts[1] = [width, 0, 0]
774
+ # pts[2] = [width, depth, 0]
775
+ # pts[3] = [0, depth, 0]
776
+ # # Add the face to the entities in the model
777
+ # face = entities.add_face(pts)
778
+ # status = face.pushpull(100, true)
779
+ #
780
+ # @param [Length] distance
781
+ # The distance to push/pull the face.
782
+ #
783
+ # @param [Boolean] copy
784
+ # Create a new push/pull starting face if true (equivalent
785
+ # of pressing CTRL while in SketchUp), do not create a
786
+ # push/pull starting face if false.
787
+ #
788
+ # @return [nil]
789
+ #
790
+ # @version SketchUp 6.0
791
+ def pushpull(distance, copy = false)
792
+ end
793
+
794
+ # The reverse! method is used to reverse the face's orientation, meaning the
795
+ # front becomes the back.
796
+ #
797
+ # @example
798
+ # depth = 100
799
+ # width = 100
800
+ # model = Sketchup.active_model
801
+ # entities = model.active_entities
802
+ # pts = []
803
+ # pts[0] = [0, 0, 0]
804
+ # pts[1] = [width, 0, 0]
805
+ # pts[2] = [width, depth, 0]
806
+ # pts[3] = [0, depth, 0]
807
+ # # Add the face to the entities in the model
808
+ # face = entities.add_face(pts)
809
+ # status = face.reverse!
810
+ #
811
+ # @return [Sketchup::Face, false] the reversed Face object if successful, false if
812
+ # unsuccessful
813
+ #
814
+ # @version SketchUp 6.0
815
+ def reverse!
816
+ end
817
+
818
+ # The {#set_texture_projection} method is used to set the texture projection
819
+ # direction.
820
+ #
821
+ # @deprecated This function never worked correctly. It's not capable of
822
+ # controlling the position and orientation of the texture. In some cases it
823
+ # produced an invalid model. As of SketchUp 2021.1 the method simply raises
824
+ # +NotImplementedError+.
825
+ #
826
+ # @param [Geom::Vector3d] vector
827
+ # representing the direction of the projection. Use +nil+ to remove the
828
+ # projection.
829
+ #
830
+ # @param [Boolean] frontside
831
+ # +true+ for front side, +false+ for back side.
832
+ #
833
+ # @return [Boolean]
834
+ #
835
+ # @see #position_material
836
+ #
837
+ # @see #clear_texture_projection
838
+ #
839
+ # @version SketchUp 2014
840
+ def set_texture_projection(vector, frontside)
841
+ end
842
+
843
+ # The {#texture_positioned?} method is used to check if the face has a
844
+ # texture that is positioned.
845
+ #
846
+ # A texture is positioned when it's not using the default texture coordinates.
847
+ #
848
+ # When a user uses the Paint Bucket Tool to apply a material sampled from the
849
+ # Material Browser it will use default texture coordinates and not be
850
+ # positioned. It will be positioned if the user uses the Position Texture Tool.
851
+ #
852
+ # When an API user uses {Sketchup::Drawinglement#material=} the texture is not
853
+ # positioned. It will be positioned when the API user uses
854
+ # {Sketchup::Face#position_material}. It it also positioned of the face was
855
+ # crafted via {Geom::PolygonMesh}.
856
+ #
857
+ # @example
858
+ # model = Sketchup.active_model
859
+ # entities = model.active_entities
860
+ #
861
+ # # Filter the entities to get only the faces
862
+ # faces = entities.grep(Sketchup::Face).select { |face|
863
+ # # Select faces that have manually positioned textures
864
+ # # Check both in front face (true) and the back face (false)
865
+ # face.texture_positioned?(true) || face.texture_positioned?(false)
866
+ # }
867
+ #
868
+ # # 'faces' will contain all faces with manually positioned textures
869
+ #
870
+ # @param [Boolean] front
871
+ # +true+ Checks the front side of the face, +false+
872
+ # the back side.
873
+ #
874
+ # @return [Boolean]
875
+ #
876
+ # @see #position_material
877
+ #
878
+ # @see #material=
879
+ #
880
+ # @see #back_material=
881
+ #
882
+ # @version SketchUp 2021.1
883
+ def texture_positioned?(front)
884
+ end
885
+
886
+ # The {#texture_projected?} method is used to check if the face has a
887
+ # texture that is projected.
888
+ #
889
+ # A texture is projected when the user enables this property via the
890
+ # Position Texture Tool.
891
+ #
892
+ # It is also projected when the API user passes a projection vector to
893
+ # {#position_material}.
894
+ #
895
+ # @param [Boolean] front
896
+ # +true+ Checks the front side of the face, +false+
897
+ # the back side.
898
+ #
899
+ # @return [Boolean]
900
+ #
901
+ # @see #get_texture_projection
902
+ #
903
+ # @see #clear_texture_projection
904
+ #
905
+ # @see #position_material
906
+ #
907
+ # @version SketchUp 2021.1
908
+ def texture_projected?(front)
909
+ end
910
+
911
+ # The {#uv_tile_at} method is used to get the corner positions (model and UV)
912
+ # of a UV tile.
913
+ #
914
+ # The UV tile bounds the given reference point on the plane of the face. If the
915
+ # reference isn't on the plane of the face it will be projected onto it.
916
+ #
917
+ # The world coordinates are on the plane of the face unless the texture is
918
+ # projected. When the texture is projected the the world points are on an
919
+ # arbitrary plane that is perpendicular to the projection direction.
920
+ #
921
+ # The returned coordinates are arranged to be compatible with {#position_material}.
922
+ #
923
+ # <b>Getting the bounds of the UV tile under the cursor:</b>
924
+ #
925
+ # <i>The red quadrilateral represents the model points returned.</i>
926
+ #
927
+ # rdoc-image:../images/face-uv-tile-at.png
928
+ #
929
+ # @bug Fixed in SketchUp 2022.0: If the +position+ argument should line up exact
930
+ # U or V axes of the UV coordinate system the returned set of points won't
931
+ # be correct. A workaround for older SketchUp versions would be to slightly
932
+ # offset the +position+ argument.
933
+ #
934
+ # @example Copy material from front to back
935
+ # model = Sketchup.active_model
936
+ # model.active_entities.grep(Sketchup::Face) { |face|
937
+ # material = face.material
938
+ #
939
+ # if material&.texture.nil?
940
+ # face.back_material = material
941
+ # end
942
+ #
943
+ # reference = face.vertices.first.position
944
+ # mapping = face.uv_tile_at(reference, true)
945
+ # if face.texture_projected?(true)
946
+ # projection = face.get_texture_projection(true)
947
+ # face.position_material(material, mapping, false, projection)
948
+ # else
949
+ # face.position_material(material, mapping, false)
950
+ # end
951
+ # }
952
+ #
953
+ # @example Iterate each set of world and UV coordinates
954
+ # model = Sketchup.active_model
955
+ # faces = model.active_entities.grep(Sketchup::Face)
956
+ # face = faces.find { |face| face.material&.texture }
957
+ # reference = face.vertices.first.position
958
+ # mapping = face.uv_tile_at(reference, true)
959
+ # mapping.each_slice(2) { |position, uv|
960
+ # puts "World: #{position.inspect} - UV: #{uv.inspect}"
961
+ # }
962
+ #
963
+ # @param [Geom::Point3d] position
964
+ # Model position on the face's plane that will be
965
+ # bounded by the UV tile.
966
+ #
967
+ # @param [Boolean] front
968
+ # +true+ Checks the front side of the face, +false+
969
+ # the back side.
970
+ #
971
+ # @return [Array<Geom::Point3d>, nil] A set of 8 points. Each stride of two is
972
+ # first a model space point, the second a UV
973
+ # coordinate. +nil+ if the face doesn't have
974
+ # a texture on the given side.
975
+ #
976
+ # @see #position_material
977
+ #
978
+ # @version SketchUp 2021.1
979
+ def uv_tile_at(position, front)
980
+ end
981
+
982
+ # The vertices method is used to get an array of all of the vertices that
983
+ # bound the face.
984
+ #
985
+ # @example
986
+ # depth = 100
987
+ # width = 100
988
+ # model = Sketchup.active_model
989
+ # entities = model.active_entities
990
+ # pts = []
991
+ # pts[0] = [0, 0, 0]
992
+ # pts[1] = [width, 0, 0]
993
+ # pts[2] = [width, depth, 0]
994
+ # pts[3] = [0, depth, 0]
995
+ #
996
+ # # Add the face to the entities in the model
997
+ # face = entities.add_face(pts)
998
+ # vertices = face.vertices
999
+ #
1000
+ # @return [Array<Sketchup::Vertex>] an array of Vertex objects if successful
1001
+ #
1002
+ # @version SketchUp 6.0
1003
+ def vertices
1004
+ end
1005
+
1006
+ end