@ifc-lite/create 2.7.0 → 2.8.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/dist/in-store/_emit-helpers.d.ts +10 -0
- package/dist/in-store/_emit-helpers.d.ts.map +1 -1
- package/dist/in-store/_emit-helpers.js +15 -2
- package/dist/in-store/_emit-helpers.js.map +1 -1
- package/dist/in-store/beam.d.ts +2 -0
- package/dist/in-store/beam.d.ts.map +1 -1
- package/dist/in-store/beam.js +2 -2
- package/dist/in-store/beam.js.map +1 -1
- package/dist/in-store/column.d.ts +2 -0
- package/dist/in-store/column.d.ts.map +1 -1
- package/dist/in-store/column.js +2 -2
- package/dist/in-store/column.js.map +1 -1
- package/dist/in-store/door.d.ts +2 -0
- package/dist/in-store/door.d.ts.map +1 -1
- package/dist/in-store/door.js.map +1 -1
- package/dist/in-store/member.d.ts +2 -0
- package/dist/in-store/member.d.ts.map +1 -1
- package/dist/in-store/member.js.map +1 -1
- package/dist/in-store/plate.d.ts +4 -0
- package/dist/in-store/plate.d.ts.map +1 -1
- package/dist/in-store/plate.js.map +1 -1
- package/dist/in-store/roof.d.ts +4 -0
- package/dist/in-store/roof.d.ts.map +1 -1
- package/dist/in-store/roof.js.map +1 -1
- package/dist/in-store/slab.d.ts +4 -0
- package/dist/in-store/slab.d.ts.map +1 -1
- package/dist/in-store/slab.js +2 -2
- package/dist/in-store/slab.js.map +1 -1
- package/dist/in-store/space.d.ts +4 -0
- package/dist/in-store/space.d.ts.map +1 -1
- package/dist/in-store/space.js +2 -2
- package/dist/in-store/space.js.map +1 -1
- package/dist/in-store/structural-action.d.ts +85 -0
- package/dist/in-store/structural-action.d.ts.map +1 -0
- package/dist/in-store/structural-action.js +83 -0
- package/dist/in-store/structural-action.js.map +1 -0
- package/dist/in-store/structural-analysis-model.d.ts +49 -0
- package/dist/in-store/structural-analysis-model.d.ts.map +1 -0
- package/dist/in-store/structural-analysis-model.js +29 -0
- package/dist/in-store/structural-analysis-model.js.map +1 -0
- package/dist/in-store/structural-curve-member.d.ts +90 -0
- package/dist/in-store/structural-curve-member.d.ts.map +1 -0
- package/dist/in-store/structural-curve-member.js +83 -0
- package/dist/in-store/structural-curve-member.js.map +1 -0
- package/dist/in-store/structural-load-group.d.ts +61 -0
- package/dist/in-store/structural-load-group.d.ts.map +1 -0
- package/dist/in-store/structural-load-group.js +38 -0
- package/dist/in-store/structural-load-group.js.map +1 -0
- package/dist/in-store/structural-point-connection.d.ts +75 -0
- package/dist/in-store/structural-point-connection.d.ts.map +1 -0
- package/dist/in-store/structural-point-connection.js +41 -0
- package/dist/in-store/structural-point-connection.js.map +1 -0
- package/dist/in-store/structural-relationships.d.ts +47 -0
- package/dist/in-store/structural-relationships.d.ts.map +1 -0
- package/dist/in-store/structural-relationships.js +85 -0
- package/dist/in-store/structural-relationships.js.map +1 -0
- package/dist/in-store/wall.d.ts +2 -0
- package/dist/in-store/wall.d.ts.map +1 -1
- package/dist/in-store/wall.js +2 -2
- package/dist/in-store/wall.js.map +1 -1
- package/dist/in-store/window.d.ts +2 -0
- package/dist/in-store/window.d.ts.map +1 -1
- package/dist/in-store/window.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anchored builders for `IfcStructuralPointAction` and
|
|
3
|
+
* `IfcStructuralLinearAction` — the two `IfcStructuralActivity` subtypes
|
|
4
|
+
* task S.1 asks for (#5167).
|
|
5
|
+
*
|
|
6
|
+
* Schema targeted: IFC4 (IFC4_ADD2_TC1.exp), verified against the generated
|
|
7
|
+
* IFC4 registry's `allAttributes`:
|
|
8
|
+
* `IfcStructuralPointAction`: `GlobalId, OwnerHistory?, Name?,
|
|
9
|
+
* Description?, ObjectType?, ObjectPlacement?, Representation?,
|
|
10
|
+
* AppliedLoad, GlobalOrLocal, DestabilizingLoad?`
|
|
11
|
+
* `IfcStructuralLinearAction`: the same seven inherited attributes plus
|
|
12
|
+
* `ProjectedOrTrue?, PredefinedType` (from `IfcStructuralCurveAction`).
|
|
13
|
+
* `AppliedLoad`/`GlobalOrLocal` are MANDATORY on `IfcStructuralActivity`
|
|
14
|
+
* (no `?` in the registry) — both always written below, `GlobalOrLocal`
|
|
15
|
+
* defaulting to `GLOBAL_COORDS`.
|
|
16
|
+
* `IfcStructuralLinearAction`'s `ConstPredefinedType` WHERE rule forces
|
|
17
|
+
* `PredefinedType = CONST` — this builder hardcodes it; there is no
|
|
18
|
+
* parameter for it, because any other value is an EXPRESS violation.
|
|
19
|
+
* Each action's `AppliedLoad` is narrowed to the load types the
|
|
20
|
+
* `SuitableLoadType` WHERE rule accepts for that subtype:
|
|
21
|
+
* `IfcStructuralLoadSingleForce` for the point action,
|
|
22
|
+
* `IfcStructuralLoadLinearForce` for the linear action (both are also
|
|
23
|
+
* `IfcStructuralLoadStatic` → `IfcStructuralLoadOrResult` → `IfcStructuralLoad`).
|
|
24
|
+
*
|
|
25
|
+
* REPRESENTATION OWNERSHIP: neither action gets an `ObjectPlacement` or
|
|
26
|
+
* `Representation` (both left `$`) — an action's location is implied by the
|
|
27
|
+
* structural item it is connected to via `IfcRelConnectsStructuralActivity`
|
|
28
|
+
* (`connectStructuralActivityToItemInStore` in `structural-relationships.ts`).
|
|
29
|
+
* The schema makes both optional specifically to allow this; giving an
|
|
30
|
+
* action independent geometry would create a second, easily-diverging
|
|
31
|
+
* source of location truth for no read-side benefit
|
|
32
|
+
* (`StructuralActivityInfo` carries no geometry field). The `AppliedLoad`
|
|
33
|
+
* entity (`IfcStructuralLoadSingleForce`/`IfcStructuralLoadLinearForce`) IS
|
|
34
|
+
* owned exclusively by its action — freshly created per call, never shared.
|
|
35
|
+
*
|
|
36
|
+
* Pure: no I/O, no parser access — operates entirely through the editor.
|
|
37
|
+
*/
|
|
38
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
39
|
+
import type { SpatialAnchor } from './anchor.js';
|
|
40
|
+
export type StructuralGlobalOrLocal = 'GLOBAL_COORDS' | 'LOCAL_COORDS';
|
|
41
|
+
export interface StructuralPointActionInStoreParams {
|
|
42
|
+
Name?: string;
|
|
43
|
+
Description?: string;
|
|
44
|
+
ObjectType?: string;
|
|
45
|
+
GlobalOrLocal?: StructuralGlobalOrLocal;
|
|
46
|
+
DestabilizingLoad?: boolean;
|
|
47
|
+
/** `IfcStructuralLoadSingleForce` components (all optional, at least one should be given). */
|
|
48
|
+
LoadName?: string;
|
|
49
|
+
ForceX?: number;
|
|
50
|
+
ForceY?: number;
|
|
51
|
+
ForceZ?: number;
|
|
52
|
+
MomentX?: number;
|
|
53
|
+
MomentY?: number;
|
|
54
|
+
MomentZ?: number;
|
|
55
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
56
|
+
GlobalId?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface StructuralPointActionBuildResult {
|
|
59
|
+
activityId: number;
|
|
60
|
+
loadId: number;
|
|
61
|
+
}
|
|
62
|
+
export declare function addStructuralPointActionToStore(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'ownerHistoryId' | 'guidRandom' | 'schema'>, params: StructuralPointActionInStoreParams): StructuralPointActionBuildResult;
|
|
63
|
+
export interface StructuralLinearActionInStoreParams {
|
|
64
|
+
Name?: string;
|
|
65
|
+
Description?: string;
|
|
66
|
+
ObjectType?: string;
|
|
67
|
+
GlobalOrLocal?: StructuralGlobalOrLocal;
|
|
68
|
+
DestabilizingLoad?: boolean;
|
|
69
|
+
/** `IfcStructuralLoadLinearForce` components (all optional, at least one should be given). */
|
|
70
|
+
LoadName?: string;
|
|
71
|
+
LinearForceX?: number;
|
|
72
|
+
LinearForceY?: number;
|
|
73
|
+
LinearForceZ?: number;
|
|
74
|
+
LinearMomentX?: number;
|
|
75
|
+
LinearMomentY?: number;
|
|
76
|
+
LinearMomentZ?: number;
|
|
77
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
78
|
+
GlobalId?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface StructuralLinearActionBuildResult {
|
|
81
|
+
activityId: number;
|
|
82
|
+
loadId: number;
|
|
83
|
+
}
|
|
84
|
+
export declare function addStructuralLinearActionToStore(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'ownerHistoryId' | 'guidRandom' | 'schema'>, params: StructuralLinearActionInStoreParams): StructuralLinearActionBuildResult;
|
|
85
|
+
//# sourceMappingURL=structural-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-action.d.ts","sourceRoot":"","sources":["../../src/in-store/structural-action.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG,cAAc,CAAC;AAQvE,MAAM,WAAW,kCAAkC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,EACvE,MAAM,EAAE,kCAAkC,GACzC,gCAAgC,CAgClC;AAID,MAAM,WAAW,mCAAmC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,EACvE,MAAM,EAAE,mCAAmC,GAC1C,iCAAiC,CAkCnC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { ownerHistoryRef, productGuid } from './_emit-helpers.js';
|
|
5
|
+
function boolAttr(v) {
|
|
6
|
+
return v === undefined ? null : v ? '.T.' : '.F.';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* An action whose load carries no component at all is not a load: it
|
|
10
|
+
* serializes an `IfcStructuralLoad*` with every value `$` and reports success,
|
|
11
|
+
* so a caller that forgot to supply one gets a silently weightless model
|
|
12
|
+
* (#5167 review). Refusing here keeps the absence from reading as success.
|
|
13
|
+
*/
|
|
14
|
+
function assertLoadHasComponent(builder, components) {
|
|
15
|
+
if (components.some((value) => value !== undefined))
|
|
16
|
+
return;
|
|
17
|
+
throw new Error(`${builder}: supply at least one force or moment component; an action with no load component is not a load`);
|
|
18
|
+
}
|
|
19
|
+
export function addStructuralPointActionToStore(editor, anchor, params) {
|
|
20
|
+
if (anchor.schema === 'IFC2X3') {
|
|
21
|
+
throw new Error('addStructuralPointActionToStore: IFC2X3 has no IfcStructuralPointAction — target IFC4 or later');
|
|
22
|
+
}
|
|
23
|
+
assertLoadHasComponent('addStructuralPointActionToStore', [
|
|
24
|
+
params.ForceX, params.ForceY, params.ForceZ,
|
|
25
|
+
params.MomentX, params.MomentY, params.MomentZ,
|
|
26
|
+
]);
|
|
27
|
+
const loadId = editor.addEntity('IfcStructuralLoadSingleForce', [
|
|
28
|
+
params.LoadName ?? null,
|
|
29
|
+
params.ForceX ?? null,
|
|
30
|
+
params.ForceY ?? null,
|
|
31
|
+
params.ForceZ ?? null,
|
|
32
|
+
params.MomentX ?? null,
|
|
33
|
+
params.MomentY ?? null,
|
|
34
|
+
params.MomentZ ?? null,
|
|
35
|
+
]).expressId;
|
|
36
|
+
const activityId = editor.addEntity('IfcStructuralPointAction', [
|
|
37
|
+
productGuid(params, anchor.guidRandom),
|
|
38
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
39
|
+
params.Name ?? 'Point Action',
|
|
40
|
+
params.Description ?? null,
|
|
41
|
+
params.ObjectType ?? null,
|
|
42
|
+
null, // ObjectPlacement — see module doc
|
|
43
|
+
null, // Representation
|
|
44
|
+
`#${loadId}`,
|
|
45
|
+
`.${params.GlobalOrLocal ?? 'GLOBAL_COORDS'}.`,
|
|
46
|
+
boolAttr(params.DestabilizingLoad),
|
|
47
|
+
]).expressId;
|
|
48
|
+
return { activityId, loadId };
|
|
49
|
+
}
|
|
50
|
+
export function addStructuralLinearActionToStore(editor, anchor, params) {
|
|
51
|
+
if (anchor.schema === 'IFC2X3') {
|
|
52
|
+
throw new Error('addStructuralLinearActionToStore: IFC2X3 has no IfcStructuralLinearAction — target IFC4 or later');
|
|
53
|
+
}
|
|
54
|
+
assertLoadHasComponent('addStructuralLinearActionToStore', [
|
|
55
|
+
params.LinearForceX, params.LinearForceY, params.LinearForceZ,
|
|
56
|
+
params.LinearMomentX, params.LinearMomentY, params.LinearMomentZ,
|
|
57
|
+
]);
|
|
58
|
+
const loadId = editor.addEntity('IfcStructuralLoadLinearForce', [
|
|
59
|
+
params.LoadName ?? null,
|
|
60
|
+
params.LinearForceX ?? null,
|
|
61
|
+
params.LinearForceY ?? null,
|
|
62
|
+
params.LinearForceZ ?? null,
|
|
63
|
+
params.LinearMomentX ?? null,
|
|
64
|
+
params.LinearMomentY ?? null,
|
|
65
|
+
params.LinearMomentZ ?? null,
|
|
66
|
+
]).expressId;
|
|
67
|
+
const activityId = editor.addEntity('IfcStructuralLinearAction', [
|
|
68
|
+
productGuid(params, anchor.guidRandom),
|
|
69
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
70
|
+
params.Name ?? 'Linear Action',
|
|
71
|
+
params.Description ?? null,
|
|
72
|
+
params.ObjectType ?? null,
|
|
73
|
+
null, // ObjectPlacement — see module doc
|
|
74
|
+
null, // Representation
|
|
75
|
+
`#${loadId}`,
|
|
76
|
+
`.${params.GlobalOrLocal ?? 'GLOBAL_COORDS'}.`,
|
|
77
|
+
boolAttr(params.DestabilizingLoad),
|
|
78
|
+
null, // ProjectedOrTrue
|
|
79
|
+
'.CONST.', // PredefinedType — EXPRESS ConstPredefinedType WHERE rule
|
|
80
|
+
]).expressId;
|
|
81
|
+
return { activityId, loadId };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=structural-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-action.js","sourceRoot":"","sources":["../../src/in-store/structural-action.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0C/D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIlE,SAAS,QAAQ,CAAC,CAAsB;IACtC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC;AA2BD;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAe,EAAE,UAA6C;IAC5F,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;QAAE,OAAO;IAC5D,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,iGAAiG,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAmB,EACnB,MAAuE,EACvE,MAA0C;IAE1C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;IACD,sBAAsB,CAAC,iCAAiC,EAAE;QACxD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM;QAC3C,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO;KAC/C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,8BAA8B,EAAE;QAC9D,MAAM,CAAC,QAAQ,IAAI,IAAI;QACvB,MAAM,CAAC,MAAM,IAAI,IAAI;QACrB,MAAM,CAAC,MAAM,IAAI,IAAI;QACrB,MAAM,CAAC,MAAM,IAAI,IAAI;QACrB,MAAM,CAAC,OAAO,IAAI,IAAI;QACtB,MAAM,CAAC,OAAO,IAAI,IAAI;QACtB,MAAM,CAAC,OAAO,IAAI,IAAI;KACvB,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,0BAA0B,EAAE;QAC9D,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QACtC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,CAAC,IAAI,IAAI,cAAc;QAC7B,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,IAAI,EAAE,mCAAmC;QACzC,IAAI,EAAE,iBAAiB;QACvB,IAAI,MAAM,EAAE;QACZ,IAAI,MAAM,CAAC,aAAa,IAAI,eAAe,GAAG;QAC9C,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC;KACnC,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AA2BD,MAAM,UAAU,gCAAgC,CAC9C,MAAmB,EACnB,MAAuE,EACvE,MAA2C;IAE3C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;IACtH,CAAC;IACD,sBAAsB,CAAC,kCAAkC,EAAE;QACzD,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY;QAC7D,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa;KACjE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,8BAA8B,EAAE;QAC9D,MAAM,CAAC,QAAQ,IAAI,IAAI;QACvB,MAAM,CAAC,YAAY,IAAI,IAAI;QAC3B,MAAM,CAAC,YAAY,IAAI,IAAI;QAC3B,MAAM,CAAC,YAAY,IAAI,IAAI;QAC3B,MAAM,CAAC,aAAa,IAAI,IAAI;QAC5B,MAAM,CAAC,aAAa,IAAI,IAAI;QAC5B,MAAM,CAAC,aAAa,IAAI,IAAI;KAC7B,CAAC,CAAC,SAAS,CAAC;IAEb,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,2BAA2B,EAAE;QAC/D,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QACtC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,CAAC,IAAI,IAAI,eAAe;QAC9B,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,IAAI,EAAE,mCAAmC;QACzC,IAAI,EAAE,iBAAiB;QACvB,IAAI,MAAM,EAAE;QACZ,IAAI,MAAM,CAAC,aAAa,IAAI,eAAe,GAAG;QAC9C,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAClC,IAAI,EAAE,kBAAkB;QACxB,SAAS,EAAE,0DAA0D;KACtE,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anchored builder for `IfcStructuralAnalysisModel` — the container that
|
|
3
|
+
* turns a bag of structural members/connections/loads into an analytical
|
|
4
|
+
* *model* (#5167 task S.1).
|
|
5
|
+
*
|
|
6
|
+
* `IfcStructuralAnalysisModel` is `IfcSystem` → `IfcGroup` → `IfcObject`,
|
|
7
|
+
* never `IfcProduct` — it has no `ObjectPlacement`/`Representation` at all
|
|
8
|
+
* (confirmed against the generated IFC4 registry's `allAttributes`), so
|
|
9
|
+
* unlike every other in-store builder in this directory it emits no
|
|
10
|
+
* placement or geometry sub-graph. Membership (which members/connections
|
|
11
|
+
* belong to the model) is NOT one of this entity's own attributes; it is
|
|
12
|
+
* established separately via `IfcRelAssignsToGroup`
|
|
13
|
+
* (`assignToStructuralGroupInStore` in `structural-relationships.ts`),
|
|
14
|
+
* matching what `extractStructuralOnDemand` in `@ifc-lite/parser` reads
|
|
15
|
+
* back (`StructuralAnalysisModelInfo.itemGlobalIds`).
|
|
16
|
+
*
|
|
17
|
+
* `LoadedBy` / `HasResults`, by contrast, ARE direct attributes on this
|
|
18
|
+
* entity (`SET OF IfcStructuralLoadGroup` / `SET OF IfcStructuralResultGroup`
|
|
19
|
+
* — no relationship indirection), so a load group's expressId is passed
|
|
20
|
+
* straight through here.
|
|
21
|
+
*
|
|
22
|
+
* Schema targeted: IFC4 (IFC4_ADD2_TC1.exp) — `IfcStructuralAnalysisModel`
|
|
23
|
+
* is unchanged from IFC4 to IFC4X3, so this builder is schema-neutral within
|
|
24
|
+
* ifc-lite's supported IFC4+ range. Not offered for IFC2X3, which has no
|
|
25
|
+
* structural-analysis schema module at all.
|
|
26
|
+
*
|
|
27
|
+
* Pure: no I/O, no parser access — operates entirely through the editor.
|
|
28
|
+
*/
|
|
29
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
30
|
+
import type { SpatialAnchor } from './anchor.js';
|
|
31
|
+
export type StructuralAnalysisModelType = 'IN_PLANE_LOADING_2D' | 'OUT_PLANE_LOADING_2D' | 'LOADING_3D' | 'USERDEFINED' | 'NOTDEFINED';
|
|
32
|
+
export interface StructuralAnalysisModelInStoreParams {
|
|
33
|
+
Name?: string;
|
|
34
|
+
Description?: string;
|
|
35
|
+
/** Required by the EXPRESS `HasObjectType` WHERE rule when `PredefinedType` is `'USERDEFINED'`. */
|
|
36
|
+
ObjectType?: string;
|
|
37
|
+
PredefinedType?: StructuralAnalysisModelType;
|
|
38
|
+
/** `IfcStructuralAnalysisModel.LoadedBy` — expressIds of existing `IfcStructuralLoadGroup`/`IfcStructuralLoadCase` entities. */
|
|
39
|
+
LoadGroupIds?: readonly number[];
|
|
40
|
+
/** `IfcStructuralAnalysisModel.HasResults` — expressIds of existing `IfcStructuralResultGroup` entities. */
|
|
41
|
+
ResultGroupIds?: readonly number[];
|
|
42
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
43
|
+
GlobalId?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface StructuralAnalysisModelBuildResult {
|
|
46
|
+
analysisModelId: number;
|
|
47
|
+
}
|
|
48
|
+
export declare function addStructuralAnalysisModelToStore(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'ownerHistoryId' | 'guidRandom' | 'schema'>, params: StructuralAnalysisModelInStoreParams): StructuralAnalysisModelBuildResult;
|
|
49
|
+
//# sourceMappingURL=structural-analysis-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-analysis-model.d.ts","sourceRoot":"","sources":["../../src/in-store/structural-analysis-model.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,MAAM,2BAA2B,GACnC,qBAAqB,GAAG,sBAAsB,GAAG,YAAY,GAC7D,aAAa,GAAG,YAAY,CAAC;AAEjC,MAAM,WAAW,oCAAoC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,gIAAgI;IAChI,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,4GAA4G;IAC5G,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kCAAkC;IACjD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,EACvE,MAAM,EAAE,oCAAoC,GAC3C,kCAAkC,CA0BpC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { ownerHistoryRef, productGuid } from './_emit-helpers.js';
|
|
5
|
+
export function addStructuralAnalysisModelToStore(editor, anchor, params) {
|
|
6
|
+
if (anchor.schema === 'IFC2X3') {
|
|
7
|
+
throw new Error('addStructuralAnalysisModelToStore: IFC2X3 has no IfcStructuralAnalysisModel — target IFC4 or later');
|
|
8
|
+
}
|
|
9
|
+
const predefinedType = params.PredefinedType ?? 'NOTDEFINED';
|
|
10
|
+
if (predefinedType === 'USERDEFINED' && !params.ObjectType) {
|
|
11
|
+
throw new Error('addStructuralAnalysisModelToStore: ObjectType is required when PredefinedType is USERDEFINED');
|
|
12
|
+
}
|
|
13
|
+
const loadGroupIds = params.LoadGroupIds ?? [];
|
|
14
|
+
const resultGroupIds = params.ResultGroupIds ?? [];
|
|
15
|
+
const analysisModelId = editor.addEntity('IfcStructuralAnalysisModel', [
|
|
16
|
+
productGuid(params, anchor.guidRandom),
|
|
17
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
18
|
+
params.Name ?? 'Structural Analysis Model',
|
|
19
|
+
params.Description ?? null,
|
|
20
|
+
params.ObjectType ?? null,
|
|
21
|
+
`.${predefinedType}.`,
|
|
22
|
+
null, // OrientationOf2DPlane
|
|
23
|
+
loadGroupIds.length > 0 ? loadGroupIds.map((id) => `#${id}`) : null, // LoadedBy
|
|
24
|
+
resultGroupIds.length > 0 ? resultGroupIds.map((id) => `#${id}`) : null, // HasResults
|
|
25
|
+
null, // SharedPlacement
|
|
26
|
+
]).expressId;
|
|
27
|
+
return { analysisModelId };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=structural-analysis-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-analysis-model.js","sourceRoot":"","sources":["../../src/in-store/structural-analysis-model.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAiC/D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBlE,MAAM,UAAU,iCAAiC,CAC/C,MAAmB,EACnB,MAAuE,EACvE,MAA4C;IAE5C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,YAAY,CAAC;IAC7D,IAAI,cAAc,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IAEnD,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,4BAA4B,EAAE;QACrE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QACtC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,CAAC,IAAI,IAAI,2BAA2B;QAC1C,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,IAAI,cAAc,GAAG;QACrB,IAAI,EAAE,uBAAuB;QAC7B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW;QAChF,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa;QACtF,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAC,SAAS,CAAC;IAEb,OAAO,EAAE,eAAe,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anchored builder for `IfcStructuralCurveMember` — a straight analytical
|
|
3
|
+
* line member (beam/column/brace idealisation) between `Start` and `End`
|
|
4
|
+
* (#5167 task S.1).
|
|
5
|
+
*
|
|
6
|
+
* Schema targeted: IFC4 (IFC4_ADD2_TC1.exp), verified against the generated
|
|
7
|
+
* IFC4 registry's `allAttributes` for `IfcStructuralCurveMember`:
|
|
8
|
+
* `GlobalId, OwnerHistory?, Name?, Description?, ObjectType?,
|
|
9
|
+
* ObjectPlacement?, Representation?, PredefinedType, Axis`
|
|
10
|
+
* `PredefinedType` (`IfcStructuralCurveMemberTypeEnum`) and `Axis`
|
|
11
|
+
* (`IfcDirection`, mandatory — NOT an inline list) are both own attributes
|
|
12
|
+
* of this entity, not inherited.
|
|
13
|
+
*
|
|
14
|
+
* REPRESENTATION OWNERSHIP (the part the task brief calls out explicitly):
|
|
15
|
+
*
|
|
16
|
+
* `ObjectPlacement`: an `IfcLocalPlacement` chained from the storey's
|
|
17
|
+
* placement, origin at `Start`, local Z = member axis — same shape as
|
|
18
|
+
* `addBeamToStore`/`addMemberToStore`'s physical-element placements.
|
|
19
|
+
* OWNED exclusively by this member: nothing else in the model ever
|
|
20
|
+
* references it, so there is no reference-counting question, only a
|
|
21
|
+
* lifetime one (see removal note below).
|
|
22
|
+
*
|
|
23
|
+
* `Representation`: an `IfcTopologyRepresentation` (`RepresentationType:
|
|
24
|
+
* 'Edge'`, verified against the EXPRESS `IfcTopologyRepresentationTypes`
|
|
25
|
+
* WHERE function, which accepts `'Edge'` for a `SET` of `IfcEdge` items)
|
|
26
|
+
* holding one `IfcEdge` between two `IfcVertexPoint`s at the placement-
|
|
27
|
+
* local origin and `(0, 0, length)`. This is the buildingSMART-documented
|
|
28
|
+
* shape for an analytical member's line geometry — lighter than a solid,
|
|
29
|
+
* and the read side (`extractStructuralOnDemand`) does not need it at all
|
|
30
|
+
* (member geometry isn't part of `StructuralMemberInfo`), so it is
|
|
31
|
+
* authored for downstream tools/viewers that walk `Representation`, not
|
|
32
|
+
* for this package's own round trip. Every entity in the chain
|
|
33
|
+
* (2 points, 2 vertices, 1 edge, the topology rep, the product shape) is
|
|
34
|
+
* OWNED exclusively by this member — freshly created per call, never
|
|
35
|
+
* deduplicated or shared across members, so — like the placement — a
|
|
36
|
+
* member's owned sub-graph is a closed set with no external references
|
|
37
|
+
* to reason about.
|
|
38
|
+
*
|
|
39
|
+
* What is NOT owned by the member: `anchor.axisContextId` (the model's
|
|
40
|
+
* shared `IfcGeometricRepresentationSubContext`, an existing entity this
|
|
41
|
+
* builder only references) and `anchor.storeyPlacementId` (ditto).
|
|
42
|
+
*
|
|
43
|
+
* Removal: `bim.store.removeEntity` tombstones only the product row (the
|
|
44
|
+
* known #592-era gap column.ts's header comment references), so removing
|
|
45
|
+
* a member built here would currently orphan its placement chain AND its
|
|
46
|
+
* topology sub-graph — the same defect, not a new one, and NOT fixed by
|
|
47
|
+
* this builder. What this builder does instead: because nothing is
|
|
48
|
+
* shared, EVERY id in `StructuralCurveMemberBuildResult` is safe to
|
|
49
|
+
* delete unconditionally once the member itself is gone (no other entity
|
|
50
|
+
* in the model can be pointing at any of them) — so a future
|
|
51
|
+
* `removeStructuralEntityInStore` (mirroring `cost-removal.ts`'s pattern)
|
|
52
|
+
* can walk this result's ids directly with no reference-discovery pass.
|
|
53
|
+
* That follow-up function does not exist yet; this is deliberately left
|
|
54
|
+
* unresolved rather than silently ignored (see the task's PR description
|
|
55
|
+
* for the explicit call-out).
|
|
56
|
+
*
|
|
57
|
+
* Pure: no I/O, no parser access — operates entirely through the editor.
|
|
58
|
+
*/
|
|
59
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
60
|
+
import { type SpatialAnchor } from './anchor.js';
|
|
61
|
+
export type StructuralCurveMemberType = 'RIGID_JOINED_MEMBER' | 'PIN_JOINED_MEMBER' | 'CABLE' | 'TENSION_MEMBER' | 'COMPRESSION_MEMBER' | 'USERDEFINED' | 'NOTDEFINED';
|
|
62
|
+
export interface StructuralCurveMemberInStoreParams {
|
|
63
|
+
Start: [number, number, number];
|
|
64
|
+
End: [number, number, number];
|
|
65
|
+
PredefinedType?: StructuralCurveMemberType;
|
|
66
|
+
Name?: string;
|
|
67
|
+
Description?: string;
|
|
68
|
+
/** Required by the EXPRESS `HasObjectType` WHERE rule when `PredefinedType` is `'USERDEFINED'`. */
|
|
69
|
+
ObjectType?: string;
|
|
70
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
71
|
+
GlobalId?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Every expressId this builder emits — the member's full owned sub-graph (see removal note above). */
|
|
74
|
+
export interface StructuralCurveMemberBuildResult {
|
|
75
|
+
memberId: number;
|
|
76
|
+
placementId: number;
|
|
77
|
+
axisDirectionId: number;
|
|
78
|
+
/** The `IfcCartesianPoint` each `IfcVertexPoint` below is built on. Exposed
|
|
79
|
+
* because they are owned too: a cascade delete driven by this result would
|
|
80
|
+
* otherwise orphan both points (#5167 review). */
|
|
81
|
+
point1Id: number;
|
|
82
|
+
point2Id: number;
|
|
83
|
+
vertex1Id: number;
|
|
84
|
+
vertex2Id: number;
|
|
85
|
+
edgeId: number;
|
|
86
|
+
topologyRepId: number;
|
|
87
|
+
productShapeId: number;
|
|
88
|
+
}
|
|
89
|
+
export declare function addStructuralCurveMemberToStore(editor: StoreEditor, anchor: SpatialAnchor, params: StructuralCurveMemberInStoreParams): StructuralCurveMemberBuildResult;
|
|
90
|
+
//# sourceMappingURL=structural-curve-member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-curve-member.d.ts","sourceRoot":"","sources":["../../src/in-store/structural-curve-member.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,MAAM,MAAM,yBAAyB,GACjC,qBAAqB,GAAG,mBAAmB,GAAG,OAAO,GAAG,gBAAgB,GACxE,oBAAoB,GAAG,aAAa,GAAG,YAAY,CAAC;AAExD,MAAM,WAAW,kCAAkC;IACjD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uGAAuG;AACvG,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB;;uDAEmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAOD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kCAAkC,GACzC,gCAAgC,CA6ElC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { vecCross, vecNorm, assertFinitePoint3 } from '../ifc-creator-math.js';
|
|
5
|
+
import { toNativePoint3 } from './anchor.js';
|
|
6
|
+
import { emitLocalPlacement, ownerHistoryRef, productGuid } from './_emit-helpers.js';
|
|
7
|
+
function computeRefDirection(axis) {
|
|
8
|
+
const up = Math.abs(axis[2]) < 0.9 ? [0, 0, 1] : [1, 0, 0];
|
|
9
|
+
return vecNorm(vecCross(up, axis));
|
|
10
|
+
}
|
|
11
|
+
export function addStructuralCurveMemberToStore(editor, anchor, params) {
|
|
12
|
+
if ((anchor.schema ?? 'IFC4') === 'IFC2X3') {
|
|
13
|
+
throw new Error('addStructuralCurveMemberToStore: IFC2X3 has no IfcStructuralCurveMember — target IFC4 or later');
|
|
14
|
+
}
|
|
15
|
+
const predefinedType = params.PredefinedType ?? 'NOTDEFINED';
|
|
16
|
+
if (predefinedType === 'USERDEFINED' && !params.ObjectType) {
|
|
17
|
+
throw new Error('addStructuralCurveMemberToStore: ObjectType is required when PredefinedType is USERDEFINED');
|
|
18
|
+
}
|
|
19
|
+
assertFinitePoint3({ Start: params.Start, End: params.End }, 'addStructuralCurveMemberToStore');
|
|
20
|
+
params = {
|
|
21
|
+
...params,
|
|
22
|
+
Start: toNativePoint3(anchor, params.Start),
|
|
23
|
+
End: toNativePoint3(anchor, params.End),
|
|
24
|
+
};
|
|
25
|
+
const dx = params.End[0] - params.Start[0];
|
|
26
|
+
const dy = params.End[1] - params.Start[1];
|
|
27
|
+
const dz = params.End[2] - params.Start[2];
|
|
28
|
+
const length = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
29
|
+
if (length <= 0) {
|
|
30
|
+
throw new Error('addStructuralCurveMemberToStore: Start and End must be distinct points');
|
|
31
|
+
}
|
|
32
|
+
const dir = vecNorm([dx, dy, dz]);
|
|
33
|
+
const refDir = computeRefDirection(dir);
|
|
34
|
+
// Placement at Start, local Z along the member axis (mirrors addBeamToStore).
|
|
35
|
+
const placementId = emitLocalPlacement(editor, anchor.storeyPlacementId, params.Start, dir, refDir);
|
|
36
|
+
// `IfcStructuralCurveMember.Axis` is expressed in the placement's LOCAL
|
|
37
|
+
// frame, and the placement's own local Z is already the member direction
|
|
38
|
+
// (set above), so the member's local axis is always world +Z here.
|
|
39
|
+
const axisDirectionId = editor.addEntity('IfcDirection', [[0, 0, 1]]).expressId;
|
|
40
|
+
// Topology geometry: an edge from the local origin to (0, 0, length) —
|
|
41
|
+
// `length` is already in the file's native unit (Start/End were converted
|
|
42
|
+
// above) — wholly owned by this member (see module doc).
|
|
43
|
+
const pt1Id = editor.addEntity('IfcCartesianPoint', [[0, 0, 0]]).expressId;
|
|
44
|
+
const pt2Id = editor.addEntity('IfcCartesianPoint', [[0, 0, length]]).expressId;
|
|
45
|
+
const vertex1Id = editor.addEntity('IfcVertexPoint', [`#${pt1Id}`]).expressId;
|
|
46
|
+
const vertex2Id = editor.addEntity('IfcVertexPoint', [`#${pt2Id}`]).expressId;
|
|
47
|
+
const edgeId = editor.addEntity('IfcEdge', [`#${vertex1Id}`, `#${vertex2Id}`]).expressId;
|
|
48
|
+
const topologyRepId = editor.addEntity('IfcTopologyRepresentation', [
|
|
49
|
+
`#${anchor.axisContextId}`,
|
|
50
|
+
'Axis',
|
|
51
|
+
'Edge',
|
|
52
|
+
[`#${edgeId}`],
|
|
53
|
+
]).expressId;
|
|
54
|
+
const productShapeId = editor.addEntity('IfcProductDefinitionShape', [
|
|
55
|
+
null,
|
|
56
|
+
null,
|
|
57
|
+
[`#${topologyRepId}`],
|
|
58
|
+
]).expressId;
|
|
59
|
+
const memberId = editor.addEntity('IfcStructuralCurveMember', [
|
|
60
|
+
productGuid(params, anchor.guidRandom),
|
|
61
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
62
|
+
params.Name ?? 'Structural Curve Member',
|
|
63
|
+
params.Description ?? null,
|
|
64
|
+
params.ObjectType ?? null,
|
|
65
|
+
`#${placementId}`,
|
|
66
|
+
`#${productShapeId}`,
|
|
67
|
+
`.${predefinedType}.`,
|
|
68
|
+
`#${axisDirectionId}`,
|
|
69
|
+
]).expressId;
|
|
70
|
+
return {
|
|
71
|
+
memberId,
|
|
72
|
+
placementId,
|
|
73
|
+
axisDirectionId,
|
|
74
|
+
point1Id: pt1Id,
|
|
75
|
+
point2Id: pt2Id,
|
|
76
|
+
vertex1Id,
|
|
77
|
+
vertex2Id,
|
|
78
|
+
edgeId,
|
|
79
|
+
topologyRepId,
|
|
80
|
+
productShapeId,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=structural-curve-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-curve-member.js","sourceRoot":"","sources":["../../src/in-store/structural-curve-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anchored builder for `IfcStructuralLoadGroup` / `IfcStructuralLoadCase`
|
|
3
|
+
* (#5167 task S.1).
|
|
4
|
+
*
|
|
5
|
+
* `IfcStructuralLoadGroup` is `IfcGroup` → `IfcObject`, never `IfcProduct` —
|
|
6
|
+
* no `ObjectPlacement`/`Representation` — so, like
|
|
7
|
+
* `structural-analysis-model.ts`, this builder emits no geometry.
|
|
8
|
+
*
|
|
9
|
+
* Schema targeted: IFC4 (IFC4_ADD2_TC1.exp), verified against the generated
|
|
10
|
+
* IFC4 registry's `allAttributes`:
|
|
11
|
+
* `IfcStructuralLoadGroup`: `GlobalId, OwnerHistory?, Name?, Description?,
|
|
12
|
+
* ObjectType?, PredefinedType, ActionType, ActionSource, Coefficient?,
|
|
13
|
+
* Purpose?`
|
|
14
|
+
* `IfcStructuralLoadCase` adds exactly one attribute after its parent's:
|
|
15
|
+
* `SelfWeightCoefficients?` (a `LIST [3:3] OF IfcRatioMeasure`).
|
|
16
|
+
* The EXPRESS `IsLoadCasePredefinedType` WHERE rule on
|
|
17
|
+
* `IfcStructuralLoadCase` requires `PredefinedType = LOAD_CASE`
|
|
18
|
+
* whenever `SelfWeightCoefficients` is present — enforced below rather
|
|
19
|
+
* than left for export/import to discover as a malformed file.
|
|
20
|
+
*
|
|
21
|
+
* A load group's members (the activities assigned to it) are established
|
|
22
|
+
* separately via `IfcRelAssignsToGroup`
|
|
23
|
+
* (`assignToStructuralGroupInStore` in `structural-relationships.ts`) —
|
|
24
|
+
* this mirrors `extractStructuralOnDemand`'s read side
|
|
25
|
+
* (`StructuralLoadGroupInfo.activityGlobalIds`).
|
|
26
|
+
*
|
|
27
|
+
* Pure: no I/O, no parser access — operates entirely through the editor.
|
|
28
|
+
*/
|
|
29
|
+
import type { StoreEditor } from '@ifc-lite/mutations';
|
|
30
|
+
import type { SpatialAnchor } from './anchor.js';
|
|
31
|
+
export type StructuralLoadGroupType = 'LOAD_GROUP' | 'LOAD_CASE' | 'LOAD_COMBINATION' | 'USERDEFINED' | 'NOTDEFINED';
|
|
32
|
+
export type StructuralActionType = 'PERMANENT_G' | 'VARIABLE_Q' | 'EXTRAORDINARY_A' | 'USERDEFINED' | 'NOTDEFINED';
|
|
33
|
+
export type StructuralActionSourceType = 'DEAD_LOAD_G' | 'COMPLETION_G1' | 'LIVE_LOAD_Q' | 'SNOW_S' | 'WIND_W' | 'PRESTRESSING_P' | 'SETTLEMENT_U' | 'TEMPERATURE_T' | 'EARTHQUAKE_E' | 'FIRE' | 'IMPULSE' | 'IMPACT' | 'TRANSPORT' | 'ERECTION' | 'PROPPING' | 'SYSTEM_IMPERFECTION' | 'SHRINKAGE' | 'CREEP' | 'LACK_OF_FIT' | 'BUOYANCY' | 'ICE' | 'CURRENT' | 'WAVE' | 'RAIN' | 'BRAKES' | 'USERDEFINED' | 'NOTDEFINED';
|
|
34
|
+
export interface StructuralLoadGroupInStoreParams {
|
|
35
|
+
Name?: string;
|
|
36
|
+
Description?: string;
|
|
37
|
+
/** Required by the combined `HasObjectType` WHERE rule when `PredefinedType`/`ActionType`/`ActionSource` is `'USERDEFINED'`. */
|
|
38
|
+
ObjectType?: string;
|
|
39
|
+
PredefinedType?: StructuralLoadGroupType;
|
|
40
|
+
ActionType: StructuralActionType;
|
|
41
|
+
ActionSource: StructuralActionSourceType;
|
|
42
|
+
Coefficient?: number;
|
|
43
|
+
Purpose?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Exactly 3 ratios `[x, y, z]`. Presence emits `IfcStructuralLoadCase`
|
|
46
|
+
* instead of `IfcStructuralLoadGroup` and forces `PredefinedType` to
|
|
47
|
+
* `'LOAD_CASE'` (see the EXPRESS WHERE rule in the module doc) — passing
|
|
48
|
+
* both this AND a conflicting `PredefinedType` is refused rather than
|
|
49
|
+
* silently overridden.
|
|
50
|
+
*/
|
|
51
|
+
SelfWeightCoefficients?: [number, number, number];
|
|
52
|
+
/** Explicit GlobalId (22-char IFC GUID); generated when omitted. */
|
|
53
|
+
GlobalId?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface StructuralLoadGroupBuildResult {
|
|
56
|
+
loadGroupId: number;
|
|
57
|
+
/** `'IfcStructuralLoadCase'` when `SelfWeightCoefficients` was supplied, else `'IfcStructuralLoadGroup'`. */
|
|
58
|
+
type: 'IfcStructuralLoadGroup' | 'IfcStructuralLoadCase';
|
|
59
|
+
}
|
|
60
|
+
export declare function addStructuralLoadGroupToStore(editor: StoreEditor, anchor: Pick<SpatialAnchor, 'ownerHistoryId' | 'guidRandom' | 'schema'>, params: StructuralLoadGroupInStoreParams): StructuralLoadGroupBuildResult;
|
|
61
|
+
//# sourceMappingURL=structural-load-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-load-group.d.ts","sourceRoot":"","sources":["../../src/in-store/structural-load-group.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,WAAW,GAAG,kBAAkB,GAAG,aAAa,GAAG,YAAY,CAAC;AACrH,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAAG,YAAY,CAAC;AACnH,MAAM,MAAM,0BAA0B,GAClC,aAAa,GAAG,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,gBAAgB,GACxF,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAC/F,UAAU,GAAG,UAAU,GAAG,qBAAqB,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,GACpG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,CAAC;AAElF,MAAM,WAAW,gCAAgC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gIAAgI;IAChI,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,EAAE,0BAA0B,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,6GAA6G;IAC7G,IAAI,EAAE,wBAAwB,GAAG,uBAAuB,CAAC;CAC1D;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAAC,EACvE,MAAM,EAAE,gCAAgC,GACvC,8BAA8B,CAyChC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { ownerHistoryRef, productGuid } from './_emit-helpers.js';
|
|
5
|
+
export function addStructuralLoadGroupToStore(editor, anchor, params) {
|
|
6
|
+
if (anchor.schema === 'IFC2X3') {
|
|
7
|
+
throw new Error('addStructuralLoadGroupToStore: IFC2X3 has no IfcStructuralLoadGroup — target IFC4 or later');
|
|
8
|
+
}
|
|
9
|
+
const isLoadCase = params.SelfWeightCoefficients !== undefined;
|
|
10
|
+
if (isLoadCase && params.PredefinedType !== undefined && params.PredefinedType !== 'LOAD_CASE') {
|
|
11
|
+
throw new Error(`addStructuralLoadGroupToStore: SelfWeightCoefficients requires PredefinedType 'LOAD_CASE' `
|
|
12
|
+
+ `(EXPRESS IsLoadCasePredefinedType), got '${params.PredefinedType}'`);
|
|
13
|
+
}
|
|
14
|
+
const predefinedType = params.PredefinedType ?? (isLoadCase ? 'LOAD_CASE' : 'LOAD_GROUP');
|
|
15
|
+
if ((predefinedType === 'USERDEFINED' || params.ActionType === 'USERDEFINED' || params.ActionSource === 'USERDEFINED')
|
|
16
|
+
&& !params.ObjectType) {
|
|
17
|
+
throw new Error('addStructuralLoadGroupToStore: ObjectType is required when PredefinedType, ActionType, or ActionSource is USERDEFINED');
|
|
18
|
+
}
|
|
19
|
+
const baseAttrs = [
|
|
20
|
+
productGuid(params, anchor.guidRandom),
|
|
21
|
+
ownerHistoryRef(anchor.ownerHistoryId),
|
|
22
|
+
params.Name ?? (isLoadCase ? 'Load Case' : 'Load Group'),
|
|
23
|
+
params.Description ?? null,
|
|
24
|
+
params.ObjectType ?? null,
|
|
25
|
+
`.${predefinedType}.`,
|
|
26
|
+
`.${params.ActionType}.`,
|
|
27
|
+
`.${params.ActionSource}.`,
|
|
28
|
+
params.Coefficient ?? null,
|
|
29
|
+
params.Purpose ?? null,
|
|
30
|
+
];
|
|
31
|
+
const type = isLoadCase ? 'IfcStructuralLoadCase' : 'IfcStructuralLoadGroup';
|
|
32
|
+
const attrs = isLoadCase
|
|
33
|
+
? [...baseAttrs, [...params.SelfWeightCoefficients]]
|
|
34
|
+
: baseAttrs;
|
|
35
|
+
const loadGroupId = editor.addEntity(type, attrs).expressId;
|
|
36
|
+
return { loadGroupId, type };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=structural-load-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-load-group.js","sourceRoot":"","sources":["../../src/in-store/structural-load-group.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAiC/D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsClE,MAAM,UAAU,6BAA6B,CAC3C,MAAmB,EACnB,MAAuE,EACvE,MAAwC;IAExC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,sBAAsB,KAAK,SAAS,CAAC;IAC/D,IAAI,UAAU,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CACb,4FAA4F;cAC1F,4CAA4C,MAAM,CAAC,cAAc,GAAG,CACvE,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1F,IACE,CAAC,cAAc,KAAK,aAAa,IAAI,MAAM,CAAC,UAAU,KAAK,aAAa,IAAI,MAAM,CAAC,YAAY,KAAK,aAAa,CAAC;WAC/G,CAAC,MAAM,CAAC,UAAU,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAc;QAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;QACtC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QACxD,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,UAAU,IAAI,IAAI;QACzB,IAAI,cAAc,GAAG;QACrB,IAAI,MAAM,CAAC,UAAU,GAAG;QACxB,IAAI,MAAM,CAAC,YAAY,GAAG;QAC1B,MAAM,CAAC,WAAW,IAAI,IAAI;QAC1B,MAAM,CAAC,OAAO,IAAI,IAAI;KACvB,CAAC;IAEF,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC7E,MAAM,KAAK,GAAG,UAAU;QACtB,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAI,MAAM,CAAC,sBAAmD,CAAC,CAAC;QAClF,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAgD,CAAC,CAAC,SAAS,CAAC;IACvG,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC"}
|