abstract-3d 2.7.33 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/abstract-3d.d.ts.map +1 -1
- package/lib/abstract-3d.js +45 -28
- package/lib/abstract-3d.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts +4 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.d.ts.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.js +8 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-build.js.map +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-color.js +1 -0
- package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +1 -3
- package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js +0 -12
- package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.js +0 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-footer.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js +0 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-header.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-line.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-solid.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-solid.js.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-encoding/dxf-triangle.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 +1 -1
- 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 +2 -3
- 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 +2 -3
- package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-image.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
- package/lib/renderers/dxf/dxf.d.ts +1 -1
- package/lib/renderers/dxf/dxf.d.ts.map +1 -1
- package/lib/renderers/dxf/dxf.js +6 -5
- package/lib/renderers/dxf/dxf.js.map +1 -1
- package/lib/renderers/react/react-camera.d.ts +1 -1
- package/lib/renderers/react/react-camera.d.ts.map +1 -1
- package/lib/renderers/react/react-camera.js +12 -17
- package/lib/renderers/react/react-camera.js.map +1 -1
- package/lib/renderers/react/react-dimension.js +1 -1
- package/lib/renderers/react/react-dimension.js.map +1 -1
- package/lib/renderers/react/react-group.d.ts +1 -1
- package/lib/renderers/react/react-group.d.ts.map +1 -1
- package/lib/renderers/react/react-group.js +4 -3
- package/lib/renderers/react/react-group.js.map +1 -1
- package/lib/renderers/react/react-hotspot.d.ts +1 -1
- package/lib/renderers/react/react-hotspot.d.ts.map +1 -1
- package/lib/renderers/react/react-hotspot.js +2 -2
- package/lib/renderers/react/react-hotspot.js.map +1 -1
- package/lib/renderers/react/react-image-material.d.ts.map +1 -1
- package/lib/renderers/react/react-image-material.js +1 -1
- package/lib/renderers/react/react-image-material.js.map +1 -1
- package/lib/renderers/react/react-material.d.ts.map +1 -1
- package/lib/renderers/react/react-material.js +3 -15
- package/lib/renderers/react/react-material.js.map +1 -1
- package/lib/renderers/react/react-mesh.d.ts +1 -1
- package/lib/renderers/react/react-mesh.d.ts.map +1 -1
- package/lib/renderers/react/react-mesh.js +9 -8
- package/lib/renderers/react/react-mesh.js.map +1 -1
- package/lib/renderers/react/react-scene.d.ts +1 -1
- package/lib/renderers/react/react-scene.d.ts.map +1 -1
- package/lib/renderers/react/react-scene.js +3 -11
- package/lib/renderers/react/react-scene.js.map +1 -1
- package/lib/renderers/react/react.d.ts +2 -2
- package/lib/renderers/react/react.d.ts.map +1 -1
- package/lib/renderers/react/react.js +3 -3
- package/lib/renderers/react/react.js.map +1 -1
- package/lib/renderers/step/step-encoding.d.ts.map +1 -1
- package/lib/renderers/step/step-encoding.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-box.js +1 -1
- package/lib/renderers/step/step-geometries/step-box.js.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
- package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cone.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cone.js +1 -2
- package/lib/renderers/stl/stl-geometries/stl-cone.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js +1 -2
- package/lib/renderers/stl/stl-geometries/stl-cylinder.js.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-plane.d.ts.map +1 -1
- package/lib/renderers/stl/stl-geometries/stl-plane.js +1 -6
- package/lib/renderers/stl/stl-geometries/stl-plane.js.map +1 -1
- package/lib/renderers/stl/stl.d.ts.map +1 -1
- package/lib/renderers/stl/stl.js +3 -4
- package/lib/renderers/stl/stl.js.map +1 -1
- package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
- package/lib/renderers/svg/svg-encoding.js +3 -3
- package/lib/renderers/svg/svg-encoding.js.map +1 -1
- 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.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-box.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cone.js +3 -8
- package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js +3 -8
- package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-image.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-image.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-image.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-line.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-plane.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-polygon.js +3 -5
- package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -2
- package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js +1 -1
- package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
- package/lib/renderers/svg/svg.d.ts +1 -1
- package/lib/renderers/svg/svg.d.ts.map +1 -1
- package/lib/renderers/svg/svg.js +5 -5
- package/lib/renderers/svg/svg.js.map +1 -1
- package/lib/utils.d.ts +3 -5
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +12 -20
- package/lib/utils.js.map +1 -1
- package/package.json +17 -17
- package/src/abstract-3d.ts +68 -149
- package/src/custom_typings/react-three-fiber.d.ts +1 -1
- package/src/renderers/dxf/dxf-encoding/dxf-build.ts +10 -0
- package/src/renderers/dxf/dxf-encoding/dxf-color.ts +1 -0
- package/src/renderers/dxf/dxf-encoding/dxf-common.ts +1 -23
- package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +3 -26
- package/src/renderers/dxf/dxf-encoding/dxf-footer.ts +0 -1
- package/src/renderers/dxf/dxf-encoding/dxf-header.ts +0 -1
- package/src/renderers/dxf/dxf-encoding/dxf-line.ts +1 -7
- package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +1 -7
- package/src/renderers/dxf/dxf-encoding/dxf-solid.ts +1 -9
- package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +4 -16
- package/src/renderers/dxf/dxf-geometries/dxf-box.ts +2 -11
- package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +3 -19
- package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +4 -22
- package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +1 -8
- package/src/renderers/dxf/dxf-geometries/dxf-image.ts +3 -13
- package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +3 -19
- package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +2 -9
- package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +2 -10
- package/src/renderers/dxf/dxf.ts +10 -25
- package/src/renderers/react/react-camera.tsx +26 -25
- package/src/renderers/react/react-dimension.tsx +1 -7
- package/src/renderers/react/react-group.tsx +6 -16
- package/src/renderers/react/react-hotspot.tsx +4 -10
- package/src/renderers/react/react-image-material.tsx +1 -1
- package/src/renderers/react/react-material.tsx +4 -21
- package/src/renderers/react/react-mesh.tsx +14 -68
- package/src/renderers/react/react-scene.tsx +7 -21
- package/src/renderers/react/react.tsx +3 -3
- package/src/renderers/step/step-encoding.ts +36 -100
- package/src/renderers/step/step-geometries/step-box.ts +2 -17
- package/src/renderers/step/step-geometries/step-cylinder.ts +6 -36
- package/src/renderers/stl/stl-geometries/stl-cone.ts +1 -2
- package/src/renderers/stl/stl-geometries/stl-cylinder.ts +1 -2
- package/src/renderers/stl/stl-geometries/stl-plane.ts +1 -6
- package/src/renderers/stl/stl.ts +3 -7
- package/src/renderers/svg/svg-encoding.ts +12 -44
- package/src/renderers/svg/svg-geometries/shared.ts +1 -4
- package/src/renderers/svg/svg-geometries/svg-box.ts +2 -2
- package/src/renderers/svg/svg-geometries/svg-cone.ts +5 -14
- package/src/renderers/svg/svg-geometries/svg-cylinder.ts +5 -17
- package/src/renderers/svg/svg-geometries/svg-image.ts +5 -15
- package/src/renderers/svg/svg-geometries/svg-line.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-plane.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-polygon.ts +3 -8
- package/src/renderers/svg/svg-geometries/svg-shape.ts +2 -2
- package/src/renderers/svg/svg-geometries/svg-text.ts +1 -1
- package/src/renderers/svg/svg.ts +8 -18
- package/src/utils.ts +13 -18
- package/CHANGELOG.md +0 -92
|
@@ -28,9 +28,7 @@ export function svgPolygon(
|
|
|
28
28
|
const [mask, maskAttribute] = svgHoleMask(rot, size, holes ?? []);
|
|
29
29
|
const pol = `<polygon points="${points
|
|
30
30
|
.reduce((a, c) => (a += `${c.x.toFixed(0)},${c.y.toFixed(0)} `), "")
|
|
31
|
-
.slice(0, -1)}" fill="${fill}" fill-opacity="${opacity.toFixed(
|
|
32
|
-
1
|
|
33
|
-
)}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
|
|
31
|
+
.slice(0, -1)}" fill="${fill}" fill-opacity="${opacity.toFixed(1)}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
|
|
34
32
|
return mask + pol + svgStrokedHoles(pos, rot, holes ?? [], stroke, strokeWidth);
|
|
35
33
|
}
|
|
36
34
|
|
|
@@ -46,21 +44,13 @@ export function svgCircle(
|
|
|
46
44
|
): string {
|
|
47
45
|
const size = vec2Scale(vec2(radius, radius), 2);
|
|
48
46
|
const [mask, maskAttribute] = svgHoleMask(rot, size, holes ?? []);
|
|
49
|
-
const cir = `<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(
|
|
50
|
-
0
|
|
51
|
-
)}" fill="${fill}" fill-opacity="${opacity.toFixed(
|
|
47
|
+
const cir = `<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(0)}" fill="${fill}" fill-opacity="${opacity.toFixed(
|
|
52
48
|
1
|
|
53
49
|
)}" stroke="${stroke}" stroke-width="${strokeWidth}" ${maskAttribute}/>`;
|
|
54
50
|
return mask + cir + svgStrokedHoles(pos, rot, holes ?? [], stroke, strokeWidth);
|
|
55
51
|
}
|
|
56
52
|
|
|
57
|
-
function svgStrokedHoles(
|
|
58
|
-
pos: Vec2,
|
|
59
|
-
rot: Vec3,
|
|
60
|
-
holes: ReadonlyArray<Hole>,
|
|
61
|
-
strokeColor: string,
|
|
62
|
-
strokeThickness: number
|
|
63
|
-
): string {
|
|
53
|
+
function svgStrokedHoles(pos: Vec2, rot: Vec3, holes: ReadonlyArray<Hole>, strokeColor: string, strokeThickness: number): string {
|
|
64
54
|
if (strokeThickness <= Number.EPSILON) {
|
|
65
55
|
return "";
|
|
66
56
|
}
|
|
@@ -100,19 +90,14 @@ function svgStrokedHoles(
|
|
|
100
90
|
/>`;
|
|
101
91
|
break;
|
|
102
92
|
}
|
|
93
|
+
default:
|
|
94
|
+
break;
|
|
103
95
|
}
|
|
104
96
|
}
|
|
105
97
|
return svgHoles;
|
|
106
98
|
}
|
|
107
99
|
|
|
108
|
-
export const svgCircle2 = (
|
|
109
|
-
radius: number,
|
|
110
|
-
pos: Vec2,
|
|
111
|
-
fill: string,
|
|
112
|
-
stroke: string,
|
|
113
|
-
strokeWidth: number,
|
|
114
|
-
_holes?: ReadonlyArray<Hole>
|
|
115
|
-
): string =>
|
|
100
|
+
export const svgCircle2 = (radius: number, pos: Vec2, fill: string, stroke: string, strokeWidth: number, _holes?: ReadonlyArray<Hole>): string =>
|
|
116
101
|
`<circle r="${radius.toFixed(0)}" cx="${pos.x.toFixed(0)}" cy="${pos.y.toFixed(
|
|
117
102
|
0
|
|
118
103
|
)}" fill="${fill}" stroke="${stroke}" stroke-width="${strokeWidth}" />`;
|
|
@@ -138,9 +123,7 @@ function svgMaskHoles(rot: Vec3, size: Vec2, holes: ReadonlyArray<Hole>): string
|
|
|
138
123
|
switch (hole.type) {
|
|
139
124
|
case "RoundHole": {
|
|
140
125
|
holeMasks.push(
|
|
141
|
-
`<ellipse cx="${holePos.x / size.x}" cy="${holePos.y / size.y}" rx="${hole.radius / size.x}" ry="${
|
|
142
|
-
hole.radius / size.y
|
|
143
|
-
}" fill="black" />`
|
|
126
|
+
`<ellipse cx="${holePos.x / size.x}" cy="${holePos.y / size.y}" rx="${hole.radius / size.x}" ry="${hole.radius / size.y}" fill="black" />`
|
|
144
127
|
);
|
|
145
128
|
break;
|
|
146
129
|
}
|
|
@@ -165,29 +148,16 @@ function svgMaskHoles(rot: Vec3, size: Vec2, holes: ReadonlyArray<Hole>): string
|
|
|
165
148
|
export const svgText = (text: string, matrix: string, color: string, font: string, fontSize: number): string =>
|
|
166
149
|
`<text font-family="${font}" font-size="${fontSize}px" text-anchor="middle" alignment-baseline="middle" fill="${color}" transform="${matrix}">${text}</text>`;
|
|
167
150
|
|
|
168
|
-
export type EmbededImage =
|
|
169
|
-
| { readonly type: "url"; readonly url: string }
|
|
170
|
-
| { readonly type: "svg"; readonly svg: string };
|
|
151
|
+
export type EmbededImage = { readonly type: "url"; readonly url: string } | { readonly type: "svg"; readonly svg: string };
|
|
171
152
|
|
|
172
153
|
export const rawSvgPrefix = "data:image/svg+xml,";
|
|
173
154
|
|
|
174
|
-
export const svgImage = (
|
|
175
|
-
p: Vec2,
|
|
176
|
-
size: Vec2,
|
|
177
|
-
rot: Vec3,
|
|
178
|
-
data: EmbededImage,
|
|
179
|
-
background?: string,
|
|
180
|
-
scale?: Vec2
|
|
181
|
-
): string => {
|
|
155
|
+
export const svgImage = (p: Vec2, size: Vec2, rot: Vec3, data: EmbededImage, background?: string, scale?: Vec2): string => {
|
|
182
156
|
const matrix = svgTrsMatrix(p, rot, scale);
|
|
183
157
|
|
|
184
158
|
if (data.type === "url") {
|
|
185
|
-
const bg = background
|
|
186
|
-
|
|
187
|
-
: "";
|
|
188
|
-
return `<g transform="${matrix}">${bg}<image width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" href="${
|
|
189
|
-
data.url
|
|
190
|
-
}"/></g>`;
|
|
159
|
+
const bg = background ? `<rect width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" fill="${background}"/>` : "";
|
|
160
|
+
return `<g transform="${matrix}">${bg}<image width="${size.x.toFixed(0)}" height="${size.y.toFixed(0)}" href="${data.url}"/></g>`;
|
|
191
161
|
}
|
|
192
162
|
|
|
193
163
|
// scale maps image-space coords → world coords, so the wrapper SVG and rect
|
|
@@ -195,9 +165,7 @@ export const svgImage = (
|
|
|
195
165
|
const imgW = scale ? size.x / scale.x : size.x;
|
|
196
166
|
const imgH = scale ? size.y / scale.y : size.y;
|
|
197
167
|
const bg = background ? `<rect width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}" fill="${background}"/>` : "";
|
|
198
|
-
return `<g transform="${matrix}"><svg width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}">${bg}${
|
|
199
|
-
data.svg
|
|
200
|
-
}</svg></g>`;
|
|
168
|
+
return `<g transform="${matrix}"><svg width="${imgW.toFixed(0)}" height="${imgH.toFixed(0)}">${bg}${data.svg}</svg></g>`;
|
|
201
169
|
};
|
|
202
170
|
|
|
203
171
|
const counter = (() => {
|
|
@@ -12,10 +12,7 @@ export const white = "rgb(255, 255, 255)";
|
|
|
12
12
|
export const transparent = "rgba(255, 255, 255, 0)";
|
|
13
13
|
export const black = "rgb(15, 15, 15)";
|
|
14
14
|
|
|
15
|
-
export type ImageDataUri =
|
|
16
|
-
| `data:image/png;base64,${string}`
|
|
17
|
-
| `data:image/jpeg;base64,${string}`
|
|
18
|
-
| `data:image/svg+xml,${string}`;
|
|
15
|
+
export type ImageDataUri = `data:image/png;base64,${string}` | `data:image/jpeg;base64,${string}` | `data:image/svg+xml,${string}`;
|
|
19
16
|
|
|
20
17
|
export type SvgOptions = {
|
|
21
18
|
readonly view: View;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Box, Vec2, Vec3, Material } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3ZMean } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
4
6
|
import { gray, black, zElem } from "./shared.js";
|
|
5
|
-
import { svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function box(
|
|
9
9
|
b: Box,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Cone, Vec2, Vec3, Material } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3ZMean, equals } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
4
6
|
import { gray, stBW, zElem, transparent } from "./shared.js";
|
|
5
|
-
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function cone(
|
|
9
9
|
c: Cone,
|
|
@@ -36,15 +36,8 @@ export function cone(
|
|
|
36
36
|
botVec3Array.push(currBot);
|
|
37
37
|
if (i !== 0) {
|
|
38
38
|
const prevBot = botVec3Array[i - 1]!;
|
|
39
|
-
const points = [
|
|
40
|
-
|
|
41
|
-
point(prevBot.x, prevBot.y),
|
|
42
|
-
point(topPos.x, topPos.y),
|
|
43
|
-
point(topPos.x, topPos.y),
|
|
44
|
-
];
|
|
45
|
-
zOrderComponents.push(
|
|
46
|
-
zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, topPos))
|
|
47
|
-
);
|
|
39
|
+
const points = [point(currBot.x, currBot.y), point(prevBot.x, prevBot.y), point(topPos.x, topPos.y), point(topPos.x, topPos.y)];
|
|
40
|
+
zOrderComponents.push(zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, topPos)));
|
|
48
41
|
}
|
|
49
42
|
currentAngle += angleStep;
|
|
50
43
|
}
|
|
@@ -53,9 +46,7 @@ export function cone(
|
|
|
53
46
|
const cylTop = vec3tr(vec3(0, half.y, 0));
|
|
54
47
|
const cylBottom = vec3tr(vec3(0, -half.y, 0));
|
|
55
48
|
if (equals(cylTop.x, cylBottom.x, 0.1) && equals(cylTop.y, cylBottom.y, 0.1)) {
|
|
56
|
-
zOrderComponents.push(
|
|
57
|
-
zElem(svgCircle(c.radius, rot, point(cylBottom.x, cylBottom.y), fill, opacity, stroke, stBW), cylBottom.z)
|
|
58
|
-
);
|
|
49
|
+
zOrderComponents.push(zElem(svgCircle(c.radius, rot, point(cylBottom.x, cylBottom.y), fill, opacity, stroke, stBW), cylBottom.z));
|
|
59
50
|
}
|
|
60
51
|
|
|
61
52
|
return zOrderComponents;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Cylinder, Vec2, Vec3, Material } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3, vec3TransRot, vec3RotCombine, vec3Zero, vec3ZMean, equals } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { SvgOptions, zOrderElement } from "./shared.js";
|
|
4
6
|
import { gray, stBW, transparent, zElem } from "./shared.js";
|
|
5
|
-
import { svgCircle, svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function cylinder(
|
|
9
9
|
c: Cylinder,
|
|
@@ -42,15 +42,8 @@ export function cylinder(
|
|
|
42
42
|
const prevBot = botVec3Array[i - 1]!;
|
|
43
43
|
const prevTop = topVec3Array[i - 1]!;
|
|
44
44
|
|
|
45
|
-
const points = [
|
|
46
|
-
|
|
47
|
-
point(prevBot.x, prevBot.y),
|
|
48
|
-
point(prevTop.x, prevTop.y),
|
|
49
|
-
point(currTop.x, currTop.y),
|
|
50
|
-
];
|
|
51
|
-
zOrderComponents.push(
|
|
52
|
-
zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, currTop, prevTop))
|
|
53
|
-
);
|
|
45
|
+
const points = [point(currBot.x, currBot.y), point(prevBot.x, prevBot.y), point(prevTop.x, prevTop.y), point(currTop.x, currTop.y)];
|
|
46
|
+
zOrderComponents.push(zElem(svgPolygon(rot, points, fill, opacity, stroke, stBW), vec3ZMean(currBot, prevBot, currTop, prevTop)));
|
|
54
47
|
}
|
|
55
48
|
currentAngle += angleStep;
|
|
56
49
|
}
|
|
@@ -60,12 +53,7 @@ export function cylinder(
|
|
|
60
53
|
const circleBottom = vec3tr(vec3(0, -half.y, 0));
|
|
61
54
|
if (equals(circleTop.x, circleBottom.x, 0.1) && equals(circleTop.y, circleBottom.y, 0.1)) {
|
|
62
55
|
const circlePos = circleTop.z > circleBottom.z ? circleTop : circleBottom;
|
|
63
|
-
zOrderComponents.push(
|
|
64
|
-
zElem(
|
|
65
|
-
svgCircle(c.radius, rot, point(circlePos.x, circlePos.y), fill, opacity, stroke, stBW, c.holes),
|
|
66
|
-
circlePos.z
|
|
67
|
-
)
|
|
68
|
-
);
|
|
56
|
+
zOrderComponents.push(zElem(svgCircle(c.radius, rot, point(circlePos.x, circlePos.y), fill, opacity, stroke, stBW, c.holes), circlePos.z));
|
|
69
57
|
}
|
|
70
58
|
}
|
|
71
59
|
return zOrderComponents;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createSVG } from "abstract-image";
|
|
2
|
+
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
2
3
|
import type { ImageMesh, Vec2, Vec3 } from "../../../abstract-3d.js";
|
|
3
4
|
import { vec2Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3 } from "../../../abstract-3d.js";
|
|
4
|
-
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
5
|
-
import { zElem } from "./shared.js";
|
|
6
5
|
import type { EmbededImage } from "../svg-encoding.js";
|
|
7
6
|
import { rawSvgPrefix, svgImage } from "../svg-encoding.js";
|
|
8
|
-
import {
|
|
7
|
+
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
8
|
+
import { zElem } from "./shared.js";
|
|
9
9
|
|
|
10
10
|
export function image(
|
|
11
11
|
i: ImageMesh,
|
|
@@ -29,14 +29,7 @@ export function image(
|
|
|
29
29
|
y: i.size.y / i.image.image.size.height,
|
|
30
30
|
};
|
|
31
31
|
const svg = createSVG(i.image.image, opts);
|
|
32
|
-
const img = svgImage(
|
|
33
|
-
point(v4.x, v4.y),
|
|
34
|
-
i.size,
|
|
35
|
-
rot,
|
|
36
|
-
{ type: "svg", svg },
|
|
37
|
-
opts.imageBg ? opts.background : undefined,
|
|
38
|
-
scale
|
|
39
|
-
);
|
|
32
|
+
const img = svgImage(point(v4.x, v4.y), i.size, rot, { type: "svg", svg }, opts.imageBg ? opts.background : undefined, scale);
|
|
40
33
|
return [zElem(img, (v2.z + v4.z) / 2)];
|
|
41
34
|
}
|
|
42
35
|
case "Url": {
|
|
@@ -44,10 +37,7 @@ export function image(
|
|
|
44
37
|
const image: EmbededImage | undefined = imageData?.startsWith(rawSvgPrefix)
|
|
45
38
|
? {
|
|
46
39
|
type: "svg",
|
|
47
|
-
svg: decodeURIComponent(imageData.slice(rawSvgPrefix.length)).replace(
|
|
48
|
-
/^\s*(<\?xml[^>]*\?>\s*)?(<!DOCTYPE[^>]*>\s*)?/i,
|
|
49
|
-
""
|
|
50
|
-
),
|
|
40
|
+
svg: decodeURIComponent(imageData.slice(rawSvgPrefix.length)).replace(/^\s*(<\?xml[^>]*\?>\s*)?(<!DOCTYPE[^>]*>\s*)?/i, ""),
|
|
51
41
|
}
|
|
52
42
|
: i.image.url
|
|
53
43
|
? { type: "url", url: imageData ?? i.image.url }
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CulledLine, Line, Vec2, Vec3 } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3TransRot, vec3ZMean } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgLine } from "../svg-encoding.js";
|
|
3
5
|
import type { SvgOptions, zOrderElement } from "./shared.js";
|
|
4
6
|
import { zElem } from "./shared.js";
|
|
5
|
-
import { svgLine } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function line(
|
|
9
9
|
l: Line | CulledLine,
|
|
@@ -15,10 +15,5 @@ export function line(
|
|
|
15
15
|
): ReadonlyArray<zOrderElement> {
|
|
16
16
|
const v1 = vec3TransRot(l.start, parentPos, parentRot);
|
|
17
17
|
const v2 = vec3TransRot(l.end, parentPos, parentRot);
|
|
18
|
-
return [
|
|
19
|
-
zElem(
|
|
20
|
-
svgLine(point(v1.x, v1.y), point(v2.x, v2.y), opts.gray_scale ? rgbGrayScale(fill) : fill, l.thickness),
|
|
21
|
-
vec3ZMean(v1, v2)
|
|
22
|
-
),
|
|
23
|
-
];
|
|
18
|
+
return [zElem(svgLine(point(v1.x, v1.y), point(v2.x, v2.y), opts.gray_scale ? rgbGrayScale(fill) : fill, l.thickness), vec3ZMean(v1, v2))];
|
|
24
19
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Plane, Vec2, Vec3, Material, Hole } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec2Scale, vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3ZMean } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
4
6
|
import { gray, black, zElem } from "./shared.js";
|
|
5
|
-
import { svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function plane(
|
|
9
9
|
p: Plane,
|
|
@@ -29,10 +29,5 @@ export function plane(
|
|
|
29
29
|
const [strokeColor, fill, strokeThickness] = opts.only_stroke
|
|
30
30
|
? [opts.gray_scale ? gray : material.normal, opts.background, opts.stroke_thickness]
|
|
31
31
|
: [black, opts.gray_scale ? rgbGrayScale(material.normal) : material.normal, 0];
|
|
32
|
-
return [
|
|
33
|
-
zElem(
|
|
34
|
-
svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness, holes),
|
|
35
|
-
vec3ZMean(v1, v2, v3, v4)
|
|
36
|
-
),
|
|
37
|
-
];
|
|
32
|
+
return [zElem(svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness, holes), vec3ZMean(v1, v2, v3, v4))];
|
|
38
33
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Polygon, Vec3, Vec2, Material } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
4
6
|
import { gray, zElem, transparent } from "./shared.js";
|
|
5
|
-
import { svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function polygon(
|
|
9
9
|
p: Polygon,
|
|
@@ -21,10 +21,5 @@ export function polygon(
|
|
|
21
21
|
const [strokeColor, fill, strokeThickness] = opts.only_stroke
|
|
22
22
|
? [opts.gray_scale ? gray : color, opts.background, opts.stroke_thickness]
|
|
23
23
|
: [transparent, opts.gray_scale ? rgbGrayScale(color) : color, 0];
|
|
24
|
-
return [
|
|
25
|
-
zElem(
|
|
26
|
-
svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness),
|
|
27
|
-
vec3ZMean(...rotatedPoints)
|
|
28
|
-
),
|
|
29
|
-
];
|
|
24
|
+
return [zElem(svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, strokeThickness), vec3ZMean(...rotatedPoints))];
|
|
30
25
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Vec3, Vec2, Shape, Material } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3, vec3Zero } from "../../../abstract-3d.js";
|
|
3
|
+
import { rgbGrayScale } from "../../../utils.js";
|
|
4
|
+
import { svgPolygon } from "../svg-encoding.js";
|
|
3
5
|
import type { zOrderElement, SvgOptions } from "./shared.js";
|
|
4
6
|
import { gray, zElem, transparent } from "./shared.js";
|
|
5
|
-
import { svgPolygon } from "../svg-encoding.js";
|
|
6
|
-
import { rgbGrayScale } from "../../../utils.js";
|
|
7
7
|
|
|
8
8
|
export function shape(
|
|
9
9
|
s: Shape,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Text, Vec2, Vec3 } from "../../../abstract-3d.js";
|
|
2
2
|
import { vec3TransRot, vec3RotCombine, vec3Zero, vec3, vec3Dot, vec3Rot } from "../../../abstract-3d.js";
|
|
3
|
+
import { svgText } from "../svg-encoding.js";
|
|
3
4
|
import type { SvgOptions, zOrderElement } from "./shared.js";
|
|
4
5
|
import { svgTrsMatrix, zElem } from "./shared.js";
|
|
5
|
-
import { svgText } from "../svg-encoding.js";
|
|
6
6
|
|
|
7
7
|
const SVG_FORWARD: Vec3 = vec3(0.0, 0.0, 1.0);
|
|
8
8
|
const SVG_DOT_OPPOSITE_THRESHOLD: number = -0.9;
|
package/src/renderers/svg/svg.ts
CHANGED
|
@@ -16,19 +16,19 @@ import {
|
|
|
16
16
|
vec3Flip,
|
|
17
17
|
dimensionConvertToTypeMesh,
|
|
18
18
|
} from "../../abstract-3d.js";
|
|
19
|
+
import type { Optional } from "../../utils.js";
|
|
20
|
+
import { calculateVisibleViews, isViewVisible } from "../../utils.js";
|
|
21
|
+
import { svg } from "./svg-encoding.js";
|
|
19
22
|
import type { SvgOptions, zOrderElement } from "./svg-geometries/shared.js";
|
|
20
23
|
import { box } from "./svg-geometries/svg-box.js";
|
|
24
|
+
import { cone } from "./svg-geometries/svg-cone.js";
|
|
21
25
|
import { cylinder } from "./svg-geometries/svg-cylinder.js";
|
|
26
|
+
import { image } from "./svg-geometries/svg-image.js";
|
|
22
27
|
import { line } from "./svg-geometries/svg-line.js";
|
|
23
28
|
import { plane } from "./svg-geometries/svg-plane.js";
|
|
24
|
-
import { shape } from "./svg-geometries/svg-shape.js";
|
|
25
29
|
import { polygon } from "./svg-geometries/svg-polygon.js";
|
|
30
|
+
import { shape } from "./svg-geometries/svg-shape.js";
|
|
26
31
|
import { text } from "./svg-geometries/svg-text.js";
|
|
27
|
-
import { cone } from "./svg-geometries/svg-cone.js";
|
|
28
|
-
import type { Optional } from "../../utils.js";
|
|
29
|
-
import { calculateVisibleViews, isViewVisible } from "../../utils.js";
|
|
30
|
-
import { svg } from "./svg-encoding.js";
|
|
31
|
-
import { image } from "./svg-geometries/svg-image.js";
|
|
32
32
|
|
|
33
33
|
export type SvgScene = {
|
|
34
34
|
readonly scene: Scene;
|
|
@@ -109,11 +109,7 @@ function renderInternal(
|
|
|
109
109
|
const visibleViews = calculateVisibleViews(opts.view, scene.rotation_deprecated);
|
|
110
110
|
|
|
111
111
|
for (const dim of scene.dimensions_deprecated?.dimensions ?? []) {
|
|
112
|
-
const d = dimensionConvertToTypeMesh(
|
|
113
|
-
dim,
|
|
114
|
-
scene.rotation_deprecated ?? vec3Zero,
|
|
115
|
-
scene.dimensions_deprecated?.material
|
|
116
|
-
);
|
|
112
|
+
const d = dimensionConvertToTypeMesh(dim, scene.rotation_deprecated ?? vec3Zero, scene.dimensions_deprecated?.material);
|
|
117
113
|
if (isViewVisible(d.views[0], visibleViews)) {
|
|
118
114
|
const pos = vec3TransRot(d.pos, unitCenterFlipped, unitRot);
|
|
119
115
|
const rot = vec3RotCombine(unitRot, d.rot);
|
|
@@ -125,13 +121,7 @@ function renderInternal(
|
|
|
125
121
|
return { elements, size: svgSize, center: svgCenter };
|
|
126
122
|
}
|
|
127
123
|
|
|
128
|
-
function svgGroup(
|
|
129
|
-
g: Group,
|
|
130
|
-
parentPos: Vec3,
|
|
131
|
-
parentRot: Vec3,
|
|
132
|
-
point: (x: number, y: number) => Vec2,
|
|
133
|
-
opts: SvgOptions
|
|
134
|
-
): ReadonlyArray<zOrderElement> {
|
|
124
|
+
function svgGroup(g: Group, parentPos: Vec3, parentRot: Vec3, point: (x: number, y: number) => Vec2, opts: SvgOptions): ReadonlyArray<zOrderElement> {
|
|
135
125
|
const pos = vec3TransRot(g.pos, parentPos, parentRot);
|
|
136
126
|
const rot = vec3RotCombine(parentRot, g.rot ?? vec3Zero);
|
|
137
127
|
const elements = Array<zOrderElement>();
|
package/src/utils.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// oxlint-disable no-bitwise
|
|
1
2
|
import type { Vec3, View } from "./abstract-3d.js";
|
|
2
3
|
import { vec3, vec3Rot, vec3Zero } from "./abstract-3d.js";
|
|
3
4
|
|
|
@@ -43,15 +44,13 @@ export function rgbGrayScale(color: string): string {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/**
|
|
46
|
-
* This will take a HEX or RGB web color. pSBC can shade it darker or lighter,
|
|
47
|
-
* or
|
|
48
|
-
* from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex).
|
|
49
|
-
* All without you even knowing what color format you are using.
|
|
47
|
+
* This will take a HEX or RGB web color. pSBC can shade it darker or lighter, or blend it with a second color, and can also pass it right thru but
|
|
48
|
+
* convert from Hex to RGB (Hex2RGB) or RGB to Hex (RGB2Hex). All without you even knowing what color format you are using.
|
|
50
49
|
*
|
|
51
50
|
* @param {number} p - From 0 to 1 Percentage float (Required).
|
|
52
51
|
* @param {string} from - The starting color in HEX or RGB format.
|
|
53
52
|
* @param {string} [to] - The ending color in HEX or RGB format, optional.
|
|
54
|
-
* @returns {string|null} Either Hex or RGB color. Null if invalid color or percentage number.
|
|
53
|
+
* @returns {string | null} Either Hex or RGB color. Null if invalid color or percentage number.
|
|
55
54
|
*/
|
|
56
55
|
|
|
57
56
|
export function shade(p: number, from: string, to?: string): string | undefined {
|
|
@@ -60,7 +59,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
|
|
|
60
59
|
p < -1 ||
|
|
61
60
|
p > 1 ||
|
|
62
61
|
typeof from !== "string" ||
|
|
63
|
-
(from
|
|
62
|
+
(!from.startsWith("r") && !from.startsWith("#")) ||
|
|
64
63
|
(to && typeof to !== "string")
|
|
65
64
|
) {
|
|
66
65
|
return undefined; // ErrorCheck
|
|
@@ -72,13 +71,17 @@ export function shade(p: number, from: string, to?: string): string | undefined
|
|
|
72
71
|
|
|
73
72
|
if (l > 9) {
|
|
74
73
|
const dArr = d.split(",");
|
|
75
|
-
if (dArr.length < 3 || dArr.length > 4)
|
|
74
|
+
if (dArr.length < 3 || dArr.length > 4) {
|
|
75
|
+
return null;
|
|
76
|
+
} // ErrorCheck
|
|
76
77
|
RGB[0] = i(dArr[0]!.split("(")[1]!);
|
|
77
78
|
RGB[1] = i(dArr[1]!);
|
|
78
79
|
RGB[2] = i(dArr[2]!);
|
|
79
80
|
RGB[3] = dArr[3] ? parseFloat(dArr[3]) : -1;
|
|
80
81
|
} else {
|
|
81
|
-
if (l === 8 || l === 6 || l < 4)
|
|
82
|
+
if (l === 8 || l === 6 || l < 4) {
|
|
83
|
+
return null;
|
|
84
|
+
} // ErrorCheck
|
|
82
85
|
if (l < 6) {
|
|
83
86
|
d = "#" + d[1] + d[1] + d[2] + d[2] + d[3] + d[3] + (l > 4 ? String(d[4]) + d[4] : ""); // 3 or 4 digit
|
|
84
87
|
}
|
|
@@ -124,9 +127,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
|
|
|
124
127
|
r((t[2]! - f[2]!) * p + f[2]!) +
|
|
125
128
|
(f[3]! < 0 && t[3]! < 0
|
|
126
129
|
? ")"
|
|
127
|
-
: "," +
|
|
128
|
-
(f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 10000) / 10000 : t[3]! < 0 ? f[3] : t[3]) +
|
|
129
|
-
")")
|
|
130
|
+
: "," + (f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 10000) / 10000 : t[3]! < 0 ? f[3] : t[3]) + ")")
|
|
130
131
|
);
|
|
131
132
|
}
|
|
132
133
|
|
|
@@ -137,13 +138,7 @@ export function shade(p: number, from: string, to?: string): string | undefined
|
|
|
137
138
|
r((t[0]! - f[0]!) * p + f[0]!) * 0x1000000 +
|
|
138
139
|
r((t[1]! - f[1]!) * p + f[1]!) * 0x10000 +
|
|
139
140
|
r((t[2]! - f[2]!) * p + f[2]!) * 0x100 +
|
|
140
|
-
(f[3]! > -1 && t[3]! > -1
|
|
141
|
-
? r(((t[3]! - f[3]!) * p + f[3]!) * 255)
|
|
142
|
-
: t[3]! > -1
|
|
143
|
-
? r(t[3]! * 255)
|
|
144
|
-
: f[3]! > -1
|
|
145
|
-
? r(f[3]! * 255)
|
|
146
|
-
: 255)
|
|
141
|
+
(f[3]! > -1 && t[3]! > -1 ? r(((t[3]! - f[3]!) * p + f[3]!) * 255) : t[3]! > -1 ? r(t[3]! * 255) : f[3]! > -1 ? r(f[3]! * 255) : 255)
|
|
147
142
|
)
|
|
148
143
|
.toString(16)
|
|
149
144
|
.slice(1, f[3]! > -1 || t[3]! > -1 ? undefined : -2)
|
package/CHANGELOG.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
4
|
-
|
|
5
|
-
## [2.7.31] - 2026-09-05
|
|
6
|
-
|
|
7
|
-
- Internal: adopt `verbatimModuleSyntax` and stricter compiler/lint settings (no unused locals/params, no bracket-free index-signature access, no non-null-assertion lint rule dropped). No functional changes.
|
|
8
|
-
|
|
9
|
-
## v2.7.4
|
|
10
|
-
|
|
11
|
-
- Added culled lines
|
|
12
|
-
|
|
13
|
-
## v2.7.0
|
|
14
|
-
|
|
15
|
-
- Added support for aligned dimensions for native dimension support in DXF
|
|
16
|
-
|
|
17
|
-
## v2.4.0
|
|
18
|
-
|
|
19
|
-
- Added support for tooltips.
|
|
20
|
-
|
|
21
|
-
## v2.2.0
|
|
22
|
-
|
|
23
|
-
- Added flag to react 3d renderer allowing user to force reset pan and zoom on cube/viewport click
|
|
24
|
-
|
|
25
|
-
## v2.1.0
|
|
26
|
-
|
|
27
|
-
- Made dxf exporter use LINE and POLYLINE instead of 3DFACE for the lines and polylines
|
|
28
|
-
|
|
29
|
-
## v2.0.9
|
|
30
|
-
|
|
31
|
-
- Made Text only front sided
|
|
32
|
-
|
|
33
|
-
## v1.7.0
|
|
34
|
-
|
|
35
|
-
- Allow using the abstract 3d scene origin in the DXF export
|
|
36
|
-
|
|
37
|
-
## v1.6.0
|
|
38
|
-
|
|
39
|
-
- Included abstract image and made a new Image component to draw abstract images.
|
|
40
|
-
|
|
41
|
-
## v1.4.0
|
|
42
|
-
|
|
43
|
-
- Added a flag to turn off alpha test on texture materials.
|
|
44
|
-
|
|
45
|
-
## v1.3.9
|
|
46
|
-
|
|
47
|
-
- Added a setting for the dxf exporter to specify the sides of the cylinders.
|
|
48
|
-
|
|
49
|
-
## v1.3.4
|
|
50
|
-
|
|
51
|
-
- Bugfix Polygon: THREE.WebGLAttributes: The size of the buffer attribute's array buffer does not match the original size. Resizing buffer attributes is not supported.
|
|
52
|
-
|
|
53
|
-
## v1.3.1
|
|
54
|
-
|
|
55
|
-
- Text bounds calculation.
|
|
56
|
-
|
|
57
|
-
## v1.3.0
|
|
58
|
-
|
|
59
|
-
- Exposed functions to calculate bounds from geometry.
|
|
60
|
-
|
|
61
|
-
## v1.2.2
|
|
62
|
-
|
|
63
|
-
- Fixed the square holes to the SVG renderer
|
|
64
|
-
- Added opacity to the SVG elements
|
|
65
|
-
|
|
66
|
-
## v1.2.0
|
|
67
|
-
|
|
68
|
-
- Added holes rendering to the SVG renderer
|
|
69
|
-
|
|
70
|
-
## v1.1.4
|
|
71
|
-
|
|
72
|
-
- Added screen space ambient occlusion
|
|
73
|
-
|
|
74
|
-
## v1.1.0
|
|
75
|
-
|
|
76
|
-
- Added outlines to hotspots
|
|
77
|
-
|
|
78
|
-
## v0.9.0
|
|
79
|
-
|
|
80
|
-
- Added React event to React renderer callbacks
|
|
81
|
-
|
|
82
|
-
## v0.8.0
|
|
83
|
-
|
|
84
|
-
- Added reactPopovers to React renderer
|
|
85
|
-
|
|
86
|
-
## v0.7.0
|
|
87
|
-
|
|
88
|
-
- Added onHoverGroup to React renderer
|
|
89
|
-
|
|
90
|
-
## v0.1.0 - 2024-06-05
|
|
91
|
-
|
|
92
|
-
- Start of changelog.
|