@bentley/bis-core-schema 1.0.17-dev.4 → 1.0.17-dev.6
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.
- package/BisCore.ecschema.json +1 -1
- package/BisCore.ecschema.xml +138 -1
- package/BisCore.remarks.md +546 -0
- package/package.json +1 -1
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
---
|
|
2
|
+
noEditThisPage: true
|
|
3
|
+
remarksTarget: BisCore.ecschema.md
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# BisCore
|
|
7
|
+
|
|
8
|
+
BisCore contains the core classes that define the [fundamental building-blocks of BIS](../guide/intro/fabric-of-the-universe/) (e.g. Models, Elements, and ElementAspects) and which specialize them to establish domain-neutral base-classes for modeling the real world from multiple Modeling Perspectives.
|
|
9
|
+
|
|
10
|
+
BisCore also contains some less-fundamental classes related to infrastructure engineering visualization and documentation in general, such as drawings, views, etc.
|
|
11
|
+
|
|
12
|
+
The core classes are decorated by ECCustomAttributes that effectively define the database schema mapping for an iModel, but which can be ignored for other kinds of BIS Repositories. Other schemas cannot alter the underlying database schema mapping without explicit permission from BisCore.
|
|
13
|
+
|
|
14
|
+
The classes of BisCore are used as base classes for all classes in other BIS Domain schemas.
|
|
15
|
+
|
|
16
|
+
See [Base Infrastructure Schemas](../)
|
|
17
|
+
|
|
18
|
+
## Entity Classes
|
|
19
|
+
|
|
20
|
+
### ClassHasHandler
|
|
21
|
+
|
|
22
|
+
Applied to an ECClass to indicate that a system handler (written in C++) will supply behavior for it at run-time.
|
|
23
|
+
This custom attribute may only be used by BisCore and other core schemas.
|
|
24
|
+
Other schemas should use domain handlers (written in TypeScript) and the `SchemaHasBehavior` custom attribute applied to the ECSchema instead.
|
|
25
|
+
|
|
26
|
+
### ISubModeledElement
|
|
27
|
+
|
|
28
|
+
Sub-modeling is also sometimes described as "breaking down", i.e. a sub-modeled Element can be "broken down into" a finer-grained (sub) Model.
|
|
29
|
+
See also [IParentElement](#iparentelement).
|
|
30
|
+
|
|
31
|
+
> Behavior: The system handler (C++) for `Element` only permits a sub-model to be inserted if the class of the *modeled element* implements the `ISubModeledElement` interface.
|
|
32
|
+
|
|
33
|
+
### IParentElement
|
|
34
|
+
|
|
35
|
+
Only subclasses of bis:Element can implement the IParentElement interface
|
|
36
|
+
|
|
37
|
+
Parent-child modeling differs from sub-modeling in that the parent Element and child Elements are to be considered together in the context of a single Model, whereas a sub-modeled Element is considered independently of its sub-Model. For example, and application would view a parent Element and its child Elements together, but would *either* view a sub-modeled Element *or* exclude that Element and instead view the Elements of its sub-Model.
|
|
38
|
+
|
|
39
|
+
See also [ISubModeledElement](#isubmodeledelement).
|
|
40
|
+
|
|
41
|
+
### InformationPartitionElement
|
|
42
|
+
|
|
43
|
+
An InformationPartitionElement partitions the information in a BIS Repository into non-overlapping hierarchies of Models and Elements, each with a distinct Modeling Perspective. In some cases it further-partitions information into distinct subsets within a Modeling Perspective, based on a specific domain.
|
|
44
|
+
|
|
45
|
+
A bis:Subject mentions a real-world Object. BIS *sees* the Object as one-or-more Entities, where each Entity considers the Object from a particular Modeling Perspective. A specialization of a bis:InformationPartitionElement establishes a Perspective for modeling the Object to which the Subject refers. The top-Model sub-models the Partition. The actual modeling of the Entity with one-or-more Elements of the appropriate Modeling Perspective begins in the top-Model.
|
|
46
|
+
|
|
47
|
+
See [Top of the World](../guide/data-organization/top-of-the-world/)
|
|
48
|
+
|
|
49
|
+
> Behavior: The system handler (C++) for `InformationPartitionElement` will only permit instances to be inserted into the `RepositoryModel`.
|
|
50
|
+
The system handler will also require every `InformationPartitionElement` to have its `Parent` property reference a `Subject`.
|
|
51
|
+
|
|
52
|
+
### DefinitionPartition
|
|
53
|
+
|
|
54
|
+
The 'Definition' Modeling Perspective is for modeling definitions of things that are shared by multiple particular Entities.
|
|
55
|
+
|
|
56
|
+
> Behavior: The system handler (C++) for `DefinitionPartition` ensures that it is only ever sub-modeled by a `DefinitionModel`.
|
|
57
|
+
|
|
58
|
+
### DocumentPartition
|
|
59
|
+
|
|
60
|
+
The 'Document' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements which describes Entities using Documents and is used to create primary documents such as Drawings.
|
|
61
|
+
|
|
62
|
+
> Behavior: The system handler (C++) for `DocumentPartition` ensures that it is only ever sub-modeled by an `InformationModel` (typically `DocumentListModel`).
|
|
63
|
+
|
|
64
|
+
### GroupInformationPartition
|
|
65
|
+
|
|
66
|
+
The 'GroupInformation' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It is used primarily to hold `generic:Group` Elements generated from DgnV8 'Named Groups'.
|
|
67
|
+
|
|
68
|
+
> Behavior: The system handler (C++) for `GroupInformationPartition` ensures that it is only ever sub-modeled by a `GroupInformationModel`.
|
|
69
|
+
|
|
70
|
+
### InformationRecordPartition
|
|
71
|
+
|
|
72
|
+
The 'InformationRecord' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It can hold a broad array of information records describing Entities.
|
|
73
|
+
|
|
74
|
+
> Behavior: The system handler (C++) for `InformationRecordPartition` ensures that it is only ever sub-modeled by a `InformationRecordModel`.
|
|
75
|
+
|
|
76
|
+
### LinkPartition
|
|
77
|
+
|
|
78
|
+
The 'Link' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It is used to hold links to external repositories, e.g. in the form of `bis:RepositoryLink` elements.
|
|
79
|
+
|
|
80
|
+
> Behavior: The system handler (C++) for `LinkPartition` ensures that it is only ever sub-modeled by a `LinkModel`.
|
|
81
|
+
|
|
82
|
+
### LinkElement
|
|
83
|
+
|
|
84
|
+
The link is generally to some resource, e.g. the subclass `UrlLink` points to an external resource while `EmbeddedFileLink` points to files embedded in an iModel.
|
|
85
|
+
|
|
86
|
+
> Behavior: The system handler (C++) for `LinkElement` ensures that it is only ever inserted into an `InformationModel`.
|
|
87
|
+
|
|
88
|
+
### PhysicalPartition
|
|
89
|
+
|
|
90
|
+
The 'Physical' Perspective is for modeling physical Entities (which have mass) and for spatial location Entities (which are generally either defined-by physical Entities or are used-to-define physical Entities).
|
|
91
|
+
|
|
92
|
+
> Behavior: The system handler (C++) for `PhysicalPartition` ensures that it is only ever sub-modeled by a `SpatialModel`.
|
|
93
|
+
|
|
94
|
+
### PhysicalSystemPartition
|
|
95
|
+
|
|
96
|
+
The 'Physical System' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements which group a collection of connected Entities (primarily Physical) that collectively implement some function..
|
|
97
|
+
|
|
98
|
+
### PhysicalSystemAggregatesSubSystems
|
|
99
|
+
|
|
100
|
+
Forms a strict hierarchy (A PhysicalSystem can only be aggregated by a single 'aggregator').
|
|
101
|
+
|
|
102
|
+
See [PhysicalSystem](#physicalsystem) for more information.
|
|
103
|
+
|
|
104
|
+
### SpatialLocationPartition
|
|
105
|
+
|
|
106
|
+
The “Spatial Location” perspective is a strict subset of the “Physical” perspective. Spatial locations are massless, but they manifest in the real physical world:
|
|
107
|
+
|
|
108
|
+
- They may be defined in relation to physical entities, e.g. the air gap between two conductors, the space around an access panel, the volume occupied by a physical Entity, or a surface demarcating a region on the surface of a physical entity.
|
|
109
|
+
- They may be used to guide positioning of physical Entities, e.g. grid lines that may be manifested physically on a construction site via chalk lines or laser beams.
|
|
110
|
+
- They may be abstractions of physical consequence, like property or political boundaries that are often demarcated in the physical world via markers, signs, or natural boundaries.
|
|
111
|
+
|
|
112
|
+
The 'Spatial Location' perspective is used by SpatialLocationModel and SpatialLocationElement in order to segregate certain kinds of elements.
|
|
113
|
+
|
|
114
|
+
In retrospect, the complexity added by introducing a distinct "Spatial Location" perspective may have not been worth the benefit. Our current recommendation is to not instantiate a SpatialLocationPartition, but instead organize spatial locations in the context of the 'physical backbone', i.e. the Physical model hierarchy.
|
|
115
|
+
|
|
116
|
+
> Behavior: The system handler (C++) for `SpatialLocationPartition` ensures that it is only ever sub-modeled by a `SpatialLocationModel`.
|
|
117
|
+
|
|
118
|
+
### SheetIndexPartition
|
|
119
|
+
|
|
120
|
+
The 'Sheet Index' Modeling Perspective is a subset of the 'Information' Modeling Perspective. It holds Elements that organize Sheets into hierarchies for easier access.
|
|
121
|
+
|
|
122
|
+
### SheetIndexFolder
|
|
123
|
+
|
|
124
|
+
Instances of `SheetIndexFolder` are always contained within a `SheetIndexModel`.
|
|
125
|
+
|
|
126
|
+
### SheetReference
|
|
127
|
+
|
|
128
|
+
Instances of `SheetReference` are always contained within a `SheetIndexModel`.
|
|
129
|
+
|
|
130
|
+
### SheetIndexReference
|
|
131
|
+
|
|
132
|
+
Instances of `SheetIndexReference` are always contained within a `SheetIndexModel`.
|
|
133
|
+
|
|
134
|
+
### SheetIndex
|
|
135
|
+
|
|
136
|
+
Instances of `SheetIndex` are always contained within a `SheetIndexModel`.
|
|
137
|
+
|
|
138
|
+
### Model
|
|
139
|
+
|
|
140
|
+
See [Model Fundamentals](../guide/fundamentals/model-fundamentals/).
|
|
141
|
+
|
|
142
|
+
> Behavior: System handlers (written in C++) and domain handlers (written in TypeScript) provide behavior to specific `Model` subclasses.
|
|
143
|
+
The system handler for `Model` requires its `ModeledElement` property to reference an `Element` that implements `ISubModeledElement`.
|
|
144
|
+
This is enforced for all `Model` subclasses.
|
|
145
|
+
|
|
146
|
+
### ModelOwnsSubModel
|
|
147
|
+
|
|
148
|
+
See [Model.ParentModel](#model) ECNavigationProperty.
|
|
149
|
+
|
|
150
|
+
### ModelContainsElements
|
|
151
|
+
|
|
152
|
+
See [Element.Model](#element) ECNavigationProperty.
|
|
153
|
+
|
|
154
|
+
### ModelModelsElement
|
|
155
|
+
|
|
156
|
+
See [Model.ModeledElement](#model) ECNavigationProperty.
|
|
157
|
+
|
|
158
|
+
A more accurate name for this relationship would have been 'ModelSubModelsElement', but the existing name cannot be changed in this generation of BIS.
|
|
159
|
+
|
|
160
|
+
### DrawingModelBreaksDownDrawing
|
|
161
|
+
|
|
162
|
+
A more consistent name for this relationship would have been 'DrawingModelSubModelsDrawing', but the existing name cannot be changed in this generation of BIS. At times, we use "breaks down" as a synonym for "sub-models", but we are standardizing on "sub-models", reserving "breakdown" for use with various engineering breakdown structures.
|
|
163
|
+
|
|
164
|
+
### SheetModelBreaksDownSheet
|
|
165
|
+
|
|
166
|
+
A more consistent name for this relationship would have been 'SheetModelSubModelsSheet', but the existing name cannot be changed in this generation of BIS. At times, we use "breaks down" as a synonym for "sub-models", but we are standardizing on "sub-models", reserving "breakdown" for use with various engineering breakdown structures.
|
|
167
|
+
|
|
168
|
+
### SubjectRefersToSubject
|
|
169
|
+
|
|
170
|
+
A `bis:Subject` can be referenced by zero or more `bis:Subject` instances as opposed to the `bis:SubjectOwnsSubjects` relationship that leads to a strict hierarchy. This relationship is typically needed when the referencing and referenced `bis:Subject`s are located in different branches of the Subject hierarchy. With this relationship, the referencing `bis:Subject` is stating an association with the referenced `bis:Subject`s without duplicating them into its own branch. The concrete semantics behind such association is left for the data-writer or a human being to interpret, as it is generally the case with all `bis:Subject` instances on the Subject hierarchy as a whole.
|
|
171
|
+
|
|
172
|
+
### Element
|
|
173
|
+
|
|
174
|
+
Sets of `bis:Element`s (contained in `bis:Model`s) are used to sub-model other `bis:Element`s that represent larger scale real world Entities. Using this recursive modeling strategy, `bis:Element`s can represent Entities at any scale. Elements can represent physical things, abstract concepts or simply be information records.
|
|
175
|
+
|
|
176
|
+
See [Element Fundamentals](../guide/fundamentals/element-fundamentals/).
|
|
177
|
+
|
|
178
|
+
> Behavior: System handlers (written in C++) and domain handlers (written in TypeScript) provide behavior to specific `Element` subclasses.
|
|
179
|
+
The system handler for `Element` requires a valid `Model` reference and a valid or *empty* `Code`.
|
|
180
|
+
If the `Parent` property is not `NULL`, the system handler also requires that the child Element be in the same Model as the parent Element.
|
|
181
|
+
This is enforced for all `Element` subclasses.
|
|
182
|
+
|
|
183
|
+
### ElementRefersToElements
|
|
184
|
+
|
|
185
|
+
Subclasses of `ElementRefersToElements` can make use of the `MemberPriority` property to prioritize or order elements being referenced. By default, `MemberPriority` is set to *null* if not assigned. Duplicate not-null values for `MemberPriority` are allowed as long as the Sources, Targets, or the `ECClassId` of the relationships are different. Furthermore, duplicate Sources and Targets are accepted only if either their `ECClassId` or `MemberPriority` values are not the same.
|
|
186
|
+
|
|
187
|
+
### ElementDrivesElement
|
|
188
|
+
|
|
189
|
+
In iModels, a change-propagation system calls handlers that allow the driven Element to be affected by the driving Element.
|
|
190
|
+
See [DriverBundleElement](#driverbundleelement).
|
|
191
|
+
|
|
192
|
+
### DriverBundleElement
|
|
193
|
+
|
|
194
|
+
Used when multiple inputs for a "driving" relationship cannot be considered in isolation.
|
|
195
|
+
|
|
196
|
+
See [ElementDrivesElement](#elementdriveselement).
|
|
197
|
+
|
|
198
|
+
### TypeDefinitionElement
|
|
199
|
+
|
|
200
|
+
A `TypeDefinitionElement` is an implementation of a data normalization strategy and is meant to hold properties that vary per *type* instead of varying per `Element` instance.
|
|
201
|
+
Rather than storing the same set of *type-specific* properties on every `Element` instance, each `Element` instance will have a set of *instance-specific* properties (as specified by the `Element` class) and a set of related *type-specific* properties found by joining to the `TypeDefinitionElement` instance.
|
|
202
|
+
|
|
203
|
+
See relationships such as [PhysicalElementIsOfType](#physicalelementisoftype).
|
|
204
|
+
|
|
205
|
+
### PhysicalElementIsOfType
|
|
206
|
+
|
|
207
|
+
### PhysicalType
|
|
208
|
+
|
|
209
|
+
A `PhysicalType` is particularly useful in cases where a physical item can be ordered from a *catalog*.
|
|
210
|
+
Each type of item will have the same set of *type-specific* properties.
|
|
211
|
+
For example: manufacturer name, model number, maintenance intervals, etc.
|
|
212
|
+
|
|
213
|
+
### Subject
|
|
214
|
+
|
|
215
|
+
`Subject` elements only exist in the [RepositoryModel](#repositorymodel) singleton at the root of a BIS Repository. There will be one "root" instance of `Subject` that does not have a parent `Subject`. Child `Subject` elements reference "parts" of the real-world Object referenced by their parent `Subject` element.
|
|
216
|
+
|
|
217
|
+
The hierarchy of `Subject`s is not meant to model the root Object's structure, but is a way to express high-level structure that has not been modeled explicitly. `Subjects` do not "model" or "represent" or "describe" the Object that they reference. All modeling happens using Elements in the other bis:Models in the BIS Repository.
|
|
218
|
+
|
|
219
|
+
> Behavior: The system handler (C++) for `Subject` will only permit instances to be inserted into the `RepositoryModel`.
|
|
220
|
+
It will require every `Subject` except for the "root" to have its `Parent` property reference another `Subject`.
|
|
221
|
+
The system handler also prevents the "root" `Subject` from ever being deleted.
|
|
222
|
+
|
|
223
|
+
### Category
|
|
224
|
+
|
|
225
|
+
Categories should be standardized by domain groups where possible. They generally correlate with groups of BIS Element classes, or a single base class.
|
|
226
|
+
|
|
227
|
+
See [Categories Introduction](../guide/fundamentals/categories/).
|
|
228
|
+
|
|
229
|
+
Also see the [ClassificationSystems](./classificationsystems.ecschema/) domain schema for another way of categorizing and classifying elements.
|
|
230
|
+
|
|
231
|
+
> Behavior: The system handler (C++) for `Category` requires a valid `CodeValue` (name) for every instance.
|
|
232
|
+
It will insert a *default* `SubCategory` for every `Category` that is inserted.
|
|
233
|
+
The system handler also restricts deletion. A `Category` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `Category` is no longer referenced.
|
|
234
|
+
|
|
235
|
+
### SubCategory
|
|
236
|
+
|
|
237
|
+
> Behavior: The system handler (C++) for `SubCategory` requires a valid `CodeValue` (name) and a `Parent` property that references its owning `Category`.
|
|
238
|
+
The system handler also restricts deletion. A `SubCategory` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `SubCategory` is no longer referenced.
|
|
239
|
+
|
|
240
|
+
### AutoHandledPropertyStatementType
|
|
241
|
+
|
|
242
|
+
Restrictions that may be applied to an AutoHandledProperty. Must match the ECSqlClassParams::StatementType enum
|
|
243
|
+
|
|
244
|
+
### CodeSpecSpecifiesCode
|
|
245
|
+
|
|
246
|
+
See [Element.CodeSpec](#element) ECNavigationProperty.
|
|
247
|
+
|
|
248
|
+
### ElementScopesCode
|
|
249
|
+
|
|
250
|
+
See [Element.CodeScope](#element) ECNavigationProperty.
|
|
251
|
+
|
|
252
|
+
### TypeDefinitionHasRecipe
|
|
253
|
+
|
|
254
|
+
See [TypeDefinitionElement.Recipe ECNavigationProperty](#TypeDefinitionElement) ECNavigationProperty
|
|
255
|
+
|
|
256
|
+
### GeometricElement2dHasTypeDefinition
|
|
257
|
+
|
|
258
|
+
See [GeometricElement2d.TypeDefinition ECNavigationProperty](#GeometricElement2d) ECNavigationProperty
|
|
259
|
+
|
|
260
|
+
### GeometricElement3dHasTypeDefinition
|
|
261
|
+
|
|
262
|
+
See [GeometricElement3d.TypeDefinition ECNavigationProperty](#GeometricElement3d) ECNavigationProperty
|
|
263
|
+
|
|
264
|
+
### SheetHasSheetTemplate
|
|
265
|
+
|
|
266
|
+
See [Sheet.SheetTemplate ECNavigationProperty](#Sheet) ECNavigationProperty
|
|
267
|
+
|
|
268
|
+
### SheetTemplateHasSheetBorder
|
|
269
|
+
|
|
270
|
+
See [SheetTemplate.Border ECNavigationProperty](#SheetTemplate) ECNavigationProperty
|
|
271
|
+
|
|
272
|
+
### SheetBorderHasSheetBorderTemplate
|
|
273
|
+
|
|
274
|
+
See [SheetBorder.BorderTemplate ECNavigationProperty](#SheetBorder) ECNavigationProperty
|
|
275
|
+
|
|
276
|
+
### SheetIndexReferenceRefersToSheetIndex
|
|
277
|
+
|
|
278
|
+
See [SheetIndexReference.SheetIndex ECNavigationProperty](#SheetIndexReference) ECNavigationProperty
|
|
279
|
+
|
|
280
|
+
### SheetReferenceRefersToSheet
|
|
281
|
+
|
|
282
|
+
See [SheetReference.Sheet ECNavigationProperty](#SheetReference) ECNavigationProperty
|
|
283
|
+
|
|
284
|
+
### ViewIsAttached
|
|
285
|
+
|
|
286
|
+
See [ViewAttachment.View ECNavigationProperty](#ViewAttachment) ECNavigationProperty
|
|
287
|
+
|
|
288
|
+
### ElementOwnsChildElements
|
|
289
|
+
|
|
290
|
+
See [Element.Parent ECNavigationProperty](#Element) ECNavigationProperty
|
|
291
|
+
Should be treated as abstract, but was not made abstract because of legacy usages that were already released.
|
|
292
|
+
|
|
293
|
+
### Source
|
|
294
|
+
|
|
295
|
+
Source constraint should logically be IParentElement, but that mixin was invented later, and tightening the constraint could invalidate existing iModels
|
|
296
|
+
|
|
297
|
+
### ElementOwnsUniqueAspect
|
|
298
|
+
|
|
299
|
+
See [ElementUniqueAspect.Element ECNavigationProperty](#ElementUniqueAspect) ECNavigationProperty
|
|
300
|
+
|
|
301
|
+
### ElementOwnsMultiAspects
|
|
302
|
+
|
|
303
|
+
See [ElementMultiAspect.Element ECNavigationProperty](#ElementMultiAspect) ECNavigationProperty
|
|
304
|
+
|
|
305
|
+
### GeometricElement2dIsInCategory" strength="referencing
|
|
306
|
+
|
|
307
|
+
See [GeometricElement2d.Category ECNavigationProperty](#GeometricElement2d) ECNavigationProperty
|
|
308
|
+
|
|
309
|
+
### GeometricElement3dIsInCategory" strength="referencing
|
|
310
|
+
|
|
311
|
+
See [GeometricElement3d.Category ECNavigationProperty](#GeometricElement3d) ECNavigationProperty
|
|
312
|
+
|
|
313
|
+
### ColorBook
|
|
314
|
+
|
|
315
|
+
Individual colors are stored in JsonProperties
|
|
316
|
+
|
|
317
|
+
### GeometryPart
|
|
318
|
+
|
|
319
|
+
> Behavior: The system handler (C++) for `GeometryPart` requires valid geometry stored in the `GeometryStream` property for insertion to succeed.
|
|
320
|
+
The system handler also restricts deletion. A `GeometryPart` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `GeometryPart` is no longer referenced.
|
|
321
|
+
|
|
322
|
+
### LineStyle
|
|
323
|
+
|
|
324
|
+
> Behavior: The system handler restricts deletion. A `LineStyle` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `LineStyle` is no longer referenced.
|
|
325
|
+
|
|
326
|
+
### Texture
|
|
327
|
+
|
|
328
|
+
> Behavior: The system handler restricts deletion. A `Texture` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `Texture` is no longer referenced.
|
|
329
|
+
|
|
330
|
+
### PhysicalMaterial
|
|
331
|
+
|
|
332
|
+
The `PhysicalMaterial` serves as the base class for the materials in the PhysicalMaterial schema. Generally, it is expected that domain-specific properties (e.g. strength properties for the structural domain) will be added to the subclasses such as Concrete and Steel using domain-specific ElementAspects.
|
|
333
|
+
|
|
334
|
+
The Density property in this base `PhysicalMaterial` class is intended to provide basic weight computation for the purposes of quantity takeoff and carbon footprint, for example, which are cross-domain functions. This kindOfQuantity for this property is AECU:DENSITY.
|
|
335
|
+
|
|
336
|
+
### RenderMaterial
|
|
337
|
+
|
|
338
|
+
Marked as "Sealed" because JsonProperties will be used to persist data. This allows a single instance to "morph" between a DgnV8 render material and a future PBR material.
|
|
339
|
+
|
|
340
|
+
> Behavior: The system handler restricts deletion. A `RenderMaterial` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `RenderMaterial` is no longer referenced.
|
|
341
|
+
|
|
342
|
+
### RenderTimeline
|
|
343
|
+
|
|
344
|
+
This information used to be stored within the `DisplayStyle` but was refactored out as a separate element for efficiency and reuse purposes.
|
|
345
|
+
|
|
346
|
+
### SectionLocationUsesCategorySelector
|
|
347
|
+
|
|
348
|
+
See [SectionLocation.CategorySelector ECNavigationProperty](#SectionLocation) ECNavigationProperty
|
|
349
|
+
|
|
350
|
+
### ViewDefinition
|
|
351
|
+
|
|
352
|
+
> Behavior: The system handler (C++) for `ViewDefinition` requires a valid `DisplayStyle` reference and a valid `CategorySelector` reference.
|
|
353
|
+
This applies to all `ViewDefinition` subclasses.
|
|
354
|
+
The system handler also restricts deletion. A `ViewDefinition` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `ViewDefinition` is no longer referenced.
|
|
355
|
+
|
|
356
|
+
### SpatialViewDefinition
|
|
357
|
+
|
|
358
|
+
> Behavior: The system handler (C++) for `SpatialViewDefinition` requires a valid `ModelSelector` reference.
|
|
359
|
+
The restrictions of the superclass also apply.
|
|
360
|
+
|
|
361
|
+
### ModelSelector
|
|
362
|
+
|
|
363
|
+
> Behavior: The system handler restricts deletion. A `ModelSelector` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `ModelSelector` is no longer referenced.
|
|
364
|
+
|
|
365
|
+
### CategorySelector
|
|
366
|
+
|
|
367
|
+
> Behavior: The system handler restricts deletion. A `CategorySelector` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `CategorySelector` is no longer referenced.
|
|
368
|
+
|
|
369
|
+
### DisplayStyle
|
|
370
|
+
|
|
371
|
+
> Behavior: The system handler restricts deletion. A `DisplayStyle` can only be deleted via a more expensive `deleteDefinitionElements` method that has determined the `DisplayStyle` is no longer referenced.
|
|
372
|
+
|
|
373
|
+
### BaseModelForView2d
|
|
374
|
+
|
|
375
|
+
See [ViewDefinition2d.BaseModel ECNavigationProperty](#ViewDefinition2d) ECNavigationProperty
|
|
376
|
+
|
|
377
|
+
### SpatialViewDefinitionUsesModelSelector
|
|
378
|
+
|
|
379
|
+
See [SpatialViewDefinition.ModelSelector ECNavigationProperty](#SpatialViewDefinition) ECNavigationProperty
|
|
380
|
+
|
|
381
|
+
### ViewDefinitionUsesCategorySelector
|
|
382
|
+
|
|
383
|
+
See [ViewDefinition.CategorySelector ECNavigationProperty](#ViewDefinition) ECNavigationProperty
|
|
384
|
+
|
|
385
|
+
### ViewDefinitionUsesDisplayStyle
|
|
386
|
+
|
|
387
|
+
See [ViewDefinition.DisplayStyle ECNavigationProperty](#ViewDefinition) ECNavigationProperty
|
|
388
|
+
|
|
389
|
+
### CustomHandledProperty
|
|
390
|
+
|
|
391
|
+
See [CustomHandledPropertyStatementType](#CustomHandledPropertyStatementType).
|
|
392
|
+
|
|
393
|
+
### ChannelRootAspect
|
|
394
|
+
|
|
395
|
+
Applications create channels to define portions of the model-hierarchy that they "own".
|
|
396
|
+
|
|
397
|
+
Each Element (typically a `Subject` or `InformationPartitionElement`) that owns a `ChannelRootAspect` defines a root of the model-hierarchy that is included in a particular *channel*. It recursively descends down through `ElementOwnsChildElements` and `ModelModelsElement` relationships to include all of the child elements and sub-models into the specified *channel*. A *channel* is conceptually identified by its _Channel Key_ value of the `Owner` property of a `ChannelRootAspect`.
|
|
398
|
+
|
|
399
|
+
There may be more than one root `Subject`s or `InformationPartitionElement`s in a model-hierarchy that are included in the same *channel*. In that case, each `Subject` or `InformationPartitionElement` instance specifies the same _Channel Key_ value in their `ChannelRootAspect`.
|
|
400
|
+
|
|
401
|
+
Note that *Channels* do not nest. That is, once a `Subject` or `InformationPartitionElement` instance defines a root to be included in a particular *channel*, no descendant Element of such root in the subject-hierarchy can be used to define a root for a different *channel*.
|
|
402
|
+
|
|
403
|
+
See [Channels](https://www.itwinjs.org/learning/backend/channel/) for more information on the topic.
|
|
404
|
+
|
|
405
|
+
### DefinitionSet
|
|
406
|
+
|
|
407
|
+
`DefinitionSet` represents a set of `DefinitionElement`s. The set may be exclusive (`DefinitionContainer` owns its `DefinitionElement`s) or may be non-exclusive (`DefinitionGroup` does not own its `DefinitionElement`s). `DefinitionSet` should *only* be *directly* subclassed by `DefinitionGroup` and `DefinitionContainer`. `DefinitionGroup` and `DefinitionContainer` may be further subclassed.
|
|
408
|
+
|
|
409
|
+
References to `DefinitionSet`s will generally treat the `DefinitionSet`s recursively. If *`DefinitionSet` A* contains *`DefinitionSet` B* and *`DefinitionSet` C*, the members of *`DefinitionSet` B* and *`DefinitionSet` C* will be considered to be first class members of *`DefinitionSet` A* (effectively they will be considered as peers of the `DefinitionElement`s that are directly contained in *`DefinitionSet` A*). This recursive interpretation extends through the full depth of nested `DefinitionSet`s.
|
|
410
|
+
|
|
411
|
+
### DefinitionGroup
|
|
412
|
+
|
|
413
|
+
`DefinitionGroup` is intended for defining non-exclusive sets of `DefinitionElement`s (a `DefinitionElement` may be in multiple `DefinitionGroup`s). `DefinitionGroup` holds its `DefinitionElement`s through the `DefinitionGroupGroupsDefinitions` relationship. The referenced `DefinitionElement`s may be contained in the same `DefinitionModel` as the `DefinitionGroup` or may be contained in other `DefinitionModel`s.
|
|
414
|
+
|
|
415
|
+
See `DefinitionSet` documentation for recursive interpretations of `DefinitionSet`s containing `DefinitionSet`s.
|
|
416
|
+
|
|
417
|
+
Care must be taken to avoid circular references. Note that even a single `DefinitionGroup` can create circular references in two cases:
|
|
418
|
+
|
|
419
|
+
- The `DefinitionGroup` directly contains itself.
|
|
420
|
+
- The `DefinitionGroup` contains a `DefinitionContainer` that directly or indirectly contains the `DefinitionGroup`.
|
|
421
|
+
|
|
422
|
+
### DefinitionContainer
|
|
423
|
+
|
|
424
|
+
`DefinitionContainer` represents a `DefinitionSet` that exclusively owns its `DefinitionElement`s. The exclusivity is only effective relative to other `DefinitionContainer`s (or similar `DefinitionElement`s that have sub-models); the `DefinitionElement`s that are contained in a `DefinitionContainer` may also be in one or more `DefinitionGroup`s.
|
|
425
|
+
|
|
426
|
+
See `DefinitionSet` documentation for recursive interpretations of `DefinitionSet`s containing `DefinitionSet`s.
|
|
427
|
+
|
|
428
|
+
A `DefinitionContainer` can conceptually be thought of as a *folder of definitions*.
|
|
429
|
+
A `DefinitionContainer` is recommended when there is a standard set of domain-specific definitions that must be known to domain software applications.
|
|
430
|
+
In this case, the `DefinitionContainer` should be contained by the `DictionaryModel` and found by the software via a known `Code`.
|
|
431
|
+
|
|
432
|
+
### DefinitionGroupGroupsDefinitions
|
|
433
|
+
|
|
434
|
+
A `DefinitionGroup` may not be both the source and the target of the same relationship instance.
|
|
435
|
+
|
|
436
|
+
### PhysicalSystem
|
|
437
|
+
|
|
438
|
+
A non-exclusive set of `SpatialElements` grouped using the `PhysicalSystemGroupsMembers` relationship. A `SpatialElement` can be a member of multiple `PhysicalSystems`.
|
|
439
|
+
|
|
440
|
+
The primary contents of the `PhysicalSystem` are `PhysicalElements`, but `SpatialLocationElements` can be included, as well.
|
|
441
|
+
|
|
442
|
+
The hierarchy of `PhysicalSystem`s is built using the [PhysicalSystemAggregatesSubSystems](#physicalsystemaggregatessubsystems) relationship, similar to [IfcRelAggregates](https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifckernel/lexical/ifcrelaggregates.htm). The "source" Element of the relationship is an "Aggregator" that aggregates parts that are essentially a different representation of the aggregator, but at a finer granularity.
|
|
443
|
+
|
|
444
|
+
A Physical System can define as many levels of hierarchy as needed.
|
|
445
|
+
|
|
446
|
+
### SynchronizationConfigLink
|
|
447
|
+
|
|
448
|
+
A Link to the Configuration for a Synchronization Job. By convention, a unique Id for the SynchronizationConfigLink such as a job Id should be set in the `CodeValue` property and a name should be set in in the UserLabel property.
|
|
449
|
+
|
|
450
|
+
### ExternalSourceGroup
|
|
451
|
+
|
|
452
|
+
If the `ExternalSourceGroup` has a *primary* repository than it should be persisted in the `Repository` property from its base class.
|
|
453
|
+
If the group does not have a *primary* repository than that property should be left as `NULL`.
|
|
454
|
+
|
|
455
|
+
### GeometricModel2d
|
|
456
|
+
|
|
457
|
+
> Behavior: The system handler (C++) for `GeometricModel2d` will prevent `GeometricElement3d` instances from being inserted to ensure that the model will only contain 2d geometry.
|
|
458
|
+
This restriction applies to all `GeometricModel2d` subclasses.
|
|
459
|
+
`InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `GeometricModel2d`.
|
|
460
|
+
|
|
461
|
+
### GeometricElement2d
|
|
462
|
+
|
|
463
|
+
> Behavior: The system handler (C++) for `GeometricElement2d` will only permit instances to be inserted into a `GeometricModel2d` and will require its `Category` property to reference a `DrawingCategory`.
|
|
464
|
+
The system handler also requires a valid *placement* if `GeometryStream` is not `NULL`.
|
|
465
|
+
|
|
466
|
+
See [GeometryStream](../../learning/common/geometrystream/) for a more in-depth explanation about that property.
|
|
467
|
+
|
|
468
|
+
### DrawingModel
|
|
469
|
+
|
|
470
|
+
> Behavior: The system handler (C++) for `DrawingModel` ensures that the *modeled element* for a `DrawingModel` is a `Drawing` or a `TemplateRecipe2d`.
|
|
471
|
+
The restrictions from the `GeometricModel2d` superclass also apply.
|
|
472
|
+
|
|
473
|
+
### GeometricModel3d
|
|
474
|
+
|
|
475
|
+
> Behavior: The system handler (C++) for `GeometricModel3d` will prevent `GeometricElement2d` instances from being inserted to ensure that the model will only contain 3d geometry.
|
|
476
|
+
This restriction applies to all `GeometricModel3d` subclasses.
|
|
477
|
+
`InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `GeometricModel3d`.
|
|
478
|
+
|
|
479
|
+
### GeometricElement3d
|
|
480
|
+
|
|
481
|
+
> Behavior: The system handler (C++) for `GeometricElement3d` will only permit instances to be inserted into a `GeometricModel3d` and will require its `Category` property to reference a `SpatialCategory`.
|
|
482
|
+
The system handler also requires a valid *placement* if `GeometryStream` is not `NULL`.
|
|
483
|
+
|
|
484
|
+
See [GeometryStream](../../learning/common/geometrystream/) for a more in-depth explanation about that property.
|
|
485
|
+
|
|
486
|
+
### SpatialLocationModel
|
|
487
|
+
|
|
488
|
+
> Behavior: The system handler (C++) for `SpatialLocationModel` will prevent `PhysicalElement` instances from being inserted since the primary intent is for the model to contain `SpatialLocationElement` instances.
|
|
489
|
+
`InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `SpatialLocationModel`.
|
|
490
|
+
The restrictions from the `GeometricModel3d` superclass also apply.
|
|
491
|
+
|
|
492
|
+
### InformationModel
|
|
493
|
+
|
|
494
|
+
> Behavior: The system handler (C++) for `InformationModel` will only permit the insertion of `InformationContentElement` instances.
|
|
495
|
+
This restriction applies to all `InformationModel` subclasses.
|
|
496
|
+
|
|
497
|
+
### DefinitionModel
|
|
498
|
+
|
|
499
|
+
> Behavior: The system handler (C++) for `DefinitionElement` will only permit instances to be inserted into a `DefinitionModel`.
|
|
500
|
+
Other `InformationContentElement` instances can also be inserted into a `DefinitionModel`.
|
|
501
|
+
|
|
502
|
+
### DefinitionElement
|
|
503
|
+
|
|
504
|
+
> Behavior: The system handler (C++) for `DefinitionElement` will only permit instances to be inserted into a `DefinitionModel`.
|
|
505
|
+
|
|
506
|
+
### RepositoryModel
|
|
507
|
+
|
|
508
|
+
> Behavior: The singleton `RepositoryModel` behaves like a standard `InformationModel` and should have been a direct subclass of `InformationModel`. Unfortunately, it subclasses from `DefinitionModel` for legacy reasons that are no longer relevant.
|
|
509
|
+
However, the system handler (C++) for `RepositoryModel` makes it act like a direct subclass of `InformationModel`.
|
|
510
|
+
Consistent with a standard `InformationModel`, all `InformationContentElement` instances except `DefinitionElement` subclasses may be inserted.
|
|
511
|
+
For backwards compatibility reasons, the superclass of `RepositoryModel` cannot be corrected until a major schema version upgrade.
|
|
512
|
+
|
|
513
|
+
### GroupInformationModel
|
|
514
|
+
|
|
515
|
+
> Behavior: The system handler (C++) for `GroupInformationModel` will only permit the insertion of `GroupInformationElement` instances.
|
|
516
|
+
The *modeled element* for an `GroupInformationModel` is expected to be an `GroupInformationPartition`.
|
|
517
|
+
|
|
518
|
+
### LinkModel
|
|
519
|
+
|
|
520
|
+
> Behavior: The system handler (C++) for `LinkModel` will only permit the insertion of `LinkElement` instances.
|
|
521
|
+
The *modeled element* for an `LinkModel` is expected to be a `LinkPartition`.
|
|
522
|
+
|
|
523
|
+
### InformationRecordModel
|
|
524
|
+
|
|
525
|
+
> Behavior: The system handler (C++) for `InformationRecordModel` will only permit the insertion of `InformationRecordElement` instances.
|
|
526
|
+
The *modeled element* for an `InformationRecordModel` is expected to be an `InformationRecordPartition`.
|
|
527
|
+
|
|
528
|
+
### DocumentListModel
|
|
529
|
+
|
|
530
|
+
> Behavior: The system handler (C++) for `DocumentListModel` will only permit the insertion of `Document` instances.
|
|
531
|
+
The *modeled element* for a `DocumentListModel` is expected to be a `DocumentPartition`.
|
|
532
|
+
|
|
533
|
+
### RoleModel
|
|
534
|
+
|
|
535
|
+
> Behavior: The system handler (C++) for `RoleModel` prevents `GeometricElement` instances from being inserted since the primary intent is for a `RoleModel` to contain `RoleElement` instances.
|
|
536
|
+
`InformationContentElement` instances (other than `DefinitionElement` subclasses) can also be inserted into a `RoleModel`.
|
|
537
|
+
This behavior applies to all `RoleModel` subclasses.
|
|
538
|
+
`FunctionalModel` (from the `Functional` schema) is the most widely known subclass of `RoleModel`.
|
|
539
|
+
|
|
540
|
+
### RoleElement
|
|
541
|
+
|
|
542
|
+
An Entity is modeled as a `bis:RoleElement` when a set of external circumstances define an important role (one that is worth tracking) that is not intrinsic to the Entity playing the role. For example, a person can play the role of a teacher or a rock can play the role of a boundary marker.
|
|
543
|
+
|
|
544
|
+
> Behavior: The system handler (C++) for `RoleElement` will only permit instances to be inserted into a `RoleModel`.
|
|
545
|
+
This behavior applies to all `RoleElement` subclasses.
|
|
546
|
+
`FunctionalElement` (from the `Functional` schema) is the most widely known subclass of `RoleElement`.
|