abstract-3d 0.9.0 → 0.9.2
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/renderers/dxf/dxf.d.ts +5 -1
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +6 -3
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/react/react-scene.d.ts +5 -4
- package/lib/renderers/react/react-scene.d.ts.map +1 -1
- package/lib/renderers/react/react-scene.js.map +1 -1
- package/lib/renderers/react/react.d.ts +3 -3
- package/lib/renderers/react/react.d.ts.map +1 -1
- package/lib/renderers/react/react.js +1 -1
- package/lib/renderers/react/react.js.map +1 -1
- package/lib/renderers/shared.d.ts +3 -0
- package/lib/renderers/shared.d.ts.map +1 -1
- package/lib/renderers/svg/index.d.ts +1 -1
- package/lib/renderers/svg/index.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/shared.d.ts +15 -0
- package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-box.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-box.js +4 -4
- package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.js +4 -4
- package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js +4 -4
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts +3 -3
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.js +6 -6
- package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.js +4 -4
- package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.js +4 -4
- package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts +2 -2
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
- package/lib/renderers/svg/svg.d.ts +4 -6
- package/lib/renderers/svg/svg.d.ts.map +1 -1
- package/lib/renderers/svg/svg.js +38 -26
- package/lib/renderers/svg/svg.js.map +1 -1
- package/package.json +2 -2
- package/src/renderers/dxf/dxf.ts +14 -7
- package/src/renderers/react/react-scene.tsx +5 -4
- package/src/renderers/react/react.tsx +4 -4
- package/src/renderers/shared.ts +2 -0
- package/src/renderers/svg/index.ts +1 -1
- package/src/renderers/svg/svg-geometries/shared.ts +14 -0
- package/src/renderers/svg/svg-geometries/svg-box.ts +5 -8
- package/src/renderers/svg/svg-geometries/svg-cone.ts +5 -8
- package/src/renderers/svg/svg-geometries/svg-cylinder.ts +5 -8
- package/src/renderers/svg/svg-geometries/svg-line.ts +3 -4
- package/src/renderers/svg/svg-geometries/svg-plane.ts +8 -13
- package/src/renderers/svg/svg-geometries/svg-polygon.ts +5 -8
- package/src/renderers/svg/svg-geometries/svg-shape.ts +5 -8
- package/src/renderers/svg/svg-geometries/svg-text.ts +4 -4
- package/src/renderers/svg/svg.ts +41 -119
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Vec3, Vec2, Shape } from "../../../abstract-3d.js";
|
|
2
|
-
import { zOrderElement } from "./shared.js";
|
|
3
|
-
export declare function shape(s: Shape, point: (x: number, y: number) => Vec2, color: string,
|
|
2
|
+
import { zOrderElement, SvgOptions } from "./shared.js";
|
|
3
|
+
export declare function shape(s: Shape, point: (x: number, y: number) => Vec2, color: string, opts: SvgOptions, parentPos: Vec3, parentRot: Vec3): ReadonlyArray<zOrderElement>;
|
|
4
4
|
//# sourceMappingURL=svg-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-shape.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAE,IAAI,EAAgC,KAAK,EAAkB,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAe,aAAa,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"svg-shape.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAE,IAAI,EAAgC,KAAK,EAAkB,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAe,aAAa,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAIlF,wBAAgB,KAAK,CACnB,CAAC,EAAE,KAAK,EACR,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,GACd,aAAa,CAAC,aAAa,CAAC,CAS9B"}
|
|
@@ -2,14 +2,14 @@ import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3, vec3Zero } from "../../.
|
|
|
2
2
|
import { gray, zElem, transparent } from "./shared.js";
|
|
3
3
|
import { svgPolygon } from "../svg-encoding.js";
|
|
4
4
|
import { rgbGrayScale } from "../../shared.js";
|
|
5
|
-
export function shape(s, point, color,
|
|
5
|
+
export function shape(s, point, color, opts, parentPos, parentRot) {
|
|
6
6
|
const pos = vec3TransRot(s.pos, parentPos, parentRot);
|
|
7
7
|
const rot = vec3RotCombine(parentRot, s.rot ?? vec3Zero);
|
|
8
8
|
const rotatedPoints = s.points.map((p) => vec3TransRot(vec3(p.x, p.y, 0), pos, rot));
|
|
9
9
|
const points = rotatedPoints.map(({ x, y }) => point(x, y));
|
|
10
|
-
const [strokeColor, fill] = onlyStroke
|
|
11
|
-
? [grayScale ? gray : color, onlyStrokeFill]
|
|
12
|
-
: [transparent, grayScale ? rgbGrayScale(color) : color];
|
|
10
|
+
const [strokeColor, fill] = opts.onlyStroke
|
|
11
|
+
? [opts.grayScale ? gray : color, opts.onlyStrokeFill]
|
|
12
|
+
: [transparent, opts.grayScale ? rgbGrayScale(color) : color];
|
|
13
13
|
return [zElem(svgPolygon(points, fill, strokeColor, 0), vec3ZMean(...rotatedPoints))];
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=svg-shape.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-shape.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,YAAY,EAAE,cAAc,EAAS,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAiB,WAAW,
|
|
1
|
+
{"version":3,"file":"svg-shape.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,YAAY,EAAE,cAAc,EAAS,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAiB,WAAW,EAAc,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,UAAU,KAAK,CACnB,CAAQ,EACR,KAAqC,EACrC,KAAa,EACb,IAAgB,EAChB,SAAe,EACf,SAAe;IAEf,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU;QACzC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;QACtD,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Text, Vec2, Vec3 } from "../../../abstract-3d.js";
|
|
2
|
-
import { zOrderElement } from "./shared.js";
|
|
3
|
-
export declare function text(t: Text, point: (x: number, y: number) => Vec2, fill: string, parentPos: Vec3, parentRot: Vec3, factor: number
|
|
2
|
+
import { SvgOptions, zOrderElement } from "./shared.js";
|
|
3
|
+
export declare function text(t: Text, point: (x: number, y: number) => Vec2, fill: string, opts: SvgOptions, parentPos: Vec3, parentRot: Vec3, factor: number): ReadonlyArray<zOrderElement>;
|
|
4
4
|
//# sourceMappingURL=svg-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-text.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAA0C,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAS,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"svg-text.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAA0C,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,UAAU,EAAS,aAAa,EAAE,MAAM,aAAa,CAAC;AAI/D,wBAAgB,IAAI,CAClB,CAAC,EAAE,IAAI,EACP,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,aAAa,CAAC,CAa9B"}
|
|
@@ -2,7 +2,7 @@ import { vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js"
|
|
|
2
2
|
import { zElem } from "./shared.js";
|
|
3
3
|
import { svgText } from "../svg-encoding.js";
|
|
4
4
|
// dummy
|
|
5
|
-
export function text(t, point, fill, parentPos, parentRot, factor
|
|
5
|
+
export function text(t, point, fill, opts, parentPos, parentRot, factor) {
|
|
6
6
|
const pos = vec3TransRot(t.pos, parentPos, parentRot);
|
|
7
7
|
const rot = vec3RotCombine(parentRot, t.rot ?? vec3Zero);
|
|
8
8
|
const texts = Array();
|
|
@@ -10,7 +10,7 @@ export function text(t, point, fill, parentPos, parentRot, factor, font) {
|
|
|
10
10
|
const strings = t.text.split("\n");
|
|
11
11
|
let posY = strings.length === 1 ? 0 : (fontSize * strings.length - fontSize) / 2;
|
|
12
12
|
for (const s of strings) {
|
|
13
|
-
texts.push(zElem(svgText(point(pos.x, pos.y + posY), s, 0, fill, font, fontSize), pos.z));
|
|
13
|
+
texts.push(zElem(svgText(point(pos.x, pos.y + posY), s, 0, fill, opts.font, fontSize), pos.z));
|
|
14
14
|
posY -= fontSize * 1.2;
|
|
15
15
|
}
|
|
16
16
|
return texts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-text.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,
|
|
1
|
+
{"version":3,"file":"svg-text.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAc,KAAK,EAAiB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,QAAQ;AACR,MAAM,UAAU,IAAI,CAClB,CAAO,EACP,KAAqC,EACrC,IAAY,EACZ,IAAgB,EAChB,SAAe,EACf,SAAe,EACf,MAAc;IAEd,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,EAAiB,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { Scene
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
readonly scaleByWidth: boolean;
|
|
6
|
-
}, onlyStroke?: boolean, grayScale?: boolean, onlyStrokeFill?: string, font?: string, imageDataByUrl?: Record<string, ImageDataUri>, rotation?: number): {
|
|
1
|
+
import { Scene } from "../../abstract-3d.js";
|
|
2
|
+
import { SvgOptions } from "./svg-geometries/shared.js";
|
|
3
|
+
import { Optional } from "../shared.js";
|
|
4
|
+
export declare function toSvg(scene: Scene, options: Optional<SvgOptions>): {
|
|
7
5
|
readonly image: string;
|
|
8
6
|
readonly width: number;
|
|
9
7
|
readonly height: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,EAYN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAiB,MAAM,4BAA4B,CAAC;AASvE,OAAO,EAAE,QAAQ,EAAgD,MAAM,cAAc,CAAC;AAGtF,wBAAgB,KAAK,CACnB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC5B;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6D7E"}
|
package/lib/renderers/svg/svg.js
CHANGED
|
@@ -10,77 +10,89 @@ import { text } from "./svg-geometries/svg-text.js";
|
|
|
10
10
|
import { cone } from "./svg-geometries/svg-cone.js";
|
|
11
11
|
import { rotationForCameraPos, sizeCenterForCameraPos } from "../shared.js";
|
|
12
12
|
import { svg } from "./svg-encoding.js";
|
|
13
|
-
export function toSvg(scene,
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
export function toSvg(scene, options) {
|
|
14
|
+
const opts = {
|
|
15
|
+
view: options.view ?? "front",
|
|
16
|
+
stroke: options.stroke ?? 2,
|
|
17
|
+
scale: options.scale ?? undefined,
|
|
18
|
+
onlyStroke: options.onlyStroke ?? false,
|
|
19
|
+
grayScale: options.grayScale ?? false,
|
|
20
|
+
onlyStrokeFill: options.onlyStrokeFill ?? "rgba(255,255,255,0)",
|
|
21
|
+
font: options.font ?? "",
|
|
22
|
+
imageDataByUrl: options.imageDataByUrl ?? {},
|
|
23
|
+
rotation: options.rotation ?? 0,
|
|
24
|
+
};
|
|
25
|
+
const factor = opts.scale
|
|
26
|
+
? opts.scale.size /
|
|
27
|
+
(opts.scale.scaleByWidth
|
|
28
|
+
? opts.view === "right" || opts.view === "left"
|
|
18
29
|
? scene.size_deprecated.z
|
|
19
30
|
: scene.size_deprecated.x
|
|
20
|
-
: view === "top" || view === "bottom"
|
|
31
|
+
: opts.view === "top" || opts.view === "bottom"
|
|
21
32
|
? scene.size_deprecated.z
|
|
22
33
|
: scene.size_deprecated.y)
|
|
23
34
|
: 1;
|
|
24
|
-
const baseRot = vec3RotCombine(rotationForCameraPos(view), scene.rotation_deprecated ?? vec3Zero);
|
|
25
|
-
const unitRot = rotation ? vec3RotCombine(vec3(0, 0, (rotation * Math.PI) / 180), baseRot) : baseRot;
|
|
35
|
+
const baseRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
|
|
36
|
+
const unitRot = opts.rotation ? vec3RotCombine(vec3(0, 0, (opts.rotation * Math.PI) / 180), baseRot) : baseRot;
|
|
26
37
|
const unitPos = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, scene.rotation_deprecated ?? vec3Zero);
|
|
27
38
|
const [size, center] = sizeCenterForCameraPos(scene.size_deprecated, unitPos, unitRot, factor);
|
|
28
39
|
const unitHalfSize = vec3Scale(size, 0.5);
|
|
29
|
-
const centerAdj = vec3(center.x - stroke * 0.75, center.y + stroke * 0.75, center.z);
|
|
30
|
-
const width = size.x + 1.5 * stroke;
|
|
31
|
-
const height = size.y + 1.5 * stroke;
|
|
40
|
+
const centerAdj = vec3(center.x - opts.stroke * 0.75, center.y + opts.stroke * 0.75, center.z);
|
|
41
|
+
const width = size.x + 1.5 * opts.stroke;
|
|
42
|
+
const height = size.y + 1.5 * opts.stroke;
|
|
32
43
|
const elements = Array();
|
|
33
44
|
const point = (x, y) => vec2(-centerAdj.x + unitHalfSize.x + x * factor, centerAdj.y + unitHalfSize.y - y * factor);
|
|
34
45
|
for (const g of scene.groups) {
|
|
35
46
|
const pos = vec3Rot(g.pos, unitPos, unitRot);
|
|
36
47
|
const rot = vec3RotCombine(unitRot, g.rot ?? vec3Zero);
|
|
37
|
-
elements.push(...svgGroup(g, pos, rot, point,
|
|
48
|
+
elements.push(...svgGroup(g, pos, rot, point, factor, opts));
|
|
38
49
|
}
|
|
50
|
+
const dimOpts = { ...opts, onlyStroke: false, grayScale: false };
|
|
39
51
|
elements.sort((a, b) => a.zOrder - b.zOrder);
|
|
40
52
|
const cameraPos = vec3Rot(vec3(1, 1, 1), vec3Zero, scene.rotation_deprecated ?? vec3Zero);
|
|
41
53
|
for (const d of scene.dimensions_deprecated?.dimensions ?? []) {
|
|
42
|
-
if (flipViews(d.views[0], cameraPos) === view) {
|
|
54
|
+
if (flipViews(d.views[0], cameraPos) === opts.view) {
|
|
43
55
|
const pos = vec3Rot(d.pos, unitPos, unitRot);
|
|
44
56
|
const rot = vec3RotCombine(unitRot, d.rot);
|
|
45
57
|
for (const m of d.meshes) {
|
|
46
|
-
elements.push(...svgMesh(m, pos, rot, point,
|
|
58
|
+
elements.push(...svgMesh(m, pos, rot, point, factor, scene.dimensions_deprecated?.material ?? { normal: "" }, dimOpts));
|
|
47
59
|
}
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
62
|
const image = svg(width, height, elements.reduce((a, { element }) => `${a} ${element}`, ""));
|
|
51
63
|
return { image, width, height };
|
|
52
64
|
}
|
|
53
|
-
function svgGroup(g, pos, rot, point,
|
|
65
|
+
function svgGroup(g, pos, rot, point, factor, opts) {
|
|
54
66
|
const elements = Array();
|
|
55
67
|
for (const m of g.meshes ?? []) {
|
|
56
|
-
elements.push(...svgMesh(m, pos, rot, point,
|
|
68
|
+
elements.push(...svgMesh(m, pos, rot, point, factor, m.material, opts));
|
|
57
69
|
}
|
|
58
70
|
for (const sg of g.groups ?? []) {
|
|
59
71
|
const sPos = vec3TransRot(sg.pos, pos, rot);
|
|
60
72
|
const sRot = vec3RotCombine(rot, sg.rot ?? vec3Zero);
|
|
61
|
-
elements.push(...svgGroup(sg, sPos, sRot, point,
|
|
73
|
+
elements.push(...svgGroup(sg, sPos, sRot, point, factor, opts));
|
|
62
74
|
}
|
|
63
75
|
return elements;
|
|
64
76
|
}
|
|
65
|
-
function svgMesh(mesh, parentPos, parentRot, point,
|
|
77
|
+
function svgMesh(mesh, parentPos, parentRot, point, factor, material, opts) {
|
|
66
78
|
const color = material.normal;
|
|
67
79
|
switch (mesh.geometry.type) {
|
|
68
80
|
case "Box":
|
|
69
|
-
return box(mesh.geometry, point, color,
|
|
81
|
+
return box(mesh.geometry, point, color, opts, parentPos, parentRot);
|
|
70
82
|
case "Plane":
|
|
71
|
-
return plane(mesh.geometry, point, material,
|
|
83
|
+
return plane(mesh.geometry, point, material, opts, parentPos, parentRot);
|
|
72
84
|
case "Cylinder":
|
|
73
|
-
return cylinder(mesh.geometry, point, color,
|
|
85
|
+
return cylinder(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
|
|
74
86
|
case "Cone":
|
|
75
|
-
return cone(mesh.geometry, point, color,
|
|
87
|
+
return cone(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
|
|
76
88
|
case "Line":
|
|
77
|
-
return line(mesh.geometry, point, color,
|
|
89
|
+
return line(mesh.geometry, point, color, opts, parentPos, parentRot);
|
|
78
90
|
case "Polygon":
|
|
79
|
-
return polygon(mesh.geometry, point, color,
|
|
91
|
+
return polygon(mesh.geometry, point, color, opts, parentPos, parentRot);
|
|
80
92
|
case "Shape":
|
|
81
|
-
return shape(mesh.geometry, point, color,
|
|
93
|
+
return shape(mesh.geometry, point, color, opts, parentPos, parentRot);
|
|
82
94
|
case "Text":
|
|
83
|
-
return text(mesh.geometry, point, color, parentPos, parentRot, factor
|
|
95
|
+
return text(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
|
|
84
96
|
case "Tube":
|
|
85
97
|
case "Sphere":
|
|
86
98
|
return [];
|
|
@@ -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,EACJ,SAAS,EAKT,OAAO,EACP,QAAQ,EACR,cAAc,EACd,IAAI,EAGJ,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,
|
|
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": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
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",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"@types/three": "^0.174.0",
|
|
34
34
|
"react": "^19.0.0"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "f9b3196bf3c739a34f254763cf7021c2dfadc3bc"
|
|
37
37
|
}
|
package/src/renderers/dxf/dxf.ts
CHANGED
|
@@ -5,18 +5,25 @@ 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
|
-
import { rotationForCameraPos, sizeCenterForCameraPos } from "../shared.js";
|
|
8
|
+
import { Optional, rotationForCameraPos, sizeCenterForCameraPos } from "../shared.js";
|
|
9
9
|
|
|
10
|
-
export
|
|
11
|
-
|
|
10
|
+
export type DxfOptions = { readonly view: View };
|
|
11
|
+
|
|
12
|
+
export const toDxf = (scene: Scene, options: Optional<DxfOptions>): string => {
|
|
13
|
+
const opts: DxfOptions = { view: options.view ?? "front" };
|
|
14
|
+
const unitRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
|
|
12
15
|
const rotatedCenter = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, scene.rotation_deprecated ?? vec3Zero);
|
|
13
16
|
const [size, center] = sizeCenterForCameraPos(scene.size_deprecated, rotatedCenter, vec3Zero, 1);
|
|
14
17
|
const id = "D171D";
|
|
15
|
-
const handleRef = {handle: 0x1000}; //make sure we start with a value higher than any other handle id's used in the header
|
|
16
|
-
return
|
|
18
|
+
const handleRef = { handle: 0x1000 }; //make sure we start with a value higher than any other handle id's used in the header
|
|
19
|
+
return (
|
|
20
|
+
dxfHeader(size, center, id) +
|
|
21
|
+
scene.groups.reduce((a, c) => a + dxfGroup(c, center, unitRot, handleRef), "") +
|
|
22
|
+
dxfFooter(id)
|
|
23
|
+
);
|
|
17
24
|
};
|
|
18
25
|
|
|
19
|
-
function dxfGroup(g: Group, parentPos: Vec3, parentRot: Vec3, handleRef: {handle: number}): string {
|
|
26
|
+
function dxfGroup(g: Group, parentPos: Vec3, parentRot: Vec3, handleRef: { handle: number }): string {
|
|
20
27
|
const pos = vec3TransRot(g.pos, parentPos, parentRot);
|
|
21
28
|
const rot = vec3RotCombine(parentRot, g.rot ?? vec3Zero);
|
|
22
29
|
return (
|
|
@@ -43,4 +50,4 @@ function dxfGroup(g: Group, parentPos: Vec3, parentRot: Vec3, handleRef: {handle
|
|
|
43
50
|
}
|
|
44
51
|
}, "") ?? "") + g.groups?.reduce((a, c) => a + dxfGroup(c, pos, rot, handleRef), "")
|
|
45
52
|
);
|
|
46
|
-
}
|
|
53
|
+
}
|
|
@@ -12,6 +12,7 @@ export interface ReactPopover {
|
|
|
12
12
|
readonly pos: Vec3;
|
|
13
13
|
readonly content: React.ReactNode;
|
|
14
14
|
}
|
|
15
|
+
export type SceneMouseEvent = ThreeEvent<MouseEvent>;
|
|
15
16
|
|
|
16
17
|
export function ReactScene({
|
|
17
18
|
scene,
|
|
@@ -45,13 +46,13 @@ export function ReactScene({
|
|
|
45
46
|
id: string | undefined,
|
|
46
47
|
rootData: Record<string, string> | undefined,
|
|
47
48
|
data: Record<string, string> | undefined,
|
|
48
|
-
e:
|
|
49
|
+
e: SceneMouseEvent
|
|
49
50
|
) => void;
|
|
50
51
|
readonly onHoverGroup?: (
|
|
51
52
|
id: string | undefined,
|
|
52
53
|
rootData: Record<string, string> | undefined,
|
|
53
54
|
data: Record<string, string> | undefined,
|
|
54
|
-
e:
|
|
55
|
+
e: SceneMouseEvent
|
|
55
56
|
) => void;
|
|
56
57
|
readonly onContextMenuGroup?: (
|
|
57
58
|
id: string,
|
|
@@ -59,9 +60,9 @@ export function ReactScene({
|
|
|
59
60
|
data: Record<string, string> | undefined,
|
|
60
61
|
left: number,
|
|
61
62
|
top: number,
|
|
62
|
-
e:
|
|
63
|
+
e: SceneMouseEvent
|
|
63
64
|
) => void;
|
|
64
|
-
readonly onClickHotSpot?: (hotSpot: HotSpotInfo, e:
|
|
65
|
+
readonly onClickHotSpot?: (hotSpot: HotSpotInfo, e: SceneMouseEvent) => void;
|
|
65
66
|
readonly createGroupKey?: (g: Group, idx: number, rootData: Record<string, string> | undefined, id: string) => string;
|
|
66
67
|
readonly createGroupId?: (g: Group) => string;
|
|
67
68
|
}): React.JSX.Element {
|
|
@@ -7,7 +7,7 @@ import { ReactCamera, ControlsHelper, Camera } from "./react-camera.js";
|
|
|
7
7
|
import { HotSpotInfo } from "./react-hotspot.js";
|
|
8
8
|
import { MaterialState } from "./react-material.js";
|
|
9
9
|
|
|
10
|
-
type
|
|
10
|
+
type ReactProps = {
|
|
11
11
|
readonly scene: Scene;
|
|
12
12
|
readonly selectedId?: string | undefined;
|
|
13
13
|
readonly activeHotSpots?: Record<string, HotSpotInfo> | undefined;
|
|
@@ -16,7 +16,7 @@ type ToReactProps = {
|
|
|
16
16
|
readonly showHotSpotTexts?: boolean;
|
|
17
17
|
readonly showDimensions?: boolean;
|
|
18
18
|
readonly hotSpotTexts?: Record<string, string>;
|
|
19
|
-
readonly
|
|
19
|
+
readonly popovers?: ReadonlyArray<ReactPopover>;
|
|
20
20
|
readonly useAnimations?: boolean;
|
|
21
21
|
readonly camera?: Camera;
|
|
22
22
|
readonly view?: View;
|
|
@@ -57,7 +57,7 @@ export const toReact = memo(
|
|
|
57
57
|
activeComponents,
|
|
58
58
|
hoveredIdExternal,
|
|
59
59
|
hotSpotTexts,
|
|
60
|
-
reactPopovers,
|
|
60
|
+
popovers: reactPopovers,
|
|
61
61
|
showHotSpotTexts = false,
|
|
62
62
|
showDimensions = true,
|
|
63
63
|
useAnimations = false,
|
|
@@ -73,7 +73,7 @@ export const toReact = memo(
|
|
|
73
73
|
onClickHotSpot,
|
|
74
74
|
createGroupKey,
|
|
75
75
|
createGroupId,
|
|
76
|
-
}:
|
|
76
|
+
}: ReactProps): React.JSX.Element => {
|
|
77
77
|
return (
|
|
78
78
|
<Canvas dpr={[1, window.devicePixelRatio]} frameloop="demand" {...canvasProps}>
|
|
79
79
|
{/* <Stats showPanel={0} className="stats" /> */}
|
package/src/renderers/shared.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { View } from "../../../abstract-3d.js";
|
|
2
|
+
|
|
1
3
|
export type zOrderElement = { readonly element: string; readonly zOrder: number };
|
|
2
4
|
export const zElem = (element: string, zOrder: number): zOrderElement => ({ element, zOrder });
|
|
3
5
|
|
|
@@ -13,3 +15,15 @@ export type ImageDataUri =
|
|
|
13
15
|
| `data:image/png;base64,${string}`
|
|
14
16
|
| `data:image/jpeg;base64,${string}`
|
|
15
17
|
| `data:image/svg+xml,${string}`;
|
|
18
|
+
|
|
19
|
+
export type SvgOptions = {
|
|
20
|
+
readonly view: View;
|
|
21
|
+
readonly stroke: number;
|
|
22
|
+
readonly scale: { readonly size: number; readonly scaleByWidth: boolean } | undefined;
|
|
23
|
+
readonly onlyStroke: boolean;
|
|
24
|
+
readonly grayScale: boolean;
|
|
25
|
+
readonly onlyStrokeFill: string;
|
|
26
|
+
readonly font: string;
|
|
27
|
+
readonly imageDataByUrl: Record<string, ImageDataUri>;
|
|
28
|
+
readonly rotation: number;
|
|
29
|
+
};
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
vec3,
|
|
10
10
|
vec3ZMean,
|
|
11
11
|
} from "../../../abstract-3d.js";
|
|
12
|
-
import { gray, black, zElem, zOrderElement } from "./shared.js";
|
|
12
|
+
import { gray, black, zElem, zOrderElement, SvgOptions } from "./shared.js";
|
|
13
13
|
import { svgPolygon } from "../svg-encoding.js";
|
|
14
14
|
import { rgbGrayScale } from "../../shared.js";
|
|
15
15
|
|
|
@@ -17,10 +17,7 @@ export function box(
|
|
|
17
17
|
b: Box,
|
|
18
18
|
point: (x: number, y: number) => Vec2,
|
|
19
19
|
color: string,
|
|
20
|
-
|
|
21
|
-
grayScale: boolean | undefined,
|
|
22
|
-
stroke: number,
|
|
23
|
-
onlyStrokeFill: string,
|
|
20
|
+
opts: SvgOptions,
|
|
24
21
|
parentPos: Vec3,
|
|
25
22
|
parentRot: Vec3
|
|
26
23
|
): ReadonlyArray<zOrderElement> {
|
|
@@ -59,9 +56,9 @@ export function box(
|
|
|
59
56
|
? [[point(v6.x, v6.y), point(v2.x, v2.y), point(v3.x, v3.y), point(v7.x, v7.y)], rightMean]
|
|
60
57
|
: [[point(v5.x, v5.y), point(v1.x, v1.y), point(v4.x, v4.y), point(v8.x, v8.y)], leftMean];
|
|
61
58
|
|
|
62
|
-
const [strokeColor, fill, strokeUse] = onlyStroke
|
|
63
|
-
? [grayScale ? gray : color, onlyStrokeFill, stroke]
|
|
64
|
-
: [black, grayScale ? rgbGrayScale(color) : color, 0];
|
|
59
|
+
const [strokeColor, fill, strokeUse] = opts.onlyStroke
|
|
60
|
+
? [opts.grayScale ? gray : color, opts.onlyStrokeFill, opts.stroke]
|
|
61
|
+
: [black, opts.grayScale ? rgbGrayScale(color) : color, 0];
|
|
65
62
|
|
|
66
63
|
return [
|
|
67
64
|
zElem(svgPolygon(frontBackPoints, fill, strokeColor, strokeUse), frontBackMean),
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
vec3ZMean,
|
|
10
10
|
equals,
|
|
11
11
|
} from "../../../abstract-3d.js";
|
|
12
|
-
import { gray, stBW, zElem, zOrderElement, transparent } from "./shared.js";
|
|
12
|
+
import { gray, stBW, zElem, zOrderElement, transparent, SvgOptions } from "./shared.js";
|
|
13
13
|
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
14
14
|
import { rgbGrayScale } from "../../shared.js";
|
|
15
15
|
|
|
@@ -17,10 +17,7 @@ export function cone(
|
|
|
17
17
|
c: Cone,
|
|
18
18
|
point: (x: number, y: number) => Vec2,
|
|
19
19
|
color: string,
|
|
20
|
-
|
|
21
|
-
grayScale: boolean | undefined,
|
|
22
|
-
_stroke: number,
|
|
23
|
-
onlyStrokeFill: string,
|
|
20
|
+
opts: SvgOptions,
|
|
24
21
|
parentPos: Vec3,
|
|
25
22
|
parentRot: Vec3,
|
|
26
23
|
factor: number
|
|
@@ -30,9 +27,9 @@ export function cone(
|
|
|
30
27
|
const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
|
|
31
28
|
const vec3tr = (p: Vec3): Vec3 => vec3TransRot(p, pos, rot);
|
|
32
29
|
|
|
33
|
-
const [stroke, fill] = onlyStroke
|
|
34
|
-
? [grayScale ? gray : color, onlyStrokeFill]
|
|
35
|
-
: [transparent, grayScale ? rgbGrayScale(color) : color];
|
|
30
|
+
const [stroke, fill] = opts.onlyStroke
|
|
31
|
+
? [opts.grayScale ? gray : color, opts.onlyStrokeFill]
|
|
32
|
+
: [transparent, opts.grayScale ? rgbGrayScale(color) : color];
|
|
36
33
|
const zOrderComponents = Array<zOrderElement>();
|
|
37
34
|
|
|
38
35
|
const sides = 8;
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
vec3ZMean,
|
|
10
10
|
equals,
|
|
11
11
|
} from "../../../abstract-3d.js";
|
|
12
|
-
import { gray, stBW, transparent, zElem, zOrderElement } from "./shared.js";
|
|
12
|
+
import { gray, stBW, SvgOptions, transparent, zElem, zOrderElement } from "./shared.js";
|
|
13
13
|
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
14
14
|
import { rgbGrayScale } from "../../shared.js";
|
|
15
15
|
|
|
@@ -17,10 +17,7 @@ export function cylinder(
|
|
|
17
17
|
c: Cylinder,
|
|
18
18
|
point: (x: number, y: number) => Vec2,
|
|
19
19
|
color: string,
|
|
20
|
-
|
|
21
|
-
grayScale: boolean | undefined,
|
|
22
|
-
_stroke: number,
|
|
23
|
-
onlyStrokeFill: string,
|
|
20
|
+
opts: SvgOptions,
|
|
24
21
|
parentPos: Vec3,
|
|
25
22
|
parentRot: Vec3,
|
|
26
23
|
factor: number
|
|
@@ -30,9 +27,9 @@ export function cylinder(
|
|
|
30
27
|
const rot = vec3RotCombine(parentRot, c.rot ?? vec3Zero);
|
|
31
28
|
const vec3tr = (p: Vec3): Vec3 => vec3TransRot(p, pos, rot);
|
|
32
29
|
|
|
33
|
-
const [stroke, fill] = onlyStroke
|
|
34
|
-
? [grayScale ? gray : color, onlyStrokeFill]
|
|
35
|
-
: [transparent, grayScale ? rgbGrayScale(color) : color];
|
|
30
|
+
const [stroke, fill] = opts.onlyStroke
|
|
31
|
+
? [opts.grayScale ? gray : color, opts.onlyStrokeFill]
|
|
32
|
+
: [transparent, opts.grayScale ? rgbGrayScale(color) : color];
|
|
36
33
|
const zOrderComponents = Array<zOrderElement>();
|
|
37
34
|
|
|
38
35
|
const sides = 8;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Line, Vec2, Vec3, vec3TransRot, vec3ZMean } from "../../../abstract-3d.js";
|
|
2
|
-
import { zElem, zOrderElement } from "./shared.js";
|
|
2
|
+
import { SvgOptions, zElem, zOrderElement } from "./shared.js";
|
|
3
3
|
import { svgLine } from "../svg-encoding.js";
|
|
4
4
|
import { rgbGrayScale } from "../../shared.js";
|
|
5
5
|
|
|
@@ -7,8 +7,7 @@ export function line(
|
|
|
7
7
|
l: Line,
|
|
8
8
|
point: (x: number, y: number) => Vec2,
|
|
9
9
|
fill: string,
|
|
10
|
-
|
|
11
|
-
_stroke: number,
|
|
10
|
+
opts: SvgOptions,
|
|
12
11
|
parentPos: Vec3,
|
|
13
12
|
parentRot: Vec3
|
|
14
13
|
): ReadonlyArray<zOrderElement> {
|
|
@@ -16,7 +15,7 @@ export function line(
|
|
|
16
15
|
const v2 = vec3TransRot(l.end, parentPos, parentRot);
|
|
17
16
|
return [
|
|
18
17
|
zElem(
|
|
19
|
-
svgLine(point(v1.x, v1.y), point(v2.x, v2.y), grayScale ? rgbGrayScale(fill) : fill, l.thickness),
|
|
18
|
+
svgLine(point(v1.x, v1.y), point(v2.x, v2.y), opts.grayScale ? rgbGrayScale(fill) : fill, l.thickness),
|
|
20
19
|
vec3ZMean(v1, v2)
|
|
21
20
|
),
|
|
22
21
|
];
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
vec3ZMean,
|
|
14
14
|
Material,
|
|
15
15
|
} from "../../../abstract-3d.js";
|
|
16
|
-
import { gray, black, zElem, zOrderElement, ImageDataUri } from "./shared.js";
|
|
16
|
+
import { gray, black, zElem, zOrderElement, ImageDataUri, SvgOptions } from "./shared.js";
|
|
17
17
|
import { EmbededImage, svgImage, svgPolygon } from "../svg-encoding.js";
|
|
18
18
|
import { rgbGrayScale } from "../../shared.js";
|
|
19
19
|
|
|
@@ -21,14 +21,9 @@ export function plane(
|
|
|
21
21
|
p: Plane,
|
|
22
22
|
point: (x: number, y: number) => Vec2,
|
|
23
23
|
material: Material,
|
|
24
|
-
|
|
25
|
-
grayScale: boolean | undefined,
|
|
26
|
-
stroke: number,
|
|
27
|
-
onlyStrokeFill: string,
|
|
24
|
+
opts: SvgOptions,
|
|
28
25
|
parentPos: Vec3,
|
|
29
|
-
parentRot: Vec3
|
|
30
|
-
view: View,
|
|
31
|
-
imageDataByUrl: Record<string, ImageDataUri> | undefined
|
|
26
|
+
parentRot: Vec3
|
|
32
27
|
): ReadonlyArray<zOrderElement> {
|
|
33
28
|
const half = vec2Scale(p.size, 0.5);
|
|
34
29
|
const pos = vec3TransRot(p.pos, parentPos, parentRot);
|
|
@@ -40,14 +35,14 @@ export function plane(
|
|
|
40
35
|
const v3 = vec3tr(half.x, half.y);
|
|
41
36
|
const v4 = vec3tr(-half.x, half.y);
|
|
42
37
|
|
|
43
|
-
const imageData = material.imageUrl ? imageDataByUrl?.[material.imageUrl] : undefined;
|
|
38
|
+
const imageData = material.imageUrl ? opts.imageDataByUrl?.[material.imageUrl] : undefined;
|
|
44
39
|
const image: EmbededImage | undefined = imageData?.startsWith(rawSvgPrefix)
|
|
45
40
|
? { type: "svg", svg: imageData.slice(rawSvgPrefix.length) }
|
|
46
41
|
: material.imageUrl
|
|
47
42
|
? { type: "url", url: imageData ?? material.imageUrl }
|
|
48
43
|
: undefined;
|
|
49
44
|
|
|
50
|
-
if (view === "front" && image) {
|
|
45
|
+
if (opts.view === "front" && image) {
|
|
51
46
|
const [leftX, rightX] = v4.x > v2.x ? [v2.x, v4.x] : [v4.x, v2.x];
|
|
52
47
|
const [bottomY, topY] = v4.y > v2.y ? [v4.y, v2.y] : [v2.y, v4.y];
|
|
53
48
|
const bottomLeft = point(leftX, bottomY);
|
|
@@ -59,9 +54,9 @@ export function plane(
|
|
|
59
54
|
|
|
60
55
|
const points = [point(v1.x, v1.y), point(v2.x, v2.y), point(v3.x, v3.y), point(v4.x, v4.y)];
|
|
61
56
|
|
|
62
|
-
const [strokeColor, fill, strokeThickness] = onlyStroke
|
|
63
|
-
? [grayScale ? gray : material.normal, onlyStrokeFill, stroke]
|
|
64
|
-
: [black, grayScale ? rgbGrayScale(material.normal) : material.normal, 0];
|
|
57
|
+
const [strokeColor, fill, strokeThickness] = opts.onlyStroke
|
|
58
|
+
? [opts.grayScale ? gray : material.normal, opts.onlyStrokeFill, opts.stroke]
|
|
59
|
+
: [black, opts.grayScale ? rgbGrayScale(material.normal) : material.normal, 0];
|
|
65
60
|
return [zElem(svgPolygon(points, fill, strokeColor, strokeThickness), vec3ZMean(v1, v2, v3, v4))];
|
|
66
61
|
}
|
|
67
62
|
|