abstract-3d 4.1.1 → 4.1.3

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 (130) hide show
  1. package/lib/renderers/svg/svg-encoding.d.ts +0 -2
  2. package/lib/renderers/svg/svg-encoding.d.ts.map +1 -1
  3. package/lib/renderers/svg/svg-encoding.js +0 -12
  4. package/lib/renderers/svg/svg-encoding.js.map +1 -1
  5. package/lib/renderers/svg/svg-geometries/shared.d.ts +2 -19
  6. package/lib/renderers/svg/svg-geometries/shared.d.ts.map +1 -1
  7. package/lib/renderers/svg/svg-geometries/shared.js +1 -16
  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 +30 -44
  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 +3 -3
  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 +6 -19
  17. package/lib/renderers/svg/svg-geometries/svg-cylinder.js.map +1 -1
  18. package/lib/renderers/svg/svg-geometries/svg-image.d.ts.map +1 -1
  19. package/lib/renderers/svg/svg-geometries/svg-image.js +2 -3
  20. package/lib/renderers/svg/svg-geometries/svg-image.js.map +1 -1
  21. package/lib/renderers/svg/svg-geometries/svg-line.d.ts.map +1 -1
  22. package/lib/renderers/svg/svg-geometries/svg-line.js +1 -3
  23. package/lib/renderers/svg/svg-geometries/svg-line.js.map +1 -1
  24. package/lib/renderers/svg/svg-geometries/svg-plane.d.ts.map +1 -1
  25. package/lib/renderers/svg/svg-geometries/svg-plane.js +2 -6
  26. package/lib/renderers/svg/svg-geometries/svg-plane.js.map +1 -1
  27. package/lib/renderers/svg/svg-geometries/svg-polygon.d.ts.map +1 -1
  28. package/lib/renderers/svg/svg-geometries/svg-polygon.js +2 -10
  29. package/lib/renderers/svg/svg-geometries/svg-polygon.js.map +1 -1
  30. package/lib/renderers/svg/svg-geometries/svg-shape.d.ts.map +1 -1
  31. package/lib/renderers/svg/svg-geometries/svg-shape.js +2 -5
  32. package/lib/renderers/svg/svg-geometries/svg-shape.js.map +1 -1
  33. package/lib/renderers/svg/svg-geometries/svg-text.js +1 -1
  34. package/lib/renderers/svg/svg-geometries/svg-text.js.map +1 -1
  35. package/lib/renderers/svg/svg-order.d.ts +5 -6
  36. package/lib/renderers/svg/svg-order.d.ts.map +1 -1
  37. package/lib/renderers/svg/svg-order.js +124 -233
  38. package/lib/renderers/svg/svg-order.js.map +1 -1
  39. package/lib/renderers/svg/svg.d.ts.map +1 -1
  40. package/lib/renderers/svg/svg.js +12 -11
  41. package/lib/renderers/svg/svg.js.map +1 -1
  42. package/lib/renderers/svg-bsp/class-names.d.ts +11 -0
  43. package/lib/renderers/svg-bsp/class-names.d.ts.map +1 -0
  44. package/lib/renderers/svg-bsp/class-names.js +11 -0
  45. package/lib/renderers/svg-bsp/class-names.js.map +1 -0
  46. package/lib/renderers/svg-bsp/index.d.ts +5 -0
  47. package/lib/renderers/svg-bsp/index.d.ts.map +1 -0
  48. package/lib/renderers/svg-bsp/index.js +4 -0
  49. package/lib/renderers/svg-bsp/index.js.map +1 -0
  50. package/lib/renderers/svg-bsp/svg-encoding.d.ts +19 -0
  51. package/lib/renderers/svg-bsp/svg-encoding.d.ts.map +1 -0
  52. package/lib/renderers/svg-bsp/svg-encoding.js +135 -0
  53. package/lib/renderers/svg-bsp/svg-encoding.js.map +1 -0
  54. package/lib/renderers/svg-bsp/svg-geometries/shared.d.ts +47 -0
  55. package/lib/renderers/svg-bsp/svg-geometries/shared.d.ts.map +1 -0
  56. package/lib/renderers/svg-bsp/svg-geometries/shared.js +45 -0
  57. package/lib/renderers/svg-bsp/svg-geometries/shared.js.map +1 -0
  58. package/lib/renderers/svg-bsp/svg-geometries/svg-box.d.ts +4 -0
  59. package/lib/renderers/svg-bsp/svg-geometries/svg-box.d.ts.map +1 -0
  60. package/lib/renderers/svg-bsp/svg-geometries/svg-box.js +58 -0
  61. package/lib/renderers/svg-bsp/svg-geometries/svg-box.js.map +1 -0
  62. package/lib/renderers/svg-bsp/svg-geometries/svg-cone.d.ts +4 -0
  63. package/lib/renderers/svg-bsp/svg-geometries/svg-cone.d.ts.map +1 -0
  64. package/lib/renderers/svg-bsp/svg-geometries/svg-cone.js +39 -0
  65. package/lib/renderers/svg-bsp/svg-geometries/svg-cone.js.map +1 -0
  66. package/lib/renderers/svg-bsp/svg-geometries/svg-cylinder.d.ts +4 -0
  67. package/lib/renderers/svg-bsp/svg-geometries/svg-cylinder.d.ts.map +1 -0
  68. package/lib/renderers/svg-bsp/svg-geometries/svg-cylinder.js +62 -0
  69. package/lib/renderers/svg-bsp/svg-geometries/svg-cylinder.js.map +1 -0
  70. package/lib/renderers/svg-bsp/svg-geometries/svg-image.d.ts +4 -0
  71. package/lib/renderers/svg-bsp/svg-geometries/svg-image.d.ts.map +1 -0
  72. package/lib/renderers/svg-bsp/svg-geometries/svg-image.js +44 -0
  73. package/lib/renderers/svg-bsp/svg-geometries/svg-image.js.map +1 -0
  74. package/lib/renderers/svg-bsp/svg-geometries/svg-line.d.ts +4 -0
  75. package/lib/renderers/svg-bsp/svg-geometries/svg-line.d.ts.map +1 -0
  76. package/lib/renderers/svg-bsp/svg-geometries/svg-line.js +12 -0
  77. package/lib/renderers/svg-bsp/svg-geometries/svg-line.js.map +1 -0
  78. package/lib/renderers/svg-bsp/svg-geometries/svg-plane.d.ts +4 -0
  79. package/lib/renderers/svg-bsp/svg-geometries/svg-plane.d.ts.map +1 -0
  80. package/lib/renderers/svg-bsp/svg-geometries/svg-plane.js +24 -0
  81. package/lib/renderers/svg-bsp/svg-geometries/svg-plane.js.map +1 -0
  82. package/lib/renderers/svg-bsp/svg-geometries/svg-polygon.d.ts +4 -0
  83. package/lib/renderers/svg-bsp/svg-geometries/svg-polygon.d.ts.map +1 -0
  84. package/lib/renderers/svg-bsp/svg-geometries/svg-polygon.js +24 -0
  85. package/lib/renderers/svg-bsp/svg-geometries/svg-polygon.js.map +1 -0
  86. package/lib/renderers/svg-bsp/svg-geometries/svg-shape.d.ts +4 -0
  87. package/lib/renderers/svg-bsp/svg-geometries/svg-shape.d.ts.map +1 -0
  88. package/lib/renderers/svg-bsp/svg-geometries/svg-shape.js +19 -0
  89. package/lib/renderers/svg-bsp/svg-geometries/svg-shape.js.map +1 -0
  90. package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts +4 -0
  91. package/lib/renderers/svg-bsp/svg-geometries/svg-text.d.ts.map +1 -0
  92. package/lib/renderers/svg-bsp/svg-geometries/svg-text.js +26 -0
  93. package/lib/renderers/svg-bsp/svg-geometries/svg-text.js.map +1 -0
  94. package/lib/renderers/svg-bsp/svg-order.d.ts +10 -0
  95. package/lib/renderers/svg-bsp/svg-order.d.ts.map +1 -0
  96. package/lib/renderers/svg-bsp/svg-order.js +257 -0
  97. package/lib/renderers/svg-bsp/svg-order.js.map +1 -0
  98. package/lib/renderers/svg-bsp/svg.d.ts +16 -0
  99. package/lib/renderers/svg-bsp/svg.d.ts.map +1 -0
  100. package/lib/renderers/svg-bsp/svg.js +120 -0
  101. package/lib/renderers/svg-bsp/svg.js.map +1 -0
  102. package/package.json +6 -1
  103. package/src/renderers/svg/svg-encoding.ts +0 -13
  104. package/src/renderers/svg/svg-geometries/shared.ts +3 -31
  105. package/src/renderers/svg/svg-geometries/svg-box.ts +36 -51
  106. package/src/renderers/svg/svg-geometries/svg-cone.ts +3 -18
  107. package/src/renderers/svg/svg-geometries/svg-cylinder.ts +6 -26
  108. package/src/renderers/svg/svg-geometries/svg-image.ts +2 -3
  109. package/src/renderers/svg/svg-geometries/svg-line.ts +1 -3
  110. package/src/renderers/svg/svg-geometries/svg-plane.ts +2 -12
  111. package/src/renderers/svg/svg-geometries/svg-polygon.ts +2 -10
  112. package/src/renderers/svg/svg-geometries/svg-shape.ts +2 -11
  113. package/src/renderers/svg/svg-geometries/svg-text.ts +1 -1
  114. package/src/renderers/svg/svg.ts +12 -14
  115. package/src/renderers/svg-bsp/class-names.ts +10 -0
  116. package/src/renderers/svg-bsp/index.ts +4 -0
  117. package/src/renderers/svg-bsp/svg-encoding.ts +190 -0
  118. package/src/renderers/svg-bsp/svg-geometries/shared.ts +88 -0
  119. package/src/renderers/svg-bsp/svg-geometries/svg-box.ts +76 -0
  120. package/src/renderers/svg-bsp/svg-geometries/svg-cone.ts +68 -0
  121. package/src/renderers/svg-bsp/svg-geometries/svg-cylinder.ts +82 -0
  122. package/src/renderers/svg-bsp/svg-geometries/svg-image.ts +56 -0
  123. package/src/renderers/svg-bsp/svg-geometries/svg-line.ts +21 -0
  124. package/src/renderers/svg-bsp/svg-geometries/svg-plane.ts +43 -0
  125. package/src/renderers/svg-bsp/svg-geometries/svg-polygon.ts +33 -0
  126. package/src/renderers/svg-bsp/svg-geometries/svg-shape.ts +34 -0
  127. package/src/renderers/svg-bsp/svg-geometries/svg-text.ts +40 -0
  128. package/src/renderers/svg-bsp/svg.ts +183 -0
  129. /package/src/renderers/{svg → svg-bsp}/svg-order.test.ts +0 -0
  130. /package/src/renderers/{svg → svg-bsp}/svg-order.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"svg-shape.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAI3E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG7D,wBAAgB,KAAK,CACnB,CAAC,EAAE,KAAK,EACR,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,GACd,aAAa,CAAC,aAAa,CAAC,CAmB9B"}
1
+ {"version":3,"file":"svg-shape.d.ts","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAI3E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG7D,wBAAgB,KAAK,CACnB,CAAC,EAAE,KAAK,EACR,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,EACrC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,GACd,aAAa,CAAC,aAAa,CAAC,CAU9B"}
@@ -1,7 +1,7 @@
1
1
  import { vec3ZMean, vec3TransRot, vec3RotCombine, vec3, vec3Zero } from "../../../abstract-3d.js";
2
2
  import { rgbGrayScale } from "../../../utils.js";
3
3
  import { svgPolygon } from "../svg-encoding.js";
4
- import { gray, isOpaque, zElem, transparent } from "./shared.js";
4
+ import { gray, zElem, transparent } from "./shared.js";
5
5
  export function shape(s, point, material, opts, parentPos, parentRot) {
6
6
  const pos = vec3TransRot(s.pos, parentPos, parentRot);
7
7
  const rot = vec3RotCombine(parentRot, s.rot ?? vec3Zero);
@@ -11,9 +11,6 @@ export function shape(s, point, material, opts, parentPos, parentRot) {
11
11
  const [strokeColor, fill] = opts.only_stroke
12
12
  ? [opts.gray_scale ? gray : color, opts.background]
13
13
  : [transparent, opts.gray_scale ? rgbGrayScale(color) : color];
14
- const opacity = material.opacity ?? 1.0;
15
- return [
16
- zElem(svgPolygon(rot, points, fill, opacity, strokeColor, 0), vec3ZMean(...rotatedPoints), rotatedPoints, isOpaque(fill, opacity) && !s.holes?.length, { fill, opacity, stroke: strokeColor, strokeWidth: 0 }),
17
- ];
14
+ return [zElem(svgPolygon(rot, points, fill, material.opacity ?? 1.0, strokeColor, 0), vec3ZMean(...rotatedPoints))];
18
15
  }
19
16
  //# 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":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,UAAU,KAAK,CACnB,CAAQ,EACR,KAAqC,EACrC,QAAkB,EAClB,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,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW;QAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;QACnD,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAC;IACxC,OAAO;QACL,KAAK,CACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,EACtD,SAAS,CAAC,GAAG,aAAa,CAAC,EAC3B,aAAa,EACb,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CACvD;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"svg-shape.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-shape.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,UAAU,KAAK,CACnB,CAAQ,EACR,KAAqC,EACrC,QAAkB,EAClB,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,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW;QAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;QACnD,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACtH,CAAC"}
@@ -18,7 +18,7 @@ export function text(t, point, fill, opts, parentPos, parentRot) {
18
18
  let posY = strings.length === 1 ? 0 : (fontSize * strings.length - fontSize) / 2;
19
19
  for (const s of strings) {
20
20
  const matrix = svgTrsMatrix(point(pos.x, pos.y + posY), rot);
21
- texts.push(zElem(svgText(s, matrix, fill, opts.font, fontSize), pos.z, [pos]));
21
+ texts.push(zElem(svgText(s, matrix, fill, opts.font, fontSize), pos.z));
22
22
  posY -= fontSize * 1.2;
23
23
  }
24
24
  return texts;
@@ -1 +1 @@
1
- {"version":3,"file":"svg-text.js","sourceRoot":"","sources":["../../../../src/renderers/svg/svg-geometries/svg-text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,GAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAM,0BAA0B,GAAW,CAAC,GAAG,CAAC;AAEhD,QAAQ;AACR,MAAM,UAAU,IAAI,CAClB,CAAO,EACP,KAAqC,EACrC,IAAY,EACZ,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;IAEzD,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEjE,sCAAsC;IACtC,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,0BAA0B,EAAE,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,EAAiB,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5B,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,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,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":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,GAAS,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAM,0BAA0B,GAAW,CAAC,GAAG,CAAC;AAEhD,QAAQ;AACR,MAAM,UAAU,IAAI,CAClB,CAAO,EACP,KAAqC,EACrC,IAAY,EACZ,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;IAEzD,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEjE,sCAAsC;IACtC,IAAI,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,0BAA0B,EAAE,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,EAAiB,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC5B,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,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,10 +1,9 @@
1
- import type { Vec2 } from "../../abstract-3d.js";
2
1
  import type { zOrderElement } from "./svg-geometries/shared.js";
3
2
  /**
4
- * Elements in drawing order, back to front, by a BSP tree of their planes: of each node, what's behind its plane is drawn first, then what's in it,
5
- * then what's in front of it. An element on both sides of a plane is split by it when it's a plain polygon, its pieces stroked only along its own
6
- * edges, else put on the side of its center, and drawn whole again where nothing drawn between its pieces overlaps it on screen. Elements without
7
- * points are drawn last, by mean depth. Elements entirely inside an opaque convex polygon drawn after them are left out, as they can't be seen
3
+ * Elements in drawing order, back to front, by Newell's ordering without splitting: of two elements that overlap on screen, one entirely behind the
4
+ * other's plane, or the other entirely in front of its plane, is drawn first. Elements are drawn by mean depth otherwise, each after those it must be
5
+ * drawn after, depth first; elements overlapping in a cycle, which only splitting them could resolve, are drawn where the cycle is met. Elements
6
+ * entirely inside an opaque convex polygon in front of them are left out, as they can't be seen
8
7
  */
9
- export declare function orderElements(elements: ReadonlyArray<zOrderElement>, point: (x: number, y: number) => Vec2): ReadonlyArray<zOrderElement>;
8
+ export declare function orderElements(elements: ReadonlyArray<zOrderElement>): ReadonlyArray<zOrderElement>;
10
9
  //# sourceMappingURL=svg-order.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg-order.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAQ,MAAM,sBAAsB,CAAC;AAGvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGhE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,CAsBzI"}
1
+ {"version":3,"file":"svg-order.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CA0DlG"}
@@ -1,257 +1,148 @@
1
- import { vec3Zero } from "../../abstract-3d.js";
2
- import { svgEdges, svgPolygon } from "./svg-encoding.js";
3
- import { isOpaque } from "./svg-geometries/shared.js";
4
1
  /**
5
- * Elements in drawing order, back to front, by a BSP tree of their planes: of each node, what's behind its plane is drawn first, then what's in it,
6
- * then what's in front of it. An element on both sides of a plane is split by it when it's a plain polygon, its pieces stroked only along its own
7
- * edges, else put on the side of its center, and drawn whole again where nothing drawn between its pieces overlaps it on screen. Elements without
8
- * points are drawn last, by mean depth. Elements entirely inside an opaque convex polygon drawn after them are left out, as they can't be seen
2
+ * Elements in drawing order, back to front, by Newell's ordering without splitting: of two elements that overlap on screen, one entirely behind the
3
+ * other's plane, or the other entirely in front of its plane, is drawn first. Elements are drawn by mean depth otherwise, each after those it must be
4
+ * drawn after, depth first; elements overlapping in a cycle, which only splitting them could resolve, are drawn where the cycle is met. Elements
5
+ * entirely inside an opaque convex polygon in front of them are left out, as they can't be seen
9
6
  */
10
- export function orderElements(elements, point) {
11
- const pieces = [];
12
- const pointless = [];
13
- for (const element of elements) {
14
- if (element.polygon?.length) {
15
- pieces.push({ element, points: element.polygon, plane: getPlane(element.polygon) });
7
+ export function orderElements(elements) {
8
+ const items = [];
9
+ const swept = [];
10
+ const byDepth = [];
11
+ elements.forEach((e, i) => {
12
+ items.push(e.polygon && createItem(e.polygon, !!e.opaque));
13
+ byDepth.push(i);
14
+ if (e.polygon) {
15
+ swept.push(i);
16
16
  }
17
- else {
18
- pointless.push(element);
19
- }
20
- }
21
- const drawn = { pieces: [], items: [], spans: new Map() };
22
- draw(pieces, drawn);
23
- const state = getHidden(drawn.items);
24
- mergeSplit(drawn, state);
25
- const ordered = [];
26
- for (let i = 0; i < drawn.pieces.length; i++) {
27
- const p = drawn.pieces[i];
28
- if (state[i] !== skip) {
29
- ordered.push(state[i] === whole || !p.edges ? p.element : createPieceElement(p, point));
30
- }
31
- }
32
- return [...ordered, ...pointless.sort((a, b) => a.zOrder - b.zOrder)];
33
- }
34
- /** Distances below this, in the scene's units, are equal */
35
- const eps = 1e-3;
36
- /** The planes tried at a node, spread over its pieces, of which the one splitting the fewest is taken */
37
- const candidates = 8;
38
- /** A drawn piece's state: drawn as it is, left out, or drawn as its whole element */
39
- const [skip, whole] = [1, 2];
40
- /** The tree walked as it's built, with a stack instead of recursion, as it's as deep as a scene's planes can be many: back, then in, then front */
41
- function draw(pieces, drawn) {
42
- const stack = [{ pieces }];
43
- while (stack.length > 0) {
44
- const task = stack.pop();
45
- const plane = task.inPlane ? undefined : getSplitter(task.pieces);
46
- if (plane) {
47
- const [back, inPlane, front] = [[], [], []];
48
- for (const p of task.pieces) {
49
- partition(p, plane, back, inPlane, front);
17
+ });
18
+ swept.sort((a, b) => items[a].min.x - items[b].min.x);
19
+ byDepth.sort((a, b) => elements[a].zOrder - elements[b].zOrder);
20
+ // Sweep along x: each item is compared with the active ones whose bounds still overlap it on screen, dropping the others in the same pass
21
+ const behind = [];
22
+ const hidden = new Uint8Array(elements.length);
23
+ const active = [];
24
+ for (const i of swept) {
25
+ const a = items[i];
26
+ active.length = active.reduce((kept, j) => {
27
+ const b = items[j];
28
+ if (b.max.x <= a.min.x + eps) {
29
+ return kept;
50
30
  }
51
- stack.push({ pieces: front }, { pieces: inPlane, inPlane: true }, { pieces: back });
52
- continue;
53
- }
54
- // In a plane, as given; else a leaf, whose pieces have no plane, by mean depth
55
- for (const p of task.inPlane ? task.pieces : [...task.pieces].sort((a, b) => a.element.zOrder - b.element.zOrder)) {
56
- if (p.edges) {
57
- drawn.spans.set(p.element, { first: drawn.spans.get(p.element)?.first ?? drawn.pieces.length, last: drawn.pieces.length });
31
+ active[kept] = j;
32
+ const order = b.min.y < a.max.y - eps && a.min.y < b.max.y - eps ? getOrder(a, b) : 0;
33
+ if (order !== 0) {
34
+ const [back, front] = order < 0 ? [i, j] : [j, i];
35
+ (behind[front] ??= []).push(back);
36
+ hidden[back] ||= covers(items[front], items[back]) ? 1 : 0;
58
37
  }
59
- drawn.pieces.push(p);
60
- drawn.items.push(createItem(p.points, !!p.element.opaque));
61
- }
38
+ return kept + 1;
39
+ }, 0);
40
+ active.push(i);
62
41
  }
63
- }
64
- /** Of the candidates' planes, the one that the fewest pieces are on both sides of */
65
- function getSplitter(pieces) {
66
- const step = Math.max(1, Math.floor(pieces.length / candidates));
67
- let best = undefined;
68
- let fewest = Infinity;
69
- for (let i = 0; i < pieces.length && fewest > 0;) {
70
- const plane = pieces[i].plane;
71
- if (plane) {
72
- let splits = 0;
73
- for (const p of pieces) {
74
- if (p.plane !== plane && getSide(p.points, plane) === 2 && ++splits >= fewest) {
75
- break;
42
+ // Depth first: an element is drawn when it's met on the stack again, after the elements behind it; 1 while it waits, 2 once drawn
43
+ const state = new Uint8Array(elements.length);
44
+ const stack = [];
45
+ const ordered = [];
46
+ for (const start of byDepth) {
47
+ stack.push(start);
48
+ while (stack.length > 0) {
49
+ const i = stack.pop();
50
+ if (state[i] === 0) {
51
+ state[i] = 1;
52
+ stack.push(i);
53
+ behind[i]?.forEach((j) => state[j] === 0 && stack.push(j));
54
+ }
55
+ else if (state[i] === 1) {
56
+ state[i] = 2;
57
+ if (!hidden[i]) {
58
+ ordered.push(elements[i]);
76
59
  }
77
60
  }
78
- [best, fewest] = splits < fewest ? [plane, splits] : [best, fewest];
79
61
  }
80
- i += plane ? step : 1;
81
62
  }
82
- return best;
63
+ return ordered;
83
64
  }
84
- /** Behind, in or in front of the plane; split by it if on both sides and a plain polygon, else on the side of its center */
85
- function partition(piece, plane, back, inPlane, front) {
86
- // An element's pieces share its plane, which they're in, though its points may be off it by more than eps
87
- const side = piece.plane === plane ? 0 : getSide(piece.points, plane);
88
- if (side === 2 && piece.element.style && piece.points.length >= 3) {
89
- split(piece, plane, back, front);
90
- }
91
- else if (side === 2) {
92
- let sum = 0;
93
- for (const p of piece.points) {
94
- sum += getDistance(p, plane);
65
+ /** Distances below this, in the scene's units, are equal */
66
+ const eps = 1e-3;
67
+ /** In one pass over the points: their bounds, edge normals on screen, plane by Newell's method, and whether they're a convex polygon */
68
+ function createItem(points, opaque) {
69
+ const min = { x: Infinity, y: Infinity, z: Infinity };
70
+ const max = { x: -Infinity, y: -Infinity, z: -Infinity };
71
+ const normal = { x: 0, y: 0, z: 0 };
72
+ // The smallest and largest turn at a corner on screen, the same sign throughout for a convex polygon
73
+ const turns = { min: 0, max: 0 };
74
+ const axes = [];
75
+ points.forEach((p, i) => {
76
+ Object.assign(min, { x: Math.min(min.x, p.x), y: Math.min(min.y, p.y), z: Math.min(min.z, p.z) });
77
+ Object.assign(max, { x: Math.max(max.x, p.x), y: Math.max(max.y, p.y), z: Math.max(max.z, p.z) });
78
+ const q = points[(i + 1) % points.length];
79
+ normal.x += (p.y - q.y) * (p.z + q.z);
80
+ normal.y += (p.z - q.z) * (p.x + q.x);
81
+ normal.z += (p.x - q.x) * (p.y + q.y);
82
+ if (Math.abs(q.x - p.x) + Math.abs(q.y - p.y) > eps) {
83
+ axes.push([q.y - p.y, p.x - q.x]);
95
84
  }
96
- (sum < 0 ? back : front).push(piece);
97
- }
98
- else {
99
- (side === 0 ? inPlane : side < 0 ? back : front).push(piece);
100
- }
85
+ const o = points[(i + points.length - 1) % points.length];
86
+ const turn = (p.x - o.x) * (q.y - p.y) - (p.y - o.y) * (q.x - p.x);
87
+ Object.assign(turns, { min: Math.min(turns.min, turn), max: Math.max(turns.max, turn) });
88
+ });
89
+ const convex = points.length >= 3 && (turns.min >= -eps || turns.max <= eps);
90
+ const occluder = opaque && convex ? Math.sign(normal.z) : 0;
91
+ const length = Math.hypot(normal.x, normal.y, normal.z);
92
+ if (points.length < 3 || length < eps || Math.abs(normal.z) < 1e-6 * length) {
93
+ return { points, min, max, axes, occluder: 0 };
94
+ }
95
+ // Toward the viewer, at +z
96
+ const s = Math.sign(normal.z) / length;
97
+ const n = { x: normal.x * s, y: normal.y * s, z: normal.z * s };
98
+ const p0 = points[0];
99
+ return { points, min, max, axes, plane: { normal: n, d: n.x * p0.x + n.y * p0.y + n.z * p0.z }, occluder };
101
100
  }
102
- /** Sutherland–Hodgman against the plane, both ways; an edge of a piece along the cut isn't the element's own */
103
- function split(piece, plane, back, front) {
104
- const { points, edges } = piece;
105
- const [b, f] = [
106
- { points: Array(), edges: Array() },
107
- { points: Array(), edges: Array() },
108
- ];
109
- const first = getDistance(points[0], plane);
110
- let dp = first;
111
- for (let i = 0; i < points.length; i++) {
112
- const [p, q] = [points[i], points[(i + 1) % points.length]];
113
- const dq = i + 1 < points.length ? getDistance(q, plane) : first;
114
- const own = edges?.[i] ?? true;
115
- const crosses = (dp < -eps && dq > eps) || (dp > eps && dq < -eps);
116
- if (dp <= eps) {
117
- b.points.push(p);
118
- b.edges.push(own && (crosses || dq <= eps));
119
- }
120
- if (dp >= -eps) {
121
- f.points.push(p);
122
- f.edges.push(own && (crosses || dq >= -eps));
123
- }
124
- if (crosses) {
125
- const t = dp / (dp - dq);
126
- const r = { x: p.x + (q.x - p.x) * t, y: p.y + (q.y - p.y) * t, z: p.z + (q.z - p.z) * t };
127
- b.points.push(r);
128
- b.edges.push(own && dq < 0);
129
- f.points.push(r);
130
- f.edges.push(own && dq > 0);
131
- }
132
- dp = dq;
133
- }
134
- if (b.points.length >= 3) {
135
- back.push({ ...piece, ...b });
101
+ /** -1 if `a` is drawn before `b`, 1 if after, 0 if they don't overlap or nothing decides */
102
+ function getOrder(a, b) {
103
+ if (a.max.z <= b.min.z + eps) {
104
+ return -1;
136
105
  }
137
- if (f.points.length >= 3) {
138
- front.push({ ...piece, ...f });
106
+ if (b.max.z <= a.min.z + eps) {
107
+ return 1;
139
108
  }
140
- }
141
- function createPieceElement({ element, points, edges = [] }, point) {
142
- const { fill, opacity, stroke, strokeWidth } = element.style;
143
- const screen = points.map((p) => point(p.x, p.y));
144
- const outline = strokeWidth > 0 && isOpaque(stroke, 1) && edges.includes(true) ? svgEdges(screen, edges, stroke, strokeWidth) : "";
145
- return { ...element, element: svgPolygon(vec3Zero, screen, fill, opacity, stroke, 0) + outline, polygon: points };
146
- }
147
- /** By Newell's method, unless they're a line or a point, or seen edge on */
148
- function getPlane(points) {
149
- let [x, y, z] = [0, 0, 0];
150
- for (let i = 0; i < points.length; i++) {
151
- const [p, q] = [points[i], points[(i + 1) % points.length]];
152
- [x, y, z] = [x + (p.y - q.y) * (p.z + q.z), y + (p.z - q.z) * (p.x + q.x), z + (p.x - q.x) * (p.y + q.y)];
109
+ if (!overlap(a, b)) {
110
+ return 0;
153
111
  }
154
- const length = Math.hypot(x, y, z);
155
- if (points.length < 3 || length < eps || Math.abs(z) < 1e-6 * length) {
156
- return undefined;
112
+ const aToB = b.plane ? getSide(a.points, b.plane) : 0;
113
+ if (aToB !== 0) {
114
+ return aToB;
157
115
  }
158
- const s = Math.sign(z) / length;
159
- const n = { x: x * s, y: y * s, z: z * s };
160
- return { normal: n, d: n.x * points[0].x + n.y * points[0].y + n.z * points[0].z };
116
+ return a.plane ? -getSide(b.points, a.plane) : 0;
161
117
  }
162
- const getDistance = (p, { normal: n, d }) => n.x * p.x + n.y * p.y + n.z * p.z - d;
163
- /** -1 if the points are all behind the plane, 1 if all in front of it, 0 if all in it, 2 if on both sides */
164
- function getSide(points, plane) {
165
- let [min, max] = [Infinity, -Infinity];
166
- for (const p of points) {
167
- const distance = getDistance(p, plane);
168
- min = Math.min(min, distance);
169
- max = Math.max(max, distance);
170
- }
171
- return min >= -eps ? (max > eps ? 1 : 0) : max <= eps ? -1 : 2;
172
- }
173
- /** Of items drawn back to front, `skip` for those inside an opaque convex polygon drawn after them; a sweep along x over their bounds on screen */
174
- function getHidden(items) {
175
- const state = new Uint8Array(items.length);
176
- const active = [];
177
- for (const i of [...items.keys()].sort((a, b) => items[a].min.x - items[b].min.x)) {
178
- const a = items[i];
179
- // Those whose bounds end before this one's start are dropped in place
180
- let kept = 0;
181
- for (const j of active) {
182
- const b = items[j];
183
- if (b.max.x > a.min.x + eps) {
184
- active[kept++] = j;
185
- // Along x they overlap, by the sweep, which a vertical line's zero width wouldn't by bounds
186
- const [back, front] = [Math.min(i, j), Math.max(i, j)];
187
- state[back] ||= a.min.y < b.max.y - eps && b.min.y < a.max.y - eps && covers(items[front], items[back]) ? skip : 0;
188
- }
189
- }
190
- active.length = kept;
191
- active.push(i);
192
- }
193
- return state;
118
+ /** -1 if the points are all behind the plane, 1 if all in front of it, 0 if on both sides or in it */
119
+ function getSide(points, { normal: n, d }) {
120
+ const range = { min: Infinity, max: -Infinity };
121
+ points.forEach((p) => {
122
+ const distance = n.x * p.x + n.y * p.y + n.z * p.z - d;
123
+ Object.assign(range, { min: Math.min(range.min, distance), max: Math.max(range.max, distance) });
124
+ });
125
+ return range.max <= eps && range.min < -eps ? -1 : range.min >= -eps && range.max > eps ? 1 : 0;
194
126
  }
195
- /**
196
- * A split element whose pieces have nothing else drawn between them that overlaps it on screen is drawn whole where its last piece is, its other
197
- * pieces skipped, unless they're all hidden
198
- */
199
- function mergeSplit({ pieces, items, spans }, state) {
200
- for (const [element, { first, last }] of spans) {
201
- const bounds = createItem(element.polygon, false);
202
- let [blocked, visible] = [false, false];
203
- for (let k = first; k <= last && !blocked; k++) {
204
- const own = pieces[k].element === element;
205
- visible ||= own && state[k] !== skip;
206
- blocked = !own && overlaps(items[k], bounds);
207
- }
208
- if (!blocked) {
209
- for (let k = first; k <= last; k++) {
210
- state[k] = pieces[k].element === element ? skip : state[k];
211
- }
212
- state[last] = visible ? whole : skip;
213
- }
214
- }
127
+ /** Whether the polygons overlap on screen by more than touching: no edge normal of either separates them */
128
+ function overlap(a, b) {
129
+ return a.axes.every(([x, y]) => !separates(a, b, x, y)) && b.axes.every(([x, y]) => !separates(a, b, x, y));
215
130
  }
216
- /** In one pass over the points: their bounds on screen, and whether they're a convex polygon */
217
- function createItem(points, opaque) {
218
- const [min, max] = [
219
- { x: Infinity, y: Infinity },
220
- { x: -Infinity, y: -Infinity },
221
- ];
222
- // Twice the signed area, and the smallest and largest turn at a corner on screen, the same sign throughout for a convex polygon
223
- let [area, minTurn, maxTurn] = [0, 0, 0];
224
- for (let i = 0; i < points.length; i++) {
225
- const o = points[(i + points.length - 1) % points.length];
226
- const p = points[i];
227
- const q = points[(i + 1) % points.length];
228
- min.x = Math.min(min.x, p.x);
229
- min.y = Math.min(min.y, p.y);
230
- max.x = Math.max(max.x, p.x);
231
- max.y = Math.max(max.y, p.y);
232
- const turn = (p.x - o.x) * (q.y - p.y) - (p.y - o.y) * (q.x - p.x);
233
- area += p.x * q.y - q.x * p.y;
234
- minTurn = Math.min(minTurn, turn);
235
- maxTurn = Math.max(maxTurn, turn);
236
- }
237
- const convex = points.length >= 3 && (minTurn >= -eps || maxTurn <= eps) && Math.abs(area) > eps;
238
- return { points, min, max, occluder: opaque && convex ? Math.sign(area) : 0 };
131
+ function separates(a, b, x, y) {
132
+ const range = { aMin: Infinity, aMax: -Infinity, bMin: Infinity, bMax: -Infinity };
133
+ a.points.forEach((p) => Object.assign(range, { aMin: Math.min(range.aMin, p.x * x + p.y * y), aMax: Math.max(range.aMax, p.x * x + p.y * y) }));
134
+ b.points.forEach((p) => Object.assign(range, { bMin: Math.min(range.bMin, p.x * x + p.y * y), bMax: Math.max(range.bMax, p.x * x + p.y * y) }));
135
+ const tolerance = eps * Math.hypot(x, y);
136
+ return range.aMax <= range.bMin + tolerance || range.bMax <= range.aMin + tolerance;
239
137
  }
240
- const overlaps = (a, b) => a.min.x < b.max.x - eps && b.min.x < a.max.x - eps && a.min.y < b.max.y - eps && b.min.y < a.max.y - eps;
241
138
  /** Whether the front's opaque convex polygon contains all of the back's points on screen, so the back can't be seen; not for a single point, e.g. text */
242
- function covers({ points, occluder }, back) {
243
- if (occluder === 0 || back.points.length < 2) {
244
- return false;
245
- }
246
- for (let i = 0; i < points.length; i++) {
247
- const [p, q] = [points[i], points[(i + 1) % points.length]];
248
- const tolerance = -eps * Math.hypot(q.x - p.x, q.y - p.y);
249
- for (const r of back.points) {
250
- if (occluder * ((q.x - p.x) * (r.y - p.y) - (q.y - p.y) * (r.x - p.x)) < tolerance) {
251
- return false;
252
- }
253
- }
254
- }
255
- return true;
139
+ function covers(front, back) {
140
+ const { points, occluder } = front;
141
+ return (occluder !== 0 &&
142
+ back.points.length >= 2 &&
143
+ points.every((p, i) => {
144
+ const q = points[(i + 1) % points.length];
145
+ return back.points.every((r) => occluder * ((q.x - p.x) * (r.y - p.y) - (q.y - p.y) * (r.x - p.x)) >= -eps * Math.hypot(q.x - p.x, q.y - p.y));
146
+ }));
256
147
  }
257
148
  //# sourceMappingURL=svg-order.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"svg-order.js","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svg-order.js","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAc,IAAI,EAA4B,MAAM,sBAAsB,CAAC;AAiB9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,4BAA4B,CAAC;AAY5E,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtG,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,WAAW,CAmB7G;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,WAAW,CAUhF"}
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAc,IAAI,EAA4B,MAAM,sBAAsB,CAAC;AAiB9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,4BAA4B,CAAC;AAW5E,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtG,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,WAAW,CAmB7G;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,WAAW,CAUhF"}
@@ -11,7 +11,6 @@ import { plane } from "./svg-geometries/svg-plane.js";
11
11
  import { polygon } from "./svg-geometries/svg-polygon.js";
12
12
  import { shape } from "./svg-geometries/svg-shape.js";
13
13
  import { text } from "./svg-geometries/svg-text.js";
14
- import { orderElements } from "./svg-order.js";
15
14
  export function renderScenes(scenes, baseOptions) {
16
15
  const allElements = Array();
17
16
  const bounds = Array();
@@ -44,13 +43,13 @@ function renderInternal(scene, options, offset) {
44
43
  imageBg: options?.imageBg ?? false,
45
44
  className: options?.className ?? "",
46
45
  };
47
- // A three-quarter view: the front turned 30° to show the side, and tilted 20° to show the top, the front foremost
48
- const angled = opts.view === "TopLeft" || opts.view === "TopRight";
49
- const view = angled ? "front" : opts.view;
50
- const angledRot = angled
51
- ? vec3RotCombine(vec3((20 * Math.PI) / 180, 0, 0), vec3(0, ((opts.view === "TopRight" ? -1 : 1) * 30 * Math.PI) / 180, 0))
46
+ // 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
47
+ const isometric = opts.view === "TopLeft" || opts.view === "TopRight";
48
+ const view = isometric ? "front" : opts.view;
49
+ const isometricRot = isometric
50
+ ? vec3RotCombine(vec3(Math.atan(1 / Math.SQRT2), 0, 0), vec3(0, ((opts.view === "TopRight" ? -1 : 1) * Math.PI) / 4, 0))
52
51
  : vec3Zero;
53
- const cameraRot = vec3RotCombine(angledRot, rotationForCameraPos(view));
52
+ const cameraRot = vec3RotCombine(isometricRot, rotationForCameraPos(view));
54
53
  const viewRot = opts.rotation ? vec3RotCombine(vec3(0, 0, (opts.rotation * Math.PI) / 180), cameraRot) : cameraRot;
55
54
  const unitRot = vec3RotCombine(viewRot, scene.rotation_deprecated ?? vec3Zero);
56
55
  const unitCenter = vec3Rot(scene.center_deprecated ?? vec3Zero, vec3Zero, cameraRot);
@@ -59,13 +58,15 @@ function renderInternal(scene, options, offset) {
59
58
  const svgCenter = vec2(offset.x + opts.stroke_thickness * 0.75, offset.y + opts.stroke_thickness * 0.75);
60
59
  const point = (x, y) => vec2(svgCenter.x + x, svgCenter.y - y);
61
60
  const unitCenterFlipped = vec3Flip(unitCenter);
62
- const elements = [
63
- ...orderElements(scene.groups.flatMap((g) => svgGroup(g, unitCenterFlipped, unitRot, point, opts)), point),
64
- ];
61
+ const elements = Array();
62
+ for (const g of scene.groups) {
63
+ elements.push(...svgGroup(g, unitCenterFlipped, unitRot, point, opts));
64
+ }
65
65
  const dimOpts = { ...opts, only_stroke: false, gray_scale: false };
66
+ elements.sort((a, b) => a.zOrder - b.zOrder);
66
67
  const visibleViews = calculateVisibleViews(view, scene.rotation_deprecated);
67
68
  // Dimensions are drawn for the flat views
68
- for (const dim of angled ? [] : (scene.dimensions_deprecated?.dimensions ?? [])) {
69
+ for (const dim of isometric ? [] : (scene.dimensions_deprecated?.dimensions ?? [])) {
69
70
  const d = dimensionConvertToTypeMesh(dim, scene.rotation_deprecated ?? vec3Zero, scene.dimensions_deprecated?.material);
70
71
  if (isViewVisible(d.views[0], visibleViews)) {
71
72
  const pos = vec3TransRot(d.pos, unitCenterFlipped, unitRot);