From 8de00bcfe02bfb8594d03b69f5eda234bed3449f Mon Sep 17 00:00:00 2001 From: Gerardas Butkevicius <10091419+GerardasB@users.noreply.github.com> Date: Mon, 7 Feb 2022 14:51:39 +0200 Subject: [PATCH 1/2] Replace GeometryStream with GeometryMap. --- Domains/Core/BisCore.ecschema.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Domains/Core/BisCore.ecschema.xml b/Domains/Core/BisCore.ecschema.xml index 08e83e705..d63d21f93 100644 --- a/Domains/Core/BisCore.ecschema.xml +++ b/Domains/Core/BisCore.ecschema.xml @@ -26,7 +26,6 @@ - @@ -566,14 +565,14 @@ InformationRecordElement - + - + @@ -2047,7 +2046,7 @@ - + SpatialLocationElement From c8659ad7326796726bbbaff6d019cec57fe64b18 Mon Sep 17 00:00:00 2001 From: Gerardas Butkevicius <10091419+GerardasB@users.noreply.github.com> Date: Tue, 1 Mar 2022 18:12:58 +0200 Subject: [PATCH 2/2] Add note to remarks.md --- Domains/Core/BisCore.remarks.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Domains/Core/BisCore.remarks.md b/Domains/Core/BisCore.remarks.md index 3633a01f0..9d09506c6 100644 --- a/Domains/Core/BisCore.remarks.md +++ b/Domains/Core/BisCore.remarks.md @@ -25,7 +25,7 @@ Other schemas should use domain handlers (written in TypeScript) and the `Schema ### ISubModeledElement -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. +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. See also [IParentElement](#iparentelement). > 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. @@ -438,6 +438,24 @@ A `GeometryDetailRecord` should always be the child of a `GeometricElement3d` wh A `GeometryDetailRecord` models a geometric detail of the Entity modeled by its parent `GeometricElement3d`. +The `GeometryMap` property of the `GeometryDetailRecord` holds an array of identifiable geometry streams serialized in flat buffer format, see [ElementGeometryDataEntry](https://www.itwinjs.org/reference/core-common/geometry/elementgeometrydataentry/): + +```text +table GeometryMap { + entries: [GeometryMapEntry]; +} + +table GeometryMapEntry { + id: int; + entries: [ElementGeometryDataEntry]; +} + +table ElementGeometryDataEntry { + opcode: int; + data: [ubyte]; +} +``` + The GeometryStream of the `GeometryDetailRecord` does not actually hold the geometry of the geometric detail, but rather holds information needed to *produce* the specific geometric detail in its parent `GeometricElement3d`'s GeometryStream. There may be two other geometries that a user will wish to see in conjunction with a `GeometryDetailRecord`: - The faces and edges produced in the parent's GeometryStream by the `GeometryDetailRecord`'s associated operation in the feature tree. - A representation of the geometric change caused by the associated operation in the "feature tree", e.g. a solid representing the material subtracted to create an opening or the material added to create a protrusion. @@ -477,7 +495,7 @@ Other `InformationContentElement` instances can also be inserted into a `Definit ### RepositoryModel -> 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. +> 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. However, the system handler (C++) for `RepositoryModel` makes it act like a direct subclass of `InformationModel`. Consistent with a standard `InformationModel`, all `InformationContentElement` instances except `DefinitionElement` subclasses may be inserted. For backwards compatibility reasons, the superclass of `RepositoryModel` cannot be corrected until a major schema version upgrade.