@bldrs-ai/conway 0.23.977 → 1.322.1027
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/README.md +77 -40
- package/compiled/Dist/ConwayGeomWasm.d.ts +2 -0
- package/compiled/Dist/ConwayGeomWasmNode.d.ts +2 -0
- package/compiled/Dist/ConwayGeomWasmNodeMT.d.ts +2 -0
- package/compiled/Dist/ConwayGeomWasmWeb.d.ts +2 -0
- package/compiled/Dist/ConwayGeomWasmWebMT.d.ts +2 -0
- package/compiled/examples/browser-bundled.cjs +1 -1
- package/compiled/examples/cli-bundled.cjs +1 -1
- package/compiled/examples/validator-bundled.cjs +1 -1
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts +33 -3
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.js +156 -111
- package/compiled/src/AP214E3_2010/ap214_geometry_extraction.test.js +79 -0
- package/compiled/src/AP214E3_2010/ap214_scene_builder.d.ts +10 -5
- package/compiled/src/AP214E3_2010/ap214_scene_builder.d.ts.map +1 -1
- package/compiled/src/AP214E3_2010/ap214_scene_builder.js +10 -5
- package/compiled/src/AP214E3_2010/ap214_transform_helpers.test.d.ts +2 -0
- package/compiled/src/AP214E3_2010/ap214_transform_helpers.test.d.ts.map +1 -0
- package/compiled/src/AP214E3_2010/ap214_transform_helpers.test.js +112 -0
- package/compiled/src/format_detection/model_format_detector.d.ts +2 -1
- package/compiled/src/format_detection/model_format_detector.d.ts.map +1 -1
- package/compiled/src/format_detection/model_format_detector.js +12 -11
- package/compiled/src/format_detection/model_format_detector.test.js +11 -0
- package/compiled/src/loaders/conway_model_loader.d.ts.map +1 -1
- package/compiled/src/loaders/conway_model_loader.js +8 -1
- package/compiled/src/version/version.d.ts.map +1 -1
- package/compiled/src/version/version.js +1 -1
- package/compiled/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -80,39 +80,6 @@ And finally, using the watch functionality, you can also have the code automatic
|
|
|
80
80
|
yarn build-test-watch
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
# Production NPM Build
|
|
84
|
-
```
|
|
85
|
-
yarn test
|
|
86
|
-
yarn build # stamps build version string
|
|
87
|
-
grep '"version"' package.json # should see the new version string, 1 more than what the repo shows in GH
|
|
88
|
-
npm pack
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Push to Production: H3 & Share
|
|
92
|
-
The following process works the same for headless-three and Share.
|
|
93
|
-
|
|
94
|
-
Do H3 first, then Share
|
|
95
|
-
```
|
|
96
|
-
cp bldrs-ai-conway-<VERSION>.tgz $H3_DIR
|
|
97
|
-
cd $H3_DIR
|
|
98
|
-
git fetch upstream # or origin if not on fork
|
|
99
|
-
git checkout -b conway-<VERSION> upstream/main
|
|
100
|
-
rm bldrs-ai-conway-<OLD VERSION>.tgz
|
|
101
|
-
## OLD WAY: yarn remove @bldrs-ai/conway
|
|
102
|
-
## OLD WAY: yarn add ./bldrs-ai-conway-<VERSION>.tgz
|
|
103
|
-
## New way: edit package.json dep for conway to point to new filename.
|
|
104
|
-
yarn install
|
|
105
|
-
yarn build && yarn test
|
|
106
|
-
yarn serve
|
|
107
|
-
# Smoke test local candidate: load all sample models, load local model, exercise dialogs, etc.
|
|
108
|
-
git add . ; git ci -m 'Upgrad of conway from <OLD VERSION> to <VERSION>'
|
|
109
|
-
git push origin HEAD
|
|
110
|
-
# 1) Send PR for review
|
|
111
|
-
# 2) On merge, Netlify will detect and build and deploy to prod; watch deploy logs on Netlify
|
|
112
|
-
# 3) Smoke test prod. Same as above
|
|
113
|
-
# 4) Post to #bot or #share "New Conway <VERSION> in prod" with linked changelist
|
|
114
|
-
```
|
|
115
|
-
|
|
116
83
|
# IFC Parser Console Test Application
|
|
117
84
|
|
|
118
85
|
Conway has a test application for parsing IFC step files to see the performance and included entity types at src/core/ifc/ifc_command_line_main.ts.
|
|
@@ -210,10 +177,80 @@ Conway also has a regression testing framework, which can be run on individual m
|
|
|
210
177
|
|
|
211
178
|
|
|
212
179
|
# Release Steps
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
180
|
+
|
|
181
|
+
**Releases are continuous.** Every green merge to `main` auto-tags and
|
|
182
|
+
publishes to npm at the default `latest` dist-tag. The version is
|
|
183
|
+
`<major>.<PR>.<commit>` where:
|
|
184
|
+
|
|
185
|
+
- `major` comes from `package.json` on `main` (only the first segment;
|
|
186
|
+
the other two are recomputed on every release)
|
|
187
|
+
- `PR` is the GitHub PR number that produced the merge commit
|
|
188
|
+
- `commit` is `git rev-list HEAD --count` at the merge commit (the
|
|
189
|
+
global commit position)
|
|
190
|
+
|
|
191
|
+
So a merge of PR #321 at the 985th commit on main publishes as
|
|
192
|
+
`1.321.985`. Each release is uniquely traceable to a PR and a commit.
|
|
193
|
+
|
|
194
|
+
The auto-publish job lives in `.github/workflows/build.yml` and runs as
|
|
195
|
+
`needs: [build, run-ifc-regression]` on `push: branches: [main]`. It
|
|
196
|
+
parses the PR number from the merge commit message, stamps the
|
|
197
|
+
computed version into `package.json` + `src/version/version.ts` in
|
|
198
|
+
CI's working tree (not committed back), rebuilds, publishes to npm,
|
|
199
|
+
and then tags the merge commit.
|
|
200
|
+
|
|
201
|
+
**Auth:** npm Trusted Publishing via GitHub OIDC. A Trusted Publisher
|
|
202
|
+
configured at npmjs.com on `@bldrs-ai/conway` is bound to this repo +
|
|
203
|
+
`build.yml`. No long-lived `NPM_TOKEN` secret is used; the workflow
|
|
204
|
+
gets a short-lived publish token per run via OIDC.
|
|
205
|
+
|
|
206
|
+
### Normal flow: ship a change
|
|
207
|
+
|
|
208
|
+
1. Open a PR with your change. CI runs `build` and `run-ifc-regression`.
|
|
209
|
+
2. Merge once both checks are green.
|
|
210
|
+
3. On main push, CI re-runs `build` + `run-ifc-regression`, then
|
|
211
|
+
`auto-publish` tags and ships. Watch the workflow run in the Actions
|
|
212
|
+
tab; the new version is on npm within ~5-10 min of the merge.
|
|
213
|
+
|
|
214
|
+
### Bumping major
|
|
215
|
+
|
|
216
|
+
Edit the `version` field in `package.json` on a PR — only the first
|
|
217
|
+
segment matters (the `PR` and `commit` parts are recomputed). For
|
|
218
|
+
example, change `"version": "1.0.0"` to `"version": "2.0.0"` to start
|
|
219
|
+
the `2.x.x` line. The first auto-publish after that lands ships
|
|
220
|
+
`2.<PR>.<commit>`.
|
|
221
|
+
|
|
222
|
+
There is no minor bump — `PR` lives in that slot — so increasing
|
|
223
|
+
sequential versions across the `1.x` line look like `1.300.x`,
|
|
224
|
+
`1.301.x`, etc., as PRs land.
|
|
225
|
+
|
|
226
|
+
### Rolling into headless-three and Share
|
|
227
|
+
The same flow applies to both — do **H3 first, then Share**:
|
|
228
|
+
```
|
|
229
|
+
cd $H3_DIR
|
|
230
|
+
git fetch upstream # or origin if not on a fork
|
|
231
|
+
git checkout -b conway-<VERSION> upstream/main
|
|
232
|
+
# Edit package.json dep for @bldrs-ai/conway to "<VERSION>"
|
|
233
|
+
yarn install
|
|
234
|
+
yarn build && yarn test
|
|
235
|
+
yarn serve
|
|
236
|
+
# Smoke test the local candidate: load all sample models, load a local model,
|
|
237
|
+
# exercise dialogs, etc.
|
|
238
|
+
git add . && git commit -m "Upgrade conway from <OLD> to <VERSION>"
|
|
239
|
+
git push origin HEAD
|
|
240
|
+
```
|
|
241
|
+
Then:
|
|
242
|
+
1. Send PR for review.
|
|
243
|
+
2. On merge, Netlify auto-builds and deploys to prod; watch the deploy logs.
|
|
244
|
+
3. Smoke test prod (same checks as local).
|
|
245
|
+
4. Post in `#bot` or `#share`: "New Conway <VERSION> in prod" with a link
|
|
246
|
+
to the changelog.
|
|
247
|
+
|
|
248
|
+
### Blessing a `stable` version
|
|
249
|
+
After Share prod is verified on a given Conway version:
|
|
250
|
+
```
|
|
251
|
+
# Create the GitHub release from the auto-pushed tag
|
|
252
|
+
gh release create <VERSION> --generate-notes
|
|
253
|
+
|
|
254
|
+
# Promote the npm package to the stable dist-tag
|
|
255
|
+
npm dist-tag add @bldrs-ai/conway@<VERSION> stable
|
|
256
|
+
```
|
|
@@ -69608,7 +69608,7 @@ var IfcStepParser = class extends StepParser {
|
|
|
69608
69608
|
IfcStepParser.Instance = new IfcStepParser();
|
|
69609
69609
|
|
|
69610
69610
|
// compiled/src/version/version.js
|
|
69611
|
-
var versionString = "Conway Web-Ifc Shim
|
|
69611
|
+
var versionString = "Conway Web-Ifc Shim v1.322.1027";
|
|
69612
69612
|
|
|
69613
69613
|
// compiled/src/statistics/statistics.js
|
|
69614
69614
|
var Statistics = class {
|
|
@@ -85869,7 +85869,7 @@ var IfcSceneBuilder = class {
|
|
|
85869
85869
|
};
|
|
85870
85870
|
|
|
85871
85871
|
// compiled/src/version/version.js
|
|
85872
|
-
var versionString = "Conway Web-Ifc Shim
|
|
85872
|
+
var versionString = "Conway Web-Ifc Shim v1.322.1027";
|
|
85873
85873
|
|
|
85874
85874
|
// compiled/src/statistics/statistics.js
|
|
85875
85875
|
var Statistics = class {
|
|
@@ -69606,7 +69606,7 @@ var IfcStepParser = class extends StepParser {
|
|
|
69606
69606
|
IfcStepParser.Instance = new IfcStepParser();
|
|
69607
69607
|
|
|
69608
69608
|
// compiled/src/version/version.js
|
|
69609
|
-
var versionString = "Conway Web-Ifc Shim
|
|
69609
|
+
var versionString = "Conway Web-Ifc Shim v1.322.1027";
|
|
69610
69610
|
|
|
69611
69611
|
// compiled/src/statistics/statistics.js
|
|
69612
69612
|
var Statistics = class {
|
|
@@ -4,7 +4,7 @@ import { CanonicalProfile } from "../core/canonical_profile.js";
|
|
|
4
4
|
import { CsgMemoization } from "../core/csg_operations.js";
|
|
5
5
|
import { NativeULongVector, NativeUintVector, NativeVectorBound3D, NativeVectorGeometryCollection, NativeVectorGlmVec2, NativeVectorGlmVec3, NativeVectorIndexedPolygonalFace, NativeVectorProfile, NativeVectorSegment, WasmModule } from "../core/native_types.js";
|
|
6
6
|
import { ExtractResult } from "../core/shared_constants.js";
|
|
7
|
-
import { advanced_face, axis1_placement, axis2_placement_2d, axis2_placement_3d, b_spline_curve, b_spline_curve_with_knots, b_spline_surface, boolean_result, cartesian_point, cartesian_transformation_operator_2d, cartesian_transformation_operator_3d, circle, colour_rgb, composite_curve, conical_surface, connected_face_set, curve, cylindrical_surface, direction, ellipse, extruded_area_solid, face, face_based_surface_model, faceted_brep, half_space_solid, length_unit, line, manifold_solid_brep, mapped_item, pcurve, placement, plane, polyline, ratio_measure, rational_b_spline_curve, representation_item, shell_based_surface_model, si_prefix, spherical_surface, styled_item, surface, surface_of_linear_extrusion, surface_of_revolution, surface_style_usage, toroidal_surface, trimmed_curve } from "./AP214E3_2010_gen/index.js";
|
|
7
|
+
import { advanced_face, axis1_placement, axis2_placement_2d, axis2_placement_3d, b_spline_curve, b_spline_curve_with_knots, b_spline_surface, boolean_result, cartesian_point, cartesian_transformation_operator_2d, cartesian_transformation_operator_3d, circle, colour_rgb, composite_curve, conical_surface, connected_face_set, curve, cylindrical_surface, direction, ellipse, extruded_area_solid, face, face_based_surface_model, faceted_brep, half_space_solid, length_unit, line, manifold_solid_brep, mapped_item, pcurve, placement, plane, polyline, ratio_measure, rational_b_spline_curve, representation_item, shape_representation, shape_representation_relationship, shell_based_surface_model, si_prefix, spherical_surface, styled_item, surface, surface_of_linear_extrusion, surface_of_revolution, surface_style_usage, toroidal_surface, trimmed_curve } from "./AP214E3_2010_gen/index.js";
|
|
8
8
|
import { AP214MaterialCache } from "./ap214_material_cache.js";
|
|
9
9
|
import AP214ModelCurves from "./ap214_model_curves.js";
|
|
10
10
|
import { AP214ProductShapeMap } from "./ap214_product_shape_map.js";
|
|
@@ -657,12 +657,29 @@ export declare class AP214GeometryExtraction {
|
|
|
657
657
|
*/
|
|
658
658
|
extractAxis2Placement3D(from: axis2_placement_3d, parentLocalId: number, extractOnly: true, mappedItem?: boolean): ParamsAxis2Placement3D;
|
|
659
659
|
/**
|
|
660
|
+
* Extract a placement, adding it to the scene.
|
|
660
661
|
*
|
|
661
|
-
* @param from
|
|
662
|
-
* @param mappedItem
|
|
662
|
+
* @param from The placement to extract.
|
|
663
|
+
* @param mappedItem Whether the placement is a mapped item.
|
|
664
|
+
* @return The extracted placement or undefined if the placement is not a axis2_placement_3d.
|
|
663
665
|
*/
|
|
664
666
|
extractPlacement(from: placement, mappedItem?: boolean): AP214SceneTransform | undefined;
|
|
665
667
|
extractRawPlacement(from: placement): NativeTransform4x4 | undefined;
|
|
668
|
+
/**
|
|
669
|
+
* Multiply a native 4x4 transform by a uniform scale factor in affine
|
|
670
|
+
* semantics: scale both the 3x3 basis and the translation column,
|
|
671
|
+
* leaving the bottom row at [0,0,0,1]. Equivalent to `factor * mat`
|
|
672
|
+
* for any affine input.
|
|
673
|
+
*
|
|
674
|
+
* Used in preference to the native `uniformScale` binding for unit
|
|
675
|
+
* conversion, where the placement's translation also needs to be
|
|
676
|
+
* scaled. See https://github.com/bldrs-ai/conway/issues/308.
|
|
677
|
+
*
|
|
678
|
+
* @param mat Source column-major Glmdmat4 transform; not mutated.
|
|
679
|
+
* @param factor Scalar applied to every affine entry.
|
|
680
|
+
* @return A freshly allocated 4x4 with the scale applied.
|
|
681
|
+
*/
|
|
682
|
+
private uniformScaleAffine;
|
|
666
683
|
/**
|
|
667
684
|
*
|
|
668
685
|
*/
|
|
@@ -687,5 +704,18 @@ export declare class AP214GeometryExtraction {
|
|
|
687
704
|
AP214SceneBuilder,
|
|
688
705
|
AP214ProductShapeMap
|
|
689
706
|
];
|
|
707
|
+
/**
|
|
708
|
+
* Process the transforms for a shape relationship.
|
|
709
|
+
*
|
|
710
|
+
* @param shapeRelationship The shape relationship to process.
|
|
711
|
+
* @param sourceShape The source shape.
|
|
712
|
+
* @param targetShape The target shape.
|
|
713
|
+
* @param owningLocalID The owning local ID.
|
|
714
|
+
* @return The transform and a boolean indicating if the processing should continue inside the loop.
|
|
715
|
+
*/
|
|
716
|
+
doTransforms(shapeRelationship: shape_representation_relationship, sourceShape: shape_representation, targetShape: shape_representation, owningLocalID: number): [
|
|
717
|
+
NativeTransform4x4 | undefined,
|
|
718
|
+
boolean
|
|
719
|
+
];
|
|
690
720
|
}
|
|
691
721
|
//# sourceMappingURL=ap214_geometry_extraction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ap214_geometry_extraction.d.ts","sourceRoot":"","sources":["../../../src/AP214E3_2010/ap214_geometry_extraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EAEtB,OAAO,EACP,WAAW,EAOX,wBAAwB,EAMxB,aAAa,EACb,SAAS,EACT,sBAAsB,EAEtB,cAAc,EACd,iBAAiB,EAOjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAItB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAqB,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAEnB,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,gCAAgC,EAChC,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACX,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,OAAO,EAEL,aAAa,EAEb,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,yBAAyB,EACzB,gBAAgB,EAEhB,cAAc,EACd,eAAe,EACf,oCAAoC,EACpC,oCAAoC,EACpC,MAAM,EACN,UAAU,EACV,eAAe,EAEf,eAAe,EACf,kBAAkB,EAGlB,KAAK,EACL,mBAAmB,EACnB,SAAS,EAIT,OAAO,EACP,mBAAmB,EACnB,IAAI,EACJ,wBAAwB,EACxB,YAAY,EAMZ,gBAAgB,EAGhB,WAAW,EACX,IAAI,EACJ,mBAAmB,EACnB,WAAW,EAKX,MAAM,EACN,SAAS,EAAE,KAAK,EAEhB,QAAQ,EAGR,aAAa,EACb,uBAAuB,EAEvB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ap214_geometry_extraction.d.ts","sourceRoot":"","sources":["../../../src/AP214E3_2010/ap214_geometry_extraction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1581,11 +1581,55 @@ export class AP214GeometryExtraction {
|
|
|
1581
1581
|
extractMappedItem(from, owningElementLocalID, parents = void 0) {
|
|
1582
1582
|
const representationMap = from.mapping_source;
|
|
1583
1583
|
const mappingTarget = from.mapping_target;
|
|
1584
|
-
|
|
1584
|
+
const mappingOrigin = representationMap.mapping_origin;
|
|
1585
|
+
let pushedTransforms = 0;
|
|
1586
|
+
const pushTransform = (nativeTransform) => {
|
|
1587
|
+
this.scene.addTransform(from.localID, nativeTransform.getValues(), nativeTransform, true);
|
|
1588
|
+
++pushedTransforms;
|
|
1589
|
+
};
|
|
1585
1590
|
if (mappingTarget instanceof cartesian_transformation_operator_3d) {
|
|
1586
1591
|
const nativeCartesianTransform = this.extractCartesianTransformOperator3D(mappingTarget);
|
|
1587
|
-
|
|
1588
|
-
|
|
1592
|
+
const originTransform = mappingOrigin instanceof placement ?
|
|
1593
|
+
this.extractRawPlacement(mappingOrigin) : void 0;
|
|
1594
|
+
let combinedTransform;
|
|
1595
|
+
if (originTransform !== void 0) {
|
|
1596
|
+
// Use the same semantics as doTransforms: from = origin^-1, to = target
|
|
1597
|
+
const from = originTransform.invert();
|
|
1598
|
+
const to = nativeCartesianTransform;
|
|
1599
|
+
const params = {
|
|
1600
|
+
useRelPlacement: true,
|
|
1601
|
+
axis2Placement: from,
|
|
1602
|
+
relPlacement: to,
|
|
1603
|
+
};
|
|
1604
|
+
combinedTransform = this.conwayModel.getLocalPlacement(params);
|
|
1605
|
+
}
|
|
1606
|
+
else {
|
|
1607
|
+
combinedTransform = nativeCartesianTransform;
|
|
1608
|
+
}
|
|
1609
|
+
pushTransform(combinedTransform);
|
|
1610
|
+
}
|
|
1611
|
+
else if (mappingTarget instanceof placement) {
|
|
1612
|
+
const targetTransform = this.extractRawPlacement(mappingTarget);
|
|
1613
|
+
const originTransform = mappingOrigin instanceof placement ?
|
|
1614
|
+
this.extractRawPlacement(mappingOrigin) : void 0;
|
|
1615
|
+
if (targetTransform !== void 0) {
|
|
1616
|
+
let combinedTransform;
|
|
1617
|
+
if (originTransform !== void 0) {
|
|
1618
|
+
// Again, same semantics as doTransforms
|
|
1619
|
+
const from = originTransform.invert();
|
|
1620
|
+
const to = targetTransform;
|
|
1621
|
+
const params = {
|
|
1622
|
+
useRelPlacement: true,
|
|
1623
|
+
axis2Placement: from,
|
|
1624
|
+
relPlacement: to,
|
|
1625
|
+
};
|
|
1626
|
+
combinedTransform = this.conwayModel.getLocalPlacement(params);
|
|
1627
|
+
}
|
|
1628
|
+
else {
|
|
1629
|
+
combinedTransform = targetTransform;
|
|
1630
|
+
}
|
|
1631
|
+
pushTransform(combinedTransform);
|
|
1632
|
+
}
|
|
1589
1633
|
}
|
|
1590
1634
|
for (const representationItem of representationMap.mapped_representation.items) {
|
|
1591
1635
|
if (representationItem instanceof mapped_item) {
|
|
@@ -1623,7 +1667,7 @@ export class AP214GeometryExtraction {
|
|
|
1623
1667
|
this.scene.addGeometry(representationItem.localID, owningElementLocalID, materialOverrideID);
|
|
1624
1668
|
}
|
|
1625
1669
|
}
|
|
1626
|
-
|
|
1670
|
+
for (; pushedTransforms > 0; --pushedTransforms) {
|
|
1627
1671
|
this.scene.popTransform();
|
|
1628
1672
|
}
|
|
1629
1673
|
}
|
|
@@ -2534,23 +2578,22 @@ export class AP214GeometryExtraction {
|
|
|
2534
2578
|
return this.scene.addTransform(parentLocalId, axis2PlacementTransform.getValues(), axis2PlacementTransform, true);
|
|
2535
2579
|
}
|
|
2536
2580
|
/**
|
|
2581
|
+
* Extract a placement, adding it to the scene.
|
|
2537
2582
|
*
|
|
2538
|
-
* @param from
|
|
2539
|
-
* @param mappedItem
|
|
2583
|
+
* @param from The placement to extract.
|
|
2584
|
+
* @param mappedItem Whether the placement is a mapped item.
|
|
2585
|
+
* @return The extracted placement or undefined if the placement is not a axis2_placement_3d.
|
|
2540
2586
|
*/
|
|
2541
2587
|
extractPlacement(from, mappedItem = false) {
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
// }
|
|
2549
|
-
// }
|
|
2588
|
+
if (from instanceof axis2_placement_3d) {
|
|
2589
|
+
const placementTransform = this.extractRawPlacement(from);
|
|
2590
|
+
if (placementTransform) {
|
|
2591
|
+
this.scene.addTransform(from.localID, placementTransform.getValues(), placementTransform, true);
|
|
2592
|
+
}
|
|
2593
|
+
}
|
|
2550
2594
|
if (from instanceof axis2_placement_3d) {
|
|
2551
2595
|
return this.extractAxis2Placement3D(from, from.localID, false, true);
|
|
2552
2596
|
}
|
|
2553
|
-
return;
|
|
2554
2597
|
}
|
|
2555
2598
|
extractRawPlacement(from) {
|
|
2556
2599
|
if (from instanceof axis2_placement_3d) {
|
|
@@ -2559,6 +2602,42 @@ export class AP214GeometryExtraction {
|
|
|
2559
2602
|
}
|
|
2560
2603
|
return;
|
|
2561
2604
|
}
|
|
2605
|
+
/**
|
|
2606
|
+
* Multiply a native 4x4 transform by a uniform scale factor in affine
|
|
2607
|
+
* semantics: scale both the 3x3 basis and the translation column,
|
|
2608
|
+
* leaving the bottom row at [0,0,0,1]. Equivalent to `factor * mat`
|
|
2609
|
+
* for any affine input.
|
|
2610
|
+
*
|
|
2611
|
+
* Used in preference to the native `uniformScale` binding for unit
|
|
2612
|
+
* conversion, where the placement's translation also needs to be
|
|
2613
|
+
* scaled. See https://github.com/bldrs-ai/conway/issues/308.
|
|
2614
|
+
*
|
|
2615
|
+
* @param mat Source column-major Glmdmat4 transform; not mutated.
|
|
2616
|
+
* @param factor Scalar applied to every affine entry.
|
|
2617
|
+
* @return A freshly allocated 4x4 with the scale applied.
|
|
2618
|
+
*/
|
|
2619
|
+
uniformScaleAffine(mat, factor) {
|
|
2620
|
+
const v = mat.getValues().slice();
|
|
2621
|
+
// Column-major Glmdmat4 layout:
|
|
2622
|
+
// basis at 0,1,2 / 4,5,6 / 8,9,10
|
|
2623
|
+
// translation at 12,13,14
|
|
2624
|
+
// bottom row at 3,7,11,15 (untouched: [0,0,0,1])
|
|
2625
|
+
v[0] *= factor;
|
|
2626
|
+
v[1] *= factor;
|
|
2627
|
+
v[2] *= factor;
|
|
2628
|
+
v[4] *= factor;
|
|
2629
|
+
v[5] *= factor;
|
|
2630
|
+
v[6] *= factor;
|
|
2631
|
+
v[8] *= factor;
|
|
2632
|
+
v[9] *= factor;
|
|
2633
|
+
v[10] *= factor;
|
|
2634
|
+
v[12] *= factor;
|
|
2635
|
+
v[13] *= factor;
|
|
2636
|
+
v[14] *= factor;
|
|
2637
|
+
const result = (new (this.wasmModule.Glmdmat4));
|
|
2638
|
+
result.setValues(v);
|
|
2639
|
+
return result;
|
|
2640
|
+
}
|
|
2562
2641
|
/**
|
|
2563
2642
|
*
|
|
2564
2643
|
*/
|
|
@@ -2768,53 +2847,9 @@ export class AP214GeometryExtraction {
|
|
|
2768
2847
|
shapeRepresentationRelationshipsSeen.add(shapeRelationship.localID);
|
|
2769
2848
|
const sourceShape = shapeRelationship.rep_1;
|
|
2770
2849
|
const targetShape = shapeRelationship.rep_2;
|
|
2771
|
-
const
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
if (transformInstance !== void 0) {
|
|
2775
|
-
const transformOperator = transformInstance.transformation_operator;
|
|
2776
|
-
if (!(transformOperator instanceof item_defined_transformation)) {
|
|
2777
|
-
continue;
|
|
2778
|
-
}
|
|
2779
|
-
const placement1 = transformOperator.transform_item_1;
|
|
2780
|
-
if (!(placement1 instanceof placement)) {
|
|
2781
|
-
continue;
|
|
2782
|
-
}
|
|
2783
|
-
const placement2 = transformOperator.transform_item_2;
|
|
2784
|
-
if (!(placement2 instanceof placement)) {
|
|
2785
|
-
continue;
|
|
2786
|
-
}
|
|
2787
|
-
const from = this.extractRawPlacement(placement1)?.invert() ?? this.identity3DNativeMatrix;
|
|
2788
|
-
const to = this.extractRawPlacement(placement2) ?? this.identity3DNativeMatrix;
|
|
2789
|
-
const localPlacementParameters = {
|
|
2790
|
-
useRelPlacement: true,
|
|
2791
|
-
axis2Placement: from,
|
|
2792
|
-
relPlacement: to,
|
|
2793
|
-
};
|
|
2794
|
-
transform = this.conwayModel.getLocalPlacement(localPlacementParameters);
|
|
2795
|
-
}
|
|
2796
|
-
const sourceShapeContext = sourceShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
2797
|
-
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
2798
|
-
const targetShapeContext = targetShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
2799
|
-
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
2800
|
-
if (sourceShapeContext !== void 0 && targetShapeContext !== void 0) {
|
|
2801
|
-
const scaleRatio = this.lengthUnitConversionRatio(sourceShapeContext, targetShapeContext);
|
|
2802
|
-
if (scaleRatio !== void 0 && scaleRatio !== 1) {
|
|
2803
|
-
scaleTransform = this.identity3DNativeMatrix.uniformScale(scaleRatio);
|
|
2804
|
-
}
|
|
2805
|
-
}
|
|
2806
|
-
if (scaleTransform !== void 0) {
|
|
2807
|
-
if (transform !== void 0) {
|
|
2808
|
-
const localPlacementParameters = {
|
|
2809
|
-
useRelPlacement: true,
|
|
2810
|
-
axis2Placement: transform,
|
|
2811
|
-
relPlacement: scaleTransform,
|
|
2812
|
-
};
|
|
2813
|
-
transform = this.conwayModel.getLocalPlacement(localPlacementParameters);
|
|
2814
|
-
}
|
|
2815
|
-
else {
|
|
2816
|
-
transform = scaleTransform;
|
|
2817
|
-
}
|
|
2850
|
+
const [transform, isContinue] = this.doTransforms(shapeRelationship, sourceShape, targetShape, owningLocalID);
|
|
2851
|
+
if (isContinue) {
|
|
2852
|
+
continue;
|
|
2818
2853
|
}
|
|
2819
2854
|
const sourceID = sourceShape.localID;
|
|
2820
2855
|
const targetID = targetShape.localID;
|
|
@@ -2853,53 +2888,9 @@ export class AP214GeometryExtraction {
|
|
|
2853
2888
|
*/
|
|
2854
2889
|
const sourceShape = shapeRelationship.rep_2;
|
|
2855
2890
|
const targetShape = shapeRelationship.rep_1;
|
|
2856
|
-
const
|
|
2857
|
-
|
|
2858
|
-
|
|
2859
|
-
if (transformInstance !== void 0) {
|
|
2860
|
-
const transformOperator = transformInstance.transformation_operator;
|
|
2861
|
-
if (!(transformOperator instanceof item_defined_transformation)) {
|
|
2862
|
-
continue;
|
|
2863
|
-
}
|
|
2864
|
-
const placement1 = transformOperator.transform_item_1;
|
|
2865
|
-
if (!(placement1 instanceof placement)) {
|
|
2866
|
-
continue;
|
|
2867
|
-
}
|
|
2868
|
-
const placement2 = transformOperator.transform_item_2;
|
|
2869
|
-
if (!(placement2 instanceof placement)) {
|
|
2870
|
-
continue;
|
|
2871
|
-
}
|
|
2872
|
-
const from = this.extractRawPlacement(placement1)?.invert() ?? this.identity3DNativeMatrix;
|
|
2873
|
-
const to = this.extractRawPlacement(placement2) ?? this.identity3DNativeMatrix;
|
|
2874
|
-
const localPlacementParameters = {
|
|
2875
|
-
useRelPlacement: true,
|
|
2876
|
-
axis2Placement: from,
|
|
2877
|
-
relPlacement: to,
|
|
2878
|
-
};
|
|
2879
|
-
transform = this.conwayModel.getLocalPlacement(localPlacementParameters);
|
|
2880
|
-
}
|
|
2881
|
-
const sourceShapeContext = sourceShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
2882
|
-
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
2883
|
-
const targetShapeContext = targetShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
2884
|
-
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
2885
|
-
if (sourceShapeContext !== void 0 && targetShapeContext !== void 0) {
|
|
2886
|
-
const scaleRatio = this.lengthUnitConversionRatio(sourceShapeContext, targetShapeContext);
|
|
2887
|
-
if (scaleRatio !== void 0 && scaleRatio !== 1) {
|
|
2888
|
-
scaleTransform = this.identity3DNativeMatrix.uniformScale(scaleRatio);
|
|
2889
|
-
}
|
|
2890
|
-
}
|
|
2891
|
-
if (scaleTransform !== void 0) {
|
|
2892
|
-
if (transform !== void 0) {
|
|
2893
|
-
const localPlacementParameters = {
|
|
2894
|
-
useRelPlacement: true,
|
|
2895
|
-
axis2Placement: transform,
|
|
2896
|
-
relPlacement: scaleTransform,
|
|
2897
|
-
};
|
|
2898
|
-
transform = this.conwayModel.getLocalPlacement(localPlacementParameters);
|
|
2899
|
-
}
|
|
2900
|
-
else {
|
|
2901
|
-
transform = scaleTransform;
|
|
2902
|
-
}
|
|
2891
|
+
const [transform, isContinue] = this.doTransforms(shapeRelationship, sourceShape, targetShape, owningLocalID);
|
|
2892
|
+
if (isContinue) {
|
|
2893
|
+
continue;
|
|
2903
2894
|
}
|
|
2904
2895
|
const sourceID = sourceShape.localID;
|
|
2905
2896
|
const targetID = targetShape.localID;
|
|
@@ -2951,7 +2942,8 @@ export class AP214GeometryExtraction {
|
|
|
2951
2942
|
let scaleTransform = void 0;
|
|
2952
2943
|
if (sourceShapeContext !== void 0) {
|
|
2953
2944
|
const sourceUnitInM = (this.convertToMetres(sourceShapeContext) ?? 1);
|
|
2954
|
-
scaleTransform =
|
|
2945
|
+
scaleTransform =
|
|
2946
|
+
this.uniformScaleAffine(this.identity3DNativeMatrix, 1 / sourceUnitInM);
|
|
2955
2947
|
}
|
|
2956
2948
|
// not an assembly mapped item, just extract the representation
|
|
2957
2949
|
thunk(void 0, scaleTransform);
|
|
@@ -2984,7 +2976,8 @@ export class AP214GeometryExtraction {
|
|
|
2984
2976
|
let scaleTransform = void 0;
|
|
2985
2977
|
if (sourceShapeContext !== void 0) {
|
|
2986
2978
|
const sourceUnitInM = (this.convertToMetres(sourceShapeContext) ?? 1);
|
|
2987
|
-
scaleTransform =
|
|
2979
|
+
scaleTransform =
|
|
2980
|
+
this.uniformScaleAffine(this.identity3DNativeMatrix, 1 / sourceUnitInM);
|
|
2988
2981
|
}
|
|
2989
2982
|
// not an assembly mapped item, just extract the representation
|
|
2990
2983
|
mappedNode.thunk(void 0, scaleTransform);
|
|
@@ -3005,4 +2998,56 @@ export class AP214GeometryExtraction {
|
|
|
3005
2998
|
this.model.elementMemoization = previousMemoizationState;
|
|
3006
2999
|
}
|
|
3007
3000
|
}
|
|
3001
|
+
/**
|
|
3002
|
+
* Process the transforms for a shape relationship.
|
|
3003
|
+
*
|
|
3004
|
+
* @param shapeRelationship The shape relationship to process.
|
|
3005
|
+
* @param sourceShape The source shape.
|
|
3006
|
+
* @param targetShape The target shape.
|
|
3007
|
+
* @param owningLocalID The owning local ID.
|
|
3008
|
+
* @return The transform and a boolean indicating if the processing should continue inside the loop.
|
|
3009
|
+
*/
|
|
3010
|
+
doTransforms(shapeRelationship, sourceShape, targetShape, owningLocalID) {
|
|
3011
|
+
const transformInstance = shapeRelationship.findVariant(representation_relationship_with_transformation);
|
|
3012
|
+
let transform = void 0;
|
|
3013
|
+
if (transformInstance !== void 0) {
|
|
3014
|
+
const transformOperator = transformInstance.transformation_operator;
|
|
3015
|
+
if (transformOperator instanceof item_defined_transformation) {
|
|
3016
|
+
const placement1 = transformOperator.transform_item_1;
|
|
3017
|
+
const placement2 = transformOperator.transform_item_2;
|
|
3018
|
+
if (!(placement1 instanceof placement) || !(placement2 instanceof placement)) {
|
|
3019
|
+
return [void 0, true];
|
|
3020
|
+
}
|
|
3021
|
+
const from = this.extractRawPlacement(placement1)?.invert() ?? this.identity3DNativeMatrix;
|
|
3022
|
+
const to = this.extractRawPlacement(placement2) ?? this.identity3DNativeMatrix;
|
|
3023
|
+
const localPlacementParameters = {
|
|
3024
|
+
useRelPlacement: true,
|
|
3025
|
+
axis2Placement: from,
|
|
3026
|
+
relPlacement: to,
|
|
3027
|
+
};
|
|
3028
|
+
transform = this.conwayModel.getLocalPlacement(localPlacementParameters);
|
|
3029
|
+
}
|
|
3030
|
+
else if (transformOperator instanceof cartesian_transformation_operator_3d) {
|
|
3031
|
+
transform = this.extractCartesianTransformOperator3D(transformOperator);
|
|
3032
|
+
}
|
|
3033
|
+
}
|
|
3034
|
+
const sourceShapeContext = sourceShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
3035
|
+
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
3036
|
+
const targetShapeContext = targetShape.context_of_items.findVariant(global_unit_assigned_context)?.units?.
|
|
3037
|
+
find(unit => unit.findVariant(length_unit))?.findVariant(length_unit);
|
|
3038
|
+
let scaleRatio = 1;
|
|
3039
|
+
let needsScale = false;
|
|
3040
|
+
if (sourceShapeContext !== void 0 && targetShapeContext !== void 0) {
|
|
3041
|
+
const sr = this.lengthUnitConversionRatio(sourceShapeContext, targetShapeContext);
|
|
3042
|
+
if (sr !== void 0 && sr !== 1) {
|
|
3043
|
+
scaleRatio = sr;
|
|
3044
|
+
needsScale = true;
|
|
3045
|
+
}
|
|
3046
|
+
}
|
|
3047
|
+
if (needsScale) {
|
|
3048
|
+
transform =
|
|
3049
|
+
this.uniformScaleAffine(transform ?? this.identity3DNativeMatrix, scaleRatio);
|
|
3050
|
+
}
|
|
3051
|
+
return [transform, false];
|
|
3052
|
+
}
|
|
3008
3053
|
}
|