abstract-3d 1.6.4 → 1.6.6
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/lib/abstract-3d.d.ts +1 -1
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +4 -4
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/dxf/color.d.ts +2 -0
- package/lib/renderers/dxf/color.d.ts.map +1 -1
- package/lib/renderers/dxf/color.js +3 -0
- package/lib/renderers/dxf/color.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding.d.ts +8 -8
- package/lib/renderers/dxf/dxf-encoding.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding.js +36 -112
- package/lib/renderers/dxf/dxf-encoding.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js +7 -8
- package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +7 -8
- package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +13 -16
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js +12 -79
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +2 -2
- package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +5 -5
- package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +37 -13
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +9 -9
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/svg/svg.js +4 -3
- package/lib/renderers/svg/svg.js.map +1 -1
- package/package.json +3 -3
- package/src/abstract-3d.ts +8 -8
- package/src/renderers/dxf/color.ts +5 -0
- package/src/renderers/dxf/dxf-encoding.ts +49 -124
- package/src/renderers/dxf/dxf-geometries/dxf-box.ts +7 -9
- package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +7 -9
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +15 -18
- package/src/renderers/dxf/dxf-geometries/dxf-image.ts +27 -97
- package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +2 -3
- package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +5 -8
- package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +37 -14
- package/src/renderers/dxf/dxf.ts +28 -22
- package/src/renderers/svg/svg.ts +5 -7
- package/src/.DS_Store +0 -0
- package/src/renderers/.DS_Store +0 -0
|
@@ -1,30 +1,54 @@
|
|
|
1
1
|
import { vec3TransRot, vec3RotCombine, vec3Zero, vec3 } from "../../../abstract-3d.js";
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
2
|
+
import { dxfQuad, dxfTriangle } from "../dxf-encoding.js";
|
|
3
|
+
const QUAD_STRIDE = 4;
|
|
4
|
+
const TRIANGLE_STRIDE = 3;
|
|
4
5
|
export function dxfPolygon(s, m, parentPos, parentRot, handleRef) {
|
|
5
6
|
let polygonString = "";
|
|
6
7
|
const pos = vec3TransRot(s.pos, parentPos, parentRot);
|
|
7
8
|
const rot = vec3RotCombine(parentRot, s.rot ?? vec3Zero);
|
|
8
9
|
const points = s.points.map((p) => vec3TransRot(vec3(p.x, p.y, 0), pos, rot));
|
|
9
|
-
const mat = m.normal;
|
|
10
10
|
let i = 0;
|
|
11
|
-
if (points.length >=
|
|
12
|
-
for (i; i < points.length; i +=
|
|
13
|
-
|
|
11
|
+
if (points.length >= QUAD_STRIDE) {
|
|
12
|
+
for (i; i < points.length; i += QUAD_STRIDE) {
|
|
13
|
+
const p1 = points[i];
|
|
14
|
+
const p2 = points[i + 1];
|
|
15
|
+
const p3 = points[i + 2];
|
|
16
|
+
const p4 = points[i + 3];
|
|
17
|
+
if (p1 && p2 && p3 && p4) {
|
|
18
|
+
polygonString += dxfQuad(p1, p2, p3, p4, m.normal, handleRef);
|
|
19
|
+
}
|
|
14
20
|
}
|
|
15
21
|
}
|
|
16
|
-
if (i <= points.length &&
|
|
22
|
+
if (i <= points.length && TRIANGLE_STRIDE <= points.length) {
|
|
17
23
|
const lastArrayLength = points.length - i;
|
|
18
24
|
switch (lastArrayLength) {
|
|
19
|
-
case 1:
|
|
20
|
-
|
|
25
|
+
case 1: {
|
|
26
|
+
const p1 = points[i - 2];
|
|
27
|
+
const p2 = points[i - 1];
|
|
28
|
+
const p3 = points[i];
|
|
29
|
+
if (p1 && p2 && p3) {
|
|
30
|
+
polygonString += dxfTriangle(p1, p2, p3, m.normal, handleRef);
|
|
31
|
+
}
|
|
21
32
|
break;
|
|
22
|
-
|
|
23
|
-
|
|
33
|
+
}
|
|
34
|
+
case 2: {
|
|
35
|
+
const p1 = points[i - 1];
|
|
36
|
+
const p2 = points[i];
|
|
37
|
+
const p3 = points[i + 1];
|
|
38
|
+
if (p1 && p2 && p3) {
|
|
39
|
+
polygonString += dxfTriangle(p1, p2, p3, m.normal, handleRef);
|
|
40
|
+
}
|
|
24
41
|
break;
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
}
|
|
43
|
+
case 3: {
|
|
44
|
+
const p1 = points[i];
|
|
45
|
+
const p2 = points[i + 1];
|
|
46
|
+
const p3 = points[i + 2];
|
|
47
|
+
if (p1 && p2 && p3) {
|
|
48
|
+
polygonString += dxfTriangle(p1, p2, p3, m.normal, handleRef);
|
|
49
|
+
}
|
|
27
50
|
break;
|
|
51
|
+
}
|
|
28
52
|
default:
|
|
29
53
|
break;
|
|
30
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dxf-shape.js","sourceRoot":"","sources":["../../../../src/renderers/dxf/dxf-geometries/dxf-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"dxf-shape.js","sourceRoot":"","sources":["../../../../src/renderers/dxf/dxf-geometries/dxf-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dxf.d.ts","sourceRoot":"","sources":["../../../src/renderers/dxf/dxf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,IAAI,EAIJ,IAAI,
|
|
1
|
+
{"version":3,"file":"dxf.d.ts","sourceRoot":"","sources":["../../../src/renderers/dxf/dxf.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,IAAI,EAIJ,IAAI,EAeL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmD,SAAS,EAAU,MAAM,mBAAmB,CAAC;AAMvG,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CAiBxG;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,UAAU,QAAQ,CAAC,UAAU,CAAC,KAAG,MAKrE,CAAC;AAsGF,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,EAAE,UAAU,QAAQ,CAAC,UAAU,CAAC,KAAG,MA2BxE,CAAC"}
|
package/lib/renderers/dxf/dxf.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { vec3RotCombine, vec3Zero, vec3TransRot, group, bounds3ToSize, vec3, rotationForCameraPos, bounds3FromPosAndSize, bounds3Merge, bounds3Center, vec3Add,
|
|
2
|
-
import { dxf, dxfHandleCreate } from "./dxf-encoding.js";
|
|
1
|
+
import { vec3RotCombine, vec3Zero, vec3TransRot, group, bounds3ToSize, vec3, rotationForCameraPos, bounds3FromPosAndSize, bounds3Merge, bounds3Center, vec3Add, sizeBoundsForCameraPos, boundsScene, vec3Sub, vec3Rot, } from "../../abstract-3d.js";
|
|
2
|
+
import { DEFAULT_CIRCLE_SIDE_COUNT, dxf, dxfHandleCreate } from "./dxf-encoding.js";
|
|
3
3
|
import { dxfPlane } from "./dxf-geometries/dxf-plane.js";
|
|
4
4
|
import { dxfBox } from "./dxf-geometries/dxf-box.js";
|
|
5
5
|
import { dxfCylinder } from "./dxf-geometries/dxf-cylinder.js";
|
|
6
6
|
import { dxfCone } from "./dxf-geometries/dxf-cone.js";
|
|
7
7
|
import { dxfPolygon } from "./dxf-geometries/dxf-polygon.js";
|
|
8
8
|
import { dxfImage } from "./dxf-geometries/dxf-image.js";
|
|
9
|
-
const DEFAULT_CYLINDER_SIDE_COUNT = 18;
|
|
10
9
|
export function renderScenes(scenes, baseOptions) {
|
|
11
10
|
let allGroups = "";
|
|
12
11
|
const allBounds = Array();
|
|
@@ -28,10 +27,11 @@ export const render = (scene, options) => {
|
|
|
28
27
|
};
|
|
29
28
|
const renderInternal = (scene, options, offset, handleRef) => {
|
|
30
29
|
const unitRot = vec3RotCombine(rotationForCameraPos(options.view), scene.rotation_deprecated ?? vec3Zero);
|
|
31
|
-
const
|
|
32
|
-
const
|
|
30
|
+
const rotatedCenter = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, scene.rotation_deprecated ?? vec3Zero);
|
|
31
|
+
const [size] = sizeBoundsForCameraPos(scene.size_deprecated, rotatedCenter, unitRot);
|
|
32
|
+
const bounds = bounds3FromPosAndSize(rotatedCenter, size);
|
|
33
33
|
const dxfOriginOffset = originOffsetFromBounds(bounds, options.origin);
|
|
34
|
-
const pos = vec3NegateY(vec3Add(
|
|
34
|
+
const pos = vec3NegateY(vec3Add(rotatedCenter, vec3Add(offset, dxfOriginOffset)));
|
|
35
35
|
return {
|
|
36
36
|
groups: scene.groups.reduce((a, c) => a + dxfGroup(c, pos, unitRot, options, handleRef), ""),
|
|
37
37
|
size,
|
|
@@ -42,7 +42,7 @@ function vec3NegateY(vec) {
|
|
|
42
42
|
return {
|
|
43
43
|
x: vec.x,
|
|
44
44
|
y: -vec.y,
|
|
45
|
-
z: vec.z
|
|
45
|
+
z: vec.z,
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
function originOffsetFromScenes(scenes, origin) {
|
|
@@ -107,7 +107,7 @@ function optionsDef(options) {
|
|
|
107
107
|
return {
|
|
108
108
|
view: options?.view ?? "front",
|
|
109
109
|
origin: options?.origin ?? "BottomLeftFront",
|
|
110
|
-
cylinderSideCount:
|
|
110
|
+
cylinderSideCount: DEFAULT_CIRCLE_SIDE_COUNT,
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
// This is the original
|
|
@@ -127,7 +127,7 @@ export const renderOld = (scene, options) => {
|
|
|
127
127
|
x: bounds.min.x + offset.x,
|
|
128
128
|
y: bounds.min.y + offset.y,
|
|
129
129
|
z: bounds.min.z + offset.z,
|
|
130
|
-
}
|
|
130
|
+
},
|
|
131
131
|
};
|
|
132
132
|
const bounds2 = bounds3FromPosAndSize(offset, scene.size_deprecated);
|
|
133
133
|
const groupRoot = group([], offset, vec3Zero, scene.groups);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dxf.js","sourceRoot":"","sources":["../../../src/renderers/dxf/dxf.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,cAAc,EACd,QAAQ,EAGR,YAAY,EACZ,KAAK,EACL,aAAa,EACb,IAAI,EACJ,oBAAoB,EACpB,qBAAqB,EAErB,YAAY,EACZ,aAAa,EACb,OAAO,EACP,
|
|
1
|
+
{"version":3,"file":"dxf.js","sourceRoot":"","sources":["../../../src/renderers/dxf/dxf.ts"],"names":[],"mappings":"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"}
|
package/lib/renderers/svg/svg.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
2
|
-
import { vec2, vec3Rot, vec3Zero, vec3RotCombine, vec3, vec3TransRot, rotationForCameraPos,
|
|
2
|
+
import { vec2, vec3Rot, vec3Zero, vec3RotCombine, vec3, vec3TransRot, rotationForCameraPos, sizeBoundsForCameraPos, bounds2FromPosAndSize, bounds2ToSize, bounds2Merge, vec2Zero, vec3Flip, } from "../../abstract-3d.js";
|
|
3
3
|
import { box } from "./svg-geometries/svg-box.js";
|
|
4
4
|
import { cylinder } from "./svg-geometries/svg-cylinder.js";
|
|
5
5
|
import { line } from "./svg-geometries/svg-line.js";
|
|
@@ -42,11 +42,12 @@ function renderInternal(scene, options, offset) {
|
|
|
42
42
|
};
|
|
43
43
|
const baseRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
|
|
44
44
|
const unitRot = opts.rotation ? vec3RotCombine(vec3(0, 0, (opts.rotation * Math.PI) / 180), baseRot) : baseRot;
|
|
45
|
-
const
|
|
45
|
+
const rotatedCenter = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, scene.rotation_deprecated ?? vec3Zero);
|
|
46
|
+
const [unitSize] = sizeBoundsForCameraPos(scene.size_deprecated, rotatedCenter, unitRot);
|
|
46
47
|
const svgSize = vec2(unitSize.x + 1.5 * opts.stroke_thickness, unitSize.y + 1.5 * opts.stroke_thickness);
|
|
47
48
|
const svgCenter = vec2(offset.x + opts.stroke_thickness * 0.75, offset.y + opts.stroke_thickness * 0.75);
|
|
48
49
|
const point = (x, y) => vec2(svgCenter.x + x, svgCenter.y - y);
|
|
49
|
-
const unitCenterFlipped = vec3Flip(
|
|
50
|
+
const unitCenterFlipped = vec3Flip(rotatedCenter);
|
|
50
51
|
const elements = Array();
|
|
51
52
|
for (const g of scene.groups) {
|
|
52
53
|
elements.push(...svgGroup(g, unitCenterFlipped, unitRot, point, opts));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,IAAI,EAMJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,IAAI,EAGJ,YAAY,EAEZ,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-3d",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.6",
|
|
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",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@react-three/drei": "^10.7.6",
|
|
23
23
|
"@react-three/fiber": "^9.4.0",
|
|
24
24
|
"@react-three/postprocessing": "3.0.4",
|
|
25
|
-
"abstract-image": "^13.0.
|
|
25
|
+
"abstract-image": "^13.0.34",
|
|
26
26
|
"suspend-react": "^0.1.3",
|
|
27
27
|
"three": "^0.180.0",
|
|
28
28
|
"ts-exhaustive-check": "^1.0.0"
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"@types/three": "^0.180.0",
|
|
37
37
|
"react": "^19.0.0"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "dbb606e3c3087cff172929e1724d888d5cfa42ef"
|
|
40
40
|
}
|
package/src/abstract-3d.ts
CHANGED
|
@@ -73,9 +73,9 @@ export type Image = {
|
|
|
73
73
|
readonly rot?: Vec3;
|
|
74
74
|
readonly size: Vec2;
|
|
75
75
|
readonly image: {
|
|
76
|
-
readonly type: "AbstractImage"
|
|
77
|
-
readonly image: AbstractImage
|
|
78
|
-
}
|
|
76
|
+
readonly type: "AbstractImage";
|
|
77
|
+
readonly image: AbstractImage;
|
|
78
|
+
};
|
|
79
79
|
};
|
|
80
80
|
|
|
81
81
|
export type Cylinder = {
|
|
@@ -733,7 +733,7 @@ export const image = (
|
|
|
733
733
|
material: Material,
|
|
734
734
|
image: Image["image"],
|
|
735
735
|
pos: Vec3 = vec3Zero,
|
|
736
|
-
rot: Vec3 = vec3Zero
|
|
736
|
+
rot: Vec3 = vec3Zero
|
|
737
737
|
): Mesh => ({
|
|
738
738
|
material,
|
|
739
739
|
geometry: {
|
|
@@ -742,7 +742,7 @@ export const image = (
|
|
|
742
742
|
pos,
|
|
743
743
|
size,
|
|
744
744
|
rot,
|
|
745
|
-
}
|
|
745
|
+
},
|
|
746
746
|
});
|
|
747
747
|
|
|
748
748
|
export const roundHole = (pos: Vec2, radius: number): Hole => ({ type: "RoundHole", pos, radius });
|
|
@@ -840,9 +840,9 @@ export const splineCurve = (points: ReadonlyArray<Vec3>): SplineCurve => ({ type
|
|
|
840
840
|
|
|
841
841
|
// -- Camera
|
|
842
842
|
|
|
843
|
-
export function
|
|
843
|
+
export function sizeBoundsForCameraPos(size: Vec3, center: Vec3, rotation: Vec3): readonly [Vec3, Bounds3] {
|
|
844
844
|
if (isZero(rotation.x) && isZero(rotation.y) && isZero(rotation.z)) {
|
|
845
|
-
return [size,
|
|
845
|
+
return [size, bounds3FromPosAndSize(center, size)];
|
|
846
846
|
}
|
|
847
847
|
|
|
848
848
|
const half = vec3Scale(size, 0.5);
|
|
@@ -858,7 +858,7 @@ export function sizeCenterBoundsForCameraPos(size: Vec3, center: Vec3, rotation:
|
|
|
858
858
|
const v8 = vec3Rot(vec3(min.x, max.y, min.z), center, rotation);
|
|
859
859
|
const bounds = bounds3FromVec3Array([v1, v2, v3, v4, v5, v6, v7, v8]);
|
|
860
860
|
|
|
861
|
-
return [bounds3ToSize(bounds),
|
|
861
|
+
return [bounds3ToSize(bounds), bounds];
|
|
862
862
|
}
|
|
863
863
|
|
|
864
864
|
export function rotationForCameraPos(view: View): Vec3 {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Color } from "abstract-image";
|
|
1
2
|
import { Vec3, vec3, vec3DistSquared } from "../../abstract-3d.js";
|
|
2
3
|
|
|
3
4
|
export function colorToInteger(color: string): number {
|
|
@@ -10,6 +11,10 @@ export function colorToInteger(color: string): number {
|
|
|
10
11
|
return colorAsInt;
|
|
11
12
|
}
|
|
12
13
|
|
|
14
|
+
export function colorHexFromAbstractImageColor(color: Color): string {
|
|
15
|
+
return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`
|
|
16
|
+
}
|
|
17
|
+
|
|
13
18
|
export function color(colorNormal: string | undefined): number {
|
|
14
19
|
const ERROR_COLOR = 6; //magenta
|
|
15
20
|
const ACI_COLOR_COUNT = 256;
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
/* eslint-disable max-lines */
|
|
2
|
-
import { Bounds3, Vec3 } from "../../abstract-3d.js";
|
|
3
2
|
import { generateUUID } from "three/src/math/MathUtils.js";
|
|
3
|
+
import { Bounds3, Vec3, vec3Add, vec3Scale } from "../../abstract-3d.js";
|
|
4
4
|
import { colorToInteger } from "./color.js";
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
const
|
|
6
|
+
export const DEFAULT_CIRCLE_SIDE_COUNT = 16;
|
|
7
|
+
const DXF_MAKER = "DXF Generated from Divid Abstract 3D";
|
|
8
|
+
const DXF_STANDARD = "AC1015";
|
|
9
|
+
const DXF_DEFAULT_HANDLE = 0x1000;
|
|
10
|
+
const DXF_MODEL_SPACE_HANDLE = "1D";
|
|
8
11
|
|
|
9
12
|
export type DxfOrigin = "BottomLeftFront" | "Center";
|
|
10
13
|
export type DxfDynamicColor = 7; // this color becomes white on a black background and black on a white background (therefore theme/dxf viewer dependent)
|
|
14
|
+
export type Handle = { handle: number };
|
|
11
15
|
|
|
12
16
|
export function dxf(groups: string, bounds: Bounds3, size: Vec3, center: Vec3): string {
|
|
13
17
|
const id = generateUUID();
|
|
14
18
|
return dxfHeader(bounds, center, id, size) + groups + dxfFooter(id);
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
export type Handle = { handle: number };
|
|
18
|
-
|
|
19
21
|
export function dxfHandleCreate(): Handle {
|
|
20
22
|
return {
|
|
21
23
|
handle: DXF_DEFAULT_HANDLE,
|
|
@@ -31,7 +33,7 @@ function dxfRound(n: number): number {
|
|
|
31
33
|
return Math.round((n + Number.EPSILON) * 10 ** d) / 10 ** d;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
|
-
export const
|
|
36
|
+
export const dxfQuad = (
|
|
35
37
|
vec1: Vec3,
|
|
36
38
|
vec2: Vec3,
|
|
37
39
|
vec3: Vec3,
|
|
@@ -83,122 +85,45 @@ ${dxfRound(vec4.y)}
|
|
|
83
85
|
${dxfRound(vec4.z)}
|
|
84
86
|
`;
|
|
85
87
|
|
|
86
|
-
export const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
66
|
|
94
|
-
1${vertices.map(
|
|
95
|
-
(v) =>
|
|
96
|
-
`
|
|
97
|
-
0
|
|
98
|
-
VERTEX
|
|
99
|
-
8
|
|
100
|
-
A3D
|
|
101
|
-
10
|
|
102
|
-
${dxfRound(v.x)}
|
|
103
|
-
20
|
|
104
|
-
${dxfRound(v.y)}
|
|
105
|
-
30
|
|
106
|
-
${dxfRound(v.z)}`
|
|
107
|
-
)}
|
|
108
|
-
0
|
|
109
|
-
SEQEND
|
|
110
|
-
`;
|
|
111
|
-
|
|
112
|
-
export const dxfText = (pos: Vec3, fontSize: number, text: string, color: string): string =>
|
|
113
|
-
` 0
|
|
114
|
-
Text
|
|
115
|
-
8
|
|
116
|
-
A3D
|
|
117
|
-
62
|
|
118
|
-
${color}
|
|
119
|
-
10
|
|
120
|
-
${dxfRound(pos.x)}
|
|
121
|
-
20
|
|
122
|
-
${dxfRound(pos.y)}
|
|
123
|
-
30
|
|
124
|
-
${dxfRound(pos.z)}
|
|
125
|
-
11
|
|
126
|
-
${dxfRound(pos.x)}
|
|
127
|
-
21
|
|
128
|
-
${dxfRound(pos.y)}
|
|
129
|
-
31
|
|
130
|
-
${dxfRound(pos.z)}
|
|
131
|
-
40
|
|
132
|
-
${fontSize}
|
|
133
|
-
1
|
|
134
|
-
${text}
|
|
135
|
-
`;
|
|
88
|
+
export const dxfTriangle = (
|
|
89
|
+
vec1: Vec3,
|
|
90
|
+
vec2: Vec3,
|
|
91
|
+
vec3: Vec3,
|
|
92
|
+
col: string | DxfDynamicColor,
|
|
93
|
+
handleRef: Handle
|
|
94
|
+
): string => dxfQuad(vec1, vec2, vec3, vec3, col, handleRef);
|
|
136
95
|
|
|
137
|
-
export
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
`;
|
|
96
|
+
export function dxfPolyline(
|
|
97
|
+
points: ReadonlyArray<Vec3>,
|
|
98
|
+
col: string | DxfDynamicColor,
|
|
99
|
+
closed: boolean,
|
|
100
|
+
handleRef: Handle
|
|
101
|
+
): string {
|
|
102
|
+
let dxf = "";
|
|
103
|
+
for(let i = 0; i < points.length; i++) {
|
|
104
|
+
const p1 = points[i];
|
|
105
|
+
const p2 = points[i+1];
|
|
106
|
+
if(p1 && p2) {
|
|
107
|
+
dxf += dxfLine(p1, p2, col, handleRef);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if(closed) {
|
|
111
|
+
const start = points[0];
|
|
112
|
+
const end = points[points.length - 1];
|
|
113
|
+
if(start && end) {
|
|
114
|
+
dxf += dxfLine(start, end, col, handleRef);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return dxf;
|
|
118
|
+
}
|
|
161
119
|
|
|
162
|
-
export
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
5
|
|
166
|
-
${dxfHandle(handleRef)}
|
|
167
|
-
100
|
|
168
|
-
AcDbEntity
|
|
169
|
-
8
|
|
170
|
-
A3D
|
|
171
|
-
100
|
|
172
|
-
AcDbEllipse
|
|
173
|
-
10
|
|
174
|
-
${dxfRound(center.x)}
|
|
175
|
-
20
|
|
176
|
-
${dxfRound(center.y)}
|
|
177
|
-
30
|
|
178
|
-
${dxfRound(center.z)}
|
|
179
|
-
11
|
|
180
|
-
${dxfRound(major.x - center.x)}
|
|
181
|
-
21
|
|
182
|
-
${dxfRound(major.y - center.y)}
|
|
183
|
-
31
|
|
184
|
-
${dxfRound(major.z - center.z)}
|
|
185
|
-
40
|
|
186
|
-
1
|
|
187
|
-
41
|
|
188
|
-
0.0
|
|
189
|
-
42
|
|
190
|
-
6.2831
|
|
191
|
-
210
|
|
192
|
-
0
|
|
193
|
-
220
|
|
194
|
-
1
|
|
195
|
-
230
|
|
196
|
-
0
|
|
197
|
-
`;
|
|
120
|
+
export function dxfLine(vecStart: Vec3, vecEnd: Vec3, col: string | DxfDynamicColor, handleRef: Handle): string {
|
|
121
|
+
return dxfQuad(vecStart, vecStart, vecEnd, vecEnd, col, handleRef);
|
|
122
|
+
}
|
|
198
123
|
|
|
199
|
-
export const dxfHeader = (bounds: Bounds3, center: Vec3,
|
|
124
|
+
export const dxfHeader = (bounds: Bounds3, center: Vec3, blockId: string, size: Vec3): string =>
|
|
200
125
|
` 999
|
|
201
|
-
|
|
126
|
+
${DXF_MAKER}
|
|
202
127
|
0
|
|
203
128
|
SECTION
|
|
204
129
|
2
|
|
@@ -206,7 +131,7 @@ HEADER
|
|
|
206
131
|
9
|
|
207
132
|
$ACADVER
|
|
208
133
|
1
|
|
209
|
-
|
|
134
|
+
${DXF_STANDARD}
|
|
210
135
|
9
|
|
211
136
|
$ACADMAINTVER
|
|
212
137
|
70
|
|
@@ -1716,7 +1641,7 @@ AcDbSymbolTableRecord
|
|
|
1716
1641
|
100
|
|
1717
1642
|
AcDbBlockTableRecord
|
|
1718
1643
|
2
|
|
1719
|
-
${
|
|
1644
|
+
${blockId}
|
|
1720
1645
|
340
|
|
1721
1646
|
0
|
|
1722
1647
|
102
|
|
@@ -1826,7 +1751,7 @@ A3D
|
|
|
1826
1751
|
100
|
|
1827
1752
|
AcDbBlockBegin
|
|
1828
1753
|
2
|
|
1829
|
-
${
|
|
1754
|
+
${blockId}
|
|
1830
1755
|
70
|
|
1831
1756
|
0
|
|
1832
1757
|
10
|
|
@@ -1836,12 +1761,12 @@ ${groupId}
|
|
|
1836
1761
|
30
|
|
1837
1762
|
0.0
|
|
1838
1763
|
3
|
|
1839
|
-
${
|
|
1764
|
+
${blockId}
|
|
1840
1765
|
1
|
|
1841
1766
|
|
|
1842
1767
|
`;
|
|
1843
1768
|
|
|
1844
|
-
export const dxfFooter = (
|
|
1769
|
+
export const dxfFooter = (blockId: string): string => ` 0
|
|
1845
1770
|
ENDBLK
|
|
1846
1771
|
5
|
|
1847
1772
|
AA2
|
|
@@ -1874,7 +1799,7 @@ Continuous
|
|
|
1874
1799
|
100
|
|
1875
1800
|
AcDbBlockReference
|
|
1876
1801
|
2
|
|
1877
|
-
${
|
|
1802
|
+
${blockId}
|
|
1878
1803
|
10
|
|
1879
1804
|
0.0
|
|
1880
1805
|
20
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Box, Material, Vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3Scale, vec3 } from "../../../abstract-3d.js";
|
|
2
|
-
import {
|
|
3
|
-
import { dxf3DFACE, Handle } from "../dxf-encoding.js";
|
|
2
|
+
import { dxfQuad, Handle } from "../dxf-encoding.js";
|
|
4
3
|
|
|
5
4
|
export function dxfBox(b: Box, m: Material, parentPos: Vec3, parentRot: Vec3, handleRef: Handle): string {
|
|
6
5
|
const pos = vec3TransRot(b.pos, parentPos, parentRot);
|
|
@@ -16,13 +15,12 @@ export function dxfBox(b: Box, m: Material, parentPos: Vec3, parentRot: Vec3, ha
|
|
|
16
15
|
const v6 = vec3tr3(half.x, -half.y, -half.z);
|
|
17
16
|
const v7 = vec3tr3(half.x, half.y, -half.z);
|
|
18
17
|
const v8 = vec3tr3(-half.x, half.y, -half.z);
|
|
19
|
-
const mat = m.normal;
|
|
20
18
|
return (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
dxfQuad(v1, v2, v3, v4, m.normal, handleRef) + // front
|
|
20
|
+
dxfQuad(v5, v6, v7, v8, m.normal, handleRef) + // Back
|
|
21
|
+
dxfQuad(v5, v1, v4, v8, m.normal, handleRef) + // Left
|
|
22
|
+
dxfQuad(v6, v2, v3, v7, m.normal, handleRef) + // Right
|
|
23
|
+
dxfQuad(v8, v7, v3, v4, m.normal, handleRef) + // Top
|
|
24
|
+
dxfQuad(v5, v6, v2, v1, m.normal, handleRef) // Bottom
|
|
27
25
|
);
|
|
28
26
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Cone, Material, Vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3 } from "../../../abstract-3d.js";
|
|
2
|
-
import {
|
|
3
|
-
import { dxf3DFACE, Handle } from "../dxf-encoding.js";
|
|
2
|
+
import { dxfTriangle, Handle } from "../dxf-encoding.js";
|
|
4
3
|
|
|
5
4
|
export function dxfCone(
|
|
6
5
|
c: Cone,
|
|
@@ -13,25 +12,24 @@ export function dxfCone(
|
|
|
13
12
|
let dxfString = "";
|
|
14
13
|
const pos = vec3TransRot(c.pos, parentPos, parentRot);
|
|
15
14
|
const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
|
|
16
|
-
const
|
|
17
|
-
const mat = m.normal;
|
|
15
|
+
const vec3tr = (x: number, y: number, z: number): Vec3 => vec3TransRot(vec3(x, y, z), pos, rot);
|
|
18
16
|
const angleStep = (2 * Math.PI) / sides;
|
|
19
17
|
let currentAngle = 0;
|
|
20
18
|
|
|
21
19
|
const half = c.length / 2;
|
|
22
|
-
const botPos =
|
|
23
|
-
const topPos =
|
|
20
|
+
const botPos = vec3tr(0, -half, 0);
|
|
21
|
+
const topPos = vec3tr(0, half, 0);
|
|
24
22
|
|
|
25
23
|
const botVec3Array = Array<Vec3>();
|
|
26
24
|
for (let i = 0; i <= sides; i++) {
|
|
27
|
-
const currBot =
|
|
25
|
+
const currBot = vec3tr(Math.sin(currentAngle) * c.radius, -half, Math.cos(currentAngle) * c.radius);
|
|
28
26
|
botVec3Array.push(currBot);
|
|
29
27
|
|
|
30
28
|
if (i !== 0) {
|
|
31
29
|
const prevBot = botVec3Array[i - 1]!;
|
|
32
30
|
dxfString +=
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
dxfTriangle(botPos, prevBot, currBot, m.normal, handleRef) +
|
|
32
|
+
dxfTriangle(currBot, prevBot, topPos, m.normal, handleRef);
|
|
35
33
|
}
|
|
36
34
|
currentAngle += angleStep;
|
|
37
35
|
}
|