abstract-3d 0.1.21 → 0.1.23

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.
Files changed (47) hide show
  1. package/lib/abstract-3d.js +2 -2
  2. package/lib/abstract-3d.js.map +1 -1
  3. package/lib/renderers/index.d.ts +1 -0
  4. package/lib/renderers/index.d.ts.map +1 -1
  5. package/lib/renderers/index.js +1 -0
  6. package/lib/renderers/index.js.map +1 -1
  7. package/lib/renderers/shared.d.ts +5 -0
  8. package/lib/renderers/shared.d.ts.map +1 -1
  9. package/lib/renderers/shared.js +8 -1
  10. package/lib/renderers/shared.js.map +1 -1
  11. package/lib/renderers/step/index.d.ts +2 -0
  12. package/lib/renderers/step/index.d.ts.map +1 -0
  13. package/lib/renderers/step/index.js +18 -0
  14. package/lib/renderers/step/index.js.map +1 -0
  15. package/lib/renderers/step/step-defintion.d.ts +1 -0
  16. package/lib/renderers/step/step-defintion.d.ts.map +1 -0
  17. package/lib/renderers/step/step-defintion.js +7 -0
  18. package/lib/renderers/step/step-defintion.js.map +1 -0
  19. package/lib/renderers/step/step-encoding.d.ts +48 -0
  20. package/lib/renderers/step/step-encoding.d.ts.map +1 -0
  21. package/lib/renderers/step/step-encoding.js +107 -0
  22. package/lib/renderers/step/step-encoding.js.map +1 -0
  23. package/lib/renderers/step/step-geometries/step-box.d.ts +4 -0
  24. package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -0
  25. package/lib/renderers/step/step-geometries/step-box.js +75 -0
  26. package/lib/renderers/step/step-geometries/step-box.js.map +1 -0
  27. package/lib/renderers/step/step-geometries/step-plane.d.ts +4 -0
  28. package/lib/renderers/step/step-geometries/step-plane.d.ts.map +1 -0
  29. package/lib/renderers/step/step-geometries/step-plane.js +32 -0
  30. package/lib/renderers/step/step-geometries/step-plane.js.map +1 -0
  31. package/lib/renderers/step/step.d.ts +4 -0
  32. package/lib/renderers/step/step.d.ts.map +1 -0
  33. package/lib/renderers/step/step.js +72 -0
  34. package/lib/renderers/step/step.js.map +1 -0
  35. package/package.json +3 -3
  36. package/src/abstract-3d.ts +2 -2
  37. package/src/renderers/index.ts +1 -0
  38. package/src/renderers/shared.ts +6 -0
  39. package/src/renderers/step/index.ts +1 -0
  40. package/src/renderers/step/step-encoding.ts +175 -0
  41. package/src/renderers/step/step-geometries/step-box.ts +191 -0
  42. package/src/renderers/step/step-geometries/step-plane.ts +90 -0
  43. package/src/renderers/step/step.ts +61 -0
  44. package/lib/json-schema.d.ts +0 -1
  45. package/lib/json-schema.d.ts.map +0 -1
  46. package/lib/json-schema.js +0 -1
  47. package/lib/json-schema.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../../src/renderers/step/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAczC,eAAO,MAAM,OAAO,UAAW,IAAI,KAAK,KAAG,MAO1C,CAAC;AAEF,eAAO,MAAM,MAAM,UAAW,IAAI,KAAK,KAAG,MAgBzC,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.toStep = exports.toStep2 = void 0;
27
+ const A3D = __importStar(require("../../abstract-3d"));
28
+ const step_encoding_1 = require("./step-encoding");
29
+ const step_box_1 = require("./step-geometries/step-box");
30
+ const step_plane_1 = require("./step-geometries/step-plane");
31
+ const toStep2 = (scene) => {
32
+ const start = performance.now();
33
+ for (let i = 0; i < 100; i++) {
34
+ (0, exports.toStep)(scene);
35
+ }
36
+ console.log((performance.now() - start) / 100);
37
+ return "";
38
+ };
39
+ exports.toStep2 = toStep2;
40
+ const toStep = (scene) => {
41
+ var _a, _b;
42
+ const m = { refs: new Map([]), step: "" };
43
+ (0, step_encoding_1.GEOMETRIC_REPRESENTATION_CONTEXT_3D)((0, step_encoding_1.LENGTH_UNIT)(m), (0, step_encoding_1.NAMED_UNIT)("PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.)", m), (0, step_encoding_1.NAMED_UNIT)("SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT()", m), m);
44
+ (0, step_encoding_1.UNCERTAINTY_MEASURE_WITH_UNIT)((0, step_encoding_1.LENGTH_UNIT)(m), m);
45
+ (0, step_encoding_1.GEOMETRIC_REPRESENTATION_CONTEXT_2D)(m);
46
+ for (const g of scene.groups) {
47
+ stepGroup(g, (_a = scene.center_deprecated) !== null && _a !== void 0 ? _a : A3D.vec3Zero, (_b = scene.rotation_deprecated) !== null && _b !== void 0 ? _b : A3D.vec3Zero, m);
48
+ }
49
+ return `${(0, step_encoding_1.HEADER)()}${m.step}${(0, step_encoding_1.ENDSEC)()}`;
50
+ };
51
+ exports.toStep = toStep;
52
+ function stepGroup(g, parentPos, parentRot, m) {
53
+ var _a, _b, _c;
54
+ const pos = A3D.vec3TransRot(g.pos, parentPos, parentRot);
55
+ const rot = A3D.vec3RotCombine(parentRot, (_a = g.rot) !== null && _a !== void 0 ? _a : A3D.vec3Zero);
56
+ for (const mesh of (_b = g.meshes) !== null && _b !== void 0 ? _b : []) {
57
+ switch (mesh.geometry.type) {
58
+ case "Box":
59
+ (0, step_box_1.stepBox)(mesh.geometry, mesh.material, pos, rot, m);
60
+ break;
61
+ case "Plane":
62
+ (0, step_plane_1.stepPlane)(mesh.geometry, mesh.material, pos, rot, m);
63
+ break;
64
+ default:
65
+ break;
66
+ }
67
+ }
68
+ for (const c of (_c = g.groups) !== null && _c !== void 0 ? _c : []) {
69
+ stepGroup(c, pos, rot, m);
70
+ }
71
+ }
72
+ //# sourceMappingURL=step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/renderers/step/step.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAyC;AACzC,mDASyB;AACzB,yDAAqD;AACrD,6DAAyD;AAElD,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAU,EAAE;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAPW,QAAA,OAAO,WAOlB;AAEK,MAAM,MAAM,GAAG,CAAC,KAAgB,EAAU,EAAE;;IACjD,MAAM,CAAC,GAAgB,EAAE,IAAI,EAAE,IAAI,GAAG,CAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvE,IAAA,mDAAmC,EACjC,IAAA,2BAAW,EAAC,CAAC,CAAC,EACd,IAAA,0BAAU,EAAC,wCAAwC,EAAE,CAAC,CAAC,EACvD,IAAA,0BAAU,EAAC,2CAA2C,EAAE,CAAC,CAAC,EAC1D,CAAC,CACF,CAAC;IACF,IAAA,6CAA6B,EAAC,IAAA,2BAAW,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,IAAA,mDAAmC,EAAC,CAAC,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,SAAS,CAAC,CAAC,EAAE,MAAA,KAAK,CAAC,iBAAiB,mCAAI,GAAG,CAAC,QAAQ,EAAE,MAAA,KAAK,CAAC,mBAAmB,mCAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,OAAO,GAAG,IAAA,sBAAM,GAAE,GAAG,CAAC,CAAC,IAAI,GAAG,IAAA,sBAAM,GAAE,EAAE,CAAC;AAC3C,CAAC,CAAC;AAhBW,QAAA,MAAM,UAgBjB;AAEF,SAAS,SAAS,CAAC,CAAY,EAAE,SAAmB,EAAE,SAAmB,EAAE,CAAc;;IACvF,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,MAAA,CAAC,CAAC,GAAG,mCAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,MAAA,CAAC,CAAC,MAAM,mCAAI,EAAE,EAAE,CAAC;QAClC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,KAAK;gBACR,IAAA,kBAAO,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,OAAO;gBACV,IAAA,sBAAS,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrD,MAAM;YACR;gBACE,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,MAAA,CAAC,CAAC,MAAM,mCAAI,EAAE,EAAE,CAAC;QAC/B,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abstract-3d",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Abstract 3D",
5
5
  "author": "Divid AB <info@divid.se>",
6
6
  "repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-3d",
@@ -15,7 +15,7 @@
15
15
  "package.json"
16
16
  ],
17
17
  "dependencies": {
18
- "@react-three/drei": "9.93.0",
18
+ "@react-three/drei": "^9.112.0",
19
19
  "@react-three/fiber": "^8.16.8",
20
20
  "react": "^18.3.1",
21
21
  "suspend-react": "^0.1.3",
@@ -27,5 +27,5 @@
27
27
  "@types/react-reconciler": "^0.28.8",
28
28
  "@types/three": "0.165.0"
29
29
  },
30
- "gitHead": "95de1ee0f4001498de56e5fe30666b2ec7bd2217"
30
+ "gitHead": "cd5ca5008d8010f991841dccc8a93a958f115b2e"
31
31
  }
@@ -233,8 +233,8 @@ export const vec3PosX = vec3(1, 0, 0);
233
233
  export const vec3NegX = vec3(-1, 0, 0);
234
234
  export const vec3PosY = vec3(0, 1, 0);
235
235
  export const vec3NegY = vec3(0, -1, 0);
236
- export const vec3PosZ = vec3(0, 1, 0);
237
- export const vec3NegZ = vec3(0, -1, 0);
236
+ export const vec3PosZ = vec3(0, 0, 1);
237
+ export const vec3NegZ = vec3(0, 0, -1);
238
238
 
239
239
  export const vec2Zero = vec2(0, 0);
240
240
 
@@ -2,3 +2,4 @@ export * from "./dxf";
2
2
  export * from "./svg";
3
3
  export * from "./stl";
4
4
  export * from "./react";
5
+ export * from "./step";
@@ -50,6 +50,12 @@ export function rotationForCameraPos(view: View): Vec3 {
50
50
  }
51
51
  }
52
52
 
53
+ export function parseRgb(color: string): { readonly r: number; readonly g: number; readonly b: number } {
54
+ const parts = color.split("(")[1]?.slice(0, -1).split(",");
55
+ const rgb = { r: Number(parts?.[0] ?? 0), g: Number(parts?.[1] ?? 0), b: Number(parts?.[2] ?? 0) };
56
+ return rgb;
57
+ }
58
+
53
59
  export function rgbGray(color: string): string {
54
60
  const parts = color.split("(")[1]?.slice(0, -1).split(",");
55
61
  const c = Number(parts?.[0] ?? 416) * 0.3 + Number(parts?.[1] ?? 212) * 0.587 + Number(parts?.[2] ?? 1100) * 0.114;
@@ -0,0 +1 @@
1
+ export * from "./step";
@@ -0,0 +1,175 @@
1
+ import { Vec3 } from "../../abstract-3d";
2
+
3
+ export type MutableStep = { refs: Map<string, number>; step: string };
4
+
5
+ const mutate = (step: string, m: MutableStep): number => {
6
+ const prevRef = m.refs.get(step);
7
+ if (prevRef !== undefined) {
8
+ return prevRef + 1;
9
+ } else {
10
+ m.refs.set(step, m.refs.size);
11
+ m.step += `
12
+ #${m.refs.size} = ${step};`;
13
+ return m.refs.size;
14
+ }
15
+ };
16
+
17
+ export const HEADER = (): string =>
18
+ `ISO-10303-21
19
+ HEADER;
20
+ FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
21
+ FILE_NAME('Open CASCADE Shape Model','2024-09-10T08:42:01',('Author'),(
22
+ ''),'Open CASCADE STEP processor 7.6','FreeCAD','Unknown');
23
+ FILE_SCHEMA(('AUTOMOTIVE_DESIGN'));
24
+ ENDSEC;
25
+ DATA;`;
26
+
27
+ export const ENDSEC = (): string =>
28
+ `
29
+ ENDSEC;
30
+ END-ISO-10303-21;`;
31
+
32
+ export const CARTESIAN_POINT = (point: Vec3, m: MutableStep): number =>
33
+ mutate(`CARTESIAN_POINT('', (${point.x.toFixed(1)}, ${point.y.toFixed(1)}, ${point.z.toFixed(1)}))`, m);
34
+
35
+ export const DIRECTION = (direction: Vec3, m: MutableStep): number =>
36
+ mutate(`DIRECTION('',(${direction.x.toFixed(1)}, ${direction.y.toFixed(1)}, ${direction.z.toFixed(1)}))`, m);
37
+
38
+ export const VERTEX_POINT = (CARTESIAN_POINT: number, m: MutableStep): number =>
39
+ mutate(`VERTEX_POINT('',#${CARTESIAN_POINT})`, m);
40
+
41
+ export const LINE = (CARTESIAN_POINT: number, VECTOR: number, m: MutableStep): number =>
42
+ mutate(`LINE('',#${CARTESIAN_POINT},#${VECTOR})`, m);
43
+
44
+ export const CIRCLE = (AXIS2_PLACEMENT_3D: number, m: MutableStep): number =>
45
+ mutate(`CIRCLE('',#${AXIS2_PLACEMENT_3D},2.)`, m);
46
+
47
+ export const VECTOR = (DIRECTION: number, m: MutableStep): number => mutate(`VECTOR('',#${DIRECTION},1.)`, m);
48
+
49
+ export const EDGE_CURVE = (VERTEX_POINT_FROM: number, VERTEX_POINT_TO: number, LINE: number, m: MutableStep): number =>
50
+ mutate(`EDGE_CURVE('',#${VERTEX_POINT_TO},#${VERTEX_POINT_FROM},#${LINE},.T.)`, m);
51
+
52
+ export const ORIENTED_EDGE = (EDGE_CURVE: number, m: MutableStep): number =>
53
+ mutate(`ORIENTED_EDGE('',*,*,#${EDGE_CURVE},.F.)`, m);
54
+
55
+ export const ADVANCED_FACE = (faceRef: number, planeRef: number, m: MutableStep): number =>
56
+ mutate(`ADVANCED_FACE('',(#${faceRef}),#${planeRef},.T.)`, m);
57
+
58
+ export const OPEN_SHELL = (ADVANCED_FACE: number, m: MutableStep): number =>
59
+ mutate(`OPEN_SHELL('',(#${ADVANCED_FACE}))`, m);
60
+
61
+ export const FACE_BOUND = (EDGE_CURVE: number, m: MutableStep): number =>
62
+ mutate(`FACE_BOUND('',#${EDGE_CURVE},.T.)`, m);
63
+
64
+ export const EDGE_LOOP = (ORIENTED_EDGE: ReadonlyArray<number>, m: MutableStep): number =>
65
+ mutate(`EDGE_LOOP('',(${ORIENTED_EDGE.map((af) => `#${af}`).join(",")}))`, m);
66
+
67
+ export const PLANE = (AXIS2_PLACEMENT_3D: number, m: MutableStep): number =>
68
+ mutate(`PLANE('',#${AXIS2_PLACEMENT_3D})`, m);
69
+
70
+ export const SHELL_BASED_SURFACE_MODEL = (OPEN_SHELL: number, m: MutableStep): number =>
71
+ mutate(`SHELL_BASED_SURFACE_MODEL('',(#${OPEN_SHELL}))`, m);
72
+
73
+ export const MANIFOLD_SURFACE_SHAPE_REPRESENTATION = (
74
+ AXIS2_PLACEMENT_3D: number,
75
+ CLOSED_SHELL: number,
76
+ m: MutableStep
77
+ ): number => mutate(`MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#${AXIS2_PLACEMENT_3D},#${CLOSED_SHELL}),#4)`, m);
78
+
79
+ export const ADVANCED_BREP_SHAPE_REPRESENTATION = (
80
+ AXIS2_PLACEMENT_3D: number,
81
+ MANIFOLD_SOLID_BREP: number,
82
+ m: MutableStep
83
+ ): number => mutate(`ADVANCED_BREP_SHAPE_REPRESENTATION('',(#${AXIS2_PLACEMENT_3D},#${MANIFOLD_SOLID_BREP}),#4)`, m);
84
+
85
+ export const CLOSED_SHELL = (ADVANCED_FACE: ReadonlyArray<number>, m: MutableStep): number =>
86
+ mutate(`CLOSED_SHELL('', (${ADVANCED_FACE.map((af) => `#${af}`).join(",")}))`, m);
87
+
88
+ export const CLOSED_SHELL2 = (ADVANCED_FACE: number, m: MutableStep): number =>
89
+ mutate(`CLOSED_SHELL('', (#${ADVANCED_FACE}))`, m);
90
+
91
+ export const MANIFOLD_SOLID_BREP = (closedRef: number, m: MutableStep): number =>
92
+ mutate(`MANIFOLD_SOLID_BREP('', #${closedRef})`, m);
93
+
94
+ export const AXIS2_PLACEMENT_3D = (
95
+ CARTESIAN_POINT: number,
96
+ DIRECTION_NORMAL: number,
97
+ DIRECTION_PLANE_DIRECITON: number,
98
+ m: MutableStep
99
+ ): number => mutate(`AXIS2_PLACEMENT_3D('',#${CARTESIAN_POINT},#${DIRECTION_NORMAL},#${DIRECTION_PLANE_DIRECITON})`, m);
100
+
101
+ export const MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION = (STYLED_ITEM: number, m: MutableStep): number =>
102
+ mutate(`MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#${STYLED_ITEM}),#4)`, m);
103
+
104
+ export const STYLED_ITEM = (
105
+ PRESENTATION_STYLE_ASSIGNMENT: number,
106
+ MANIFOLD_SOLID_BREP: number,
107
+ m: MutableStep
108
+ ): number => mutate(`STYLED_ITEM('color',(#${PRESENTATION_STYLE_ASSIGNMENT}),#${MANIFOLD_SOLID_BREP})`, m);
109
+
110
+ export const PRESENTATION_STYLE_ASSIGNMENT = (
111
+ SURFACE_STYLE_USAGE: number,
112
+ CURVE_STYLE: number,
113
+ m: MutableStep
114
+ ): number => mutate(`PRESENTATION_STYLE_ASSIGNMENT((#${SURFACE_STYLE_USAGE},#${CURVE_STYLE}))`, m);
115
+
116
+ export const SURFACE_STYLE_USAGE = (SURFACE_SIDE_STYLE: number, m: MutableStep): number =>
117
+ mutate(`SURFACE_STYLE_USAGE(.BOTH.,#${SURFACE_SIDE_STYLE})`, m);
118
+
119
+ export const SURFACE_SIDE_STYLE = (SURFACE_STYLE_FILL_AREA: number, m: MutableStep): number =>
120
+ mutate(`SURFACE_SIDE_STYLE('',(#${SURFACE_STYLE_FILL_AREA}))`, m);
121
+
122
+ export const SURFACE_STYLE_FILL_AREA = (FILL_AREA_STYLE: number, m: MutableStep): number =>
123
+ mutate(`SURFACE_STYLE_FILL_AREA(#${FILL_AREA_STYLE})`, m);
124
+
125
+ export const FILL_AREA_STYLE = (FILL_AREA_STYLE_COLOUR: number, m: MutableStep): number =>
126
+ mutate(`FILL_AREA_STYLE('',(#${FILL_AREA_STYLE_COLOUR}))`, m);
127
+
128
+ export const FILL_AREA_STYLE_COLOUR = (COLOUR_RGB: number, m: MutableStep): number =>
129
+ mutate(`FILL_AREA_STYLE_COLOUR('',#${COLOUR_RGB})`, m);
130
+
131
+ export const CURVE_STYLE = (DRAUGHTING_PRE_DEFINED_CURVE_FONT: number, COLOUR_RGB: number, m: MutableStep): number =>
132
+ mutate(`CURVE_STYLE('',#${DRAUGHTING_PRE_DEFINED_CURVE_FONT},POSITIVE_LENGTH_MEASURE(0.1),#${COLOUR_RGB})`, m);
133
+
134
+ export const COLOUR_RGB = (color: { r: number; g: number; b: number }, m: MutableStep): number =>
135
+ mutate(`COLOUR_RGB('',${(color.r / 255).toFixed(3)},${(color.g / 255).toFixed(3)},${(color.b / 255).toFixed(3)})`, m);
136
+
137
+ export const DRAUGHTING_PRE_DEFINED_CURVE_FONT = (curve: "continuous", m: MutableStep): number =>
138
+ mutate(`DRAUGHTING_PRE_DEFINED_CURVE_FONT(${curve})`, m);
139
+
140
+ export const GEOMETRIC_REPRESENTATION_CONTEXT_3D = (
141
+ LENGTH_UNIT: number,
142
+ NAMED_UNIT_PLANE_ANGLE_UNIT: number,
143
+ NAMED_UNIT_SOLID_ANGLE: number,
144
+ m: MutableStep
145
+ ): number =>
146
+ mutate(
147
+ `( GEOMETRIC_REPRESENTATION_CONTEXT(3)
148
+ GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
149
+ (#${LENGTH_UNIT},#${NAMED_UNIT_PLANE_ANGLE_UNIT},#${NAMED_UNIT_SOLID_ANGLE})) REPRESENTATION_CONTEXT('Context #4',
150
+ '3D Context with UNIT and UNCERTAINTY') )`,
151
+ m
152
+ );
153
+
154
+ export const GEOMETRIC_REPRESENTATION_CONTEXT_2D = (m: MutableStep): number =>
155
+ mutate(
156
+ `( GEOMETRIC_REPRESENTATION_CONTEXT(2)
157
+ PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
158
+ ) )`,
159
+ m
160
+ );
161
+
162
+ export const LENGTH_UNIT = (m: MutableStep): number =>
163
+ mutate(`( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) )`, m);
164
+
165
+ export const NAMED_UNIT = (
166
+ unit: "PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.)" | "SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT()",
167
+ m: MutableStep
168
+ ): number => mutate(`( NAMED_UNIT(*) ${unit} )`, m);
169
+
170
+ export const UNCERTAINTY_MEASURE_WITH_UNIT = (LENGTH_UNIT: number, m: MutableStep): number =>
171
+ mutate(
172
+ `UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#${LENGTH_UNIT},
173
+ 'distance_accuracy_value','confusion accuracy')`,
174
+ m
175
+ );
@@ -0,0 +1,191 @@
1
+ import {
2
+ Box,
3
+ Material,
4
+ Vec3,
5
+ vec3Scale,
6
+ vec3TransRot,
7
+ vec3RotCombine,
8
+ vec3Zero,
9
+ vec3,
10
+ vec3PosX,
11
+ vec3PosY,
12
+ vec3PosZ,
13
+ vec3NegX,
14
+ vec3NegY,
15
+ vec3NegZ,
16
+ } from "../../../abstract-3d";
17
+ import { parseRgb } from "../../shared";
18
+ import {
19
+ ADVANCED_BREP_SHAPE_REPRESENTATION,
20
+ ADVANCED_FACE,
21
+ AXIS2_PLACEMENT_3D,
22
+ CARTESIAN_POINT,
23
+ CLOSED_SHELL,
24
+ COLOUR_RGB,
25
+ CURVE_STYLE,
26
+ DIRECTION,
27
+ DRAUGHTING_PRE_DEFINED_CURVE_FONT,
28
+ EDGE_CURVE,
29
+ EDGE_LOOP,
30
+ FACE_BOUND,
31
+ FILL_AREA_STYLE_COLOUR,
32
+ LINE,
33
+ MANIFOLD_SOLID_BREP,
34
+ MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION,
35
+ MutableStep,
36
+ ORIENTED_EDGE,
37
+ PLANE,
38
+ PRESENTATION_STYLE_ASSIGNMENT,
39
+ STYLED_ITEM,
40
+ SURFACE_SIDE_STYLE,
41
+ SURFACE_STYLE_FILL_AREA,
42
+ SURFACE_STYLE_USAGE,
43
+ VECTOR,
44
+ VERTEX_POINT,
45
+ } from "../step-encoding";
46
+
47
+ export function stepBox(b: Box, mat: Material, parentPos: Vec3, parentRot: Vec3, m: MutableStep): void {
48
+ const half = vec3Scale(b.size, 0.5);
49
+ const pos = vec3TransRot(b.pos, parentPos, parentRot);
50
+ const rot = vec3RotCombine(parentRot, b.rot ?? vec3Zero);
51
+ const cart3tr = (x: number, y: number, z: number): number =>
52
+ CARTESIAN_POINT(vec3TransRot(vec3(x, y, z), pos, rot), m);
53
+ const v0 = VECTOR(DIRECTION(vec3Zero, m), m);
54
+ const c0 = CARTESIAN_POINT(vec3Zero, m);
55
+ const [c1, c2] = [cart3tr(-half.x, -half.y, -half.z), cart3tr(half.x, -half.y, -half.z)];
56
+ const [c3, c4] = [cart3tr(half.x, half.y, -half.z), cart3tr(-half.x, half.y, -half.z)];
57
+ const [c5, c6] = [cart3tr(-half.x, -half.y, half.z), cart3tr(half.x, -half.y, half.z)];
58
+ const [c7, c8] = [cart3tr(half.x, half.y, half.z), cart3tr(-half.x, half.y, half.z)];
59
+ const [v1, v2, v3, v4] = [VERTEX_POINT(c1, m), VERTEX_POINT(c2, m), VERTEX_POINT(c3, m), VERTEX_POINT(c4, m)];
60
+ const [v5, v6, v7, v8] = [VERTEX_POINT(c5, m), VERTEX_POINT(c6, m), VERTEX_POINT(c7, m), VERTEX_POINT(c8, m)];
61
+ const [l1, l2, l3, l4] = [LINE(c1, v0, m), LINE(c2, v0, m), LINE(c3, v0, m), LINE(c4, v0, m)];
62
+ const [l5, l6, l7, l8] = [LINE(c5, v0, m), LINE(c6, v0, m), LINE(c7, v0, m), LINE(c8, v0, m)];
63
+ const [d1, d2] = [DIRECTION(vec3RotCombine(vec3PosX, rot), m), DIRECTION(vec3RotCombine(vec3PosY, rot), m)];
64
+ const [d3, d4] = [DIRECTION(vec3RotCombine(vec3PosZ, rot), m), DIRECTION(vec3RotCombine(vec3NegX, rot), m)];
65
+ const [d5, d6] = [DIRECTION(vec3RotCombine(vec3NegY, rot), m), DIRECTION(vec3RotCombine(vec3NegZ, rot), m)];
66
+ const color = COLOUR_RGB(parseRgb(mat.normal), m);
67
+
68
+ const msb = MANIFOLD_SOLID_BREP(
69
+ CLOSED_SHELL(
70
+ [
71
+ // Front
72
+ ADVANCED_FACE(
73
+ FACE_BOUND(
74
+ EDGE_LOOP(
75
+ [
76
+ ORIENTED_EDGE(EDGE_CURVE(v1, v2, l1, m), m),
77
+ ORIENTED_EDGE(EDGE_CURVE(v2, v3, l2, m), m),
78
+ ORIENTED_EDGE(EDGE_CURVE(v3, v4, l3, m), m),
79
+ ORIENTED_EDGE(EDGE_CURVE(v4, v1, l4, m), m),
80
+ ],
81
+ m
82
+ ),
83
+ m
84
+ ),
85
+ PLANE(AXIS2_PLACEMENT_3D(c0, d3, d1, m), m),
86
+ m
87
+ ),
88
+ // Back
89
+ ADVANCED_FACE(
90
+ FACE_BOUND(
91
+ EDGE_LOOP(
92
+ [
93
+ ORIENTED_EDGE(EDGE_CURVE(v8, v7, l8, m), m),
94
+ ORIENTED_EDGE(EDGE_CURVE(v7, v6, l7, m), m),
95
+ ORIENTED_EDGE(EDGE_CURVE(v6, v5, l6, m), m),
96
+ ORIENTED_EDGE(EDGE_CURVE(v5, v8, l5, m), m),
97
+ ],
98
+ m
99
+ ),
100
+ m
101
+ ),
102
+ PLANE(AXIS2_PLACEMENT_3D(c0, d6, d4, m), m),
103
+ m
104
+ ),
105
+ // Left
106
+ ADVANCED_FACE(
107
+ FACE_BOUND(
108
+ EDGE_LOOP(
109
+ [
110
+ ORIENTED_EDGE(EDGE_CURVE(v1, v5, l1, m), m),
111
+ ORIENTED_EDGE(EDGE_CURVE(v5, v8, l5, m), m),
112
+ ORIENTED_EDGE(EDGE_CURVE(v8, v4, l8, m), m),
113
+ ORIENTED_EDGE(EDGE_CURVE(v4, v1, l4, m), m),
114
+ ],
115
+ m
116
+ ),
117
+ m
118
+ ),
119
+ PLANE(AXIS2_PLACEMENT_3D(c0, d4, d3, m), m),
120
+ m
121
+ ),
122
+ // Right
123
+ ADVANCED_FACE(
124
+ FACE_BOUND(
125
+ EDGE_LOOP(
126
+ [
127
+ ORIENTED_EDGE(EDGE_CURVE(v2, v6, l2, m), m),
128
+ ORIENTED_EDGE(EDGE_CURVE(v6, v7, l6, m), m),
129
+ ORIENTED_EDGE(EDGE_CURVE(v7, v3, l7, m), m),
130
+ ORIENTED_EDGE(EDGE_CURVE(v3, v2, l3, m), m),
131
+ ],
132
+ m
133
+ ),
134
+ m
135
+ ),
136
+ PLANE(AXIS2_PLACEMENT_3D(c0, d1, d6, m), m),
137
+ m
138
+ ),
139
+ // Top
140
+ ADVANCED_FACE(
141
+ FACE_BOUND(
142
+ EDGE_LOOP(
143
+ [
144
+ ORIENTED_EDGE(EDGE_CURVE(v4, v8, l4, m), m),
145
+ ORIENTED_EDGE(EDGE_CURVE(v8, v7, l8, m), m),
146
+ ORIENTED_EDGE(EDGE_CURVE(v7, v3, l7, m), m),
147
+ ORIENTED_EDGE(EDGE_CURVE(v3, v4, l3, m), m),
148
+ ],
149
+ m
150
+ ),
151
+ m
152
+ ),
153
+ PLANE(AXIS2_PLACEMENT_3D(c0, d2, d1, m), m),
154
+ m
155
+ ),
156
+ // Bottom
157
+ ADVANCED_FACE(
158
+ FACE_BOUND(
159
+ EDGE_LOOP(
160
+ [
161
+ ORIENTED_EDGE(EDGE_CURVE(v1, v2, l1, m), m),
162
+ ORIENTED_EDGE(EDGE_CURVE(v2, v6, l2, m), m),
163
+ ORIENTED_EDGE(EDGE_CURVE(v6, v5, l6, m), m),
164
+ ORIENTED_EDGE(EDGE_CURVE(v5, v1, l5, m), m),
165
+ ],
166
+ m
167
+ ),
168
+ m
169
+ ),
170
+ PLANE(AXIS2_PLACEMENT_3D(c0, d5, d4, m), m),
171
+ m
172
+ ),
173
+ ],
174
+ m
175
+ ),
176
+ m
177
+ );
178
+ ADVANCED_BREP_SHAPE_REPRESENTATION(AXIS2_PLACEMENT_3D(c0, DIRECTION(vec3PosZ, m), DIRECTION(vec3PosX, m), m), msb, m);
179
+ MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION(
180
+ STYLED_ITEM(
181
+ PRESENTATION_STYLE_ASSIGNMENT(
182
+ SURFACE_STYLE_USAGE(SURFACE_SIDE_STYLE(SURFACE_STYLE_FILL_AREA(FILL_AREA_STYLE_COLOUR(color, m), m), m), m),
183
+ CURVE_STYLE(DRAUGHTING_PRE_DEFINED_CURVE_FONT("continuous", m), color, m),
184
+ m
185
+ ),
186
+ msb,
187
+ m
188
+ ),
189
+ m
190
+ );
191
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ Plane,
3
+ Material,
4
+ Vec3,
5
+ vec2Scale,
6
+ vec3TransRot,
7
+ vec3RotCombine,
8
+ vec3Zero,
9
+ vec3,
10
+ vec3PosX,
11
+ vec3PosZ,
12
+ } from "../../../abstract-3d";
13
+ import { parseRgb } from "../../shared";
14
+ import {
15
+ ADVANCED_FACE,
16
+ AXIS2_PLACEMENT_3D,
17
+ CARTESIAN_POINT,
18
+ COLOUR_RGB,
19
+ CURVE_STYLE,
20
+ DIRECTION,
21
+ DRAUGHTING_PRE_DEFINED_CURVE_FONT,
22
+ EDGE_CURVE,
23
+ EDGE_LOOP,
24
+ FACE_BOUND,
25
+ FILL_AREA_STYLE_COLOUR,
26
+ LINE,
27
+ MANIFOLD_SURFACE_SHAPE_REPRESENTATION,
28
+ MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION,
29
+ MutableStep,
30
+ OPEN_SHELL,
31
+ ORIENTED_EDGE,
32
+ PLANE,
33
+ PRESENTATION_STYLE_ASSIGNMENT,
34
+ SHELL_BASED_SURFACE_MODEL,
35
+ STYLED_ITEM,
36
+ SURFACE_SIDE_STYLE,
37
+ SURFACE_STYLE_FILL_AREA,
38
+ SURFACE_STYLE_USAGE,
39
+ VECTOR,
40
+ VERTEX_POINT,
41
+ } from "../step-encoding";
42
+
43
+ export function stepPlane(p: Plane, mat: Material, parentPos: Vec3, parentRot: Vec3, m: MutableStep): void {
44
+ const half = vec2Scale(p.size, 0.5);
45
+ const pos = vec3TransRot(p.pos, parentPos, parentRot);
46
+ const rot = vec3RotCombine(parentRot, p.rot ?? vec3Zero);
47
+ const cart3tr = (x: number, y: number): number => CARTESIAN_POINT(vec3TransRot(vec3(x, y, 0), pos, rot), m);
48
+ const v0 = VECTOR(DIRECTION(vec3Zero, m), m);
49
+ const c0 = CARTESIAN_POINT(vec3Zero, m);
50
+ const [c1, c2] = [cart3tr(-half.x, -half.y), cart3tr(half.x, -half.y)];
51
+ const [c3, c4] = [cart3tr(half.x, half.y), cart3tr(-half.x, half.y)];
52
+ const [v1, v2, v3, v4] = [VERTEX_POINT(c1, m), VERTEX_POINT(c2, m), VERTEX_POINT(c3, m), VERTEX_POINT(c4, m)];
53
+ const [l1, l2, l3, l4] = [LINE(c1, v0, m), LINE(c2, v0, m), LINE(c3, v0, m), LINE(c4, v0, m)];
54
+ const [oe1, oe2, oe3, oe4] = [
55
+ ORIENTED_EDGE(EDGE_CURVE(v1, v2, l1, m), m),
56
+ ORIENTED_EDGE(EDGE_CURVE(v2, v3, l2, m), m),
57
+ ORIENTED_EDGE(EDGE_CURVE(v3, v4, l3, m), m),
58
+ ORIENTED_EDGE(EDGE_CURVE(v4, v1, l4, m), m),
59
+ ];
60
+
61
+ const [d1, d2] = [DIRECTION(vec3RotCombine(vec3PosX, rot), m), DIRECTION(vec3RotCombine(vec3PosZ, rot), m)];
62
+
63
+ const color = COLOUR_RGB(parseRgb(mat.normal), m);
64
+ const sbsm = SHELL_BASED_SURFACE_MODEL(
65
+ OPEN_SHELL(
66
+ ADVANCED_FACE(FACE_BOUND(EDGE_LOOP([oe1, oe2, oe3, oe4], m), m), PLANE(AXIS2_PLACEMENT_3D(c0, d2, d1, m), m), m),
67
+ m
68
+ ),
69
+ m
70
+ );
71
+
72
+ MANIFOLD_SURFACE_SHAPE_REPRESENTATION(
73
+ AXIS2_PLACEMENT_3D(c0, DIRECTION(vec3PosZ, m), DIRECTION(vec3PosX, m), m),
74
+ sbsm,
75
+ m
76
+ );
77
+
78
+ MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION(
79
+ STYLED_ITEM(
80
+ PRESENTATION_STYLE_ASSIGNMENT(
81
+ SURFACE_STYLE_USAGE(SURFACE_SIDE_STYLE(SURFACE_STYLE_FILL_AREA(FILL_AREA_STYLE_COLOUR(color, m), m), m), m),
82
+ CURVE_STYLE(DRAUGHTING_PRE_DEFINED_CURVE_FONT("continuous", m), color, m),
83
+ m
84
+ ),
85
+ sbsm,
86
+ m
87
+ ),
88
+ m
89
+ );
90
+ }
@@ -0,0 +1,61 @@
1
+ import * as A3D from "../../abstract-3d";
2
+ import {
3
+ MutableStep,
4
+ GEOMETRIC_REPRESENTATION_CONTEXT_3D,
5
+ LENGTH_UNIT,
6
+ NAMED_UNIT,
7
+ UNCERTAINTY_MEASURE_WITH_UNIT,
8
+ GEOMETRIC_REPRESENTATION_CONTEXT_2D,
9
+ HEADER,
10
+ ENDSEC,
11
+ } from "./step-encoding";
12
+ import { stepBox } from "./step-geometries/step-box";
13
+ import { stepPlane } from "./step-geometries/step-plane";
14
+
15
+ export const toStep2 = (scene: A3D.Scene): string => {
16
+ const start = performance.now();
17
+ for (let i = 0; i < 100; i++) {
18
+ toStep(scene);
19
+ }
20
+ console.log((performance.now() - start) / 100);
21
+ return "";
22
+ };
23
+
24
+ export const toStep = (scene: A3D.Scene): string => {
25
+ const m: MutableStep = { refs: new Map<string, number>([]), step: "" };
26
+ GEOMETRIC_REPRESENTATION_CONTEXT_3D(
27
+ LENGTH_UNIT(m),
28
+ NAMED_UNIT("PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.)", m),
29
+ NAMED_UNIT("SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT()", m),
30
+ m
31
+ );
32
+ UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_UNIT(m), m);
33
+ GEOMETRIC_REPRESENTATION_CONTEXT_2D(m);
34
+
35
+ for (const g of scene.groups) {
36
+ stepGroup(g, scene.center_deprecated ?? A3D.vec3Zero, scene.rotation_deprecated ?? A3D.vec3Zero, m);
37
+ }
38
+
39
+ return `${HEADER()}${m.step}${ENDSEC()}`;
40
+ };
41
+
42
+ function stepGroup(g: A3D.Group, parentPos: A3D.Vec3, parentRot: A3D.Vec3, m: MutableStep): void {
43
+ const pos = A3D.vec3TransRot(g.pos, parentPos, parentRot);
44
+ const rot = A3D.vec3RotCombine(parentRot, g.rot ?? A3D.vec3Zero);
45
+ for (const mesh of g.meshes ?? []) {
46
+ switch (mesh.geometry.type) {
47
+ case "Box":
48
+ stepBox(mesh.geometry, mesh.material, pos, rot, m);
49
+ break;
50
+ case "Plane":
51
+ stepPlane(mesh.geometry, mesh.material, pos, rot, m);
52
+ break;
53
+ default:
54
+ break;
55
+ }
56
+ }
57
+
58
+ for (const c of g.groups ?? []) {
59
+ stepGroup(c, pos, rot, m);
60
+ }
61
+ }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=json-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=json-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":""}