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,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, onlyStroke: boolean | undefined, grayScale: boolean | undefined, onlyStrokeFill: string, _stroke: number, parentPos: Vec3, parentRot: Vec3): ReadonlyArray<zOrderElement>;
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;AAItE,wBAAgB,KAAK,CACnB,CAAC,EAAE,KAAK,EACR,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAAG,SAAS,EAC/B,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,GACd,aAAa,CAAC,aAAa,CAAC,CAS9B"}
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, onlyStroke, grayScale, onlyStrokeFill, _stroke, parentPos, parentRot) {
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,EAAE,MAAM,aAAa,CAAC;AACtE,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,UAA+B,EAC/B,SAA8B,EAC9B,cAAsB,EACtB,OAAe,EACf,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,UAAU;QACpC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC;QAC5C,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3D,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
+ {"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, font: string): ReadonlyArray<zOrderElement>;
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;AAInD,wBAAgB,IAAI,CAClB,CAAC,EAAE,IAAI,EACP,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,aAAa,CAAC,aAAa,CAAC,CAa9B"}
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, font) {
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,EAAE,KAAK,EAAiB,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,QAAQ;AACR,MAAM,UAAU,IAAI,CAClB,CAAO,EACP,KAAqC,EACrC,IAAY,EACZ,SAAe,EACf,SAAe,EACf,MAAc,EACd,IAAY;IAEZ,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,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
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, View } from "../../abstract-3d.js";
2
- import { ImageDataUri } from "./svg-geometries/shared.js";
3
- export declare function toSvg(scene: Scene, view: View, stroke: number, scale?: {
4
- readonly size: number;
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,EACL,IAAI,EAWL,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAiB,MAAM,4BAA4B,CAAC;AAYzE,wBAAgB,KAAK,CACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAAE,EACjE,UAAU,CAAC,EAAE,OAAO,EACpB,SAAS,CAAC,EAAE,OAAO,EACnB,cAAc,GAAE,MAA8B,EAC9C,IAAI,GAAE,MAAW,EACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7C,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAgE7E"}
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"}
@@ -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, view, stroke, scale, onlyStroke, grayScale, onlyStrokeFill = "rgba(255,255,255,0)", font = "", imageDataByUrl, rotation) {
14
- const factor = scale
15
- ? scale.size /
16
- (scale.scaleByWidth
17
- ? view === "right" || view === "left"
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, view, factor, onlyStroke, grayScale, onlyStrokeFill, font, stroke, imageDataByUrl));
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, view, factor, scene.dimensions_deprecated?.material ?? { normal: "" }, false, false, onlyStrokeFill, font, stroke, imageDataByUrl));
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, view, factor, onlyStroke, grayScale, onlyStrokeFill, font, stroke, imageDataByUrl) {
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, view, factor, m.material, onlyStroke, grayScale, onlyStrokeFill, font, stroke, imageDataByUrl));
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, view, factor, onlyStroke, grayScale, onlyStrokeFill, font, stroke, imageDataByUrl));
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, view, factor, material, onlyStroke, grayScale, background, font, stroke, imageDataByUrl) {
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, onlyStroke, grayScale, stroke, background, parentPos, parentRot);
81
+ return box(mesh.geometry, point, color, opts, parentPos, parentRot);
70
82
  case "Plane":
71
- return plane(mesh.geometry, point, material, onlyStroke, grayScale, stroke, background, parentPos, parentRot, view, imageDataByUrl);
83
+ return plane(mesh.geometry, point, material, opts, parentPos, parentRot);
72
84
  case "Cylinder":
73
- return cylinder(mesh.geometry, point, color, onlyStroke, grayScale, stroke, background, parentPos, parentRot, factor);
85
+ return cylinder(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
74
86
  case "Cone":
75
- return cone(mesh.geometry, point, color, onlyStroke, grayScale, stroke, background, parentPos, parentRot, factor);
87
+ return cone(mesh.geometry, point, color, opts, parentPos, parentRot, factor);
76
88
  case "Line":
77
- return line(mesh.geometry, point, color, grayScale, stroke, parentPos, parentRot);
89
+ return line(mesh.geometry, point, color, opts, parentPos, parentRot);
78
90
  case "Polygon":
79
- return polygon(mesh.geometry, point, color, onlyStroke, grayScale, background, stroke, parentPos, parentRot);
91
+ return polygon(mesh.geometry, point, color, opts, parentPos, parentRot);
80
92
  case "Shape":
81
- return shape(mesh.geometry, point, color, onlyStroke, grayScale, background, stroke, parentPos, parentRot);
93
+ return shape(mesh.geometry, point, color, opts, parentPos, parentRot);
82
94
  case "Text":
83
- return text(mesh.geometry, point, color, parentPos, parentRot, factor, font);
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":"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"}
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.0",
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": "be91668b1cef7bf6944910322f284e49cc4148c3"
36
+ "gitHead": "f9b3196bf3c739a34f254763cf7021c2dfadc3bc"
37
37
  }
@@ -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 const toDxf = (scene: Scene, view: View): string => {
11
- const unitRot = vec3RotCombine(rotationForCameraPos(view), scene.rotation_deprecated ?? vec3Zero);
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 dxfHeader(size, center, id) + scene.groups.reduce((a, c) => a + dxfGroup(c, center, unitRot, handleRef), "") + dxfFooter(id);
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: ThreeEvent<MouseEvent>
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: ThreeEvent<MouseEvent>
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: ThreeEvent<MouseEvent>
63
+ e: SceneMouseEvent
63
64
  ) => void;
64
- readonly onClickHotSpot?: (hotSpot: HotSpotInfo, e: ThreeEvent<MouseEvent>) => void;
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 ToReactProps = {
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 reactPopovers?: ReadonlyArray<ReactPopover>;
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
- }: ToReactProps): React.JSX.Element => {
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" /> */}
@@ -198,3 +198,5 @@ export function shade(p: number, from: string, to?: string): string | undefined
198
198
  .slice(1, f[3]! > -1 || t[3]! > -1 ? undefined : -2)
199
199
  );
200
200
  }
201
+
202
+ export type Optional<T> = { readonly [K in keyof T]?: T[K] };
@@ -1,3 +1,3 @@
1
1
  export * from "./svg.js";
2
2
  export { type EmbededImage } from "./svg-encoding.js";
3
- export { type ImageDataUri } from "./svg-geometries/shared.js";
3
+ export type { ImageDataUri, SvgOptions } from "./svg-geometries/shared.js";
@@ -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
- onlyStroke: boolean | undefined,
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
- onlyStroke: boolean | undefined,
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
- onlyStroke: boolean | undefined,
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
- grayScale: boolean | undefined,
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
- onlyStroke: boolean | undefined,
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