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,353 +1,464 @@
1
- # Copyright:: Copyright 2023 Trimble Inc.
2
- # License:: The MIT License (MIT)
3
-
4
- # An entity is an object shown on a page of a LayOut document.
5
- #
6
- # @example
7
- # doc = Layout::Document.open("C:/path/to/document.layout")
8
- # # Get the shared entities in the document. If there are no shared layers,
9
- # # the resulting array will be empty.
10
- # entities = doc.shared_entities
11
- #
12
- # # Count how many of the shared entites are rectangles.
13
- # rectangle_count = entities.grep(Layout::Rectangle).size
14
- #
15
- # @version LayOut 2018
16
- class Layout::Entity
17
-
18
- # Instance Methods
19
-
20
- # The {#==} method checks to see if the two {Layout::Entity}s are equal. This
21
- # checks whether the Ruby Objects are pointing to the same internal object.
22
- #
23
- # @example
24
- # doc = Layout::Document.open("C:/path/to/document.layout")
25
- # page_entities = doc.pages.first.entities
26
- # layer_entities = doc.layers.first.layer_instance(page).entities
27
- # page_entities.first == layer_entities.first
28
- #
29
- # @param [Layout::Entity] other
30
- #
31
- # @return [Boolean]
32
- #
33
- # @version LayOut 2018
34
- def ==(other)
35
- end
36
-
37
- # The {#bounds} method returns the 2D rectangular bounds of the {Layout::Entity}.
38
- #
39
- # @example
40
- # doc = Layout::Document.open("C:/path/to/document.layout")
41
- # entities = doc.pages.first.entities
42
- # bounds = entities.first.bounds
43
- #
44
- # @return [Geom::Bounds2d]
45
- #
46
- # @version LayOut 2018
47
- def bounds
48
- end
49
-
50
- # The {#document} method returns the {Layout::Document} that the
51
- # {Layout::Entity} belongs to, or +nil+ if it is not in a {Layout::Document}.
52
- #
53
- # @example
54
- # doc = Layout::Document.open("C:/path/to/document.layout")
55
- # entities = doc.shared_entities
56
- # # entity_doc should be the same document as doc
57
- # entity_doc = entities.first.document
58
- #
59
- # @return [Layout::Document, nil]
60
- #
61
- # @version LayOut 2018
62
- def document
63
- end
64
-
65
- # The {#drawing_bounds} method returns the 2D rectangular drawing bounds of the
66
- # {Layout::Entity}.
67
- #
68
- # @example
69
- # doc = Layout::Document.open("C:/path/to/document.layout")
70
- # entities = doc.pages.first.entities
71
- # draw_bounds = entities.first.drawing_bounds
72
- #
73
- # @return [Geom::OrientedBounds2d]
74
- #
75
- # @version LayOut 2018
76
- def drawing_bounds
77
- end
78
-
79
- # The {#group} method returns the {Layout::Group} the {Layout::Entity} belongs
80
- # to, or +nil+ if it is not in a {Layout::Group}.
81
- #
82
- # @example
83
- # doc = Layout::Document.open("C:/path/to/document.layout")
84
- # pages = doc.pages
85
- # entities = pages.first.entities
86
- # group = entities.first.group
87
- #
88
- # @return [Layout::Group, nil]
89
- #
90
- # @version LayOut 2018
91
- def group
92
- end
93
-
94
- # The {#layer_instance} method returns the {Layout::LayerInstance} that the
95
- # {Layout::Entity} is on, or +nil+ if it is not associated with a
96
- # {Layout::LayerInstance}.
97
- #
98
- # @example
99
- # doc = Layout::Document.open("C:/path/to/document.layout")
100
- # entities = doc.pages.first.entities
101
- # entity_layer_instance = entities.first.layer_instance
102
- #
103
- # @note {Layout::Group}s are never associated with a {Layout::LayerInstance}.
104
- #
105
- # @return [Layout::LayerInstance, nil]
106
- #
107
- # @version LayOut 2018
108
- def layer_instance
109
- end
110
-
111
- # The {#locked=} method sets the {Layout::Entity} as locked or unlocked. When
112
- # locked, the {Layout::Entity} cannot be modified directly.
113
- #
114
- # @example
115
- # doc = Layout::Document.open("C:/path/to/document.layout")
116
- # entities = doc.pages.first.entities
117
- # entities.first.locked = true
118
- #
119
- # @param [Boolean] is_locked
120
- #
121
- # @version LayOut 2018
122
- def locked=(is_locked)
123
- end
124
-
125
- # The {#locked?} method returns whether the {Layout::Entity} is locked or
126
- # unlocked.
127
- #
128
- # @example
129
- # doc = Layout::Document.open("C:/path/to/document.layout")
130
- # entities = doc.pages.first.entities
131
- # is_first_locked = entities.first.locked?
132
- #
133
- # @return [Boolean]
134
- #
135
- # @version LayOut 2018
136
- def locked?
137
- end
138
-
139
- # The {#move_to_group} method moves the {Layout::Entity} into a {Layout::Group}.
140
- # If the {Layout::Entity} is already in a {Layout::Group}, it will be removed
141
- # from that {Layout::Group} prior to being added to the new one. If this action
142
- # results in the old {Layout::Group} containing only one {Layout::Entity}, the
143
- # old {Layout::Group} will be collapsed and the remaining {Layout::Entity} will
144
- # be moved to the old {Layout::Group}'s parent.
145
- #
146
- # @example
147
- # doc = Layout::Document.open("C:/path/to/document.layout")
148
- # entities = doc.pages.first.entities
149
- # new_group = Layout::Group.new
150
- # entities.first.move_to_group(new_group)
151
- #
152
- # @param [Layout::Group] group
153
- #
154
- # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
155
- # {Layout::Layer}
156
- #
157
- # @raise [ArgumentError] if entity and group are not in the same
158
- # {Layout::Document}
159
- #
160
- # @raise [ArgumentError] if entity and group are not on the same {Layout::Page}
161
- #
162
- # @raise [ArgumentError] if of entity and group one is shared and one is not
163
- #
164
- # @raise [LockedEntityError] if the {Layout::Entity} is locked
165
- #
166
- # @version LayOut 2018
167
- def move_to_group(group)
168
- end
169
-
170
- # The {#move_to_layer} method moves the {Layout::Entity} to the given
171
- # {Layout::Layer}. If the {Layout::Layer} is non-shared and the
172
- # {Layout::Entity} is currently on a shared {Layout::Layer}, an array of
173
- # {Layout::Page}s must be provided to move the {Layout::Entity} to. In all other
174
- # cases, passing in an array of {Layout::Page}s is not necessary. The
175
- # {Layout::Entity} must belong to the same {Layout::Document} as the the
176
- # {Layout::Layer} and the {Layout::Page}s.
177
- #
178
- # @example
179
- # doc = Layout::Document.open("C:/path/to/document.layout")
180
- # entities = doc.pages.first.entities
181
- # layers = doc.layers
182
- # entities.last.move_to_layer(layers.first)
183
- #
184
- # @overload move_to_layer(layer)
185
- #
186
- # @param [Layout::Layer] layer
187
- #
188
- # @overload move_to_layer(layer, pages)
189
- #
190
- # @param [Layout::Layer] layer
191
- # @param [Array<Layout::Page>] pages
192
- #
193
- # @raise [ArgumentError] if layer is shared and a valid array of non-duplicate
194
- # {Layout::Page}s is not passed in
195
- #
196
- # @raise [ArgumentError] if entity, layer, and pages are not all in the same
197
- # {Layout::Document}
198
- #
199
- # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
200
- # {Layout::Layer}
201
- #
202
- # @raise [LockedLayerError] if layer is locked
203
- #
204
- # @raise [LockedEntityError] if the {Layout::Entity} is locked
205
- #
206
- # @version LayOut 2018
207
- def move_to_layer(*args)
208
- end
209
-
210
- # The {#on_shared_layer?} method returns whether or not the {Layout::Entity} is
211
- # on a shared {Layout::Layer}. This function works for all {Layout::Entity}
212
- # types, including {Layout::Group}. {Layout::Group}s do not belong to a
213
- # specific {Layout::Layer}, but their children are all on either a shared
214
- # or non-shared {Layout::Layer}.
215
- #
216
- # @example
217
- # doc = Layout::Document.open("C:/path/to/document.layout")
218
- # entities = doc.pages.first.entities
219
- # on_shared_layer = entities.first.on_shared_layer?
220
- #
221
- # @raise [ArgumentError] if the {Layout::Entity} is not in a {Layout::Document}
222
- #
223
- # @return [Boolean]
224
- #
225
- # @version LayOut 2018
226
- def on_shared_layer?
227
- end
228
-
229
- # The {#page} method returns the {Layout::Page} that the {Layout::Entity}
230
- # belongs to, or +nil+ if it is on a shared {Layout::Layer} or not in a
231
- # {Layout::Document}.
232
- #
233
- # @example
234
- # doc = Layout::Document.open("C:/path/to/document.layout")
235
- # # page will be nil
236
- # page = doc.shared_entities.first.page
237
- # # page will be the first page of the document
238
- # page = doc.pages.first.nonshared_entities.first.page
239
- #
240
- # @return [Layout::Page, nil]
241
- #
242
- # @version LayOut 2018
243
- def page
244
- end
245
-
246
- # The {#style} method returns the {Layout::Style} of the {Layout::Entity}. If
247
- # the {Layout::Entity} is a {Layout::Group}, +nil+ will be returned, as they
248
- # do not have a {Layout::Style}.
249
- #
250
- # @example
251
- # doc = Layout::Document.open("C:/path/to/document.layout")
252
- # entities = doc.entities
253
- # style = entities.first.style
254
- #
255
- # @return [Layout::Style, nil]
256
- #
257
- # @version LayOut 2018
258
- def style
259
- end
260
-
261
- # The {#style=} method sets the {Layout::Style} of the {Layout::Entity}.
262
- #
263
- # @param [Layout::Style] style
264
- #
265
- # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
266
- # {Layout::Layer}
267
- #
268
- # @raise [LockedEntityError] if the {Layout::Entity} is locked
269
- #
270
- # @version LayOut 2018
271
- def style=(style)
272
- end
273
-
274
- # The {#transform!} method transforms the {Layout::Entity} with a given
275
- # {Geom::Transformation2d}.
276
- #
277
- # @example
278
- # doc = Layout::Document.open("C:/path/to/document.layout")
279
- # entities = doc.pages.first.entities
280
- # transform = Geom::Transformation2d.new([1.0, 0.0, 0.0, 1.0, 1.0, 1.0])
281
- # entity = entities.first.transform!(transform)
282
- #
283
- # @param [Geom::Transformation2d] transformation
284
- #
285
- # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
286
- # {Layout::Layer}
287
- #
288
- # @raise [LockedEntityError] if the {Layout::Entity} is locked
289
- #
290
- # @version LayOut 2018
291
- def transform!(transformation)
292
- end
293
-
294
- # The {#transformation} method returns the explicit {Geom::Transformation2d}.
295
- #
296
- # @example
297
- # doc = Layout::Document.open("C:/path/to/document.layout")
298
- # entities = doc.pages.first.entities
299
- # transform = entities.first.transformation
300
- #
301
- # @return [Geom::Transformation2d, nil]
302
- #
303
- # @version LayOut 2018
304
- def transformation
305
- end
306
-
307
- # The {#untransformed_bounds} method returns the untransformed bounds of the
308
- # {Layout::Entity}. This is the bounds of the {Layout::Entity} before its
309
- # explicit {Geom::Transformation2d} is applied.
310
- #
311
- # @example
312
- # doc = Layout::Document.open("C:/path/to/document.layout")
313
- # entities = doc.pages.first.entities
314
- # bounds = entities.first.untransformed_bounds
315
- #
316
- # @raise [ArgumentError] if the {Layout::Entity} does not have an explicit
317
- # {Geom::Transformation2d}
318
- #
319
- # @return [Geom::Bounds2d]
320
- #
321
- # @version LayOut 2018
322
- def untransformed_bounds
323
- end
324
-
325
- # The {#untransformed_bounds=} method sets the untransformed bounds of the
326
- # {Layout::Entity}. This is the bounds of the {Layout::Entity} before its
327
- # explicit {Geom::Transformation2d} is applied.
328
- #
329
- # @example
330
- # doc = Layout::Document.open("C:/path/to/document.layout")
331
- # entities = doc.pages.first.entities
332
- # point1 = Geom::Point2d.new(1, 1)
333
- # point2 = Geom::Point2d.new(2, 2)
334
- # bounds = Geom::Bounds2d(point1, point2)
335
- # entities.first.untransformed_bounds = bounds
336
- #
337
- # @param [Geom::Bounds2d] bounds
338
- #
339
- # @raise [ArgumentError] if the {Layout::Entity} does not have an explicit
340
- # {Geom::Transformation2d}
341
- #
342
- # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
343
- # {Layout::Layer}
344
- #
345
- # @raise [LockedEntityError] if the {Layout::Entity} is locked
346
- #
347
- # @raise [ArgumentError] if the bounds are of zero size
348
- #
349
- # @version LayOut 2018
350
- def untransformed_bounds=(bounds)
351
- end
352
-
353
- end
1
+ # Copyright:: Copyright 2026 Trimble Inc.
2
+ # License:: The MIT License (MIT)
3
+
4
+ # An entity is an object shown on a page of a LayOut document.
5
+ #
6
+ # @example
7
+ # doc = Layout::Document.open("C:/path/to/document.layout")
8
+ # # Get the shared entities in the document. If there are no shared layers,
9
+ # # the resulting array will be empty.
10
+ # entities = doc.shared_entities
11
+ #
12
+ # # Count how many of the shared entites are rectangles.
13
+ # rectangle_count = entities.grep(Layout::Rectangle).size
14
+ #
15
+ # @version LayOut 2018
16
+ class Layout::Entity
17
+
18
+ # Instance Methods
19
+
20
+ # The {#==} method checks to see if the two {Layout::Entity}s are equal. This
21
+ # checks whether the Ruby Objects are pointing to the same internal object.
22
+ #
23
+ # @example
24
+ # doc = Layout::Document.open("C:/path/to/document.layout")
25
+ # page_entities = doc.pages.first.entities
26
+ # layer_entities = doc.layers.first.layer_instance(page).entities
27
+ # page_entities.first == layer_entities.first
28
+ #
29
+ # @param [Layout::Entity] other
30
+ #
31
+ # @return [Boolean]
32
+ #
33
+ # @version LayOut 2018
34
+ def ==(other)
35
+ end
36
+
37
+ # The {#attribute_dictionary} method returns a copy of the entity's attribute dictionary with the
38
+ # given name.
39
+ #
40
+ # no attribute dictionary
41
+ #
42
+ # @example
43
+ # doc = Layout::Document.open("C:/path/to/document.layout")
44
+ # entity = doc.pages.first.entities.first
45
+ # entity.set_attribute("jane_doe_doc_maker", "made_by_doc_maker", true)
46
+ # attributes = entity.attribute_dictionary("jane_doe_doc_maker")
47
+ # # Adding to this Layout::Dictionary does not apply to the entity's attribute dictionary, use
48
+ # #Layout::Entity#set_attribute.
49
+ # attributes.merge!(doc_id: 42)
50
+ #
51
+ # @param [String] name
52
+ #
53
+ # @return [Layout::Dictionary, nil] A copy of the entity's attribute dictionary, or nil if there is
54
+ #
55
+ # @version LayOut 2026.0
56
+ def attribute_dictionary(name)
57
+ end
58
+
59
+ # The {#bounds} method returns the 2D rectangular bounds of the {Layout::Entity}.
60
+ #
61
+ # @example
62
+ # doc = Layout::Document.open("C:/path/to/document.layout")
63
+ # entities = doc.pages.first.entities
64
+ # bounds = entities.first.bounds
65
+ #
66
+ # @return [Geom::Bounds2d]
67
+ #
68
+ # @version LayOut 2018
69
+ def bounds
70
+ end
71
+
72
+ # The {#delete_attribute} method is used to delete an attribute from an entity.
73
+ #
74
+ # @overload delete_attribute(dictionary_name)
75
+ #
76
+ # @param [String] dictionary_name The name of an attribute dictionary.
77
+ # @return [Boolean]
78
+ #
79
+ # @example
80
+ # doc = Layout::Document.open("C:/path/to/document.layout")
81
+ # entity = doc.pages.first.entities.first
82
+ # entity.set_attribute("jane_doe_doc_maker", "made_by_doc_maker", true)
83
+ # entity.delete_attribute("jane_doe_doc_maker")
84
+ #
85
+ # @overload delete_attribute(dictionary_name, key)
86
+ #
87
+ # @param [String] dictionary_name The name of an attribute dictionary.
88
+ # @param [String] key An attribute key.
89
+ # @return [Boolean]
90
+ #
91
+ # @example
92
+ # doc = Layout::Document.open("C:/path/to/document.layout")
93
+ # entity = doc.pages.first.entities.first
94
+ # entity.set_attribute("jane_doe_doc_maker", "made_by_doc_maker", true)
95
+ # entity.delete_attribute("jane_doe_doc_maker", "made_by_doc_maker")
96
+ #
97
+ # @version LayOut 2026.0
98
+ def delete_attribute(*args)
99
+ end
100
+
101
+ # The {#document} method returns the {Layout::Document} that the
102
+ # {Layout::Entity} belongs to, or +nil+ if it is not in a {Layout::Document}.
103
+ #
104
+ # @example
105
+ # doc = Layout::Document.open("C:/path/to/document.layout")
106
+ # entities = doc.shared_entities
107
+ # # entity_doc should be the same document as doc
108
+ # entity_doc = entities.first.document
109
+ #
110
+ # @return [Layout::Document, nil]
111
+ #
112
+ # @version LayOut 2018
113
+ def document
114
+ end
115
+
116
+ # The {#drawing_bounds} method returns the 2D rectangular drawing bounds of the
117
+ # {Layout::Entity}.
118
+ #
119
+ # @example
120
+ # doc = Layout::Document.open("C:/path/to/document.layout")
121
+ # entities = doc.pages.first.entities
122
+ # draw_bounds = entities.first.drawing_bounds
123
+ #
124
+ # @return [Geom::OrientedBounds2d]
125
+ #
126
+ # @version LayOut 2018
127
+ def drawing_bounds
128
+ end
129
+
130
+ # The {#get_attribute} method is used to retrieve the value of an attribute in
131
+ # the entity's attribute dictionary.
132
+ #
133
+ # If the third parameter, +default_value+, is not passed and there is no
134
+ # attribute that matches the given name, it returns +nil+.
135
+ #
136
+ # If +default_value+ is provided and there is no matching attribute it returns
137
+ # the given value. It does not create an attribute with that name though.
138
+ #
139
+ # @example
140
+ # doc = Layout::Document.open("C:/path/to/document.layout")
141
+ # entity = doc.pages.first.entities.first
142
+ # # Read an attribute value from the entity. In this case this will return the
143
+ # # default value provided: 42.
144
+ # entity.get_attribute("jane_doe_doc_maker", "doc_id", 42)
145
+ #
146
+ # @param [String] name
147
+ # The name of an attribute dictionary.
148
+ #
149
+ # @param [String] key
150
+ # An attribute key.
151
+ #
152
+ # @param [String, Boolean, Integer, Float, Hash, Layout::Dictionary, nil] default_value
153
+ # A default
154
+ # value to return if no attribute is found.
155
+ #
156
+ # @return [String, Boolean, Integer, Float, Layout::Dictionary, nil] the retrieved value.
157
+ #
158
+ # @version LayOut 2026.0
159
+ def get_attribute(name, key, default_value = nil)
160
+ end
161
+
162
+ # The {#group} method returns the {Layout::Group} the {Layout::Entity} belongs
163
+ # to, or +nil+ if it is not in a {Layout::Group}.
164
+ #
165
+ # @example
166
+ # doc = Layout::Document.open("C:/path/to/document.layout")
167
+ # pages = doc.pages
168
+ # entities = pages.first.entities
169
+ # group = entities.first.group
170
+ #
171
+ # @return [Layout::Group, nil]
172
+ #
173
+ # @version LayOut 2018
174
+ def group
175
+ end
176
+
177
+ # The {#layer_instance} method returns the {Layout::LayerInstance} that the
178
+ # {Layout::Entity} is on, or +nil+ if it is not associated with a
179
+ # {Layout::LayerInstance}.
180
+ #
181
+ # @example
182
+ # doc = Layout::Document.open("C:/path/to/document.layout")
183
+ # entities = doc.pages.first.entities
184
+ # entity_layer_instance = entities.first.layer_instance
185
+ #
186
+ # @note {Layout::Group}s are never associated with a {Layout::LayerInstance}.
187
+ #
188
+ # @return [Layout::LayerInstance, nil]
189
+ #
190
+ # @version LayOut 2018
191
+ def layer_instance
192
+ end
193
+
194
+ # The {#locked=} method sets the {Layout::Entity} as locked or unlocked. When
195
+ # locked, the {Layout::Entity} cannot be modified directly.
196
+ #
197
+ # @example
198
+ # doc = Layout::Document.open("C:/path/to/document.layout")
199
+ # entities = doc.pages.first.entities
200
+ # entities.first.locked = true
201
+ #
202
+ # @param [Boolean] is_locked
203
+ #
204
+ # @version LayOut 2018
205
+ def locked=(is_locked)
206
+ end
207
+
208
+ # The {#locked?} method returns whether the {Layout::Entity} is locked or
209
+ # unlocked.
210
+ #
211
+ # @example
212
+ # doc = Layout::Document.open("C:/path/to/document.layout")
213
+ # entities = doc.pages.first.entities
214
+ # is_first_locked = entities.first.locked?
215
+ #
216
+ # @return [Boolean]
217
+ #
218
+ # @version LayOut 2018
219
+ def locked?
220
+ end
221
+
222
+ # The {#move_to_group} method moves the {Layout::Entity} into a {Layout::Group}.
223
+ # If the {Layout::Entity} is already in a {Layout::Group}, it will be removed
224
+ # from that {Layout::Group} prior to being added to the new one. If this action
225
+ # results in the old {Layout::Group} containing only one {Layout::Entity}, the
226
+ # old {Layout::Group} will be collapsed and the remaining {Layout::Entity} will
227
+ # be moved to the old {Layout::Group}'s parent.
228
+ #
229
+ # @example
230
+ # doc = Layout::Document.open("C:/path/to/document.layout")
231
+ # # We consider that there are two rectangle objects in the entities.
232
+ # entities = doc.layers.first.layer_instance(doc.pages.first).entities
233
+ # # We move the first rectangle to a new group.
234
+ # group = Layout::Group.new([entities.first])
235
+ # # We move the second rectangle to the same group.
236
+ # entities[1].first.move_to_group(new_group)
237
+ #
238
+ # @param [Layout::Group] group
239
+ #
240
+ # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
241
+ # {Layout::Layer}
242
+ #
243
+ # @raise [ArgumentError] if entity and group are not in the same
244
+ # {Layout::Document}
245
+ #
246
+ # @raise [ArgumentError] if entity and group are not on the same {Layout::Page}
247
+ #
248
+ # @raise [ArgumentError] if of entity and group one is shared and one is not
249
+ #
250
+ # @raise [LockedEntityError] if the {Layout::Entity} is locked
251
+ #
252
+ # @version LayOut 2018
253
+ def move_to_group(group)
254
+ end
255
+
256
+ # The {#move_to_layer} method moves the {Layout::Entity} to the given
257
+ # {Layout::Layer}. If the {Layout::Layer} is non-shared and the
258
+ # {Layout::Entity} is currently on a shared {Layout::Layer}, an array of
259
+ # {Layout::Page}s must be provided to move the {Layout::Entity} to. In all other
260
+ # cases, passing in an array of {Layout::Page}s is not necessary. The
261
+ # {Layout::Entity} must belong to the same {Layout::Document} as the the
262
+ # {Layout::Layer} and the {Layout::Page}s.
263
+ #
264
+ # @bug In LayOut versions prior to LayOut 2024.0 this method would fail to move
265
+ # entities from non-shared layers.
266
+ #
267
+ # @example
268
+ # doc = Layout::Document.open("C:/path/to/document.layout")
269
+ # entities = doc.pages.first.entities
270
+ # layers = doc.layers
271
+ # entities.last.move_to_layer(layers.first)
272
+ #
273
+ # @overload move_to_layer(layer)
274
+ #
275
+ # @param [Layout::Layer] layer
276
+ #
277
+ # @overload move_to_layer(layer, pages)
278
+ #
279
+ # @param [Layout::Layer] layer
280
+ # @param [Array<Layout::Page>] pages
281
+ #
282
+ # @raise [ArgumentError] if layer is shared and a valid array of non-duplicate
283
+ # {Layout::Page}s is not passed in
284
+ #
285
+ # @raise [ArgumentError] if entity, layer, and pages are not all in the same
286
+ # {Layout::Document}
287
+ #
288
+ # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
289
+ # {Layout::Layer}
290
+ #
291
+ # @raise [LockedLayerError] if layer is locked
292
+ #
293
+ # @raise [LockedEntityError] if the {Layout::Entity} is locked
294
+ #
295
+ # @version LayOut 2018
296
+ def move_to_layer(*args)
297
+ end
298
+
299
+ # The {#on_shared_layer?} method returns whether or not the {Layout::Entity} is
300
+ # on a shared {Layout::Layer}. This function works for all {Layout::Entity}
301
+ # types, including {Layout::Group}. {Layout::Group}s do not belong to a
302
+ # specific {Layout::Layer}, but their children are all on either a shared
303
+ # or non-shared {Layout::Layer}.
304
+ #
305
+ # @example
306
+ # doc = Layout::Document.open("C:/path/to/document.layout")
307
+ # entities = doc.pages.first.entities
308
+ # on_shared_layer = entities.first.on_shared_layer?
309
+ #
310
+ # @raise [ArgumentError] if the {Layout::Entity} is not in a {Layout::Document}
311
+ #
312
+ # @return [Boolean]
313
+ #
314
+ # @version LayOut 2018
315
+ def on_shared_layer?
316
+ end
317
+
318
+ # The {#page} method returns the {Layout::Page} that the {Layout::Entity}
319
+ # belongs to, or +nil+ if it is on a shared {Layout::Layer} or not in a
320
+ # {Layout::Document}.
321
+ #
322
+ # @example
323
+ # doc = Layout::Document.open("C:/path/to/document.layout")
324
+ # # page will be nil
325
+ # page = doc.shared_entities.first.page
326
+ # # page will be the first page of the document
327
+ # page = doc.pages.first.nonshared_entities.first.page
328
+ #
329
+ # @return [Layout::Page, nil]
330
+ #
331
+ # @version LayOut 2018
332
+ def page
333
+ end
334
+
335
+ # The {#set_attribute} method adds an attribute to the entity's attribute dictionary.
336
+ #
337
+ # @example
338
+ # doc = Layout::Document.open("C:/path/to/document.layout")
339
+ # entity = doc.pages.first.entities.first
340
+ # entity.set_attribute("jane_doe_doc_maker", "doc_id", 42)
341
+ #
342
+ # @param [String] name
343
+ # The name of an attribute dictionary.
344
+ # @param [String] key An attribute key.
345
+ # @param [String, Boolean, Integer, Float, Hash, Layout::Dictionary, nil] value The value for the
346
+ # attribute.
347
+ #
348
+ # @version LayOut 2026.0
349
+ def set_attribute(name, key, value)
350
+ end
351
+
352
+ # The {#style} method returns the {Layout::Style} of the {Layout::Entity}. If
353
+ # the {Layout::Entity} is a {Layout::Group}, +nil+ will be returned, as they
354
+ # do not have a {Layout::Style}.
355
+ #
356
+ # @example
357
+ # doc = Layout::Document.open("C:/path/to/document.layout")
358
+ # entities = doc.entities
359
+ # style = entities.first.style
360
+ #
361
+ # @return [Layout::Style, nil]
362
+ #
363
+ # @version LayOut 2018
364
+ def style
365
+ end
366
+
367
+ # The {#style=} method sets the {Layout::Style} of the {Layout::Entity}.
368
+ #
369
+ # @param [Layout::Style] style
370
+ #
371
+ # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
372
+ # {Layout::Layer}
373
+ #
374
+ # @raise [LockedEntityError] if the {Layout::Entity} is locked
375
+ #
376
+ # @version LayOut 2018
377
+ def style=(style)
378
+ end
379
+
380
+ # The {#transform!} method transforms the {Layout::Entity} with a given
381
+ # {Geom::Transformation2d}.
382
+ #
383
+ # @example
384
+ # doc = Layout::Document.open("C:/path/to/document.layout")
385
+ # entities = doc.pages.first.entities
386
+ # transform = Geom::Transformation2d.new([1.0, 0.0, 0.0, 1.0, 1.0, 1.0])
387
+ # entity = entities.first.transform!(transform)
388
+ #
389
+ # @note Since LayOut 2026.1, passing a non-invertible transformation raises
390
+ # an `ArgumentError`.
391
+ #
392
+ # @param [Geom::Transformation2d] transformation
393
+ #
394
+ # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
395
+ # {Layout::Layer}
396
+ #
397
+ # @raise [LockedEntityError] if the {Layout::Entity} is locked
398
+ #
399
+ # @raise [ArgumentError] if the transformation matrix is not invertible
400
+ #
401
+ # @version LayOut 2018
402
+ def transform!(transformation)
403
+ end
404
+
405
+ # The {#transformation} method returns the explicit {Geom::Transformation2d}.
406
+ #
407
+ # @example
408
+ # doc = Layout::Document.open("C:/path/to/document.layout")
409
+ # entities = doc.pages.first.entities
410
+ # transform = entities.first.transformation
411
+ #
412
+ # @return [Geom::Transformation2d, nil]
413
+ #
414
+ # @version LayOut 2018
415
+ def transformation
416
+ end
417
+
418
+ # The {#untransformed_bounds} method returns the untransformed bounds of the
419
+ # {Layout::Entity}. This is the bounds of the {Layout::Entity} before its
420
+ # explicit {Geom::Transformation2d} is applied.
421
+ #
422
+ # @example
423
+ # doc = Layout::Document.open("C:/path/to/document.layout")
424
+ # entities = doc.pages.first.entities
425
+ # bounds = entities.first.untransformed_bounds
426
+ #
427
+ # @raise [ArgumentError] if the {Layout::Entity} does not have an explicit
428
+ # {Geom::Transformation2d}
429
+ #
430
+ # @return [Geom::Bounds2d]
431
+ #
432
+ # @version LayOut 2018
433
+ def untransformed_bounds
434
+ end
435
+
436
+ # The {#untransformed_bounds=} method sets the untransformed bounds of the
437
+ # {Layout::Entity}. This is the bounds of the {Layout::Entity} before its
438
+ # explicit {Geom::Transformation2d} is applied.
439
+ #
440
+ # @example
441
+ # doc = Layout::Document.open("C:/path/to/document.layout")
442
+ # entities = doc.pages.first.entities
443
+ # point1 = Geom::Point2d.new(1, 1)
444
+ # point2 = Geom::Point2d.new(2, 2)
445
+ # bounds = Geom::Bounds2d(point1, point2)
446
+ # entities.first.untransformed_bounds = bounds
447
+ #
448
+ # @param [Geom::Bounds2d] bounds
449
+ #
450
+ # @raise [ArgumentError] if the {Layout::Entity} does not have an explicit
451
+ # {Geom::Transformation2d}
452
+ #
453
+ # @raise [LockedLayerError] if the {Layout::Entity} is on a locked
454
+ # {Layout::Layer}
455
+ #
456
+ # @raise [LockedEntityError] if the {Layout::Entity} is locked
457
+ #
458
+ # @raise [ArgumentError] if the bounds are of zero size
459
+ #
460
+ # @version LayOut 2018
461
+ def untransformed_bounds=(bounds)
462
+ end
463
+
464
+ end