abstract-3d 4.0.5 → 4.0.7

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 (44) hide show
  1. package/lib/renderers/svg/svg-encoding.d.ts +2 -0
  2. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
  3. package/lib/renderers/svg/svg-encoding.js +12 -0
  4. package/lib/renderers/svg/svg-encoding.js.map +1 -1
  5. package/lib/renderers/svg/svg-geometries/shared.d.ts +11 -4
  6. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
  7. package/lib/renderers/svg/svg-geometries/shared.js +2 -1
  8. package/lib/renderers/svg/svg-geometries/shared.js.map +1 -1
  9. package/lib/renderers/svg/svg-geometries/svg-box.d.ts.map +1 -1
  10. package/lib/renderers/svg/svg-geometries/svg-box.js +4 -1
  11. package/lib/renderers/svg/svg-geometries/svg-box.js.map +1 -1
  12. package/lib/renderers/svg/svg-geometries/svg-cone.d.ts.map +1 -1
  13. package/lib/renderers/svg/svg-geometries/svg-cone.js +1 -1
  14. package/lib/renderers/svg/svg-geometries/svg-cone.js.map +1 -1
  15. package/lib/renderers/svg/svg-geometries/svg-cylinder.d.ts.map +1 -1
  16. package/lib/renderers/svg/svg-geometries/svg-cylinder.js +3 -2
  17. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
  18. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
  19. package/lib/renderers/svg/svg-geometries/svg-plane.js +3 -1
  20. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
  21. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
  22. package/lib/renderers/svg/svg-geometries/svg-polygon.js +7 -1
  23. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
  24. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
  25. package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -1
  26. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
  27. package/lib/renderers/svg/svg-order.d.ts +6 -5
  28. package/lib/renderers/svg/svg-order.d.ts.map +1 -1
  29. package/lib/renderers/svg/svg-order.js +233 -124
  30. package/lib/renderers/svg/svg-order.js.map +1 -1
  31. package/lib/renderers/svg/svg.js +10 -8
  32. package/lib/renderers/svg/svg.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/renderers/svg/svg-encoding.ts +13 -0
  35. package/src/renderers/svg/svg-geometries/shared.ts +13 -5
  36. package/src/renderers/svg/svg-geometries/svg-box.ts +10 -1
  37. package/src/renderers/svg/svg-geometries/svg-cone.ts +2 -1
  38. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +3 -2
  39. package/src/renderers/svg/svg-geometries/svg-plane.ts +5 -2
  40. package/src/renderers/svg/svg-geometries/svg-polygon.ts +7 -6
  41. package/src/renderers/svg/svg-geometries/svg-shape.ts +4 -2
  42. package/src/renderers/svg/svg-order.test.ts +61 -6
  43. package/src/renderers/svg/svg-order.ts +257 -135
  44. package/src/renderers/svg/svg.ts +13 -8
@@ -93,13 +93,13 @@ function renderInternal(
93
93
  imageBg: options?.imageBg ?? false,
94
94
  className: options?.className ?? "",
95
95
  };
96
- // Isometric: the front turned 45° to show the side, and tilted by arctan(1/√2) to show the top, so the three axes are foreshortened alike
97
- const isometric = opts.view === "TopLeft" || opts.view === "TopRight";
98
- const view = isometric ? "front" : opts.view;
99
- const isometricRot = isometric
100
- ? vec3RotCombine(vec3(Math.atan(1 / Math.SQRT2), 0, 0), vec3(0, ((opts.view === "TopRight" ? -1 : 1) * Math.PI) / 4, 0))
96
+ // A three-quarter view: the front turned 30° to show the side, and tilted 20° to show the top, the front foremost
97
+ const angled = opts.view === "TopLeft" || opts.view === "TopRight";
98
+ const view = angled ? "front" : opts.view;
99
+ const angledRot = angled
100
+ ? vec3RotCombine(vec3((20 * Math.PI) / 180, 0, 0), vec3(0, ((opts.view === "TopRight" ? -1 : 1) * 30 * Math.PI) / 180, 0))
101
101
  : vec3Zero;
102
- const cameraRot = vec3RotCombine(isometricRot, rotationForCameraPos(view));
102
+ const cameraRot = vec3RotCombine(angledRot, rotationForCameraPos(view));
103
103
  const viewRot = opts.rotation ? vec3RotCombine(vec3(0, 0, (opts.rotation * Math.PI) / 180), cameraRot) : cameraRot;
104
104
  const unitRot = vec3RotCombine(viewRot, scene.rotation_deprecated ?? vec3Zero);
105
105
 
@@ -110,12 +110,17 @@ function renderInternal(
110
110
  const point = (x: number, y: number): Vec2 => vec2(svgCenter.x + x, svgCenter.y - y);
111
111
  const unitCenterFlipped = vec3Flip(unitCenter);
112
112
 
113
- const elements = [...orderElements(scene.groups.flatMap((g) => svgGroup(g, unitCenterFlipped, unitRot, point, opts)))];
113
+ const elements = [
114
+ ...orderElements(
115
+ scene.groups.flatMap((g) => svgGroup(g, unitCenterFlipped, unitRot, point, opts)),
116
+ point
117
+ ),
118
+ ];
114
119
  const dimOpts: SvgOptions = { ...opts, only_stroke: false, gray_scale: false };
115
120
  const visibleViews = calculateVisibleViews(view, scene.rotation_deprecated);
116
121
 
117
122
  // Dimensions are drawn for the flat views
118
- for (const dim of isometric ? [] : (scene.dimensions_deprecated?.dimensions ?? [])) {
123
+ for (const dim of angled ? [] : (scene.dimensions_deprecated?.dimensions ?? [])) {
119
124
  const d = dimensionConvertToTypeMesh(dim, scene.rotation_deprecated ?? vec3Zero, scene.dimensions_deprecated?.material);
120
125
  if (isViewVisible(d.views[0], visibleViews)) {
121
126
  const pos = vec3TransRot(d.pos, unitCenterFlipped, unitRot);