@itwin/grouping-mapping-widget 0.2.0
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/LICENSE.md +9 -0
- package/README.md +26 -0
- package/lib/cjs/api/GroupQueryBuilderApi.d.ts +15 -0
- package/lib/cjs/api/GroupQueryBuilderApi.js +27 -0
- package/lib/cjs/api/GroupQueryBuilderApi.js.map +1 -0
- package/lib/cjs/api/generated/api.d.ts +3222 -0
- package/lib/cjs/api/generated/api.js +5291 -0
- package/lib/cjs/api/generated/api.js.map +1 -0
- package/lib/cjs/api/generated/configuration.d.ts +56 -0
- package/lib/cjs/api/generated/configuration.js +30 -0
- package/lib/cjs/api/generated/configuration.js.map +1 -0
- package/lib/cjs/api/generated/index.d.ts +14 -0
- package/lib/cjs/api/generated/index.js +31 -0
- package/lib/cjs/api/generated/index.js.map +1 -0
- package/lib/cjs/api/reportingClient.d.ts +34 -0
- package/lib/cjs/api/reportingClient.js +177 -0
- package/lib/cjs/api/reportingClient.js.map +1 -0
- package/lib/cjs/decorators/BboxDimensionsDecorator.d.ts +82 -0
- package/lib/cjs/decorators/BboxDimensionsDecorator.js +418 -0
- package/lib/cjs/decorators/BboxDimensionsDecorator.js.map +1 -0
- package/lib/cjs/grouping-mapping-widget.d.ts +7 -0
- package/lib/cjs/grouping-mapping-widget.js +27 -0
- package/lib/cjs/grouping-mapping-widget.js.map +1 -0
- package/lib/cjs/widget/GroupingMappingWidget.d.ts +7 -0
- package/lib/cjs/widget/GroupingMappingWidget.js +51 -0
- package/lib/cjs/widget/GroupingMappingWidget.js.map +1 -0
- package/lib/cjs/widget/components/ActionPanel.d.ts +11 -0
- package/lib/cjs/widget/components/ActionPanel.js +37 -0
- package/lib/cjs/widget/components/ActionPanel.js.map +1 -0
- package/lib/cjs/widget/components/ActionPanel.scss +12 -0
- package/lib/cjs/widget/components/CalculatedPropertyAction.d.ts +14 -0
- package/lib/cjs/widget/components/CalculatedPropertyAction.js +160 -0
- package/lib/cjs/widget/components/CalculatedPropertyAction.js.map +1 -0
- package/lib/cjs/widget/components/CalculatedPropertyAction.scss +27 -0
- package/lib/cjs/widget/components/CalculatedPropertyTable.d.ts +18 -0
- package/lib/cjs/widget/components/CalculatedPropertyTable.js +109 -0
- package/lib/cjs/widget/components/CalculatedPropertyTable.js.map +1 -0
- package/lib/cjs/widget/components/ConfirmMappingsImport.d.ts +16 -0
- package/lib/cjs/widget/components/ConfirmMappingsImport.js +112 -0
- package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -0
- package/lib/cjs/widget/components/ConfirmMappingsImport.scss +84 -0
- package/lib/cjs/widget/components/CustomCalculationAction.d.ts +14 -0
- package/lib/cjs/widget/components/CustomCalculationAction.js +103 -0
- package/lib/cjs/widget/components/CustomCalculationAction.js.map +1 -0
- package/lib/cjs/widget/components/CustomCalculationAction.scss +16 -0
- package/lib/cjs/widget/components/CustomCalculationTable.d.ts +18 -0
- package/lib/cjs/widget/components/CustomCalculationTable.js +114 -0
- package/lib/cjs/widget/components/CustomCalculationTable.js.map +1 -0
- package/lib/cjs/widget/components/DeleteModal.d.ts +12 -0
- package/lib/cjs/widget/components/DeleteModal.js +64 -0
- package/lib/cjs/widget/components/DeleteModal.js.map +1 -0
- package/lib/cjs/widget/components/DeleteModal.scss +12 -0
- package/lib/cjs/widget/components/GroupAction.d.ts +12 -0
- package/lib/cjs/widget/components/GroupAction.js +166 -0
- package/lib/cjs/widget/components/GroupAction.js.map +1 -0
- package/lib/cjs/widget/components/GroupAction.scss +19 -0
- package/lib/cjs/widget/components/GroupPropertyAction.d.ts +17 -0
- package/lib/cjs/widget/components/GroupPropertyAction.js +372 -0
- package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -0
- package/lib/cjs/widget/components/GroupPropertyAction.scss +36 -0
- package/lib/cjs/widget/components/GroupPropertyTable.d.ts +18 -0
- package/lib/cjs/widget/components/GroupPropertyTable.js +109 -0
- package/lib/cjs/widget/components/GroupPropertyTable.js.map +1 -0
- package/lib/cjs/widget/components/GroupQueryBuilder.scss +24 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +4 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js +66 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +1 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContext.d.ts +13 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContext.js +37 -0
- package/lib/cjs/widget/components/GroupQueryBuilderContext.js.map +1 -0
- package/lib/cjs/widget/components/Grouping.d.ts +12 -0
- package/lib/cjs/widget/components/Grouping.js +214 -0
- package/lib/cjs/widget/components/Grouping.js.map +1 -0
- package/lib/cjs/widget/components/Grouping.scss +15 -0
- package/lib/cjs/widget/components/GroupingMapping.d.ts +5 -0
- package/lib/cjs/widget/components/GroupingMapping.js +34 -0
- package/lib/cjs/widget/components/GroupingMapping.js.map +1 -0
- package/lib/cjs/widget/components/GroupingMapping.scss +24 -0
- package/lib/cjs/widget/components/Mapping.d.ts +7 -0
- package/lib/cjs/widget/components/Mapping.js +162 -0
- package/lib/cjs/widget/components/Mapping.js.map +1 -0
- package/lib/cjs/widget/components/Mapping.scss +26 -0
- package/lib/cjs/widget/components/MappingAction.d.ts +11 -0
- package/lib/cjs/widget/components/MappingAction.js +98 -0
- package/lib/cjs/widget/components/MappingAction.js.map +1 -0
- package/lib/cjs/widget/components/MappingAction.scss +16 -0
- package/lib/cjs/widget/components/MappingImportWizardModal.d.ts +10 -0
- package/lib/cjs/widget/components/MappingImportWizardModal.js +102 -0
- package/lib/cjs/widget/components/MappingImportWizardModal.js.map +1 -0
- package/lib/cjs/widget/components/MappingImportWizardModal.scss +21 -0
- package/lib/cjs/widget/components/PropertyMenu.d.ts +24 -0
- package/lib/cjs/widget/components/PropertyMenu.js +141 -0
- package/lib/cjs/widget/components/PropertyMenu.js.map +1 -0
- package/lib/cjs/widget/components/PropertyMenu.scss +48 -0
- package/lib/cjs/widget/components/QueryBuilder.d.ts +39 -0
- package/lib/cjs/widget/components/QueryBuilder.js +345 -0
- package/lib/cjs/widget/components/QueryBuilder.js.map +1 -0
- package/lib/cjs/widget/components/SelectIModel.d.ts +12 -0
- package/lib/cjs/widget/components/SelectIModel.js +42 -0
- package/lib/cjs/widget/components/SelectIModel.js.map +1 -0
- package/lib/cjs/widget/components/SelectIModel.scss +20 -0
- package/lib/cjs/widget/components/SelectMapping.scss +17 -0
- package/lib/cjs/widget/components/SelectMappings.d.ts +12 -0
- package/lib/cjs/widget/components/SelectMappings.js +82 -0
- package/lib/cjs/widget/components/SelectMappings.js.map +1 -0
- package/lib/cjs/widget/components/SelectProject.d.ts +10 -0
- package/lib/cjs/widget/components/SelectProject.js +71 -0
- package/lib/cjs/widget/components/SelectProject.js.map +1 -0
- package/lib/cjs/widget/components/SelectProject.scss +38 -0
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +33 -0
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js +92 -0
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/NonPrimitivePropertyRenderer.scss +16 -0
- package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +26 -0
- package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js +58 -0
- package/lib/cjs/widget/components/property-grid/PrimitivePropertyRenderer.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.d.ts +67 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js +198 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyGrid.scss +71 -0
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +17 -0
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +67 -0
- package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyList.d.ts +69 -0
- package/lib/cjs/widget/components/property-grid/PropertyList.js +87 -0
- package/lib/cjs/widget/components/property-grid/PropertyList.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyRender.d.ts +92 -0
- package/lib/cjs/widget/components/property-grid/PropertyRender.js +111 -0
- package/lib/cjs/widget/components/property-grid/PropertyRender.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyView.d.ts +20 -0
- package/lib/cjs/widget/components/property-grid/PropertyView.js +218 -0
- package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -0
- package/lib/cjs/widget/components/property-grid/PropertyView.scss +111 -0
- package/lib/cjs/widget/components/utils.d.ts +14 -0
- package/lib/cjs/widget/components/utils.js +82 -0
- package/lib/cjs/widget/components/utils.js.map +1 -0
- package/lib/cjs/widget/components/utils.scss +36 -0
- package/lib/cjs/widget/components/viewerUtils.d.ts +9 -0
- package/lib/cjs/widget/components/viewerUtils.js +115 -0
- package/lib/cjs/widget/components/viewerUtils.js.map +1 -0
- package/lib/cjs/widget/hooks/useFetchAccessToken.d.ts +3 -0
- package/lib/cjs/widget/hooks/useFetchAccessToken.js +22 -0
- package/lib/cjs/widget/hooks/useFetchAccessToken.js.map +1 -0
- package/lib/cjs/widget/hooks/useValidator.d.ts +45 -0
- package/lib/cjs/widget/hooks/useValidator.js +53 -0
- package/lib/cjs/widget/hooks/useValidator.js.map +1 -0
- package/lib/cjs/widget/icons/DatabaseInfo.d.ts +5 -0
- package/lib/cjs/widget/icons/DatabaseInfo.js +19 -0
- package/lib/cjs/widget/icons/DatabaseInfo.js.map +1 -0
- package/lib/cjs/widget/icons/DatabaseInfo.scss +12 -0
- package/lib/cjs/widget/utils.d.ts +4 -0
- package/lib/cjs/widget/utils.js +3 -0
- package/lib/cjs/widget/utils.js.map +1 -0
- package/lib/esm/api/GroupQueryBuilderApi.d.ts +15 -0
- package/lib/esm/api/GroupQueryBuilderApi.js +23 -0
- package/lib/esm/api/GroupQueryBuilderApi.js.map +1 -0
- package/lib/esm/api/generated/api.d.ts +3222 -0
- package/lib/esm/api/generated/api.js +5248 -0
- package/lib/esm/api/generated/api.js.map +1 -0
- package/lib/esm/api/generated/configuration.d.ts +56 -0
- package/lib/esm/api/generated/configuration.js +26 -0
- package/lib/esm/api/generated/configuration.js.map +1 -0
- package/lib/esm/api/generated/index.d.ts +14 -0
- package/lib/esm/api/generated/index.js +19 -0
- package/lib/esm/api/generated/index.js.map +1 -0
- package/lib/esm/api/reportingClient.d.ts +34 -0
- package/lib/esm/api/reportingClient.js +173 -0
- package/lib/esm/api/reportingClient.js.map +1 -0
- package/lib/esm/decorators/BboxDimensionsDecorator.d.ts +82 -0
- package/lib/esm/decorators/BboxDimensionsDecorator.js +414 -0
- package/lib/esm/decorators/BboxDimensionsDecorator.js.map +1 -0
- package/lib/esm/grouping-mapping-widget.d.ts +7 -0
- package/lib/esm/grouping-mapping-widget.js +11 -0
- package/lib/esm/grouping-mapping-widget.js.map +1 -0
- package/lib/esm/widget/GroupingMappingWidget.d.ts +7 -0
- package/lib/esm/widget/GroupingMappingWidget.js +25 -0
- package/lib/esm/widget/GroupingMappingWidget.js.map +1 -0
- package/lib/esm/widget/components/ActionPanel.d.ts +11 -0
- package/lib/esm/widget/components/ActionPanel.js +16 -0
- package/lib/esm/widget/components/ActionPanel.js.map +1 -0
- package/lib/esm/widget/components/ActionPanel.scss +12 -0
- package/lib/esm/widget/components/CalculatedPropertyAction.d.ts +14 -0
- package/lib/esm/widget/components/CalculatedPropertyAction.js +136 -0
- package/lib/esm/widget/components/CalculatedPropertyAction.js.map +1 -0
- package/lib/esm/widget/components/CalculatedPropertyAction.scss +27 -0
- package/lib/esm/widget/components/CalculatedPropertyTable.d.ts +18 -0
- package/lib/esm/widget/components/CalculatedPropertyTable.js +85 -0
- package/lib/esm/widget/components/CalculatedPropertyTable.js.map +1 -0
- package/lib/esm/widget/components/ConfirmMappingsImport.d.ts +16 -0
- package/lib/esm/widget/components/ConfirmMappingsImport.js +91 -0
- package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -0
- package/lib/esm/widget/components/ConfirmMappingsImport.scss +84 -0
- package/lib/esm/widget/components/CustomCalculationAction.d.ts +14 -0
- package/lib/esm/widget/components/CustomCalculationAction.js +79 -0
- package/lib/esm/widget/components/CustomCalculationAction.js.map +1 -0
- package/lib/esm/widget/components/CustomCalculationAction.scss +16 -0
- package/lib/esm/widget/components/CustomCalculationTable.d.ts +18 -0
- package/lib/esm/widget/components/CustomCalculationTable.js +90 -0
- package/lib/esm/widget/components/CustomCalculationTable.js.map +1 -0
- package/lib/esm/widget/components/DeleteModal.d.ts +12 -0
- package/lib/esm/widget/components/DeleteModal.js +41 -0
- package/lib/esm/widget/components/DeleteModal.js.map +1 -0
- package/lib/esm/widget/components/DeleteModal.scss +12 -0
- package/lib/esm/widget/components/GroupAction.d.ts +12 -0
- package/lib/esm/widget/components/GroupAction.js +142 -0
- package/lib/esm/widget/components/GroupAction.js.map +1 -0
- package/lib/esm/widget/components/GroupAction.scss +19 -0
- package/lib/esm/widget/components/GroupPropertyAction.d.ts +17 -0
- package/lib/esm/widget/components/GroupPropertyAction.js +347 -0
- package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -0
- package/lib/esm/widget/components/GroupPropertyAction.scss +36 -0
- package/lib/esm/widget/components/GroupPropertyTable.d.ts +18 -0
- package/lib/esm/widget/components/GroupPropertyTable.js +85 -0
- package/lib/esm/widget/components/GroupPropertyTable.js.map +1 -0
- package/lib/esm/widget/components/GroupQueryBuilder.scss +24 -0
- package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +4 -0
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js +43 -0
- package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +1 -0
- package/lib/esm/widget/components/GroupQueryBuilderContext.d.ts +13 -0
- package/lib/esm/widget/components/GroupQueryBuilderContext.js +15 -0
- package/lib/esm/widget/components/GroupQueryBuilderContext.js.map +1 -0
- package/lib/esm/widget/components/Grouping.d.ts +12 -0
- package/lib/esm/widget/components/Grouping.js +188 -0
- package/lib/esm/widget/components/Grouping.js.map +1 -0
- package/lib/esm/widget/components/Grouping.scss +15 -0
- package/lib/esm/widget/components/GroupingMapping.d.ts +5 -0
- package/lib/esm/widget/components/GroupingMapping.js +13 -0
- package/lib/esm/widget/components/GroupingMapping.js.map +1 -0
- package/lib/esm/widget/components/GroupingMapping.scss +24 -0
- package/lib/esm/widget/components/Mapping.d.ts +7 -0
- package/lib/esm/widget/components/Mapping.js +136 -0
- package/lib/esm/widget/components/Mapping.js.map +1 -0
- package/lib/esm/widget/components/Mapping.scss +26 -0
- package/lib/esm/widget/components/MappingAction.d.ts +11 -0
- package/lib/esm/widget/components/MappingAction.js +74 -0
- package/lib/esm/widget/components/MappingAction.js.map +1 -0
- package/lib/esm/widget/components/MappingAction.scss +16 -0
- package/lib/esm/widget/components/MappingImportWizardModal.d.ts +10 -0
- package/lib/esm/widget/components/MappingImportWizardModal.js +76 -0
- package/lib/esm/widget/components/MappingImportWizardModal.js.map +1 -0
- package/lib/esm/widget/components/MappingImportWizardModal.scss +21 -0
- package/lib/esm/widget/components/PropertyMenu.d.ts +24 -0
- package/lib/esm/widget/components/PropertyMenu.js +115 -0
- package/lib/esm/widget/components/PropertyMenu.js.map +1 -0
- package/lib/esm/widget/components/PropertyMenu.scss +48 -0
- package/lib/esm/widget/components/QueryBuilder.d.ts +39 -0
- package/lib/esm/widget/components/QueryBuilder.js +341 -0
- package/lib/esm/widget/components/QueryBuilder.js.map +1 -0
- package/lib/esm/widget/components/SelectIModel.d.ts +12 -0
- package/lib/esm/widget/components/SelectIModel.js +18 -0
- package/lib/esm/widget/components/SelectIModel.js.map +1 -0
- package/lib/esm/widget/components/SelectIModel.scss +20 -0
- package/lib/esm/widget/components/SelectMapping.scss +17 -0
- package/lib/esm/widget/components/SelectMappings.d.ts +12 -0
- package/lib/esm/widget/components/SelectMappings.js +61 -0
- package/lib/esm/widget/components/SelectMappings.js.map +1 -0
- package/lib/esm/widget/components/SelectProject.d.ts +10 -0
- package/lib/esm/widget/components/SelectProject.js +47 -0
- package/lib/esm/widget/components/SelectProject.js.map +1 -0
- package/lib/esm/widget/components/SelectProject.scss +38 -0
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.d.ts +33 -0
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js +69 -0
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.js.map +1 -0
- package/lib/esm/widget/components/property-grid/NonPrimitivePropertyRenderer.scss +16 -0
- package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.d.ts +26 -0
- package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js +35 -0
- package/lib/esm/widget/components/property-grid/PrimitivePropertyRenderer.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.d.ts +67 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.js +172 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyGrid.scss +71 -0
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +17 -0
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +44 -0
- package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyList.d.ts +69 -0
- package/lib/esm/widget/components/property-grid/PropertyList.js +60 -0
- package/lib/esm/widget/components/property-grid/PropertyList.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyRender.d.ts +92 -0
- package/lib/esm/widget/components/property-grid/PropertyRender.js +88 -0
- package/lib/esm/widget/components/property-grid/PropertyRender.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyView.d.ts +20 -0
- package/lib/esm/widget/components/property-grid/PropertyView.js +195 -0
- package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -0
- package/lib/esm/widget/components/property-grid/PropertyView.scss +111 -0
- package/lib/esm/widget/components/utils.d.ts +14 -0
- package/lib/esm/widget/components/utils.js +72 -0
- package/lib/esm/widget/components/utils.js.map +1 -0
- package/lib/esm/widget/components/utils.scss +36 -0
- package/lib/esm/widget/components/viewerUtils.d.ts +9 -0
- package/lib/esm/widget/components/viewerUtils.js +106 -0
- package/lib/esm/widget/components/viewerUtils.js.map +1 -0
- package/lib/esm/widget/hooks/useFetchAccessToken.d.ts +3 -0
- package/lib/esm/widget/hooks/useFetchAccessToken.js +20 -0
- package/lib/esm/widget/hooks/useFetchAccessToken.js.map +1 -0
- package/lib/esm/widget/hooks/useValidator.d.ts +45 -0
- package/lib/esm/widget/hooks/useValidator.js +47 -0
- package/lib/esm/widget/hooks/useValidator.js.map +1 -0
- package/lib/esm/widget/icons/DatabaseInfo.d.ts +5 -0
- package/lib/esm/widget/icons/DatabaseInfo.js +14 -0
- package/lib/esm/widget/icons/DatabaseInfo.js.map +1 -0
- package/lib/esm/widget/icons/DatabaseInfo.scss +12 -0
- package/lib/esm/widget/utils.d.ts +4 -0
- package/lib/esm/widget/utils.js +2 -0
- package/lib/esm/widget/utils.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BboxDimensionsDecorator = exports.BboxDimension = void 0;
|
|
4
|
+
const core_geometry_1 = require("@itwin/core-geometry");
|
|
5
|
+
const core_common_1 = require("@itwin/core-common");
|
|
6
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
7
|
+
var BboxDimension;
|
|
8
|
+
(function (BboxDimension) {
|
|
9
|
+
BboxDimension["BoundingBoxShortestEdgeLength"] = "Shortest Edge Length";
|
|
10
|
+
BboxDimension["BoundingBoxIntermediateEdgeLength"] = "Intermediate Edge Length";
|
|
11
|
+
BboxDimension["BoundingBoxLongestEdgeLength"] = "Longest Edge Length";
|
|
12
|
+
BboxDimension["BoundingBoxShortestFaceDiagonalLength"] = "Shortest Face Diagonal Length";
|
|
13
|
+
BboxDimension["BoundingBoxIntermediateFaceDiagonalLength"] = "Intermediate Face Diagonal Length";
|
|
14
|
+
BboxDimension["BoundingBoxLongestFaceDiagonalLength"] = "Longest Face Diagonal Length";
|
|
15
|
+
BboxDimension["BoundingBoxDiagonalLength"] = "Diagonal Length";
|
|
16
|
+
// SmallestFaceArea = "Smallest Face Area",
|
|
17
|
+
// IntermediateFaceArea = "Intermediate Face Area",
|
|
18
|
+
// LargestFaceArea = "Largest Face Area",
|
|
19
|
+
// Volume = "Volume"
|
|
20
|
+
})(BboxDimension = exports.BboxDimension || (exports.BboxDimension = {}));
|
|
21
|
+
class BboxDimensionsDecorator {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.points = [];
|
|
24
|
+
this.shapes = [];
|
|
25
|
+
this.markers = [];
|
|
26
|
+
this.fill = false;
|
|
27
|
+
this.shapeColor = core_common_1.ColorDef.fromTbgr(core_common_1.ColorDef.withTransparency(core_common_1.ColorDef.create(core_common_1.ColorByName.cyan).tbgr, 200));
|
|
28
|
+
this.pointColor = core_common_1.ColorDef.white;
|
|
29
|
+
this.lineColor = core_common_1.ColorDef.red;
|
|
30
|
+
this.fillColor = core_common_1.ColorDef.white;
|
|
31
|
+
this.shapeThickness = 1;
|
|
32
|
+
this.pointThickness = 8;
|
|
33
|
+
this.lineThickness = 4;
|
|
34
|
+
this.edges = true;
|
|
35
|
+
this.linePixels = core_common_1.LinePixels.Solid;
|
|
36
|
+
// #endregion
|
|
37
|
+
}
|
|
38
|
+
/** Clear the current context. */
|
|
39
|
+
clearContext() {
|
|
40
|
+
this.points = [];
|
|
41
|
+
this.shapes = [];
|
|
42
|
+
this.markers = [];
|
|
43
|
+
this.graphics = undefined;
|
|
44
|
+
core_frontend_1.IModelApp.viewManager.invalidateDecorationsAllViews();
|
|
45
|
+
}
|
|
46
|
+
/** Set the active instance used by the decorator. */
|
|
47
|
+
async setContext(instanceId) {
|
|
48
|
+
var _a;
|
|
49
|
+
// get locating info on the requested instance
|
|
50
|
+
const query = `SELECT bBoxHigh,bBoxLow,yaw,pitch,roll,origin FROM BisCore.SpatialElement WHERE ECInstanceId = ?`;
|
|
51
|
+
if (!core_frontend_1.IModelApp.viewManager.selectedView ||
|
|
52
|
+
!core_frontend_1.IModelApp.viewManager.selectedView.iModel) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const params = new core_common_1.QueryBinder().bindId(1, instanceId);
|
|
56
|
+
const queryIterable = (_a = core_frontend_1.IModelApp.viewManager.selectedView) === null || _a === void 0 ? void 0 : _a.iModel.query(query, params, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
|
|
57
|
+
const results = [];
|
|
58
|
+
for await (const row of queryIterable) {
|
|
59
|
+
results.push(row);
|
|
60
|
+
}
|
|
61
|
+
// if no results or more than one abort
|
|
62
|
+
if (results.length !== 1) {
|
|
63
|
+
// TODO: maybe report a warning or something
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// validate result
|
|
67
|
+
const elem = results[0];
|
|
68
|
+
if (!this.validateQueryResult(elem)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.instance = this.inferSpatialData(elem);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Get the calculated spatial lengths for all possible dimensions. */
|
|
77
|
+
getInferredSpatialData() {
|
|
78
|
+
if (!this.instance) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// calculate each dimension
|
|
82
|
+
const data = new Map();
|
|
83
|
+
const corners = this.instance.placement.getWorldCorners().points;
|
|
84
|
+
const mappings = this.instance.pointMappings;
|
|
85
|
+
for (const dimKey in BboxDimension) {
|
|
86
|
+
if (!Object.prototype.hasOwnProperty.call(BboxDimension, dimKey))
|
|
87
|
+
continue;
|
|
88
|
+
const dim = BboxDimension[dimKey];
|
|
89
|
+
if (mappings.has(dim)) {
|
|
90
|
+
const points = mappings.get(dim);
|
|
91
|
+
if (points) {
|
|
92
|
+
data.set(dim, corners[points[0]].distance(corners[points[1]]));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return data;
|
|
97
|
+
}
|
|
98
|
+
/** Command to draw the BBox. */
|
|
99
|
+
drawContext(dim) {
|
|
100
|
+
// check if valid instance set
|
|
101
|
+
if (!this.instance) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
this.clearContext();
|
|
105
|
+
// add geometry to decorator
|
|
106
|
+
const polyface = this.buildPolyface(this.instance.placement.bbox, this.instance.placement.transform);
|
|
107
|
+
this.addGeometry(polyface);
|
|
108
|
+
const [line, points] = this.buildLine(this.instance.placement.bbox, dim, this.instance.placement.transform);
|
|
109
|
+
this.addLine(line);
|
|
110
|
+
this.addPoints(points);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
/** Generates new graphics if needed, and adds them to the scene. */
|
|
114
|
+
decorate(context) {
|
|
115
|
+
// const overrides = new ViewFlagOverrides();
|
|
116
|
+
// overrides.setShowVisibleEdges(true);
|
|
117
|
+
// overrides.setApplyLighting(true);
|
|
118
|
+
const branch = new core_frontend_1.GraphicBranch(false);
|
|
119
|
+
// branch.viewFlagOverrides.copyFrom(overrides);
|
|
120
|
+
// context.viewFlags.visibleEdges = true;
|
|
121
|
+
if (!this.graphics) {
|
|
122
|
+
this.graphics = this.createGraphics(context);
|
|
123
|
+
}
|
|
124
|
+
if (this.graphics) {
|
|
125
|
+
branch.add(this.graphics);
|
|
126
|
+
}
|
|
127
|
+
const graphic = context.createBranch(branch, core_geometry_1.Transform.identity);
|
|
128
|
+
context.addDecoration(core_frontend_1.GraphicType.WorldOverlay, graphic);
|
|
129
|
+
this.markers.forEach((marker) => {
|
|
130
|
+
marker.addDecoration(context);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// #region Helper Functions
|
|
134
|
+
/** Calculate all BBox dimensions and properties and save. */
|
|
135
|
+
inferSpatialData(elem) {
|
|
136
|
+
// build placement from result
|
|
137
|
+
const origin = new core_geometry_1.Point3d(elem.origin.x, elem.origin.y, elem.origin.z);
|
|
138
|
+
const bBoxLow = new core_geometry_1.Point3d(elem.bBoxLow.x, elem.bBoxLow.y, elem.bBoxLow.z);
|
|
139
|
+
const bBoxHigh = new core_geometry_1.Point3d(elem.bBoxHigh.x, elem.bBoxHigh.y, elem.bBoxHigh.z);
|
|
140
|
+
const range = core_geometry_1.Range3d.create(bBoxLow, bBoxHigh);
|
|
141
|
+
const ypra = new core_geometry_1.YawPitchRollAngles(core_geometry_1.Angle.createDegrees(elem.yaw), core_geometry_1.Angle.createDegrees(elem.pitch), core_geometry_1.Angle.createDegrees(elem.roll));
|
|
142
|
+
const placement = new core_common_1.Placement3d(origin, ypra, range);
|
|
143
|
+
// determine dimension size ordering
|
|
144
|
+
const pointMappings = new Map();
|
|
145
|
+
pointMappings.set(BboxDimension.BoundingBoxDiagonalLength, [0, 7]);
|
|
146
|
+
const corners = placement.getWorldCorners();
|
|
147
|
+
const d01 = corners.distance(0, 1);
|
|
148
|
+
const d02 = corners.distance(0, 2);
|
|
149
|
+
const d04 = corners.distance(0, 4);
|
|
150
|
+
if (d01 >= d02 && d02 >= d04) {
|
|
151
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);
|
|
152
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);
|
|
153
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);
|
|
154
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);
|
|
155
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);
|
|
156
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);
|
|
157
|
+
}
|
|
158
|
+
else if (d01 >= d04 && d04 >= d02) {
|
|
159
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);
|
|
160
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);
|
|
161
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);
|
|
162
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);
|
|
163
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);
|
|
164
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 6]);
|
|
165
|
+
}
|
|
166
|
+
else if (d04 >= d02 && d02 >= d01) {
|
|
167
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);
|
|
168
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 2]);
|
|
169
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);
|
|
170
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);
|
|
171
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 5]);
|
|
172
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);
|
|
173
|
+
}
|
|
174
|
+
else if (d04 >= d01 && d01 >= d02) {
|
|
175
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);
|
|
176
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);
|
|
177
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);
|
|
178
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 5]);
|
|
179
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);
|
|
180
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 3]);
|
|
181
|
+
}
|
|
182
|
+
else if (d02 >= d01 && d01 >= d04) {
|
|
183
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);
|
|
184
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 1]);
|
|
185
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);
|
|
186
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 3]);
|
|
187
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 6]);
|
|
188
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);
|
|
189
|
+
}
|
|
190
|
+
else if (d02 >= d04 && d04 >= d01) {
|
|
191
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);
|
|
192
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateEdgeLength, [0, 4]);
|
|
193
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);
|
|
194
|
+
pointMappings.set(BboxDimension.BoundingBoxLongestFaceDiagonalLength, [0, 6]);
|
|
195
|
+
pointMappings.set(BboxDimension.BoundingBoxIntermediateFaceDiagonalLength, [0, 3]);
|
|
196
|
+
pointMappings.set(BboxDimension.BoundingBoxShortestFaceDiagonalLength, [0, 5]);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Unreachable case
|
|
200
|
+
}
|
|
201
|
+
return { placement, pointMappings };
|
|
202
|
+
}
|
|
203
|
+
/** Validate if instance has all necessary properties. */
|
|
204
|
+
validateQueryResult(result) {
|
|
205
|
+
var _a, _b, _c;
|
|
206
|
+
if (((_a = result === null || result === void 0 ? void 0 : result.bBoxHigh) === null || _a === void 0 ? void 0 : _a.x) !== undefined &&
|
|
207
|
+
(result === null || result === void 0 ? void 0 : result.bBoxHigh.y) !== undefined &&
|
|
208
|
+
(result === null || result === void 0 ? void 0 : result.bBoxHigh.z) !== undefined &&
|
|
209
|
+
((_b = result === null || result === void 0 ? void 0 : result.bBoxLow) === null || _b === void 0 ? void 0 : _b.x) !== undefined &&
|
|
210
|
+
(result === null || result === void 0 ? void 0 : result.bBoxLow.y) !== undefined &&
|
|
211
|
+
(result === null || result === void 0 ? void 0 : result.bBoxLow.z) !== undefined &&
|
|
212
|
+
((_c = result === null || result === void 0 ? void 0 : result.origin) === null || _c === void 0 ? void 0 : _c.x) !== undefined &&
|
|
213
|
+
(result === null || result === void 0 ? void 0 : result.origin.y) !== undefined &&
|
|
214
|
+
(result === null || result === void 0 ? void 0 : result.origin.z) !== undefined &&
|
|
215
|
+
(result === null || result === void 0 ? void 0 : result.yaw) !== undefined &&
|
|
216
|
+
(result === null || result === void 0 ? void 0 : result.pitch) !== undefined &&
|
|
217
|
+
(result === null || result === void 0 ? void 0 : result.roll) !== undefined) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Takes a Bounding Box and builds a rectangular polyface.
|
|
224
|
+
* @param bbox The desired Bounding Box.
|
|
225
|
+
* @param tf Transformation on the Bounding Box if applicable.
|
|
226
|
+
* @returns The bounding box geometry.
|
|
227
|
+
*/
|
|
228
|
+
buildPolyface(bbox, tf) {
|
|
229
|
+
var _a;
|
|
230
|
+
const options = core_geometry_1.StrokeOptions.createForCurves();
|
|
231
|
+
options.needParams = false;
|
|
232
|
+
options.needNormals = true;
|
|
233
|
+
const builder = core_geometry_1.PolyfaceBuilder.create(options);
|
|
234
|
+
const box = (_a = core_geometry_1.Box.createRange(bbox, true)) === null || _a === void 0 ? void 0 : _a.cloneTransformed(tf);
|
|
235
|
+
if (box) {
|
|
236
|
+
builder.addBox(box);
|
|
237
|
+
}
|
|
238
|
+
return builder.claimPolyface(false);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Build a Lone geometry based on specified dimension.
|
|
242
|
+
* @param bbox The desired Bounding Box.
|
|
243
|
+
* @param dim The desired dimension to draw.
|
|
244
|
+
* @param tf Transformation on the Bounding Box if applicable.
|
|
245
|
+
* @returns The line geometry.
|
|
246
|
+
*/
|
|
247
|
+
buildLine(bbox, dim, tf) {
|
|
248
|
+
// fallback scenario
|
|
249
|
+
const fallback = [
|
|
250
|
+
core_geometry_1.LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf),
|
|
251
|
+
[bbox.low, bbox.high],
|
|
252
|
+
];
|
|
253
|
+
if (!this.instance) {
|
|
254
|
+
// TODO: probably should have some warning here...
|
|
255
|
+
return fallback;
|
|
256
|
+
}
|
|
257
|
+
// otherwise return appropriate dimensions
|
|
258
|
+
const corners = this.instance.placement.getWorldCorners().points;
|
|
259
|
+
const targets = this.instance.pointMappings.get(dim);
|
|
260
|
+
if (targets) {
|
|
261
|
+
return [
|
|
262
|
+
core_geometry_1.LineSegment3d.create(corners[targets[0]], corners[targets[1]]),
|
|
263
|
+
[corners[targets[0]], corners[targets[1]]],
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
// TODO: probably should have some warning here...
|
|
268
|
+
return fallback;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Configure and add points to the dectorator.
|
|
273
|
+
* @param point Definition of the points.
|
|
274
|
+
*/
|
|
275
|
+
addPoints(points) {
|
|
276
|
+
for (const point of points) {
|
|
277
|
+
const styledPoint = {
|
|
278
|
+
point,
|
|
279
|
+
color: this.pointColor,
|
|
280
|
+
fill: this.fill,
|
|
281
|
+
lineThickness: this.pointThickness,
|
|
282
|
+
};
|
|
283
|
+
this.points.push(styledPoint);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Configure and add a line to the decorator.
|
|
288
|
+
* Length of the line is displayed as a label in the center.
|
|
289
|
+
* @param line Definition of the line.
|
|
290
|
+
*/
|
|
291
|
+
addLine(line) {
|
|
292
|
+
const styledGeometry = {
|
|
293
|
+
geometry: line,
|
|
294
|
+
color: this.lineColor,
|
|
295
|
+
fill: true,
|
|
296
|
+
fillColor: this.fillColor,
|
|
297
|
+
lineThickness: this.lineThickness,
|
|
298
|
+
edges: this.edges,
|
|
299
|
+
linePixels: this.linePixels,
|
|
300
|
+
};
|
|
301
|
+
this.shapes.push(styledGeometry);
|
|
302
|
+
const marker = new core_frontend_1.Marker(line.fractionToPoint(0.5), { x: 25, y: 25 });
|
|
303
|
+
const label = document.createElement("div");
|
|
304
|
+
label.textContent = `${line.quickLength().toFixed(3)}m`;
|
|
305
|
+
label.style.backgroundColor = "rgba(17,17,17,0.75)";
|
|
306
|
+
label.style.borderRadius = "4px";
|
|
307
|
+
label.style.color = "white";
|
|
308
|
+
label.style.padding = "4px 8px";
|
|
309
|
+
marker.htmlElement = label;
|
|
310
|
+
marker.visible = true;
|
|
311
|
+
this.markers.push(marker);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Configure and add a mesh to the decorator.
|
|
315
|
+
* @param geometry Definition of the mesh.
|
|
316
|
+
*/
|
|
317
|
+
addGeometry(geometry) {
|
|
318
|
+
const styledGeometry = {
|
|
319
|
+
geometry,
|
|
320
|
+
color: this.shapeColor,
|
|
321
|
+
fill: this.fill,
|
|
322
|
+
fillColor: this.fillColor,
|
|
323
|
+
lineThickness: this.shapeThickness,
|
|
324
|
+
edges: this.edges,
|
|
325
|
+
linePixels: this.linePixels,
|
|
326
|
+
};
|
|
327
|
+
this.shapes.push(styledGeometry);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Iterate through the geometry and point lists, extracting each geometry and point, along with their styles
|
|
331
|
+
* Adding them to the graphic builder which then creates new graphics
|
|
332
|
+
* @param context
|
|
333
|
+
* @returns
|
|
334
|
+
*/
|
|
335
|
+
createGraphics(context) {
|
|
336
|
+
// Specifying an Id for the graphics tells the display system that all of the geometry belongs to the same entity, so that it knows to make sure the edges draw on top of the surfaces.
|
|
337
|
+
const builder = context.createGraphicBuilder(core_frontend_1.GraphicType.Scene, undefined, context.viewport.iModel.transientIds.next);
|
|
338
|
+
// Read-only now
|
|
339
|
+
// builder.wantNormals = true;
|
|
340
|
+
this.points.forEach((styledPoint) => {
|
|
341
|
+
builder.setSymbology(styledPoint.color, styledPoint.fill ? styledPoint.color : core_common_1.ColorDef.white, styledPoint.lineThickness);
|
|
342
|
+
const point = styledPoint.point;
|
|
343
|
+
builder.addPointString([point]);
|
|
344
|
+
});
|
|
345
|
+
this.shapes.forEach((styledGeometry) => {
|
|
346
|
+
const geometry = styledGeometry.geometry;
|
|
347
|
+
builder.setSymbology(styledGeometry.color, styledGeometry.fill ? styledGeometry.fillColor : styledGeometry.color, styledGeometry.lineThickness, styledGeometry.linePixels);
|
|
348
|
+
this.createGraphicsForGeometry(geometry, styledGeometry.edges, builder);
|
|
349
|
+
});
|
|
350
|
+
const graphic = builder.finish();
|
|
351
|
+
return graphic;
|
|
352
|
+
}
|
|
353
|
+
createGraphicsForGeometry(geometry, wantEdges, builder) {
|
|
354
|
+
if (geometry instanceof core_geometry_1.LineString3d) {
|
|
355
|
+
builder.addLineString(geometry.points);
|
|
356
|
+
}
|
|
357
|
+
else if (geometry instanceof core_geometry_1.Loop) {
|
|
358
|
+
builder.addLoop(geometry);
|
|
359
|
+
if (wantEdges) {
|
|
360
|
+
// Since decorators don't natively support visual edges,
|
|
361
|
+
// We draw them manually as lines along each loop edge/arc
|
|
362
|
+
builder.setSymbology(core_common_1.ColorDef.black, core_common_1.ColorDef.black, 2);
|
|
363
|
+
const curves = geometry.children;
|
|
364
|
+
curves.forEach((value) => {
|
|
365
|
+
if (value instanceof core_geometry_1.LineString3d) {
|
|
366
|
+
let edges = value.points;
|
|
367
|
+
const endPoint = value.pointAt(0);
|
|
368
|
+
if (endPoint) {
|
|
369
|
+
edges = edges.concat([endPoint]);
|
|
370
|
+
}
|
|
371
|
+
builder.addLineString(edges);
|
|
372
|
+
}
|
|
373
|
+
else if (value instanceof core_geometry_1.Arc3d) {
|
|
374
|
+
builder.addArc(value, false, false);
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else if (geometry instanceof core_geometry_1.Path) {
|
|
380
|
+
builder.addPath(geometry);
|
|
381
|
+
}
|
|
382
|
+
else if (geometry instanceof core_geometry_1.IndexedPolyface) {
|
|
383
|
+
builder.addPolyface(geometry, false);
|
|
384
|
+
if (wantEdges) {
|
|
385
|
+
// Since decorators don't natively support visual edges,
|
|
386
|
+
// We draw them manually as lines along each facet edge
|
|
387
|
+
builder.setSymbology(core_common_1.ColorDef.black, core_common_1.ColorDef.black, 2);
|
|
388
|
+
const visitor = core_geometry_1.IndexedPolyfaceVisitor.create(geometry, 1);
|
|
389
|
+
let flag = true;
|
|
390
|
+
while (flag) {
|
|
391
|
+
const numIndices = visitor.pointCount;
|
|
392
|
+
for (let i = 0; i < numIndices - 1; i++) {
|
|
393
|
+
const point1 = visitor.getPoint(i);
|
|
394
|
+
const point2 = visitor.getPoint(i + 1);
|
|
395
|
+
if (point1 && point2) {
|
|
396
|
+
builder.addLineString([point1, point2]);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
flag = visitor.moveToNextFacet();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
else if (geometry instanceof core_geometry_1.LineSegment3d) {
|
|
404
|
+
const pointA = geometry.point0Ref;
|
|
405
|
+
const pointB = geometry.point1Ref;
|
|
406
|
+
const lineString = [pointA, pointB];
|
|
407
|
+
builder.addLineString(lineString);
|
|
408
|
+
}
|
|
409
|
+
else if (geometry instanceof core_geometry_1.Arc3d) {
|
|
410
|
+
builder.addArc(geometry, false, false);
|
|
411
|
+
}
|
|
412
|
+
else if (geometry instanceof core_geometry_1.CurveChainWithDistanceIndex) {
|
|
413
|
+
this.createGraphicsForGeometry(geometry.path, wantEdges, builder);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.BboxDimensionsDecorator = BboxDimensionsDecorator;
|
|
418
|
+
//# sourceMappingURL=BboxDimensionsDecorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BboxDimensionsDecorator.js","sourceRoot":"","sources":["../../../src/decorators/BboxDimensionsDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type {\n CurvePrimitive,\n GeometryQuery} from \"@itwin/core-geometry\";\nimport {\n Angle,\n Arc3d,\n Box,\n CurveChainWithDistanceIndex,\n IndexedPolyface,\n IndexedPolyfaceVisitor,\n LineSegment3d,\n LineString3d,\n Loop,\n Path,\n Point3d,\n PolyfaceBuilder,\n Range3d,\n StrokeOptions,\n Transform,\n YawPitchRollAngles,\n} from \"@itwin/core-geometry\";\nimport {\n ColorByName,\n ColorDef,\n LinePixels,\n Placement3d,\n QueryBinder,\n QueryRowFormat,\n} from \"@itwin/core-common\";\nimport type {\n DecorateContext,\n Decorator,\n GraphicBuilder,\n RenderGraphic} from \"@itwin/core-frontend\";\nimport {\n GraphicBranch,\n GraphicType,\n IModelApp,\n Marker,\n} from \"@itwin/core-frontend\";\n\nexport enum BboxDimension {\n BoundingBoxShortestEdgeLength = \"Shortest Edge Length\",\n BoundingBoxIntermediateEdgeLength = \"Intermediate Edge Length\",\n BoundingBoxLongestEdgeLength = \"Longest Edge Length\",\n BoundingBoxShortestFaceDiagonalLength = \"Shortest Face Diagonal Length\",\n BoundingBoxIntermediateFaceDiagonalLength = \"Intermediate Face Diagonal Length\",\n BoundingBoxLongestFaceDiagonalLength = \"Longest Face Diagonal Length\",\n BoundingBoxDiagonalLength = \"Diagonal Length\",\n // SmallestFaceArea = \"Smallest Face Area\",\n // IntermediateFaceArea = \"Intermediate Face Area\",\n // LargestFaceArea = \"Largest Face Area\",\n // Volume = \"Volume\"\n}\n\ninterface CustomGeometryQuery {\n geometry: GeometryQuery;\n color: ColorDef;\n fill: boolean;\n fillColor: ColorDef;\n lineThickness: number;\n edges: boolean;\n linePixels: LinePixels;\n}\n\ninterface CustomPoint {\n point: Point3d;\n color: ColorDef;\n fill: boolean;\n lineThickness: number;\n}\n\ninterface SpatialElementQueryResult {\n bBoxHigh: Point3d;\n bBoxLow: Point3d;\n yaw: number;\n pitch: number;\n roll: number;\n origin: Point3d;\n}\n\ninterface InferredSpatialData {\n pointMappings: Map<BboxDimension, [number, number]>;\n placement: Placement3d;\n}\n\nexport class BboxDimensionsDecorator implements Decorator {\n private instance: InferredSpatialData | undefined;\n private graphics: RenderGraphic | undefined;\n private points: CustomPoint[] = [];\n private shapes: CustomGeometryQuery[] = [];\n private markers: Marker[] = [];\n\n private fill = false;\n private shapeColor: ColorDef = ColorDef.fromTbgr(\n ColorDef.withTransparency(ColorDef.create(ColorByName.cyan).tbgr, 200)\n );\n private pointColor: ColorDef = ColorDef.white;\n private lineColor: ColorDef = ColorDef.red;\n private fillColor: ColorDef = ColorDef.white;\n private shapeThickness = 1;\n private pointThickness = 8;\n private lineThickness = 4;\n private edges = true;\n private linePixels = LinePixels.Solid;\n\n /** Clear the current context. */\n public clearContext(): void {\n this.points = [];\n this.shapes = [];\n this.markers = [];\n this.graphics = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n\n /** Set the active instance used by the decorator. */\n public async setContext(instanceId: string): Promise<boolean> {\n // get locating info on the requested instance\n const query = `SELECT bBoxHigh,bBoxLow,yaw,pitch,roll,origin FROM BisCore.SpatialElement WHERE ECInstanceId = ?`;\n\n if (\n !IModelApp.viewManager.selectedView ||\n !IModelApp.viewManager.selectedView.iModel\n ) {\n return false;\n }\n\n const params = new QueryBinder().bindId(1, instanceId);\n const queryIterable = IModelApp.viewManager.selectedView?.iModel.query(\n query,\n params,\n { rowFormat: QueryRowFormat.UseJsPropertyNames }\n );\n\n const results: SpatialElementQueryResult[] = [];\n for await (const row of queryIterable) {\n results.push(row);\n }\n // if no results or more than one abort\n if (results.length !== 1) {\n // TODO: maybe report a warning or something\n return false;\n }\n\n // validate result\n const elem = results[0];\n if (!this.validateQueryResult(elem)) {\n return false;\n } else {\n this.instance = this.inferSpatialData(elem);\n return true;\n }\n }\n\n /** Get the calculated spatial lengths for all possible dimensions. */\n public getInferredSpatialData(): Map<BboxDimension, number> | undefined {\n if (!this.instance) {\n return;\n }\n\n // calculate each dimension\n const data = new Map<BboxDimension, number>();\n const corners = this.instance.placement.getWorldCorners().points;\n const mappings = this.instance.pointMappings;\n for (const dimKey in BboxDimension) {\n if (!Object.prototype.hasOwnProperty.call(BboxDimension, dimKey))\n continue;\n const dim = BboxDimension[dimKey as keyof typeof BboxDimension];\n if (mappings.has(dim)) {\n const points = mappings.get(dim);\n if (points) {\n data.set(dim, corners[points[0]].distance(corners[points[1]]));\n }\n }\n }\n\n return data;\n }\n\n /** Command to draw the BBox. */\n public drawContext(dim: BboxDimension): boolean {\n // check if valid instance set\n if (!this.instance) {\n return false;\n }\n this.clearContext();\n\n // add geometry to decorator\n const polyface = this.buildPolyface(\n this.instance.placement.bbox,\n this.instance.placement.transform\n );\n this.addGeometry(polyface);\n const [line, points] = this.buildLine(\n this.instance.placement.bbox,\n dim,\n this.instance.placement.transform\n );\n this.addLine(line);\n this.addPoints(points);\n\n return true;\n }\n\n /** Generates new graphics if needed, and adds them to the scene. */\n public decorate(context: DecorateContext): void {\n // const overrides = new ViewFlagOverrides();\n // overrides.setShowVisibleEdges(true);\n // overrides.setApplyLighting(true);\n const branch = new GraphicBranch(false);\n\n // branch.viewFlagOverrides.copyFrom(overrides);\n\n // context.viewFlags.visibleEdges = true;\n if (!this.graphics) {\n this.graphics = this.createGraphics(context);\n }\n\n if (this.graphics) {\n branch.add(this.graphics);\n }\n\n const graphic = context.createBranch(branch, Transform.identity);\n context.addDecoration(GraphicType.WorldOverlay, graphic);\n\n this.markers.forEach((marker) => {\n marker.addDecoration(context);\n });\n }\n\n // #region Helper Functions\n\n /** Calculate all BBox dimensions and properties and save. */\n private inferSpatialData(\n elem: SpatialElementQueryResult\n ): InferredSpatialData {\n // build placement from result\n const origin = new Point3d(elem.origin.x, elem.origin.y, elem.origin.z);\n const bBoxLow = new Point3d(elem.bBoxLow.x, elem.bBoxLow.y, elem.bBoxLow.z);\n const bBoxHigh = new Point3d(\n elem.bBoxHigh.x,\n elem.bBoxHigh.y,\n elem.bBoxHigh.z\n );\n const range = Range3d.create(bBoxLow, bBoxHigh);\n const ypra = new YawPitchRollAngles(\n Angle.createDegrees(elem.yaw),\n Angle.createDegrees(elem.pitch),\n Angle.createDegrees(elem.roll)\n );\n const placement = new Placement3d(origin, ypra, range);\n\n // determine dimension size ordering\n const pointMappings = new Map<BboxDimension, [number, number]>();\n pointMappings.set(BboxDimension.BoundingBoxDiagonalLength, [0, 7]);\n const corners = placement.getWorldCorners();\n const d01 = corners.distance(0, 1);\n const d02 = corners.distance(0, 2);\n const d04 = corners.distance(0, 4);\n if (d01 >= d02 && d02 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d01 >= d04 && d04 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 6]\n );\n } else if (d04 >= d02 && d02 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 2]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d04 >= d01 && d01 >= d02) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 5]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 3]\n );\n } else if (d02 >= d01 && d01 >= d04) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 1]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 4]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else if (d02 >= d04 && d04 >= d01) {\n pointMappings.set(BboxDimension.BoundingBoxLongestEdgeLength, [0, 2]);\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateEdgeLength,\n [0, 4]\n );\n pointMappings.set(BboxDimension.BoundingBoxShortestEdgeLength, [0, 1]);\n pointMappings.set(\n BboxDimension.BoundingBoxLongestFaceDiagonalLength,\n [0, 6]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxIntermediateFaceDiagonalLength,\n [0, 3]\n );\n pointMappings.set(\n BboxDimension.BoundingBoxShortestFaceDiagonalLength,\n [0, 5]\n );\n } else {\n // Unreachable case\n }\n\n return { placement, pointMappings };\n }\n\n /** Validate if instance has all necessary properties. */\n private validateQueryResult(result: SpatialElementQueryResult): boolean {\n if (\n result?.bBoxHigh?.x !== undefined &&\n result?.bBoxHigh.y !== undefined &&\n result?.bBoxHigh.z !== undefined &&\n result?.bBoxLow?.x !== undefined &&\n result?.bBoxLow.y !== undefined &&\n result?.bBoxLow.z !== undefined &&\n result?.origin?.x !== undefined &&\n result?.origin.y !== undefined &&\n result?.origin.z !== undefined &&\n result?.yaw !== undefined &&\n result?.pitch !== undefined &&\n result?.roll !== undefined\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Takes a Bounding Box and builds a rectangular polyface.\n * @param bbox The desired Bounding Box.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The bounding box geometry.\n */\n private buildPolyface(bbox: Range3d, tf: Transform): IndexedPolyface {\n const options = StrokeOptions.createForCurves();\n options.needParams = false;\n options.needNormals = true;\n const builder = PolyfaceBuilder.create(options);\n const box = Box.createRange(bbox, true)?.cloneTransformed(tf);\n if (box) {\n builder.addBox(box);\n }\n return builder.claimPolyface(false);\n }\n\n /**\n * Build a Lone geometry based on specified dimension.\n * @param bbox The desired Bounding Box.\n * @param dim The desired dimension to draw.\n * @param tf Transformation on the Bounding Box if applicable.\n * @returns The line geometry.\n */\n private buildLine(\n bbox: Range3d,\n dim: BboxDimension,\n tf: Transform\n ): [CurvePrimitive, Point3d[]] {\n // fallback scenario\n const fallback: [CurvePrimitive, Point3d[]] = [\n LineSegment3d.create(bbox.low, bbox.high).cloneTransformed(tf),\n [bbox.low, bbox.high],\n ];\n if (!this.instance) {\n // TODO: probably should have some warning here...\n return fallback;\n }\n\n // otherwise return appropriate dimensions\n const corners = this.instance.placement.getWorldCorners().points;\n const targets = this.instance.pointMappings.get(dim);\n if (targets) {\n return [\n LineSegment3d.create(corners[targets[0]], corners[targets[1]]),\n [corners[targets[0]], corners[targets[1]]],\n ];\n } else {\n // TODO: probably should have some warning here...\n return fallback;\n }\n }\n\n /**\n * Configure and add points to the dectorator.\n * @param point Definition of the points.\n */\n public addPoints(points: Point3d[]) {\n for (const point of points) {\n const styledPoint: CustomPoint = {\n point,\n color: this.pointColor,\n fill: this.fill,\n lineThickness: this.pointThickness,\n };\n this.points.push(styledPoint);\n }\n }\n\n /**\n * Configure and add a line to the decorator.\n * Length of the line is displayed as a label in the center.\n * @param line Definition of the line.\n */\n private addLine(line: LineSegment3d | CurvePrimitive) {\n const styledGeometry: CustomGeometryQuery = {\n geometry: line,\n color: this.lineColor,\n fill: true,\n fillColor: this.fillColor,\n lineThickness: this.lineThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n\n const marker = new Marker(line.fractionToPoint(0.5), { x: 25, y: 25 });\n const label: HTMLDivElement = document.createElement(\"div\");\n label.textContent = `${line.quickLength().toFixed(3)}m`;\n label.style.backgroundColor = \"rgba(17,17,17,0.75)\";\n label.style.borderRadius = \"4px\";\n label.style.color = \"white\";\n label.style.padding = \"4px 8px\";\n marker.htmlElement = label;\n marker.visible = true;\n this.markers.push(marker);\n }\n\n /**\n * Configure and add a mesh to the decorator.\n * @param geometry Definition of the mesh.\n */\n private addGeometry(geometry: GeometryQuery) {\n const styledGeometry: CustomGeometryQuery = {\n geometry,\n color: this.shapeColor,\n fill: this.fill,\n fillColor: this.fillColor,\n lineThickness: this.shapeThickness,\n edges: this.edges,\n linePixels: this.linePixels,\n };\n this.shapes.push(styledGeometry);\n }\n\n /**\n * Iterate through the geometry and point lists, extracting each geometry and point, along with their styles\n * Adding them to the graphic builder which then creates new graphics\n * @param context\n * @returns\n */\n private createGraphics(context: DecorateContext): RenderGraphic | undefined {\n // Specifying an Id for the graphics tells the display system that all of the geometry belongs to the same entity, so that it knows to make sure the edges draw on top of the surfaces.\n const builder = context.createGraphicBuilder(\n GraphicType.Scene,\n undefined,\n context.viewport.iModel.transientIds.next\n );\n // Read-only now\n // builder.wantNormals = true;\n this.points.forEach((styledPoint) => {\n builder.setSymbology(\n styledPoint.color,\n styledPoint.fill ? styledPoint.color : ColorDef.white,\n styledPoint.lineThickness\n );\n const point = styledPoint.point;\n builder.addPointString([point]);\n });\n this.shapes.forEach((styledGeometry) => {\n const geometry = styledGeometry.geometry;\n builder.setSymbology(\n styledGeometry.color,\n styledGeometry.fill ? styledGeometry.fillColor : styledGeometry.color,\n styledGeometry.lineThickness,\n styledGeometry.linePixels\n );\n this.createGraphicsForGeometry(geometry, styledGeometry.edges, builder);\n });\n const graphic = builder.finish();\n return graphic;\n }\n private createGraphicsForGeometry(\n geometry: GeometryQuery,\n wantEdges: boolean,\n builder: GraphicBuilder\n ) {\n if (geometry instanceof LineString3d) {\n builder.addLineString(geometry.points);\n } else if (geometry instanceof Loop) {\n builder.addLoop(geometry);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each loop edge/arc\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const curves = geometry.children;\n curves.forEach((value) => {\n if (value instanceof LineString3d) {\n let edges = value.points;\n const endPoint = value.pointAt(0);\n if (endPoint) {\n edges = edges.concat([endPoint]);\n }\n builder.addLineString(edges);\n } else if (value instanceof Arc3d) {\n builder.addArc(value, false, false);\n }\n });\n }\n } else if (geometry instanceof Path) {\n builder.addPath(geometry);\n } else if (geometry instanceof IndexedPolyface) {\n builder.addPolyface(geometry, false);\n if (wantEdges) {\n // Since decorators don't natively support visual edges,\n // We draw them manually as lines along each facet edge\n builder.setSymbology(ColorDef.black, ColorDef.black, 2);\n const visitor = IndexedPolyfaceVisitor.create(geometry, 1);\n let flag = true;\n while (flag) {\n const numIndices = visitor.pointCount;\n for (let i = 0; i < numIndices - 1; i++) {\n const point1 = visitor.getPoint(i);\n const point2 = visitor.getPoint(i + 1);\n if (point1 && point2) {\n builder.addLineString([point1, point2]);\n }\n }\n flag = visitor.moveToNextFacet();\n }\n }\n } else if (geometry instanceof LineSegment3d) {\n const pointA = geometry.point0Ref;\n const pointB = geometry.point1Ref;\n const lineString = [pointA, pointB];\n builder.addLineString(lineString);\n } else if (geometry instanceof Arc3d) {\n builder.addArc(geometry, false, false);\n } else if (geometry instanceof CurveChainWithDistanceIndex) {\n this.createGraphicsForGeometry(geometry.path, wantEdges, builder);\n }\n }\n\n // #endregion\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** UI Provider for iTwin Viewer Applications */
|
|
2
|
+
export * from "./widget/GroupingMappingWidget";
|
|
3
|
+
/** Internal components for custom UIs */
|
|
4
|
+
export { Mappings } from "./widget/components/Mapping";
|
|
5
|
+
export { Groupings } from "./widget/components/Grouping";
|
|
6
|
+
export { PropertyMenu } from "./widget/components/PropertyMenu";
|
|
7
|
+
//# sourceMappingURL=grouping-mapping-widget.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.PropertyMenu = exports.Groupings = exports.Mappings = void 0;
|
|
14
|
+
/*---------------------------------------------------------------------------------------------
|
|
15
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
16
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
17
|
+
*--------------------------------------------------------------------------------------------*/
|
|
18
|
+
/** UI Provider for iTwin Viewer Applications */
|
|
19
|
+
__exportStar(require("./widget/GroupingMappingWidget"), exports);
|
|
20
|
+
/** Internal components for custom UIs */
|
|
21
|
+
var Mapping_1 = require("./widget/components/Mapping");
|
|
22
|
+
Object.defineProperty(exports, "Mappings", { enumerable: true, get: function () { return Mapping_1.Mappings; } });
|
|
23
|
+
var Grouping_1 = require("./widget/components/Grouping");
|
|
24
|
+
Object.defineProperty(exports, "Groupings", { enumerable: true, get: function () { return Grouping_1.Groupings; } });
|
|
25
|
+
var PropertyMenu_1 = require("./widget/components/PropertyMenu");
|
|
26
|
+
Object.defineProperty(exports, "PropertyMenu", { enumerable: true, get: function () { return PropertyMenu_1.PropertyMenu; } });
|
|
27
|
+
//# sourceMappingURL=grouping-mapping-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-mapping-widget.js","sourceRoot":"","sources":["../../src/grouping-mapping-widget.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,gDAAgD;AAChD,iEAA+C;AAE/C,yCAAyC;AACzC,uDAAuD;AAA9C,mGAAA,QAAQ,OAAA;AACjB,yDAAyD;AAAhD,qGAAA,SAAS,OAAA;AAClB,iEAAgE;AAAvD,4GAAA,YAAY,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** UI Provider for iTwin Viewer Applications */\nexport * from \"./widget/GroupingMappingWidget\";\n\n/** Internal components for custom UIs */\nexport { Mappings } from \"./widget/components/Mapping\";\nexport { Groupings } from \"./widget/components/Grouping\";\nexport { PropertyMenu } from \"./widget/components/PropertyMenu\";\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AbstractWidgetProps, UiItemsProvider } from "@itwin/appui-abstract";
|
|
2
|
+
import { StagePanelLocation, StagePanelSection } from "@itwin/appui-abstract";
|
|
3
|
+
export declare class GroupingMappingProvider implements UiItemsProvider {
|
|
4
|
+
readonly id = "GroupingMappingProvider";
|
|
5
|
+
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection): ReadonlyArray<AbstractWidgetProps>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=GroupingMappingWidget.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.GroupingMappingProvider = void 0;
|
|
26
|
+
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
27
|
+
const React = __importStar(require("react"));
|
|
28
|
+
const GroupingMapping_1 = __importDefault(require("./components/GroupingMapping"));
|
|
29
|
+
class GroupingMappingProvider {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.id = "GroupingMappingProvider";
|
|
32
|
+
}
|
|
33
|
+
provideWidgets(_stageId, stageUsage, location, section) {
|
|
34
|
+
const widgets = [];
|
|
35
|
+
if (location === appui_abstract_1.StagePanelLocation.Left &&
|
|
36
|
+
section === appui_abstract_1.StagePanelSection.Start &&
|
|
37
|
+
stageUsage === appui_abstract_1.StageUsage.General) {
|
|
38
|
+
const GroupingMappingWidget = {
|
|
39
|
+
id: "GroupingMappingWidget",
|
|
40
|
+
label: "Grouping & Mapping",
|
|
41
|
+
getWidgetContent() {
|
|
42
|
+
return React.createElement(GroupingMapping_1.default, null);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
widgets.push(GroupingMappingWidget);
|
|
46
|
+
}
|
|
47
|
+
return widgets;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.GroupingMappingProvider = GroupingMappingProvider;
|
|
51
|
+
//# sourceMappingURL=GroupingMappingWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupingMappingWidget.js","sourceRoot":"","sources":["../../../src/widget/GroupingMappingWidget.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOA,0DAI+B;AAE/B,6CAA+B;AAC/B,mFAA2D;AAE3D,MAAa,uBAAuB;IAApC;QACkB,OAAE,GAAG,yBAAyB,CAAC;IA2BjD,CAAC;IAzBQ,cAAc,CACnB,QAAgB,EAChB,UAAkB,EAClB,QAA4B,EAC5B,OAA2B;QAE3B,MAAM,OAAO,GAA0B,EAAE,CAAC;QAC1C,IACE,QAAQ,KAAK,mCAAkB,CAAC,IAAI;YACpC,OAAO,KAAK,kCAAiB,CAAC,KAAK;YACnC,UAAU,KAAK,2BAAU,CAAC,OAAO,EACjC;YACA,MAAM,qBAAqB,GAAwB;gBACjD,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,oBAAoB;gBAC3B,gBAAgB;oBACd,OAAO,oBAAC,yBAAe,OAAG,CAAC;gBAC7B,CAAC;aACF,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACrC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5BD,0DA4BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type {\n AbstractWidgetProps,\n UiItemsProvider} from \"@itwin/appui-abstract\";\nimport {\n StagePanelLocation,\n StagePanelSection,\n StageUsage,\n} from \"@itwin/appui-abstract\";\n\nimport * as React from \"react\";\nimport GroupingMapping from \"./components/GroupingMapping\";\n\nexport class GroupingMappingProvider implements UiItemsProvider {\n public readonly id = \"GroupingMappingProvider\";\n\n public provideWidgets(\n _stageId: string,\n stageUsage: string,\n location: StagePanelLocation,\n section?: StagePanelSection\n ): ReadonlyArray<AbstractWidgetProps> {\n const widgets: AbstractWidgetProps[] = [];\n if (\n location === StagePanelLocation.Left &&\n section === StagePanelSection.Start &&\n stageUsage === StageUsage.General\n ) {\n const GroupingMappingWidget: AbstractWidgetProps = {\n id: \"GroupingMappingWidget\",\n label: \"Grouping & Mapping\",\n getWidgetContent() {\n return <GroupingMapping />;\n },\n };\n\n widgets.push(GroupingMappingWidget);\n }\n\n return widgets;\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import "./ActionPanel.scss";
|
|
3
|
+
export interface ActionPanelProps {
|
|
4
|
+
onSave: () => void;
|
|
5
|
+
onCancel: () => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
isLoading?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare const ActionPanel: ({ onSave, onCancel, disabled, isLoading, }: ActionPanelProps) => JSX.Element;
|
|
10
|
+
export default ActionPanel;
|
|
11
|
+
//# sourceMappingURL=ActionPanel.d.ts.map
|