abstract-3d 2.6.19 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/lib/abstract-3d.d.ts +13 -1
  3. package/lib/abstract-3d.d.ts.map +1 -1
  4. package/lib/abstract-3d.js +77 -0
  5. package/lib/abstract-3d.js.map +1 -1
  6. package/lib/renderers/dxf/dxf-encoding/dxf-color.d.ts +5 -0
  7. package/lib/renderers/dxf/dxf-encoding/dxf-color.d.ts.map +1 -0
  8. package/lib/renderers/dxf/{color.js → dxf-encoding/dxf-color.js} +24 -19
  9. package/lib/renderers/dxf/dxf-encoding/dxf-color.js.map +1 -0
  10. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts +13 -0
  11. package/lib/renderers/dxf/dxf-encoding/dxf-common.d.ts.map +1 -0
  12. package/lib/renderers/dxf/dxf-encoding/dxf-common.js +23 -0
  13. package/lib/renderers/dxf/dxf-encoding/dxf-common.js.map +1 -0
  14. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts +6 -0
  15. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.d.ts.map +1 -0
  16. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js +50 -0
  17. package/lib/renderers/dxf/dxf-encoding/dxf-dimension.js.map +1 -0
  18. package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts +2 -0
  19. package/lib/renderers/dxf/dxf-encoding/dxf-footer.d.ts.map +1 -0
  20. package/lib/renderers/dxf/{dxf-encoding.js → dxf-encoding/dxf-footer.js} +3 -1819
  21. package/lib/renderers/dxf/{dxf-encoding.js.map → dxf-encoding/dxf-footer.js.map} +1 -1
  22. package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts +3 -0
  23. package/lib/renderers/dxf/dxf-encoding/dxf-header.d.ts.map +1 -0
  24. package/lib/renderers/dxf/dxf-encoding/dxf-header.js +1653 -0
  25. package/lib/renderers/dxf/dxf-encoding/dxf-header.js.map +1 -0
  26. package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts +5 -0
  27. package/lib/renderers/dxf/dxf-encoding/dxf-line.d.ts.map +1 -0
  28. package/lib/renderers/dxf/dxf-encoding/dxf-line.js +29 -0
  29. package/lib/renderers/dxf/dxf-encoding/dxf-line.js.map +1 -0
  30. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts +5 -0
  31. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.d.ts.map +1 -0
  32. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js +73 -0
  33. package/lib/renderers/dxf/dxf-encoding/dxf-polyline.js.map +1 -0
  34. package/lib/renderers/dxf/dxf-encoding/dxf-quad.d.ts +5 -0
  35. package/lib/renderers/dxf/dxf-encoding/dxf-quad.d.ts.map +1 -0
  36. package/lib/renderers/dxf/dxf-encoding/dxf-quad.js +39 -0
  37. package/lib/renderers/dxf/dxf-encoding/dxf-quad.js.map +1 -0
  38. package/lib/renderers/dxf/dxf-encoding/dxf-text.d.ts +19 -0
  39. package/lib/renderers/dxf/dxf-encoding/dxf-text.d.ts.map +1 -0
  40. package/lib/renderers/dxf/dxf-encoding/dxf-text.js +70 -0
  41. package/lib/renderers/dxf/dxf-encoding/dxf-text.js.map +1 -0
  42. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts +5 -0
  43. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.d.ts.map +1 -0
  44. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js +3 -0
  45. package/lib/renderers/dxf/dxf-encoding/dxf-triangle.js.map +1 -0
  46. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts +2 -2
  47. package/lib/renderers/dxf/dxf-geometries/dxf-box.d.ts.map +1 -1
  48. package/lib/renderers/dxf/dxf-geometries/dxf-box.js +8 -8
  49. package/lib/renderers/dxf/dxf-geometries/dxf-box.js.map +1 -1
  50. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts +2 -2
  51. package/lib/renderers/dxf/dxf-geometries/dxf-cone.d.ts.map +1 -1
  52. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js +4 -4
  53. package/lib/renderers/dxf/dxf-geometries/dxf-cone.js.map +1 -1
  54. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts +2 -2
  55. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.d.ts.map +1 -1
  56. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js +6 -5
  57. package/lib/renderers/dxf/dxf-geometries/dxf-cylinder.js.map +1 -1
  58. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts +4 -0
  59. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.d.ts.map +1 -0
  60. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js +13 -0
  61. package/lib/renderers/dxf/dxf-geometries/dxf-dimension.js.map +1 -0
  62. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts +2 -2
  63. package/lib/renderers/dxf/dxf-geometries/dxf-image.d.ts.map +1 -1
  64. package/lib/renderers/dxf/dxf-geometries/dxf-image.js +8 -7
  65. package/lib/renderers/dxf/dxf-geometries/dxf-image.js.map +1 -1
  66. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts +2 -2
  67. package/lib/renderers/dxf/dxf-geometries/dxf-plane.d.ts.map +1 -1
  68. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js +3 -3
  69. package/lib/renderers/dxf/dxf-geometries/dxf-plane.js.map +1 -1
  70. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts +2 -2
  71. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.d.ts.map +1 -1
  72. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js +7 -6
  73. package/lib/renderers/dxf/dxf-geometries/dxf-polygon.js.map +1 -1
  74. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts +2 -2
  75. package/lib/renderers/dxf/dxf-geometries/dxf-shape.d.ts.map +1 -1
  76. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js +6 -5
  77. package/lib/renderers/dxf/dxf-geometries/dxf-shape.js.map +1 -1
  78. package/lib/renderers/dxf/dxf-geometries/dxf-text.d.ts +4 -0
  79. package/lib/renderers/dxf/dxf-geometries/dxf-text.d.ts.map +1 -0
  80. package/lib/renderers/dxf/dxf-geometries/dxf-text.js +8 -0
  81. package/lib/renderers/dxf/dxf-geometries/dxf-text.js.map +1 -0
  82. package/lib/renderers/dxf/dxf.d.ts +4 -3
  83. package/lib/renderers/dxf/dxf.d.ts.map +1 -1
  84. package/lib/renderers/dxf/dxf.js +36 -22
  85. package/lib/renderers/dxf/dxf.js.map +1 -1
  86. package/lib/renderers/dxf/index.d.ts +1 -1
  87. package/lib/renderers/dxf/index.d.ts.map +1 -1
  88. package/lib/renderers/react/react-dimension.d.ts +4 -3
  89. package/lib/renderers/react/react-dimension.d.ts.map +1 -1
  90. package/lib/renderers/react/react-dimension.js +4 -3
  91. package/lib/renderers/react/react-dimension.js.map +1 -1
  92. package/lib/renderers/step/step-encoding.d.ts +2 -0
  93. package/lib/renderers/step/step-encoding.d.ts.map +1 -1
  94. package/lib/renderers/step/step-encoding.js +16 -3
  95. package/lib/renderers/step/step-encoding.js.map +1 -1
  96. package/lib/renderers/step/step-geometries/step-box.d.ts.map +1 -1
  97. package/lib/renderers/step/step-geometries/step-box.js +3 -0
  98. package/lib/renderers/step/step-geometries/step-box.js.map +1 -1
  99. package/lib/renderers/step/step-geometries/step-cylinder.d.ts.map +1 -1
  100. package/lib/renderers/step/step-geometries/step-cylinder.js +67 -21
  101. package/lib/renderers/step/step-geometries/step-cylinder.js.map +1 -1
  102. package/lib/renderers/svg/svg.d.ts.map +1 -1
  103. package/lib/renderers/svg/svg.js +6 -27
  104. package/lib/renderers/svg/svg.js.map +1 -1
  105. package/lib/utils.d.ts +3 -0
  106. package/lib/utils.d.ts.map +1 -1
  107. package/lib/utils.js +30 -0
  108. package/lib/utils.js.map +1 -1
  109. package/package.json +2 -2
  110. package/src/abstract-3d.ts +127 -7
  111. package/src/renderers/dxf/{color.ts → dxf-encoding/dxf-color.ts} +27 -20
  112. package/src/renderers/dxf/dxf-encoding/dxf-common.ts +31 -0
  113. package/src/renderers/dxf/dxf-encoding/dxf-dimension.ts +60 -0
  114. package/src/renderers/dxf/{dxf-encoding.ts → dxf-encoding/dxf-footer.ts} +4 -1870
  115. package/src/renderers/dxf/dxf-encoding/dxf-header.ts +1657 -0
  116. package/src/renderers/dxf/dxf-encoding/dxf-line.ts +35 -0
  117. package/src/renderers/dxf/dxf-encoding/dxf-polyline.ts +83 -0
  118. package/src/renderers/dxf/dxf-encoding/dxf-quad.ts +47 -0
  119. package/src/renderers/dxf/dxf-encoding/dxf-text.ts +71 -0
  120. package/src/renderers/dxf/dxf-encoding/dxf-triangle.ts +12 -0
  121. package/src/renderers/dxf/dxf-geometries/dxf-box.ts +18 -8
  122. package/src/renderers/dxf/dxf-geometries/dxf-cone.ts +13 -4
  123. package/src/renderers/dxf/dxf-geometries/dxf-cylinder.ts +13 -11
  124. package/src/renderers/dxf/dxf-geometries/dxf-dimension.ts +14 -0
  125. package/src/renderers/dxf/dxf-geometries/dxf-image.ts +11 -9
  126. package/src/renderers/dxf/dxf-geometries/dxf-plane.ts +7 -6
  127. package/src/renderers/dxf/dxf-geometries/dxf-polygon.ts +8 -6
  128. package/src/renderers/dxf/dxf-geometries/dxf-shape.ts +8 -6
  129. package/src/renderers/dxf/dxf-geometries/dxf-text.ts +9 -0
  130. package/src/renderers/dxf/dxf.ts +57 -39
  131. package/src/renderers/dxf/index.ts +1 -1
  132. package/src/renderers/react/react-dimension.tsx +8 -4
  133. package/src/renderers/step/step-encoding.ts +24 -5
  134. package/src/renderers/step/step-geometries/step-box.ts +6 -0
  135. package/src/renderers/step/step-geometries/step-cylinder.ts +303 -101
  136. package/src/renderers/svg/svg.ts +6 -34
  137. package/src/utils.ts +39 -0
  138. package/lib/renderers/dxf/color.d.ts +0 -7
  139. package/lib/renderers/dxf/color.d.ts.map +0 -1
  140. package/lib/renderers/dxf/color.js.map +0 -1
  141. package/lib/renderers/dxf/dxf-encoding.d.ts +0 -17
  142. package/lib/renderers/dxf/dxf-encoding.d.ts.map +0 -1
@@ -1,24 +1,21 @@
1
- import { Color } from "abstract-image";
2
- import { Vec3, vec3, vec3DistSquared } from "../../abstract-3d.js";
1
+ import { type Vec3, vec3, vec3DistSquared } from "../../../abstract-3d.js";
3
2
 
4
- export function colorToInteger(color: string): number {
5
- const originalColor = colorNormalToVec3Color(color);
3
+ export type DxfDynamicColor = 7; // this color becomes white on a black background and black on a white background (therefore theme/dxf viewer dependent)
4
+ export type DxfColor = DxfDynamicColor | string;
6
5
 
7
- const colorAsInt = (originalColor.x << 16) + (originalColor.y << 8) + originalColor.z;
8
- if(Number.isNaN(colorAsInt)) {
9
- return 0;
10
- }
11
- return colorAsInt;
12
- }
13
-
14
- export function colorHexFromAbstractImageColor(color: Color): string {
15
- return `rgba(${color.r}, ${color.g}, ${color.b}, ${color.a})`
6
+ export function dxfColor(color: DxfColor): string {
7
+ return typeof color === "number"
8
+ ? `62\n7`
9
+ : `62
10
+ 256
11
+ 420
12
+ ${dxfBitShiftColor(color)}`;
16
13
  }
17
14
 
18
- export function color(colorNormal: string | undefined): number {
15
+ export function dxfApproximateAciFromRealColor(colorNormal: string | undefined): number {
19
16
  const ERROR_COLOR = 6; //magenta
20
17
  const ACI_COLOR_COUNT = 256;
21
- if(ACI_COLOR_TABLE.length !== ACI_COLOR_COUNT || colorNormal === undefined) {
18
+ if(DXF_ACI_COLOR_TABLE.length !== ACI_COLOR_COUNT || colorNormal === undefined) {
22
19
  return ERROR_COLOR; //magenta
23
20
  }
24
21
 
@@ -26,7 +23,7 @@ export function color(colorNormal: string | undefined): number {
26
23
  let closestColor = 0;
27
24
  let smallestDistance = Number.POSITIVE_INFINITY;
28
25
  for(let i = 0; i < ACI_COLOR_COUNT; i++) {
29
- const color = ACI_COLOR_TABLE[i];
26
+ const color = DXF_ACI_COLOR_TABLE[i];
30
27
  if(color !== undefined) {
31
28
  const distance = vec3DistSquared(originalColor, color);
32
29
  if(distance < smallestDistance) {
@@ -49,16 +46,26 @@ function colorNormalToVec3Color(colorNormal: string): Vec3 {
49
46
  if(values.length < 3) {
50
47
  return errorColor;
51
48
  }
52
- const r = parseInt(values[0]!, 10);
53
- const g = parseInt(values[1]!, 10);
54
- const b = parseInt(values[2]!, 10);
49
+ const r = parseInt(values[0] ?? "", 10);
50
+ const g = parseInt(values[1] ?? "", 10);
51
+ const b = parseInt(values[2] ?? "", 10);
55
52
  if(Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) {
56
53
  return errorColor;
57
54
  }
58
55
  return vec3(r % 256, g % 256, b % 256);
59
56
  }
60
57
 
61
- export const ACI_COLOR_TABLE: ReadonlyArray<Vec3> = [
58
+ function dxfBitShiftColor(color: string): number {
59
+ const originalColor = colorNormalToVec3Color(color);
60
+
61
+ const colorAsInt = (originalColor.x << 16) + (originalColor.y << 8) + originalColor.z;
62
+ if(Number.isNaN(colorAsInt)) {
63
+ return 0;
64
+ }
65
+ return colorAsInt;
66
+ }
67
+
68
+ const DXF_ACI_COLOR_TABLE: ReadonlyArray<Vec3> = [
62
69
  vec3(0, 0, 0),
63
70
  vec3(255, 0, 0),
64
71
  vec3(255, 255, 0),
@@ -0,0 +1,31 @@
1
+ import { generateUUID } from "three/src/math/MathUtils.js";
2
+ import type { Bounds3, Vec3 } from "../../../abstract-3d.js";
3
+ import { dxfEncFooter } from "./dxf-footer.js";
4
+ import { dxfEncHeader } from "./dxf-header.js";
5
+
6
+ export const DEFAULT_CIRCLE_SIDE_COUNT = 16;
7
+ export const DXF_DEFAULT_HANDLE = 0x1000;
8
+ export const DXF_MODEL_SPACE_HANDLE = "1D";
9
+
10
+ export type DxfOrigin = "BottomLeftFront" | "Center" | "SameAsScene";
11
+ export type Handle = { handle: number };
12
+
13
+ export function dxfHandleInit(): Handle {
14
+ return {
15
+ handle: DXF_DEFAULT_HANDLE,
16
+ };
17
+ }
18
+
19
+ export function dxfHandleNext(handleRef: Handle): string {
20
+ return (++handleRef.handle).toString(16).toUpperCase();
21
+ }
22
+
23
+ export function dxfRound(n: number): number {
24
+ const d = 3;
25
+ return Math.round((n + Number.EPSILON) * 10 ** d) / 10 ** d;
26
+ }
27
+
28
+ export function dxfBuild(groups: string, dimensions: string, bounds: Bounds3, size: Vec3, center: Vec3): string {
29
+ const id = generateUUID();
30
+ return dxfEncHeader(bounds, center, id, size) + groups + dimensions + dxfEncFooter(id);
31
+ }
@@ -0,0 +1,60 @@
1
+ import type { Vec3 } from "../../../abstract-3d.js";
2
+ import { type DxfColor, dxfColor } from "./dxf-color.js";
3
+ import { DXF_MODEL_SPACE_HANDLE, dxfHandleNext, dxfRound, type Handle } from "./dxf-common.js";
4
+
5
+ export function dxfEncDimension(
6
+ measurementStart: Vec3,
7
+ measurementEnd: Vec3,
8
+ linePosition: Vec3,
9
+ text: string,
10
+ col: DxfColor,
11
+ handleRef: Handle
12
+ ): string {
13
+
14
+ return `0
15
+ DIMENSION
16
+ 5
17
+ ${dxfHandleNext(handleRef)}
18
+ 330
19
+ ${DXF_MODEL_SPACE_HANDLE}
20
+ 100
21
+ AcDbEntity
22
+ 8
23
+ 0
24
+ ${dxfColor(col)}
25
+ 100
26
+ AcDbDimension
27
+ 280
28
+ 0
29
+ 10
30
+ ${dxfRound(linePosition.x)}
31
+ 20
32
+ ${dxfRound(linePosition.y)}
33
+ 30
34
+ ${dxfRound(linePosition.z)}
35
+ 70
36
+ 33
37
+ 1
38
+ ${encodeDxfFormattedText(text)}
39
+ 3
40
+ Standard
41
+ 100
42
+ AcDbAlignedDimension
43
+ 13
44
+ ${dxfRound(measurementStart.x)}
45
+ 23
46
+ ${dxfRound(measurementStart.y)}
47
+ 33
48
+ ${dxfRound(measurementStart.z)}
49
+ 14
50
+ ${dxfRound(measurementEnd.x)}
51
+ 24
52
+ ${dxfRound(measurementEnd.y)}
53
+ 34
54
+ ${dxfRound(measurementEnd.z)}
55
+ `;
56
+ }
57
+
58
+ export function encodeDxfFormattedText(text: string): string {
59
+ return text.replace(/\r\n|\r|\n/g, "\\P");
60
+ }