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.
Files changed (70) hide show
  1. package/lib/renderers/dxf/dxf.d.ts +5 -1
  2. package/lib/renderers/dxf/dxf.d.ts.map +1 -1
  3. package/lib/renderers/dxf/dxf.js +6 -3
  4. package/lib/renderers/dxf/dxf.js.map +1 -1
  5. package/lib/renderers/react/react-scene.d.ts +5 -4
  6. package/lib/renderers/react/react-scene.d.ts.map +1 -1
  7. package/lib/renderers/react/react-scene.js.map +1 -1
  8. package/lib/renderers/react/react.d.ts +3 -3
  9. package/lib/renderers/react/react.d.ts.map +1 -1
  10. package/lib/renderers/react/react.js +1 -1
  11. package/lib/renderers/react/react.js.map +1 -1
  12. package/lib/renderers/shared.d.ts +3 -0
  13. package/lib/renderers/shared.d.ts.map +1 -1
  14. package/lib/renderers/svg/index.d.ts +1 -1
  15. package/lib/renderers/svg/index.d.ts.map +1 -1
  16. package/lib/renderers/svg/svg-geometries/shared.d.ts +15 -0
  17. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
  18. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
  19. package/lib/renderers/svg/svg-geometries/svg-box.d.ts +2 -2
  20. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
  21. package/lib/renderers/svg/svg-geometries/svg-box.js +4 -4
  22. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
  23. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts +2 -2
  24. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
  25. package/lib/renderers/svg/svg-geometries/svg-cone.js +4 -4
  26. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
  27. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts +2 -2
  28. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
  29. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +4 -4
  30. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
  31. package/lib/renderers/svg/svg-geometries/svg-line.d.ts +2 -2
  32. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
  33. package/lib/renderers/svg/svg-geometries/svg-line.js +2 -2
  34. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
  35. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts +3 -3
  36. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
  37. package/lib/renderers/svg/svg-geometries/svg-plane.js +6 -6
  38. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
  39. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts +2 -2
  40. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
  41. package/lib/renderers/svg/svg-geometries/svg-polygon.js +4 -4
  42. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
  43. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts +2 -2
  44. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
  45. package/lib/renderers/svg/svg-geometries/svg-shape.js +4 -4
  46. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
  47. package/lib/renderers/svg/svg-geometries/svg-text.d.ts +2 -2
  48. package/lib/renderers/svg/svg-geometries/svg-text.d.ts.map +1 -1
  49. package/lib/renderers/svg/svg-geometries/svg-text.js +2 -2
  50. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
  51. package/lib/renderers/svg/svg.d.ts +4 -6
  52. package/lib/renderers/svg/svg.d.ts.map +1 -1
  53. package/lib/renderers/svg/svg.js +38 -26
  54. package/lib/renderers/svg/svg.js.map +1 -1
  55. package/package.json +2 -2
  56. package/src/renderers/dxf/dxf.ts +14 -7
  57. package/src/renderers/react/react-scene.tsx +5 -4
  58. package/src/renderers/react/react.tsx +4 -4
  59. package/src/renderers/shared.ts +2 -0
  60. package/src/renderers/svg/index.ts +1 -1
  61. package/src/renderers/svg/svg-geometries/shared.ts +14 -0
  62. package/src/renderers/svg/svg-geometries/svg-box.ts +5 -8
  63. package/src/renderers/svg/svg-geometries/svg-cone.ts +5 -8
  64. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +5 -8
  65. package/src/renderers/svg/svg-geometries/svg-line.ts +3 -4
  66. package/src/renderers/svg/svg-geometries/svg-plane.ts +8 -13
  67. package/src/renderers/svg/svg-geometries/svg-polygon.ts +5 -8
  68. package/src/renderers/svg/svg-geometries/svg-shape.ts +5 -8
  69. package/src/renderers/svg/svg-geometries/svg-text.ts +4 -4
  70. package/src/renderers/svg/svg.ts +41 -119
@@ -1,5 +1,5 @@
1
1
  import { Polygon, vec3ZMean, Vec3, Vec2, vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js";
2
- import { gray, zElem, zOrderElement, transparent } from "./shared.js";
2
+ import { gray, zElem, zOrderElement, transparent, SvgOptions } from "./shared.js";
3
3
  import { svgPolygon } from "../svg-encoding.js";
4
4
  import { rgbGrayScale } from "../../shared.js";
5
5
 
@@ -7,10 +7,7 @@ export function polygon(
7
7
  p: Polygon,
8
8
  point: (x: number, y: number) => Vec2,
9
9
  color: string,
10
- onlyStroke: boolean | undefined,
11
- grayScale: boolean | undefined,
12
- onlyStrokeFill: string,
13
- stroke: number,
10
+ opts: SvgOptions,
14
11
  parentPos: Vec3,
15
12
  parentRot: Vec3
16
13
  ): ReadonlyArray<zOrderElement> {
@@ -18,8 +15,8 @@ export function polygon(
18
15
  const rot = vec3RotCombine(parentRot, p.rot ?? vec3Zero);
19
16
  const rotatedPoints = p.points.map((p) => vec3TransRot(p, pos, rot));
20
17
  const points = rotatedPoints.map(({ x, y }) => point(x, y));
21
- const [strokeColor, fill, strokeThickness] = onlyStroke
22
- ? [grayScale ? gray : color, onlyStrokeFill, stroke]
23
- : [transparent, grayScale ? rgbGrayScale(color) : color, 0];
18
+ const [strokeColor, fill, strokeThickness] = opts.onlyStroke
19
+ ? [opts.grayScale ? gray : color, opts.onlyStrokeFill, opts.stroke]
20
+ : [transparent, opts.grayScale ? rgbGrayScale(color) : color, 0];
24
21
  return [zElem(svgPolygon(points, fill, strokeColor, strokeThickness), vec3ZMean(...rotatedPoints))];
25
22
  }
@@ -1,5 +1,5 @@
1
1
  import { vec3ZMean, Vec3, Vec2, vec3TransRot, vec3RotCombine, Shape, vec3, vec3Zero } from "../../../abstract-3d.js";
2
- import { gray, zElem, zOrderElement, transparent } from "./shared.js";
2
+ import { gray, zElem, zOrderElement, transparent, SvgOptions } from "./shared.js";
3
3
  import { svgPolygon } from "../svg-encoding.js";
4
4
  import { rgbGrayScale } from "../../shared.js";
5
5
 
@@ -7,10 +7,7 @@ export function shape(
7
7
  s: Shape,
8
8
  point: (x: number, y: number) => Vec2,
9
9
  color: string,
10
- onlyStroke: boolean | undefined,
11
- grayScale: boolean | undefined,
12
- onlyStrokeFill: string,
13
- _stroke: number,
10
+ opts: SvgOptions,
14
11
  parentPos: Vec3,
15
12
  parentRot: Vec3
16
13
  ): ReadonlyArray<zOrderElement> {
@@ -18,8 +15,8 @@ export function shape(
18
15
  const rot = vec3RotCombine(parentRot, s.rot ?? vec3Zero);
19
16
  const rotatedPoints = s.points.map((p) => vec3TransRot(vec3(p.x, p.y, 0), pos, rot));
20
17
  const points = rotatedPoints.map(({ x, y }) => point(x, y));
21
- const [strokeColor, fill] = onlyStroke
22
- ? [grayScale ? gray : color, onlyStrokeFill]
23
- : [transparent, grayScale ? rgbGrayScale(color) : color];
18
+ const [strokeColor, fill] = opts.onlyStroke
19
+ ? [opts.grayScale ? gray : color, opts.onlyStrokeFill]
20
+ : [transparent, opts.grayScale ? rgbGrayScale(color) : color];
24
21
  return [zElem(svgPolygon(points, fill, strokeColor, 0), vec3ZMean(...rotatedPoints))];
25
22
  }
@@ -1,5 +1,5 @@
1
1
  import { Text, Vec2, Vec3, vec3TransRot, vec3RotCombine, vec3Zero } from "../../../abstract-3d.js";
2
- import { zElem, zOrderElement } from "./shared.js";
2
+ import { SvgOptions, zElem, zOrderElement } from "./shared.js";
3
3
  import { svgText } from "../svg-encoding.js";
4
4
 
5
5
  // dummy
@@ -7,10 +7,10 @@ export function text(
7
7
  t: Text,
8
8
  point: (x: number, y: number) => Vec2,
9
9
  fill: string,
10
+ opts: SvgOptions,
10
11
  parentPos: Vec3,
11
12
  parentRot: Vec3,
12
- factor: number,
13
- font: string
13
+ factor: number
14
14
  ): ReadonlyArray<zOrderElement> {
15
15
  const pos = vec3TransRot(t.pos, parentPos, parentRot);
16
16
  const rot = vec3RotCombine(parentRot, t.rot ?? vec3Zero);
@@ -19,7 +19,7 @@ export function text(
19
19
  const strings = t.text.split("\n");
20
20
  let posY = strings.length === 1 ? 0 : (fontSize * strings.length - fontSize) / 2;
21
21
  for (const s of strings) {
22
- texts.push(zElem(svgText(point(pos.x, pos.y + posY), s, 0, fill, font, fontSize), pos.z));
22
+ texts.push(zElem(svgText(point(pos.x, pos.y + posY), s, 0, fill, opts.font, fontSize), pos.z));
23
23
  posY -= fontSize * 1.2;
24
24
  }
25
25
 
@@ -15,7 +15,7 @@ import {
15
15
  vec3TransRot,
16
16
  Material,
17
17
  } from "../../abstract-3d.js";
18
- import { ImageDataUri, zOrderElement } from "./svg-geometries/shared.js";
18
+ import { SvgOptions, zOrderElement } from "./svg-geometries/shared.js";
19
19
  import { box } from "./svg-geometries/svg-box.js";
20
20
  import { cylinder } from "./svg-geometries/svg-cylinder.js";
21
21
  import { line } from "./svg-geometries/svg-line.js";
@@ -24,73 +24,62 @@ import { shape } from "./svg-geometries/svg-shape.js";
24
24
  import { polygon } from "./svg-geometries/svg-polygon.js";
25
25
  import { text } from "./svg-geometries/svg-text.js";
26
26
  import { cone } from "./svg-geometries/svg-cone.js";
27
- import { rotationForCameraPos, sizeCenterForCameraPos } from "../shared.js";
27
+ import { Optional, rotationForCameraPos, sizeCenterForCameraPos } from "../shared.js";
28
28
  import { svg } from "./svg-encoding.js";
29
29
 
30
30
  export function toSvg(
31
31
  scene: Scene,
32
- view: View,
33
- stroke: number,
34
- scale?: { readonly size: number; readonly scaleByWidth: boolean },
35
- onlyStroke?: boolean,
36
- grayScale?: boolean,
37
- onlyStrokeFill: string = "rgba(255,255,255,0)",
38
- font: string = "",
39
- imageDataByUrl?: Record<string, ImageDataUri>,
40
- rotation?: number
32
+ options: Optional<SvgOptions>
41
33
  ): { readonly image: string; readonly width: number; readonly height: number } {
42
- const factor = scale
43
- ? scale.size /
44
- (scale.scaleByWidth
45
- ? view === "right" || view === "left"
34
+ const opts: SvgOptions = {
35
+ view: options.view ?? "front",
36
+ stroke: options.stroke ?? 2,
37
+ scale: options.scale ?? undefined,
38
+ onlyStroke: options.onlyStroke ?? false,
39
+ grayScale: options.grayScale ?? false,
40
+ onlyStrokeFill: options.onlyStrokeFill ?? "rgba(255,255,255,0)",
41
+ font: options.font ?? "",
42
+ imageDataByUrl: options.imageDataByUrl ?? {},
43
+ rotation: options.rotation ?? 0,
44
+ };
45
+
46
+ const factor = opts.scale
47
+ ? opts.scale.size /
48
+ (opts.scale.scaleByWidth
49
+ ? opts.view === "right" || opts.view === "left"
46
50
  ? scene.size_deprecated.z
47
51
  : scene.size_deprecated.x
48
- : view === "top" || view === "bottom"
52
+ : opts.view === "top" || opts.view === "bottom"
49
53
  ? scene.size_deprecated.z
50
54
  : scene.size_deprecated.y)
51
55
  : 1;
52
- const baseRot = vec3RotCombine(rotationForCameraPos(view), scene.rotation_deprecated ?? vec3Zero);
53
- const unitRot = rotation ? vec3RotCombine(vec3(0, 0, (rotation * Math.PI) / 180), baseRot) : baseRot;
56
+ const baseRot = vec3RotCombine(rotationForCameraPos(opts.view), scene.rotation_deprecated ?? vec3Zero);
57
+ const unitRot = opts.rotation ? vec3RotCombine(vec3(0, 0, (opts.rotation * Math.PI) / 180), baseRot) : baseRot;
54
58
 
55
59
  const unitPos = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, scene.rotation_deprecated ?? vec3Zero);
56
60
  const [size, center] = sizeCenterForCameraPos(scene.size_deprecated, unitPos, unitRot, factor);
57
61
  const unitHalfSize = vec3Scale(size, 0.5);
58
- const centerAdj = vec3(center.x - stroke * 0.75, center.y + stroke * 0.75, center.z);
59
- const width = size.x + 1.5 * stroke;
60
- const height = size.y + 1.5 * stroke;
62
+ const centerAdj = vec3(center.x - opts.stroke * 0.75, center.y + opts.stroke * 0.75, center.z);
63
+ const width = size.x + 1.5 * opts.stroke;
64
+ const height = size.y + 1.5 * opts.stroke;
61
65
  const elements = Array<zOrderElement>();
62
66
  const point = (x: number, y: number): Vec2 =>
63
67
  vec2(-centerAdj.x + unitHalfSize.x + x * factor, centerAdj.y + unitHalfSize.y - y * factor);
64
68
  for (const g of scene.groups) {
65
69
  const pos = vec3Rot(g.pos, unitPos, unitRot);
66
70
  const rot = vec3RotCombine(unitRot, g.rot ?? vec3Zero);
67
- elements.push(
68
- ...svgGroup(g, pos, rot, point, view, factor, onlyStroke, grayScale, onlyStrokeFill, font, stroke, imageDataByUrl)
69
- );
71
+ elements.push(...svgGroup(g, pos, rot, point, factor, opts));
70
72
  }
73
+ const dimOpts: SvgOptions = { ...opts, onlyStroke: false, grayScale: false };
71
74
  elements.sort((a, b) => a.zOrder - b.zOrder);
72
75
  const cameraPos = vec3Rot(vec3(1, 1, 1), vec3Zero, scene.rotation_deprecated ?? vec3Zero);
73
76
  for (const d of scene.dimensions_deprecated?.dimensions ?? []) {
74
- if (flipViews(d.views[0], cameraPos) === view) {
77
+ if (flipViews(d.views[0], cameraPos) === opts.view) {
75
78
  const pos = vec3Rot(d.pos, unitPos, unitRot);
76
79
  const rot = vec3RotCombine(unitRot, d.rot);
77
80
  for (const m of d.meshes) {
78
81
  elements.push(
79
- ...svgMesh(
80
- m,
81
- pos,
82
- rot,
83
- point,
84
- view,
85
- factor,
86
- scene.dimensions_deprecated?.material ?? { normal: "" },
87
- false,
88
- false,
89
- onlyStrokeFill,
90
- font,
91
- stroke,
92
- imageDataByUrl
93
- )
82
+ ...svgMesh(m, pos, rot, point, factor, scene.dimensions_deprecated?.material ?? { normal: "" }, dimOpts)
94
83
  );
95
84
  }
96
85
  }
@@ -109,55 +98,17 @@ function svgGroup(
109
98
  pos: Vec3,
110
99
  rot: Vec3,
111
100
  point: (x: number, y: number) => Vec2,
112
- view: View,
113
101
  factor: number,
114
- onlyStroke: boolean | undefined,
115
- grayScale: boolean | undefined,
116
- onlyStrokeFill: string,
117
- font: string,
118
- stroke: number,
119
- imageDataByUrl: Record<string, ImageDataUri> | undefined
102
+ opts: SvgOptions
120
103
  ): ReadonlyArray<zOrderElement> {
121
104
  const elements = Array<zOrderElement>();
122
-
123
105
  for (const m of g.meshes ?? []) {
124
- elements.push(
125
- ...svgMesh(
126
- m,
127
- pos,
128
- rot,
129
- point,
130
- view,
131
- factor,
132
- m.material,
133
- onlyStroke,
134
- grayScale,
135
- onlyStrokeFill,
136
- font,
137
- stroke,
138
- imageDataByUrl
139
- )
140
- );
106
+ elements.push(...svgMesh(m, pos, rot, point, factor, m.material, opts));
141
107
  }
142
108
  for (const sg of g.groups ?? []) {
143
109
  const sPos = vec3TransRot(sg.pos, pos, rot);
144
110
  const sRot = vec3RotCombine(rot, sg.rot ?? vec3Zero);
145
- elements.push(
146
- ...svgGroup(
147
- sg,
148
- sPos,
149
- sRot,
150
- point,
151
- view,
152
- factor,
153
- onlyStroke,
154
- grayScale,
155
- onlyStrokeFill,
156
- font,
157
- stroke,
158
- imageDataByUrl
159
- )
160
- );
111
+ elements.push(...svgGroup(sg, sPos, sRot, point, factor, opts));
161
112
  }
162
113
  return elements;
163
114
  }
@@ -167,57 +118,28 @@ function svgMesh(
167
118
  parentPos: Vec3,
168
119
  parentRot: Vec3,
169
120
  point: (x: number, y: number) => Vec2,
170
- view: View,
171
121
  factor: number,
172
122
  material: Material,
173
- onlyStroke: boolean | undefined,
174
- grayScale: boolean | undefined,
175
- background: string,
176
- font: string,
177
- stroke: number,
178
- imageDataByUrl: Record<string, ImageDataUri> | undefined
123
+ opts: SvgOptions
179
124
  ): ReadonlyArray<zOrderElement> {
180
125
  const color = material.normal;
181
126
  switch (mesh.geometry.type) {
182
127
  case "Box":
183
- return box(mesh.geometry, point, color, onlyStroke, grayScale, stroke, background, parentPos, parentRot);
128
+ return box(mesh.geometry, point, color, opts, parentPos, parentRot);
184
129
  case "Plane":
185
- return plane(
186
- mesh.geometry,
187
- point,
188
- material,
189
- onlyStroke,
190
- grayScale,
191
- stroke,
192
- background,
193
- parentPos,
194
- parentRot,
195
- view,
196
- imageDataByUrl
197
- );
130
+ return plane(mesh.geometry, point, material, opts, parentPos, parentRot);
198
131
  case "Cylinder":
199
- return cylinder(
200
- mesh.geometry,
201
- point,
202
- color,
203
- onlyStroke,
204
- grayScale,
205
- stroke,
206
- background,
207
- parentPos,
208
- parentRot,
209
- factor
210
- );
132
+ return cylinder(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
211
133
  case "Cone":
212
- return cone(mesh.geometry, point, color, onlyStroke, grayScale, stroke, background, parentPos, parentRot, factor);
134
+ return cone(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
213
135
  case "Line":
214
- return line(mesh.geometry, point, color, grayScale, stroke, parentPos, parentRot);
136
+ return line(mesh.geometry, point, color, opts, parentPos, parentRot);
215
137
  case "Polygon":
216
- return polygon(mesh.geometry, point, color, onlyStroke, grayScale, background, stroke, parentPos, parentRot);
138
+ return polygon(mesh.geometry, point, color, opts, parentPos, parentRot);
217
139
  case "Shape":
218
- return shape(mesh.geometry, point, color, onlyStroke, grayScale, background, stroke, parentPos, parentRot);
140
+ return shape(mesh.geometry, point, color, opts, parentPos, parentRot);
219
141
  case "Text":
220
- return text(mesh.geometry, point, color, parentPos, parentRot, factor, font);
142
+ return text(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
221
143
  case "Tube":
222
144
  case "Sphere":
223
145
  return [];