@linkiez/dxf-renew 7.0.0 → 7.1.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 (131) hide show
  1. package/.github/instructions/code-patterns.instructions.md +1 -1
  2. package/.github/instructions/exdxf.instruction.md +161 -0
  3. package/.github/instructions/tdd.instructions.md +271 -0
  4. package/.yarn/install-state.gz +0 -0
  5. package/CHANGELOG.md +23 -0
  6. package/CONTRIBUTING.md +16 -14
  7. package/PLAN.md +34 -84
  8. package/README.md +43 -8
  9. package/dist/dxf.js +1388 -376
  10. package/docs/DIMENSION_SUMMARY.md +11 -5
  11. package/docs/DXF_VERSION_SUPPORT.md +45 -0
  12. package/docs/ENTITY_SVG_ROADMAP.md +96 -0
  13. package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
  14. package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
  15. package/docs/README.md +22 -0
  16. package/docs/SVG_RENDERING_INTEGRATION_TESTS.md +119 -0
  17. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +1 -1
  18. package/lib/Helper.cjs +2 -2
  19. package/lib/Helper.cjs.map +2 -2
  20. package/lib/Helper.js +2 -2
  21. package/lib/Helper.js.map +2 -2
  22. package/lib/denormalise.cjs +131 -91
  23. package/lib/denormalise.cjs.map +2 -2
  24. package/lib/denormalise.js +131 -91
  25. package/lib/denormalise.js.map +2 -2
  26. package/lib/dimensionToSVG.cjs +318 -53
  27. package/lib/dimensionToSVG.cjs.map +3 -3
  28. package/lib/dimensionToSVG.js +316 -52
  29. package/lib/dimensionToSVG.js.map +2 -2
  30. package/lib/handlers/entities.cjs +90 -26
  31. package/lib/handlers/entities.cjs.map +3 -3
  32. package/lib/handlers/entities.js +90 -26
  33. package/lib/handlers/entities.js.map +3 -3
  34. package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
  35. package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
  36. package/lib/handlers/entity/dgnUnderlay.js +71 -0
  37. package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
  38. package/lib/handlers/entity/dimension.cjs +24 -0
  39. package/lib/handlers/entity/dimension.cjs.map +2 -2
  40. package/lib/handlers/entity/dimension.js +24 -0
  41. package/lib/handlers/entity/dimension.js.map +2 -2
  42. package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
  43. package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
  44. package/lib/handlers/entity/dwfUnderlay.js +71 -0
  45. package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
  46. package/lib/handlers/entity/image.cjs +123 -0
  47. package/lib/handlers/entity/image.cjs.map +7 -0
  48. package/lib/handlers/entity/image.js +88 -0
  49. package/lib/handlers/entity/image.js.map +7 -0
  50. package/lib/handlers/entity/leader.cjs +148 -0
  51. package/lib/handlers/entity/leader.cjs.map +7 -0
  52. package/lib/handlers/entity/leader.js +113 -0
  53. package/lib/handlers/entity/leader.js.map +7 -0
  54. package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
  55. package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
  56. package/lib/handlers/entity/pdfUnderlay.js +71 -0
  57. package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
  58. package/lib/handlers/entity/tolerance.cjs +90 -0
  59. package/lib/handlers/entity/tolerance.cjs.map +7 -0
  60. package/lib/handlers/entity/tolerance.js +55 -0
  61. package/lib/handlers/entity/tolerance.js.map +7 -0
  62. package/lib/handlers/objects.cjs +257 -136
  63. package/lib/handlers/objects.cjs.map +2 -2
  64. package/lib/handlers/objects.js +257 -136
  65. package/lib/handlers/objects.js.map +2 -2
  66. package/lib/toSVG.cjs +71 -8
  67. package/lib/toSVG.cjs.map +3 -3
  68. package/lib/toSVG.js +72 -9
  69. package/lib/toSVG.js.map +2 -2
  70. package/lib/types/dimension-entity.cjs.map +1 -1
  71. package/lib/types/entity.cjs.map +1 -1
  72. package/lib/types/image-entity.cjs +17 -0
  73. package/lib/types/image-entity.cjs.map +7 -0
  74. package/lib/types/image-entity.js +1 -0
  75. package/lib/types/image-entity.js.map +7 -0
  76. package/lib/types/index.cjs +8 -0
  77. package/lib/types/index.cjs.map +2 -2
  78. package/lib/types/index.js +4 -0
  79. package/lib/types/index.js.map +2 -2
  80. package/lib/types/leader-entity.cjs +17 -0
  81. package/lib/types/leader-entity.cjs.map +7 -0
  82. package/lib/types/leader-entity.js +1 -0
  83. package/lib/types/leader-entity.js.map +7 -0
  84. package/lib/types/options.cjs.map +1 -1
  85. package/lib/types/tables.cjs.map +1 -1
  86. package/lib/types/tolerance-entity.cjs +17 -0
  87. package/lib/types/tolerance-entity.cjs.map +7 -0
  88. package/lib/types/tolerance-entity.js +1 -0
  89. package/lib/types/tolerance-entity.js.map +7 -0
  90. package/lib/types/underlay-entity.cjs +17 -0
  91. package/lib/types/underlay-entity.cjs.map +7 -0
  92. package/lib/types/underlay-entity.js +1 -0
  93. package/lib/types/underlay-entity.js.map +7 -0
  94. package/lib/util/escapeXmlText.cjs +27 -0
  95. package/lib/util/escapeXmlText.cjs.map +7 -0
  96. package/lib/util/escapeXmlText.js +7 -0
  97. package/lib/util/escapeXmlText.js.map +7 -0
  98. package/package.json +6 -1
  99. package/playwright.config.cjs +20 -0
  100. package/src/Helper.ts +3 -3
  101. package/src/denormalise.ts +182 -116
  102. package/src/dimensionToSVG.ts +466 -54
  103. package/src/handlers/entities.ts +109 -34
  104. package/src/handlers/entity/dgnUnderlay.ts +94 -0
  105. package/src/handlers/entity/dimension.ts +27 -1
  106. package/src/handlers/entity/dwfUnderlay.ts +94 -0
  107. package/src/handlers/entity/image.ts +118 -0
  108. package/src/handlers/entity/leader.ts +153 -0
  109. package/src/handlers/entity/pdfUnderlay.ts +94 -0
  110. package/src/handlers/entity/tolerance.ts +75 -0
  111. package/src/handlers/objects.ts +323 -139
  112. package/src/toSVG.ts +98 -7
  113. package/src/types/dimension-entity.ts +11 -0
  114. package/src/types/entity.ts +10 -0
  115. package/src/types/image-entity.ts +35 -0
  116. package/src/types/index.ts +4 -0
  117. package/src/types/leader-entity.ts +40 -0
  118. package/src/types/options.ts +41 -0
  119. package/src/types/tables.ts +84 -0
  120. package/src/types/tolerance-entity.ts +20 -0
  121. package/src/types/underlay-entity.ts +35 -0
  122. package/src/util/escapeXmlText.ts +10 -0
  123. package/tools/browser_test_server.cjs +87 -0
  124. package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
  125. package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
  126. package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
  127. package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
  128. package/tools/ezdxf_validate_fixtures.py +165 -0
  129. package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
  130. package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
  131. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
@@ -0,0 +1,71 @@
1
+ import common from "./common";
2
+ const TYPE = "PDFUNDERLAY";
3
+ const process = (tuples) => {
4
+ return tuples.reduce(
5
+ (entity, tuple) => {
6
+ const type = tuple[0];
7
+ const value = tuple[1];
8
+ switch (type) {
9
+ case 340:
10
+ entity.underlayDefinitionHandle = String(value);
11
+ break;
12
+ case 10:
13
+ entity.insertionPoint.x = value;
14
+ break;
15
+ case 20:
16
+ entity.insertionPoint.y = value;
17
+ break;
18
+ case 30:
19
+ entity.insertionPoint.z = value;
20
+ break;
21
+ case 41:
22
+ entity.scale.x = value;
23
+ break;
24
+ case 42:
25
+ entity.scale.y = value;
26
+ break;
27
+ case 43:
28
+ entity.scale.z = value;
29
+ break;
30
+ case 50:
31
+ entity.rotation = value;
32
+ break;
33
+ case 210:
34
+ entity.normal.x = value;
35
+ break;
36
+ case 220:
37
+ entity.normal.y = value;
38
+ break;
39
+ case 230:
40
+ entity.normal.z = value;
41
+ break;
42
+ case 280:
43
+ entity.flags = value;
44
+ break;
45
+ case 281:
46
+ entity.contrast = value;
47
+ break;
48
+ case 282:
49
+ entity.fade = value;
50
+ break;
51
+ default:
52
+ Object.assign(entity, common(type, value));
53
+ break;
54
+ }
55
+ return entity;
56
+ },
57
+ {
58
+ type: TYPE,
59
+ insertionPoint: { x: 0, y: 0, z: 0 },
60
+ scale: { x: 1, y: 1, z: 1 },
61
+ normal: { x: 0, y: 0, z: 1 }
62
+ }
63
+ );
64
+ };
65
+ var pdfUnderlay_default = { TYPE, process };
66
+ export {
67
+ TYPE,
68
+ pdfUnderlay_default as default,
69
+ process
70
+ };
71
+ //# sourceMappingURL=pdfUnderlay.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/handlers/entity/pdfUnderlay.ts"],
4
+ "sourcesContent": ["import type { DXFTuple } from '../../types'\n\nimport common from './common'\n\nexport const TYPE = 'PDFUNDERLAY'\n\ninterface UnderlayEntity {\n type: typeof TYPE\n\n insertionPoint: { x: number; y: number; z: number }\n scale: { x: number; y: number; z: number }\n normal: { x: number; y: number; z: number }\n\n underlayDefinitionHandle?: string\n rotation?: number\n flags?: number\n contrast?: number\n fade?: number\n\n [key: string]: unknown\n}\n\nexport const process = (tuples: DXFTuple[]): UnderlayEntity => {\n return tuples.reduce(\n (entity, tuple) => {\n const type = tuple[0]\n const value = tuple[1]\n\n switch (type) {\n case 340:\n entity.underlayDefinitionHandle = String(value)\n break\n\n case 10:\n entity.insertionPoint.x = value as number\n break\n case 20:\n entity.insertionPoint.y = value as number\n break\n case 30:\n entity.insertionPoint.z = value as number\n break\n\n case 41:\n entity.scale.x = value as number\n break\n case 42:\n entity.scale.y = value as number\n break\n case 43:\n entity.scale.z = value as number\n break\n\n case 50:\n entity.rotation = value as number\n break\n\n case 210:\n entity.normal.x = value as number\n break\n case 220:\n entity.normal.y = value as number\n break\n case 230:\n entity.normal.z = value as number\n break\n\n case 280:\n entity.flags = value as number\n break\n case 281:\n entity.contrast = value as number\n break\n case 282:\n entity.fade = value as number\n break\n\n default:\n Object.assign(entity, common(type, value))\n break\n }\n\n return entity\n },\n {\n type: TYPE,\n insertionPoint: { x: 0, y: 0, z: 0 },\n scale: { x: 1, y: 1, z: 1 },\n normal: { x: 0, y: 0, z: 1 },\n } as UnderlayEntity,\n )\n}\n\nexport default { TYPE, process }\n"],
5
+ "mappings": "AAEA,OAAO,YAAY;AAEZ,MAAM,OAAO;AAkBb,MAAM,UAAU,CAAC,WAAuC;AAC7D,SAAO,OAAO;AAAA,IACZ,CAAC,QAAQ,UAAU;AACjB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,MAAM,CAAC;AAErB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,2BAA2B,OAAO,KAAK;AAC9C;AAAA,QAEF,KAAK;AACH,iBAAO,eAAe,IAAI;AAC1B;AAAA,QACF,KAAK;AACH,iBAAO,eAAe,IAAI;AAC1B;AAAA,QACF,KAAK;AACH,iBAAO,eAAe,IAAI;AAC1B;AAAA,QAEF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QAEF,KAAK;AACH,iBAAO,WAAW;AAClB;AAAA,QAEF,KAAK;AACH,iBAAO,OAAO,IAAI;AAClB;AAAA,QACF,KAAK;AACH,iBAAO,OAAO,IAAI;AAClB;AAAA,QACF,KAAK;AACH,iBAAO,OAAO,IAAI;AAClB;AAAA,QAEF,KAAK;AACH,iBAAO,QAAQ;AACf;AAAA,QACF,KAAK;AACH,iBAAO,WAAW;AAClB;AAAA,QACF,KAAK;AACH,iBAAO,OAAO;AACd;AAAA,QAEF;AACE,iBAAO,OAAO,QAAQ,OAAO,MAAM,KAAK,CAAC;AACzC;AAAA,MACJ;AAEA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACnC,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC1B,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,IAAO,sBAAQ,EAAE,MAAM,QAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var tolerance_exports = {};
30
+ __export(tolerance_exports, {
31
+ TYPE: () => TYPE,
32
+ default: () => tolerance_default,
33
+ process: () => process
34
+ });
35
+ module.exports = __toCommonJS(tolerance_exports);
36
+ var import_common = __toESM(require("./common"), 1);
37
+ const TYPE = "TOLERANCE";
38
+ function ensureVector3(entity, key) {
39
+ entity[key] ?? (entity[key] = { x: 0, y: 0, z: 0 });
40
+ return entity[key];
41
+ }
42
+ const process = (tuples) => {
43
+ return tuples.reduce(
44
+ (entity, tuple) => {
45
+ const code = tuple[0];
46
+ const value = tuple[1];
47
+ switch (code) {
48
+ case 3:
49
+ entity.dimensionStyleName = String(value);
50
+ break;
51
+ case 10:
52
+ ensureVector3(entity, "insertionPoint").x = value;
53
+ break;
54
+ case 20:
55
+ ensureVector3(entity, "insertionPoint").y = value;
56
+ break;
57
+ case 30:
58
+ ensureVector3(entity, "insertionPoint").z = value;
59
+ break;
60
+ case 1:
61
+ entity.text = String(value);
62
+ break;
63
+ case 11:
64
+ ensureVector3(entity, "xAxisDirection").x = value;
65
+ break;
66
+ case 21:
67
+ ensureVector3(entity, "xAxisDirection").y = value;
68
+ break;
69
+ case 31:
70
+ ensureVector3(entity, "xAxisDirection").z = value;
71
+ break;
72
+ default:
73
+ Object.assign(entity, (0, import_common.default)(code, value));
74
+ break;
75
+ }
76
+ return entity;
77
+ },
78
+ {
79
+ type: TYPE,
80
+ insertionPoint: { x: 0, y: 0, z: 0 }
81
+ }
82
+ );
83
+ };
84
+ var tolerance_default = { TYPE, process };
85
+ // Annotate the CommonJS export names for ESM import in node:
86
+ 0 && (module.exports = {
87
+ TYPE,
88
+ process
89
+ });
90
+ //# sourceMappingURL=tolerance.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/handlers/entity/tolerance.ts"],
4
+ "sourcesContent": ["import type { DXFTuple } from '../../types'\n\nimport common from './common'\n\nexport const TYPE = 'TOLERANCE'\n\ninterface ToleranceEntity {\n type: typeof TYPE\n\n insertionPoint: { x: number; y: number; z: number }\n text?: string\n dimensionStyleName?: string\n xAxisDirection?: { x: number; y: number; z: number }\n\n [key: string]: unknown\n}\n\nfunction ensureVector3(\n entity: ToleranceEntity,\n key: 'insertionPoint' | 'xAxisDirection',\n): { x: number; y: number; z: number } {\n entity[key] ??= { x: 0, y: 0, z: 0 }\n return entity[key] as { x: number; y: number; z: number }\n}\n\nexport const process = (tuples: DXFTuple[]): ToleranceEntity => {\n return tuples.reduce(\n (entity, tuple) => {\n const code = tuple[0]\n const value = tuple[1]\n\n switch (code) {\n case 3:\n entity.dimensionStyleName = String(value)\n break\n\n case 10:\n ensureVector3(entity, 'insertionPoint').x = value as number\n break\n case 20:\n ensureVector3(entity, 'insertionPoint').y = value as number\n break\n case 30:\n ensureVector3(entity, 'insertionPoint').z = value as number\n break\n\n case 1:\n entity.text = String(value)\n break\n\n case 11:\n ensureVector3(entity, 'xAxisDirection').x = value as number\n break\n case 21:\n ensureVector3(entity, 'xAxisDirection').y = value as number\n break\n case 31:\n ensureVector3(entity, 'xAxisDirection').z = value as number\n break\n\n default:\n Object.assign(entity, common(code, value))\n break\n }\n\n return entity\n },\n {\n type: TYPE,\n insertionPoint: { x: 0, y: 0, z: 0 },\n } as ToleranceEntity,\n )\n}\n\nexport default { TYPE, process }\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAAmB;AAEZ,MAAM,OAAO;AAapB,SAAS,cACP,QACA,KACqC;AACrC,gCAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACnC,SAAO,OAAO,GAAG;AACnB;AAEO,MAAM,UAAU,CAAC,WAAwC;AAC9D,SAAO,OAAO;AAAA,IACZ,CAAC,QAAQ,UAAU;AACjB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,MAAM,CAAC;AAErB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,qBAAqB,OAAO,KAAK;AACxC;AAAA,QAEF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QAEF,KAAK;AACH,iBAAO,OAAO,OAAO,KAAK;AAC1B;AAAA,QAEF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QAEF;AACE,iBAAO,OAAO,YAAQ,cAAAA,SAAO,MAAM,KAAK,CAAC;AACzC;AAAA,MACJ;AAEA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,IACrC;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ,EAAE,MAAM,QAAQ;",
6
+ "names": ["common"]
7
+ }
@@ -0,0 +1,55 @@
1
+ import common from "./common";
2
+ const TYPE = "TOLERANCE";
3
+ function ensureVector3(entity, key) {
4
+ entity[key] ?? (entity[key] = { x: 0, y: 0, z: 0 });
5
+ return entity[key];
6
+ }
7
+ const process = (tuples) => {
8
+ return tuples.reduce(
9
+ (entity, tuple) => {
10
+ const code = tuple[0];
11
+ const value = tuple[1];
12
+ switch (code) {
13
+ case 3:
14
+ entity.dimensionStyleName = String(value);
15
+ break;
16
+ case 10:
17
+ ensureVector3(entity, "insertionPoint").x = value;
18
+ break;
19
+ case 20:
20
+ ensureVector3(entity, "insertionPoint").y = value;
21
+ break;
22
+ case 30:
23
+ ensureVector3(entity, "insertionPoint").z = value;
24
+ break;
25
+ case 1:
26
+ entity.text = String(value);
27
+ break;
28
+ case 11:
29
+ ensureVector3(entity, "xAxisDirection").x = value;
30
+ break;
31
+ case 21:
32
+ ensureVector3(entity, "xAxisDirection").y = value;
33
+ break;
34
+ case 31:
35
+ ensureVector3(entity, "xAxisDirection").z = value;
36
+ break;
37
+ default:
38
+ Object.assign(entity, common(code, value));
39
+ break;
40
+ }
41
+ return entity;
42
+ },
43
+ {
44
+ type: TYPE,
45
+ insertionPoint: { x: 0, y: 0, z: 0 }
46
+ }
47
+ );
48
+ };
49
+ var tolerance_default = { TYPE, process };
50
+ export {
51
+ TYPE,
52
+ tolerance_default as default,
53
+ process
54
+ };
55
+ //# sourceMappingURL=tolerance.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/handlers/entity/tolerance.ts"],
4
+ "sourcesContent": ["import type { DXFTuple } from '../../types'\n\nimport common from './common'\n\nexport const TYPE = 'TOLERANCE'\n\ninterface ToleranceEntity {\n type: typeof TYPE\n\n insertionPoint: { x: number; y: number; z: number }\n text?: string\n dimensionStyleName?: string\n xAxisDirection?: { x: number; y: number; z: number }\n\n [key: string]: unknown\n}\n\nfunction ensureVector3(\n entity: ToleranceEntity,\n key: 'insertionPoint' | 'xAxisDirection',\n): { x: number; y: number; z: number } {\n entity[key] ??= { x: 0, y: 0, z: 0 }\n return entity[key] as { x: number; y: number; z: number }\n}\n\nexport const process = (tuples: DXFTuple[]): ToleranceEntity => {\n return tuples.reduce(\n (entity, tuple) => {\n const code = tuple[0]\n const value = tuple[1]\n\n switch (code) {\n case 3:\n entity.dimensionStyleName = String(value)\n break\n\n case 10:\n ensureVector3(entity, 'insertionPoint').x = value as number\n break\n case 20:\n ensureVector3(entity, 'insertionPoint').y = value as number\n break\n case 30:\n ensureVector3(entity, 'insertionPoint').z = value as number\n break\n\n case 1:\n entity.text = String(value)\n break\n\n case 11:\n ensureVector3(entity, 'xAxisDirection').x = value as number\n break\n case 21:\n ensureVector3(entity, 'xAxisDirection').y = value as number\n break\n case 31:\n ensureVector3(entity, 'xAxisDirection').z = value as number\n break\n\n default:\n Object.assign(entity, common(code, value))\n break\n }\n\n return entity\n },\n {\n type: TYPE,\n insertionPoint: { x: 0, y: 0, z: 0 },\n } as ToleranceEntity,\n )\n}\n\nexport default { TYPE, process }\n"],
5
+ "mappings": "AAEA,OAAO,YAAY;AAEZ,MAAM,OAAO;AAapB,SAAS,cACP,QACA,KACqC;AACrC,gCAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACnC,SAAO,OAAO,GAAG;AACnB;AAEO,MAAM,UAAU,CAAC,WAAwC;AAC9D,SAAO,OAAO;AAAA,IACZ,CAAC,QAAQ,UAAU;AACjB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,MAAM,CAAC;AAErB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,qBAAqB,OAAO,KAAK;AACxC;AAAA,QAEF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QAEF,KAAK;AACH,iBAAO,OAAO,OAAO,KAAK;AAC1B;AAAA,QAEF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QACF,KAAK;AACH,wBAAc,QAAQ,gBAAgB,EAAE,IAAI;AAC5C;AAAA,QAEF;AACE,iBAAO,OAAO,QAAQ,OAAO,MAAM,KAAK,CAAC;AACzC;AAAA,MACJ;AAEA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,gBAAgB,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,IACrC;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ,EAAE,MAAM,QAAQ;",
6
+ "names": []
7
+ }
@@ -21,150 +21,271 @@ __export(objects_exports, {
21
21
  default: () => parseObjects
22
22
  });
23
23
  module.exports = __toCommonJS(objects_exports);
24
- function parseObjects(tuples) {
25
- let state;
26
- const objects = {
27
- layouts: []
28
- };
29
- let layout;
24
+ function groupObjectsByZero(tuples) {
25
+ const groups = [];
26
+ let current;
30
27
  for (const tuple of tuples) {
28
+ const code = tuple[0];
29
+ if (code === 0) {
30
+ if (current && current.length > 0) groups.push(current);
31
+ current = [tuple];
32
+ continue;
33
+ }
34
+ if (!current) continue;
35
+ current.push(tuple);
36
+ }
37
+ if (current && current.length > 0) groups.push(current);
38
+ return groups;
39
+ }
40
+ const LAYOUT_FLOAT_FIELDS = {
41
+ 10: "minLimitX",
42
+ 20: "minLimitY",
43
+ 11: "maxLimitX",
44
+ 21: "maxLimitY",
45
+ 12: "x",
46
+ 22: "y",
47
+ 32: "z",
48
+ 14: "minX",
49
+ 24: "minY",
50
+ 34: "minZ",
51
+ 15: "maxX",
52
+ 25: "maxY",
53
+ 35: "maxZ",
54
+ 146: "elevation",
55
+ 13: "ucsX",
56
+ 23: "ucsY",
57
+ 33: "ucsZ",
58
+ 16: "ucsXaxisX",
59
+ 26: "ucsXaxisY",
60
+ 36: "ucsXaxisZ",
61
+ 17: "ucsYaxisX",
62
+ 27: "ucsYaxisY",
63
+ 37: "ucsYaxisZ"
64
+ };
65
+ const LAYOUT_DIRECT_FIELDS = {
66
+ 1: "name",
67
+ 5: "handle",
68
+ 71: "tabOrder",
69
+ 330: "tableRecord",
70
+ 331: "lastActiveViewport",
71
+ 333: "shadePlot"
72
+ };
73
+ const LAYOUT_UCS_TYPE = {
74
+ 0: "NOT ORTHOGRAPHIC",
75
+ 1: "TOP",
76
+ 2: "BOTTOM",
77
+ 3: "FRONT",
78
+ 4: "BACK",
79
+ 5: "LEFT",
80
+ 6: "RIGHT"
81
+ };
82
+ function consumeLayoutStartTuple(current, tuple) {
83
+ if (tuple[1] === "LAYOUT") return { state: "layout", layout: {} };
84
+ return { state: "IDLE", layout: current.layout };
85
+ }
86
+ function consumeLayoutSubclassTuple(current, tuple) {
87
+ if (tuple[0] === 100 && tuple[1] === "AcDbLayout") return { state: "AcDbLayout", layout: current.layout };
88
+ return current;
89
+ }
90
+ function applyLayoutFieldTuple(layout, tuple) {
91
+ const type = tuple[0];
92
+ const value = tuple[1];
93
+ const floatKey = LAYOUT_FLOAT_FIELDS[type];
94
+ if (floatKey) {
95
+ ;
96
+ layout[floatKey] = Number.parseFloat(String(value));
97
+ return;
98
+ }
99
+ const directKey = LAYOUT_DIRECT_FIELDS[type];
100
+ if (directKey) {
101
+ ;
102
+ layout[directKey] = value;
103
+ return;
104
+ }
105
+ if (type === 70) {
106
+ layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
107
+ return;
108
+ }
109
+ if (type === 76) {
110
+ const ucsType = LAYOUT_UCS_TYPE[Number(value)];
111
+ if (ucsType) layout.ucsType = ucsType;
112
+ }
113
+ }
114
+ function consumeLayoutTuple(current, tuple) {
115
+ if (tuple[0] === 0) return consumeLayoutStartTuple(current, tuple);
116
+ if (current.state === "layout") return consumeLayoutSubclassTuple(current, tuple);
117
+ if (current.state === "AcDbLayout" && current.layout) applyLayoutFieldTuple(current.layout, tuple);
118
+ return current;
119
+ }
120
+ function parseLayoutObject(group) {
121
+ let current = { state: "IDLE" };
122
+ for (const tuple of group) current = consumeLayoutTuple(current, tuple);
123
+ return current.layout;
124
+ }
125
+ function parseDictionaryObject(group) {
126
+ if (group[0]?.[1] !== "DICTIONARY") return void 0;
127
+ const dict = {
128
+ type: "DICTIONARY",
129
+ entries: {}
130
+ };
131
+ let pendingKey;
132
+ for (const tuple of group.slice(1)) {
31
133
  const type = tuple[0];
32
134
  const value = tuple[1];
33
- if (type === 0) {
34
- state = "IDLE";
135
+ if (type === 5) {
136
+ dict.handle = value;
137
+ continue;
35
138
  }
36
- if (value === "LAYOUT") {
37
- state = "layout";
38
- layout = {};
39
- objects.layouts.push(layout);
139
+ if (type === 330) {
140
+ dict.ownerHandle = value;
141
+ continue;
40
142
  }
41
- if (state === "layout" && type !== 0) {
42
- switch (type) {
43
- case 100:
44
- if (value === "AcDbLayout") state = "AcDbLayout";
45
- break;
46
- }
143
+ if (type === 3) {
144
+ pendingKey = String(value);
145
+ continue;
47
146
  }
48
- if (state === "AcDbLayout" && type !== 0 && layout) {
49
- switch (type) {
50
- case 1:
51
- layout.name = value;
52
- break;
53
- case 5:
54
- layout.handle = value;
55
- break;
56
- case 10:
57
- layout.minLimitX = Number.parseFloat(String(value));
58
- break;
59
- case 20:
60
- layout.minLimitY = Number.parseFloat(String(value));
61
- break;
62
- case 11:
63
- layout.maxLimitX = Number.parseFloat(String(value));
64
- break;
65
- case 21:
66
- layout.maxLimitY = Number.parseFloat(String(value));
67
- break;
68
- case 12:
69
- layout.x = Number.parseFloat(String(value));
70
- break;
71
- case 22:
72
- layout.y = Number.parseFloat(String(value));
73
- break;
74
- case 32:
75
- layout.z = Number.parseFloat(String(value));
76
- break;
77
- case 14:
78
- layout.minX = Number.parseFloat(String(value));
79
- break;
80
- case 24:
81
- layout.minY = Number.parseFloat(String(value));
82
- break;
83
- case 34:
84
- layout.minZ = Number.parseFloat(String(value));
85
- break;
86
- case 15:
87
- layout.maxX = Number.parseFloat(String(value));
88
- break;
89
- case 25:
90
- layout.maxY = Number.parseFloat(String(value));
91
- break;
92
- case 35:
93
- layout.maxZ = Number.parseFloat(String(value));
94
- break;
95
- case 70:
96
- layout.flag = value === 1 ? "PSLTSCALE" : "LIMCHECK";
97
- break;
98
- case 71:
99
- layout.tabOrder = value;
100
- break;
101
- case 146:
102
- layout.elevation = Number.parseFloat(String(value));
103
- break;
104
- case 13:
105
- layout.ucsX = Number.parseFloat(String(value));
106
- break;
107
- case 23:
108
- layout.ucsY = Number.parseFloat(String(value));
109
- break;
110
- case 33:
111
- layout.ucsZ = Number.parseFloat(String(value));
112
- break;
113
- case 16:
114
- layout.ucsXaxisX = Number.parseFloat(String(value));
115
- break;
116
- case 26:
117
- layout.ucsXaxisY = Number.parseFloat(String(value));
118
- break;
119
- case 36:
120
- layout.ucsXaxisZ = Number.parseFloat(String(value));
121
- break;
122
- case 17:
123
- layout.ucsYaxisX = Number.parseFloat(String(value));
124
- break;
125
- case 27:
126
- layout.ucsYaxisY = Number.parseFloat(String(value));
127
- break;
128
- case 37:
129
- layout.ucsYaxisZ = Number.parseFloat(String(value));
130
- break;
131
- case 76:
132
- switch (value) {
133
- case 0:
134
- layout.ucsType = "NOT ORTHOGRAPHIC";
135
- break;
136
- case 1:
137
- layout.ucsType = "TOP";
138
- break;
139
- case 2:
140
- layout.ucsType = "BOTTOM";
141
- break;
142
- case 3:
143
- layout.ucsType = "FRONT";
144
- break;
145
- case 4:
146
- layout.ucsType = "BACK";
147
- break;
148
- case 5:
149
- layout.ucsType = "LEFT";
150
- break;
151
- case 6:
152
- layout.ucsType = "RIGHT";
153
- break;
154
- }
155
- break;
156
- case 330:
157
- layout.tableRecord = value;
158
- break;
159
- case 331:
160
- layout.lastActiveViewport = value;
161
- break;
162
- case 333:
163
- layout.shadePlot = value;
164
- break;
165
- }
147
+ if ((type === 350 || type === 360) && pendingKey) {
148
+ dict.entries[pendingKey] = String(value);
149
+ pendingKey = void 0;
166
150
  }
167
151
  }
152
+ return dict;
153
+ }
154
+ function parseXRecordObject(group) {
155
+ if (group[0]?.[1] !== "XRECORD") return void 0;
156
+ const tuples = group.slice(1);
157
+ const xRecord = {
158
+ type: "XRECORD",
159
+ tuples
160
+ };
161
+ for (const tuple of tuples) {
162
+ const type = tuple[0];
163
+ const value = tuple[1];
164
+ if (type === 5) xRecord.handle = value;
165
+ if (type === 330) xRecord.ownerHandle = value;
166
+ }
167
+ return xRecord;
168
+ }
169
+ function parseImageDefObject(group) {
170
+ if (group[0]?.[1] !== "IMAGEDEF") return void 0;
171
+ const tuples = group.slice(1);
172
+ const imageDef = {
173
+ type: "IMAGEDEF",
174
+ tuples
175
+ };
176
+ for (const tuple of tuples) {
177
+ const type = tuple[0];
178
+ const value = tuple[1];
179
+ if (type === 5) imageDef.handle = value;
180
+ if (type === 330 && imageDef.ownerHandle === void 0) imageDef.ownerHandle = value;
181
+ if (type === 1) imageDef.fileName = String(value);
182
+ if (type === 10) imageDef.pixelSizeX = Number(value);
183
+ if (type === 20) imageDef.pixelSizeY = Number(value);
184
+ }
185
+ return imageDef;
186
+ }
187
+ function parseImageDefReactorObject(group) {
188
+ if (group[0]?.[1] !== "IMAGEDEF_REACTOR") return void 0;
189
+ const tuples = group.slice(1);
190
+ const reactor = {
191
+ type: "IMAGEDEF_REACTOR",
192
+ tuples
193
+ };
194
+ for (const tuple of tuples) {
195
+ const type = tuple[0];
196
+ const value = tuple[1];
197
+ if (type === 5) reactor.handle = value;
198
+ if (type === 330) reactor.imageHandle = value;
199
+ }
200
+ return reactor;
201
+ }
202
+ const UNDERLAY_DEFINITION_OBJECT_TYPES = /* @__PURE__ */ new Set([
203
+ "UNDERLAYDEFINITION",
204
+ "PDFDEFINITION",
205
+ "DWFDEFINITION",
206
+ "DGNDEFINITION"
207
+ ]);
208
+ function parseUnderlayDefinitionObject(group) {
209
+ const objectType = group[0]?.[1];
210
+ if (typeof objectType !== "string") return void 0;
211
+ if (!UNDERLAY_DEFINITION_OBJECT_TYPES.has(objectType)) return void 0;
212
+ const tuples = group.slice(1);
213
+ const def = {
214
+ type: objectType,
215
+ tuples
216
+ };
217
+ for (const tuple of tuples) {
218
+ const type = tuple[0];
219
+ const value = tuple[1];
220
+ if (type === 5) def.handle = value;
221
+ if (type === 330 && def.ownerHandle === void 0) def.ownerHandle = value;
222
+ if (type === 1) def.fileName = String(value);
223
+ if (type === 2) def.underlayName = String(value);
224
+ }
225
+ return def;
226
+ }
227
+ const OBJECT_GROUP_HANDLERS = {
228
+ LAYOUT: (objects, group) => {
229
+ const layout = parseLayoutObject(group);
230
+ if (layout) objects.layouts.push(layout);
231
+ },
232
+ DICTIONARY: (objects, group) => {
233
+ const dict = parseDictionaryObject(group);
234
+ const handle = dict?.handle ? String(dict.handle) : void 0;
235
+ if (dict && handle) objects.dictionaries[handle] = dict;
236
+ },
237
+ XRECORD: (objects, group) => {
238
+ const xRecord = parseXRecordObject(group);
239
+ const handle = xRecord?.handle ? String(xRecord.handle) : void 0;
240
+ if (xRecord && handle) objects.xRecords[handle] = xRecord;
241
+ },
242
+ IMAGEDEF: (objects, group) => {
243
+ const imageDef = parseImageDefObject(group);
244
+ const handle = imageDef?.handle ? String(imageDef.handle) : void 0;
245
+ if (imageDef && handle) objects.imageDefs[handle] = imageDef;
246
+ },
247
+ IMAGEDEF_REACTOR: (objects, group) => {
248
+ const reactor = parseImageDefReactorObject(group);
249
+ const handle = reactor?.handle ? String(reactor.handle) : void 0;
250
+ if (reactor && handle) objects.imageDefReactors[handle] = reactor;
251
+ },
252
+ UNDERLAYDEFINITION: (objects, group) => {
253
+ const def = parseUnderlayDefinitionObject(group);
254
+ const handle = def?.handle ? String(def.handle) : void 0;
255
+ if (def && handle) objects.underlayDefinitions[handle] = def;
256
+ },
257
+ PDFDEFINITION: (objects, group) => {
258
+ const def = parseUnderlayDefinitionObject(group);
259
+ const handle = def?.handle ? String(def.handle) : void 0;
260
+ if (def && handle) objects.underlayDefinitions[handle] = def;
261
+ },
262
+ DWFDEFINITION: (objects, group) => {
263
+ const def = parseUnderlayDefinitionObject(group);
264
+ const handle = def?.handle ? String(def.handle) : void 0;
265
+ if (def && handle) objects.underlayDefinitions[handle] = def;
266
+ },
267
+ DGNDEFINITION: (objects, group) => {
268
+ const def = parseUnderlayDefinitionObject(group);
269
+ const handle = def?.handle ? String(def.handle) : void 0;
270
+ if (def && handle) objects.underlayDefinitions[handle] = def;
271
+ }
272
+ };
273
+ function parseObjects(tuples) {
274
+ const objects = {
275
+ layouts: [],
276
+ dictionaries: {},
277
+ xRecords: {},
278
+ imageDefs: {},
279
+ imageDefReactors: {},
280
+ underlayDefinitions: {}
281
+ };
282
+ const groups = groupObjectsByZero(tuples);
283
+ for (const group of groups) {
284
+ const objectType = group[0]?.[1];
285
+ if (typeof objectType !== "string") continue;
286
+ const handler = OBJECT_GROUP_HANDLERS[objectType];
287
+ if (handler) handler(objects, group);
288
+ }
168
289
  return objects;
169
290
  }
170
291
  //# sourceMappingURL=objects.cjs.map