@linkiez/dxf-renew 5.3.1

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 (447) hide show
  1. package/.eslintignore +17 -0
  2. package/.eslintrc.json +61 -0
  3. package/.gitattributes +4 -0
  4. package/.github/instructions/project-en_US.instructions.md +352 -0
  5. package/.github/workflows/release.yml +110 -0
  6. package/.husky/commit-msg +4 -0
  7. package/.husky/pre-commit +1 -0
  8. package/.prettierignore +1 -0
  9. package/.prettierrc.json +6 -0
  10. package/.releaserc.json +76 -0
  11. package/.travis.yml +6 -0
  12. package/.yarn/install-state.gz +0 -0
  13. package/.yarnrc.yml +1 -0
  14. package/CHANGELOG.md +134 -0
  15. package/CONTRIBUTING.md +271 -0
  16. package/LICENSE +21 -0
  17. package/PLAN.md +517 -0
  18. package/README.md +306 -0
  19. package/build.mjs +66 -0
  20. package/commitlint.config.js +25 -0
  21. package/dist/dxf.js +7234 -0
  22. package/docs/CODE_PATTERNS.md +182 -0
  23. package/docs/DIMENSION_SUMMARY.md +248 -0
  24. package/docs/DIMENSION_SUMMARY.pt-BR.md +248 -0
  25. package/docs/IMPLEMENTED-2D-ENTITIES.md +54 -0
  26. package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +54 -0
  27. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +241 -0
  28. package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +169 -0
  29. package/docs/autocad_2012_pdf_dxf-reference_enu.md +8272 -0
  30. package/examples/dxf.html +36 -0
  31. package/examples/example.es5.js +30 -0
  32. package/examples/example.es6.js +30 -0
  33. package/examples/text-dimension-viewer.html +133 -0
  34. package/lib/Helper.cjs +89 -0
  35. package/lib/Helper.cjs.map +7 -0
  36. package/lib/Helper.js +59 -0
  37. package/lib/Helper.js.map +7 -0
  38. package/lib/applyTransforms.cjs +59 -0
  39. package/lib/applyTransforms.cjs.map +7 -0
  40. package/lib/applyTransforms.js +39 -0
  41. package/lib/applyTransforms.js.map +7 -0
  42. package/lib/cli.cjs +53 -0
  43. package/lib/cli.cjs.map +7 -0
  44. package/lib/cli.js +29 -0
  45. package/lib/cli.js.map +7 -0
  46. package/lib/config.cjs +30 -0
  47. package/lib/config.cjs.map +7 -0
  48. package/lib/config.js +10 -0
  49. package/lib/config.js.map +7 -0
  50. package/lib/constants.cjs +39 -0
  51. package/lib/constants.cjs.map +7 -0
  52. package/lib/constants.js +15 -0
  53. package/lib/constants.js.map +7 -0
  54. package/lib/denormalise.cjs +148 -0
  55. package/lib/denormalise.cjs.map +7 -0
  56. package/lib/denormalise.js +118 -0
  57. package/lib/denormalise.js.map +7 -0
  58. package/lib/dimensionToSVG.cjs +307 -0
  59. package/lib/dimensionToSVG.cjs.map +7 -0
  60. package/lib/dimensionToSVG.js +273 -0
  61. package/lib/dimensionToSVG.js.map +7 -0
  62. package/lib/entityToPolyline.cjs +248 -0
  63. package/lib/entityToPolyline.cjs.map +7 -0
  64. package/lib/entityToPolyline.js +213 -0
  65. package/lib/entityToPolyline.js.map +7 -0
  66. package/lib/getRGBForEntity.cjs +53 -0
  67. package/lib/getRGBForEntity.cjs.map +7 -0
  68. package/lib/getRGBForEntity.js +23 -0
  69. package/lib/getRGBForEntity.js.map +7 -0
  70. package/lib/groupEntitiesByLayer.cjs +34 -0
  71. package/lib/groupEntitiesByLayer.cjs.map +7 -0
  72. package/lib/groupEntitiesByLayer.js +14 -0
  73. package/lib/groupEntitiesByLayer.js.map +7 -0
  74. package/lib/handlers/blocks.cjs +93 -0
  75. package/lib/handlers/blocks.cjs.map +7 -0
  76. package/lib/handlers/blocks.js +63 -0
  77. package/lib/handlers/blocks.js.map +7 -0
  78. package/lib/handlers/entities.cjs +118 -0
  79. package/lib/handlers/entities.cjs.map +7 -0
  80. package/lib/handlers/entities.js +88 -0
  81. package/lib/handlers/entities.js.map +7 -0
  82. package/lib/handlers/entity/arc.cjs +82 -0
  83. package/lib/handlers/entity/arc.cjs.map +7 -0
  84. package/lib/handlers/entity/arc.js +47 -0
  85. package/lib/handlers/entity/arc.js.map +7 -0
  86. package/lib/handlers/entity/attdef.cjs +318 -0
  87. package/lib/handlers/entity/attdef.cjs.map +7 -0
  88. package/lib/handlers/entity/attdef.js +282 -0
  89. package/lib/handlers/entity/attdef.js.map +7 -0
  90. package/lib/handlers/entity/attrib.cjs +52 -0
  91. package/lib/handlers/entity/attrib.cjs.map +7 -0
  92. package/lib/handlers/entity/attrib.js +27 -0
  93. package/lib/handlers/entity/attrib.js.map +7 -0
  94. package/lib/handlers/entity/circle.cjs +73 -0
  95. package/lib/handlers/entity/circle.cjs.map +7 -0
  96. package/lib/handlers/entity/circle.js +38 -0
  97. package/lib/handlers/entity/circle.js.map +7 -0
  98. package/lib/handlers/entity/common.cjs +83 -0
  99. package/lib/handlers/entity/common.cjs.map +7 -0
  100. package/lib/handlers/entity/common.js +63 -0
  101. package/lib/handlers/entity/common.js.map +7 -0
  102. package/lib/handlers/entity/dimension.cjs +203 -0
  103. package/lib/handlers/entity/dimension.cjs.map +7 -0
  104. package/lib/handlers/entity/dimension.js +168 -0
  105. package/lib/handlers/entity/dimension.js.map +7 -0
  106. package/lib/handlers/entity/ellipse.cjs +88 -0
  107. package/lib/handlers/entity/ellipse.cjs.map +7 -0
  108. package/lib/handlers/entity/ellipse.js +53 -0
  109. package/lib/handlers/entity/ellipse.js.map +7 -0
  110. package/lib/handlers/entity/hatch.cjs +470 -0
  111. package/lib/handlers/entity/hatch.cjs.map +7 -0
  112. package/lib/handlers/entity/hatch.js +435 -0
  113. package/lib/handlers/entity/hatch.js.map +7 -0
  114. package/lib/handlers/entity/insert.cjs +106 -0
  115. package/lib/handlers/entity/insert.cjs.map +7 -0
  116. package/lib/handlers/entity/insert.js +71 -0
  117. package/lib/handlers/entity/insert.js.map +7 -0
  118. package/lib/handlers/entity/line.cjs +84 -0
  119. package/lib/handlers/entity/line.cjs.map +7 -0
  120. package/lib/handlers/entity/line.js +49 -0
  121. package/lib/handlers/entity/line.js.map +7 -0
  122. package/lib/handlers/entity/lwpolyline.cjs +82 -0
  123. package/lib/handlers/entity/lwpolyline.cjs.map +7 -0
  124. package/lib/handlers/entity/lwpolyline.js +47 -0
  125. package/lib/handlers/entity/lwpolyline.js.map +7 -0
  126. package/lib/handlers/entity/mtext.cjs +121 -0
  127. package/lib/handlers/entity/mtext.cjs.map +7 -0
  128. package/lib/handlers/entity/mtext.js +85 -0
  129. package/lib/handlers/entity/mtext.js.map +7 -0
  130. package/lib/handlers/entity/ole2Frame.cjs +98 -0
  131. package/lib/handlers/entity/ole2Frame.cjs.map +7 -0
  132. package/lib/handlers/entity/ole2Frame.js +63 -0
  133. package/lib/handlers/entity/ole2Frame.js.map +7 -0
  134. package/lib/handlers/entity/point.cjs +73 -0
  135. package/lib/handlers/entity/point.cjs.map +7 -0
  136. package/lib/handlers/entity/point.js +38 -0
  137. package/lib/handlers/entity/point.js.map +7 -0
  138. package/lib/handlers/entity/polyline.cjs +70 -0
  139. package/lib/handlers/entity/polyline.cjs.map +7 -0
  140. package/lib/handlers/entity/polyline.js +35 -0
  141. package/lib/handlers/entity/polyline.js.map +7 -0
  142. package/lib/handlers/entity/solid.cjs +101 -0
  143. package/lib/handlers/entity/solid.cjs.map +7 -0
  144. package/lib/handlers/entity/solid.js +66 -0
  145. package/lib/handlers/entity/solid.js.map +7 -0
  146. package/lib/handlers/entity/spline.cjs +109 -0
  147. package/lib/handlers/entity/spline.cjs.map +7 -0
  148. package/lib/handlers/entity/spline.js +74 -0
  149. package/lib/handlers/entity/spline.js.map +7 -0
  150. package/lib/handlers/entity/text.cjs +85 -0
  151. package/lib/handlers/entity/text.cjs.map +7 -0
  152. package/lib/handlers/entity/text.js +49 -0
  153. package/lib/handlers/entity/text.js.map +7 -0
  154. package/lib/handlers/entity/threeDFace.cjs +98 -0
  155. package/lib/handlers/entity/threeDFace.cjs.map +7 -0
  156. package/lib/handlers/entity/threeDFace.js +63 -0
  157. package/lib/handlers/entity/threeDFace.js.map +7 -0
  158. package/lib/handlers/entity/vertex.cjs +78 -0
  159. package/lib/handlers/entity/vertex.cjs.map +7 -0
  160. package/lib/handlers/entity/vertex.js +53 -0
  161. package/lib/handlers/entity/vertex.js.map +7 -0
  162. package/lib/handlers/entity/viewport.cjs +153 -0
  163. package/lib/handlers/entity/viewport.cjs.map +7 -0
  164. package/lib/handlers/entity/viewport.js +118 -0
  165. package/lib/handlers/entity/viewport.js.map +7 -0
  166. package/lib/handlers/header.cjs +92 -0
  167. package/lib/handlers/header.cjs.map +7 -0
  168. package/lib/handlers/header.js +72 -0
  169. package/lib/handlers/header.js.map +7 -0
  170. package/lib/handlers/objects.cjs +170 -0
  171. package/lib/handlers/objects.cjs.map +7 -0
  172. package/lib/handlers/objects.js +150 -0
  173. package/lib/handlers/objects.js.map +7 -0
  174. package/lib/handlers/tables.cjs +587 -0
  175. package/lib/handlers/tables.cjs.map +7 -0
  176. package/lib/handlers/tables.js +557 -0
  177. package/lib/handlers/tables.js.map +7 -0
  178. package/lib/index.cjs +60 -0
  179. package/lib/index.cjs.map +7 -0
  180. package/lib/index.js +19 -0
  181. package/lib/index.js.map +7 -0
  182. package/lib/parseString.cjs +118 -0
  183. package/lib/parseString.cjs.map +7 -0
  184. package/lib/parseString.js +88 -0
  185. package/lib/parseString.js.map +7 -0
  186. package/lib/toPolylines.cjs +69 -0
  187. package/lib/toPolylines.cjs.map +7 -0
  188. package/lib/toPolylines.js +39 -0
  189. package/lib/toPolylines.js.map +7 -0
  190. package/lib/toSVG.cjs +395 -0
  191. package/lib/toSVG.cjs.map +7 -0
  192. package/lib/toSVG.js +361 -0
  193. package/lib/toSVG.js.map +7 -0
  194. package/lib/types/arc-entity.cjs +17 -0
  195. package/lib/types/arc-entity.cjs.map +7 -0
  196. package/lib/types/arc-entity.js +1 -0
  197. package/lib/types/arc-entity.js.map +7 -0
  198. package/lib/types/base-entity.cjs +17 -0
  199. package/lib/types/base-entity.cjs.map +7 -0
  200. package/lib/types/base-entity.js +1 -0
  201. package/lib/types/base-entity.js.map +7 -0
  202. package/lib/types/circle-entity.cjs +17 -0
  203. package/lib/types/circle-entity.cjs.map +7 -0
  204. package/lib/types/circle-entity.js +1 -0
  205. package/lib/types/circle-entity.js.map +7 -0
  206. package/lib/types/common.cjs +17 -0
  207. package/lib/types/common.cjs.map +7 -0
  208. package/lib/types/common.js +1 -0
  209. package/lib/types/common.js.map +7 -0
  210. package/lib/types/dimension-entity.cjs +17 -0
  211. package/lib/types/dimension-entity.cjs.map +7 -0
  212. package/lib/types/dimension-entity.js +1 -0
  213. package/lib/types/dimension-entity.js.map +7 -0
  214. package/lib/types/dxf.cjs +17 -0
  215. package/lib/types/dxf.cjs.map +7 -0
  216. package/lib/types/dxf.js +1 -0
  217. package/lib/types/dxf.js.map +7 -0
  218. package/lib/types/ellipse-entity.cjs +17 -0
  219. package/lib/types/ellipse-entity.cjs.map +7 -0
  220. package/lib/types/ellipse-entity.js +1 -0
  221. package/lib/types/ellipse-entity.js.map +7 -0
  222. package/lib/types/entity.cjs +17 -0
  223. package/lib/types/entity.cjs.map +7 -0
  224. package/lib/types/entity.js +1 -0
  225. package/lib/types/entity.js.map +7 -0
  226. package/lib/types/handler-internal.cjs +17 -0
  227. package/lib/types/handler-internal.cjs.map +7 -0
  228. package/lib/types/handler-internal.js +1 -0
  229. package/lib/types/handler-internal.js.map +7 -0
  230. package/lib/types/handler.cjs +17 -0
  231. package/lib/types/handler.cjs.map +7 -0
  232. package/lib/types/handler.js +1 -0
  233. package/lib/types/handler.js.map +7 -0
  234. package/lib/types/hatch-entity.cjs +17 -0
  235. package/lib/types/hatch-entity.cjs.map +7 -0
  236. package/lib/types/hatch-entity.js +1 -0
  237. package/lib/types/hatch-entity.js.map +7 -0
  238. package/lib/types/helper.cjs +17 -0
  239. package/lib/types/helper.cjs.map +7 -0
  240. package/lib/types/helper.js +1 -0
  241. package/lib/types/helper.js.map +7 -0
  242. package/lib/types/index.cjs +77 -0
  243. package/lib/types/index.cjs.map +7 -0
  244. package/lib/types/index.js +29 -0
  245. package/lib/types/index.js.map +7 -0
  246. package/lib/types/insert-entity.cjs +17 -0
  247. package/lib/types/insert-entity.cjs.map +7 -0
  248. package/lib/types/insert-entity.js +1 -0
  249. package/lib/types/insert-entity.js.map +7 -0
  250. package/lib/types/layer-groups.cjs +17 -0
  251. package/lib/types/layer-groups.cjs.map +7 -0
  252. package/lib/types/layer-groups.js +1 -0
  253. package/lib/types/layer-groups.js.map +7 -0
  254. package/lib/types/line-entity.cjs +17 -0
  255. package/lib/types/line-entity.cjs.map +7 -0
  256. package/lib/types/line-entity.js +1 -0
  257. package/lib/types/line-entity.js.map +7 -0
  258. package/lib/types/mtext-entity.cjs +17 -0
  259. package/lib/types/mtext-entity.cjs.map +7 -0
  260. package/lib/types/mtext-entity.js +1 -0
  261. package/lib/types/mtext-entity.js.map +7 -0
  262. package/lib/types/ole2frame-entity.cjs +17 -0
  263. package/lib/types/ole2frame-entity.cjs.map +7 -0
  264. package/lib/types/ole2frame-entity.js +1 -0
  265. package/lib/types/ole2frame-entity.js.map +7 -0
  266. package/lib/types/options.cjs +17 -0
  267. package/lib/types/options.cjs.map +7 -0
  268. package/lib/types/options.js +1 -0
  269. package/lib/types/options.js.map +7 -0
  270. package/lib/types/point-entity.cjs +17 -0
  271. package/lib/types/point-entity.cjs.map +7 -0
  272. package/lib/types/point-entity.js +1 -0
  273. package/lib/types/point-entity.js.map +7 -0
  274. package/lib/types/polyline-entity.cjs +17 -0
  275. package/lib/types/polyline-entity.cjs.map +7 -0
  276. package/lib/types/polyline-entity.js +1 -0
  277. package/lib/types/polyline-entity.js.map +7 -0
  278. package/lib/types/polylines.cjs +17 -0
  279. package/lib/types/polylines.cjs.map +7 -0
  280. package/lib/types/polylines.js +1 -0
  281. package/lib/types/polylines.js.map +7 -0
  282. package/lib/types/solid-entity.cjs +17 -0
  283. package/lib/types/solid-entity.cjs.map +7 -0
  284. package/lib/types/solid-entity.js +1 -0
  285. package/lib/types/solid-entity.js.map +7 -0
  286. package/lib/types/spline-entity.cjs +17 -0
  287. package/lib/types/spline-entity.cjs.map +7 -0
  288. package/lib/types/spline-entity.js +1 -0
  289. package/lib/types/spline-entity.js.map +7 -0
  290. package/lib/types/svg.cjs +17 -0
  291. package/lib/types/svg.cjs.map +7 -0
  292. package/lib/types/svg.js +1 -0
  293. package/lib/types/svg.js.map +7 -0
  294. package/lib/types/tables.cjs +17 -0
  295. package/lib/types/tables.cjs.map +7 -0
  296. package/lib/types/tables.js +1 -0
  297. package/lib/types/tables.js.map +7 -0
  298. package/lib/types/text-entity.cjs +17 -0
  299. package/lib/types/text-entity.cjs.map +7 -0
  300. package/lib/types/text-entity.js +1 -0
  301. package/lib/types/text-entity.js.map +7 -0
  302. package/lib/types/util-types.cjs +17 -0
  303. package/lib/types/util-types.cjs.map +7 -0
  304. package/lib/types/util-types.js +1 -0
  305. package/lib/types/util-types.js.map +7 -0
  306. package/lib/types/vecks.d.cjs +2 -0
  307. package/lib/types/vecks.d.cjs.map +7 -0
  308. package/lib/types/vecks.d.js +1 -0
  309. package/lib/types/vecks.d.js.map +7 -0
  310. package/lib/types/viewport-entity.cjs +17 -0
  311. package/lib/types/viewport-entity.cjs.map +7 -0
  312. package/lib/types/viewport-entity.js +1 -0
  313. package/lib/types/viewport-entity.js.map +7 -0
  314. package/lib/types.cjs +23 -0
  315. package/lib/types.cjs.map +7 -0
  316. package/lib/types.js +2 -0
  317. package/lib/types.js.map +7 -0
  318. package/lib/util/bSpline.cjs +95 -0
  319. package/lib/util/bSpline.cjs.map +7 -0
  320. package/lib/util/bSpline.js +65 -0
  321. package/lib/util/bSpline.js.map +7 -0
  322. package/lib/util/colors.cjs +283 -0
  323. package/lib/util/colors.cjs.map +7 -0
  324. package/lib/util/colors.js +263 -0
  325. package/lib/util/colors.js.map +7 -0
  326. package/lib/util/createArcForLWPolyline.cjs +84 -0
  327. package/lib/util/createArcForLWPolyline.cjs.map +7 -0
  328. package/lib/util/createArcForLWPolyline.js +64 -0
  329. package/lib/util/createArcForLWPolyline.js.map +7 -0
  330. package/lib/util/dxfColorToRGB.cjs +115 -0
  331. package/lib/util/dxfColorToRGB.cjs.map +7 -0
  332. package/lib/util/dxfColorToRGB.js +90 -0
  333. package/lib/util/dxfColorToRGB.js.map +7 -0
  334. package/lib/util/insertKnot.cjs +77 -0
  335. package/lib/util/insertKnot.cjs.map +7 -0
  336. package/lib/util/insertKnot.js +57 -0
  337. package/lib/util/insertKnot.js.map +7 -0
  338. package/lib/util/logger.cjs +53 -0
  339. package/lib/util/logger.cjs.map +7 -0
  340. package/lib/util/logger.js +23 -0
  341. package/lib/util/logger.js.map +7 -0
  342. package/lib/util/rgbToColorAttribute.cjs +32 -0
  343. package/lib/util/rgbToColorAttribute.cjs.map +7 -0
  344. package/lib/util/rgbToColorAttribute.js +12 -0
  345. package/lib/util/rgbToColorAttribute.js.map +7 -0
  346. package/lib/util/rotate.cjs +30 -0
  347. package/lib/util/rotate.cjs.map +7 -0
  348. package/lib/util/rotate.js +10 -0
  349. package/lib/util/rotate.js.map +7 -0
  350. package/lib/util/round10.cjs +38 -0
  351. package/lib/util/round10.cjs.map +7 -0
  352. package/lib/util/round10.js +18 -0
  353. package/lib/util/round10.js.map +7 -0
  354. package/lib/util/toPiecewiseBezier.cjs +90 -0
  355. package/lib/util/toPiecewiseBezier.cjs.map +7 -0
  356. package/lib/util/toPiecewiseBezier.js +54 -0
  357. package/lib/util/toPiecewiseBezier.js.map +7 -0
  358. package/lib/util/transformBoundingBoxAndElement.cjs +80 -0
  359. package/lib/util/transformBoundingBoxAndElement.cjs.map +7 -0
  360. package/lib/util/transformBoundingBoxAndElement.js +60 -0
  361. package/lib/util/transformBoundingBoxAndElement.js.map +7 -0
  362. package/package.json +127 -0
  363. package/src/Helper.ts +71 -0
  364. package/src/applyTransforms.ts +54 -0
  365. package/src/cli.ts +41 -0
  366. package/src/config.ts +10 -0
  367. package/src/constants.ts +14 -0
  368. package/src/denormalise.ts +153 -0
  369. package/src/dimensionToSVG.ts +427 -0
  370. package/src/entityToPolyline.ts +338 -0
  371. package/src/getRGBForEntity.ts +28 -0
  372. package/src/groupEntitiesByLayer.ts +14 -0
  373. package/src/handlers/blocks.ts +65 -0
  374. package/src/handlers/entities.ts +111 -0
  375. package/src/handlers/entity/arc.ts +61 -0
  376. package/src/handlers/entity/attdef.ts +284 -0
  377. package/src/handlers/entity/attrib.ts +29 -0
  378. package/src/handlers/entity/circle.ts +47 -0
  379. package/src/handlers/entity/common.ts +79 -0
  380. package/src/handlers/entity/dimension.ts +217 -0
  381. package/src/handlers/entity/ellipse.ts +55 -0
  382. package/src/handlers/entity/hatch.ts +471 -0
  383. package/src/handlers/entity/insert.ts +73 -0
  384. package/src/handlers/entity/line.ts +56 -0
  385. package/src/handlers/entity/lwpolyline.ts +54 -0
  386. package/src/handlers/entity/mtext.ts +150 -0
  387. package/src/handlers/entity/ole2Frame.ts +64 -0
  388. package/src/handlers/entity/point.ts +47 -0
  389. package/src/handlers/entity/polyline.ts +49 -0
  390. package/src/handlers/entity/solid.ts +73 -0
  391. package/src/handlers/entity/spline.ts +103 -0
  392. package/src/handlers/entity/text.ts +83 -0
  393. package/src/handlers/entity/threeDFace.ts +69 -0
  394. package/src/handlers/entity/vertex.ts +55 -0
  395. package/src/handlers/entity/viewport.ts +119 -0
  396. package/src/handlers/header.ts +73 -0
  397. package/src/handlers/objects.ts +152 -0
  398. package/src/handlers/tables.ts +581 -0
  399. package/src/index.ts +19 -0
  400. package/src/parseString.ts +97 -0
  401. package/src/toPolylines.ts +47 -0
  402. package/src/toSVG.ts +518 -0
  403. package/src/types/README.md +91 -0
  404. package/src/types/arc-entity.ts +10 -0
  405. package/src/types/base-entity.ts +25 -0
  406. package/src/types/circle-entity.ts +8 -0
  407. package/src/types/common.ts +37 -0
  408. package/src/types/dimension-entity.ts +23 -0
  409. package/src/types/dxf.ts +64 -0
  410. package/src/types/ellipse-entity.ts +13 -0
  411. package/src/types/entity.ts +32 -0
  412. package/src/types/handler-internal.ts +51 -0
  413. package/src/types/handler.ts +10 -0
  414. package/src/types/hatch-entity.ts +127 -0
  415. package/src/types/helper.ts +12 -0
  416. package/src/types/index.ts +53 -0
  417. package/src/types/insert-entity.ts +19 -0
  418. package/src/types/layer-groups.ts +8 -0
  419. package/src/types/line-entity.ts +10 -0
  420. package/src/types/mtext-entity.ts +35 -0
  421. package/src/types/ole2frame-entity.ts +35 -0
  422. package/src/types/options.ts +17 -0
  423. package/src/types/point-entity.ts +7 -0
  424. package/src/types/polyline-entity.ts +20 -0
  425. package/src/types/polylines.ts +22 -0
  426. package/src/types/solid-entity.ts +9 -0
  427. package/src/types/spline-entity.ts +12 -0
  428. package/src/types/svg.ts +31 -0
  429. package/src/types/tables.ts +414 -0
  430. package/src/types/text-entity.ts +23 -0
  431. package/src/types/util-types.ts +27 -0
  432. package/src/types/vecks.d.ts +29 -0
  433. package/src/types/viewport-entity.ts +81 -0
  434. package/src/types.ts +5 -0
  435. package/src/util/bSpline.ts +97 -0
  436. package/src/util/colors.ts +266 -0
  437. package/src/util/createArcForLWPolyline.ts +93 -0
  438. package/src/util/diagram.png +0 -0
  439. package/src/util/dxfColorToRGB.ts +106 -0
  440. package/src/util/insertKnot.ts +69 -0
  441. package/src/util/logger.ts +23 -0
  442. package/src/util/rgbToColorAttribute.ts +14 -0
  443. package/src/util/rotate.ts +14 -0
  444. package/src/util/round10.ts +24 -0
  445. package/src/util/toPiecewiseBezier.ts +70 -0
  446. package/src/util/transformBoundingBoxAndElement.ts +74 -0
  447. package/tsconfig.json +34 -0
@@ -0,0 +1,182 @@
1
+ # Code Patterns & Best Practices
2
+
3
+ This document codifies the current implementation patterns used in DXF-Renewed, plus recommended best practices for new contributions.
4
+
5
+ ## Scope
6
+
7
+ - Applies to all TypeScript code under `src/`.
8
+ - Covers parsing (DXF → typed model), denormalisation (INSERT expansion), and rendering (SVG / polylines).
9
+
10
+ ## Tooling & Style
11
+
12
+ - **Runtime**: Node.js (see `package.json#engines`).
13
+ - **Package manager**: Yarn (see `package.json#packageManager`).
14
+ - **TypeScript**: `strict: true` (see `tsconfig.json`).
15
+ - **Lint/format**:
16
+ - ESLint (Standard + TypeScript rules): `.eslintrc.json`
17
+ - Prettier: `.prettierrc.json` (`semi: false`, `singleQuote: true`)
18
+
19
+ Best practices:
20
+
21
+ - Prefer `import type { ... }` for type-only imports.
22
+ - Avoid `any` in new code. If runtime constraints require it, keep it local and document why.
23
+ - Keep names and comments in **English (en_US)**.
24
+
25
+ ## Project Architecture (High-Level)
26
+
27
+ Core pipeline:
28
+
29
+ - Parse: `parseString(dxfText)` → `ParsedDXF`
30
+ - Denormalise: `denormalise(parsed)` → flattened `Entity[]` with `transforms`
31
+ - Render:
32
+ - `toSVG(parsed)` → SVG string
33
+ - `toPolylines(parsed)` → numeric polylines for custom renderers
34
+
35
+ Entry points:
36
+
37
+ - Public API exports are defined in `src/index.ts`.
38
+ - `Helper` provides the “batteries included” API around parse/denormalise/render.
39
+
40
+ ## Parsing Patterns
41
+
42
+ ### DXF tuples and group codes
43
+
44
+ The parser converts DXF text into a tuple stream of `[groupCode, value]` where:
45
+
46
+ - Values are parsed into numbers for numeric group code ranges.
47
+ - Section routing happens in `src/parseString.ts` via `HEADER | TABLES | BLOCKS | ENTITIES | OBJECTS`.
48
+
49
+ Best practices:
50
+
51
+ - Do not change numeric parsing rules lightly; it impacts all handlers.
52
+ - Prefer **“parse what we can, warn for what we can’t”** instead of throwing.
53
+
54
+ ### Section handlers
55
+
56
+ - Section handlers live under `src/handlers/*`.
57
+ - Each section handler accepts `DXFTuple[]` and returns a typed result.
58
+
59
+ Best practices:
60
+
61
+ - Keep handler interfaces stable. If you must extend output shape, do it in a backward-compatible way.
62
+
63
+ ### Entity handlers (`src/handlers/entity/*.ts`)
64
+
65
+ Canonical pattern:
66
+
67
+ - Export `TYPE` as a string DXF entity type.
68
+ - Export `process(tuples)` that reduces tuples into a typed entity object.
69
+ - Delegate shared properties to `src/handlers/entity/common.ts`:
70
+ - `Object.assign(entity, common(type, value))`
71
+
72
+ Example pattern:
73
+
74
+ - `LINE` handler parses geometry group codes, and falls back to `common()` for layer/color/etc.
75
+
76
+ Best practices:
77
+
78
+ - Prefer returning the public entity types from `src/types/*` when feasible.
79
+ - Keep parsing logic in a single `switch` over group codes.
80
+ - Store unknown/unhandled codes only if they are needed downstream; otherwise ignore.
81
+
82
+ ### Multi-entity sequences (POLYLINE/VERTEX/SEQEND)
83
+
84
+ - `src/handlers/entities.ts` contains sequencing logic:
85
+ - `POLYLINE` begins a stateful polyline.
86
+ - Subsequent `VERTEX` entities are appended.
87
+ - `SEQEND` terminates the sequence.
88
+
89
+ Best practices:
90
+
91
+ - Preserve sequencing correctness over convenience: incorrect state handling can corrupt the entity list.
92
+ - When ignoring invalid sequences, log via `logger.error` or `logger.warn` (do not throw).
93
+
94
+ ## Types
95
+
96
+ - Public types are under `src/types/`.
97
+ - The union type `Entity` is defined in `src/types/entity.ts`.
98
+
99
+ Best practices:
100
+
101
+ - When adding a new entity:
102
+ - Add a new type file in `src/types/<entity>-entity.ts`.
103
+ - Export it from `src/types/index.ts`.
104
+ - Add it to the `Entity` union if it is part of the public surface.
105
+
106
+ ## Denormalisation (INSERT Expansion)
107
+
108
+ - Implemented in `src/denormalise.ts`.
109
+ - Responsibilities:
110
+ - Resolve `INSERT` → referenced BLOCK.
111
+ - Apply rectangular array replication.
112
+ - Attach a `transforms` stack to each flattened entity.
113
+
114
+ Best practices:
115
+
116
+ - Denormalise should be deterministic and side-effect free (beyond logging).
117
+ - Avoid heavy deep clones in hot paths unless necessary for correctness.
118
+ - If you add entity types that can appear inside blocks, ensure block basepoint adjustments are correct (and test it).
119
+
120
+ ## Rendering Patterns
121
+
122
+ ### SVG (`src/toSVG.ts`)
123
+
124
+ - Prefer native SVG primitives when possible (`<circle>`, `<ellipse>`, path `A` commands).
125
+ - For complex curves, polyline interpolation is acceptable.
126
+ - Transform application uses `transformBoundingBoxAndElement`.
127
+
128
+ Best practices:
129
+
130
+ - Rendering should not throw on unsupported types. Use `logger.warn` and skip.
131
+ - Ensure **XML escaping** for any text inserted into SVG attributes or text nodes.
132
+
133
+ ### Polylines (`src/entityToPolyline.ts` and `src/toPolylines.ts`)
134
+
135
+ - Use `entityToPolyline(entity, options)` as the single conversion point.
136
+
137
+ Best practices:
138
+
139
+ - Keep conversions pure: same input entity → same polyline output.
140
+ - Add options to `EntityToPolylineOptions` rather than hard-coding interpolation quality.
141
+
142
+ ## Logging & Error Handling
143
+
144
+ - Use `src/util/logger.ts`.
145
+ - `info` and `warn` are gated by `config.verbose`.
146
+
147
+ Best practices:
148
+
149
+ - Prefer `logger.warn` for unsupported features.
150
+ - Prefer `logger.error` for invalid DXF content that is being skipped.
151
+ - Avoid `console.*` directly outside logger.
152
+
153
+ ## Testing
154
+
155
+ - Unit tests: `test/unit/**` (Mocha + TSX).
156
+ - Functional tests: `test/functional/**`.
157
+ - Fixtures: `test/resources/*.dxf`.
158
+
159
+ Best practices:
160
+
161
+ - For each new entity/table/object:
162
+ - Add or reuse a fixture DXF that exercises the feature.
163
+ - Add at least one unit test asserting:
164
+ - parsing does not throw,
165
+ - output shape is correct (minimum required fields),
166
+ - rendering (SVG or polyline) does not throw if supported.
167
+
168
+ ## Backward Compatibility
169
+
170
+ Best practices:
171
+
172
+ - Treat exports from `src/index.ts` as public API.
173
+ - If you must rename/move types, re-export old names for at least one major version.
174
+ - “Parse-only + safe ignore in rendering” is acceptable for complex entities, as long as it is documented.
175
+
176
+ ## Contribution Checklist (Quick)
177
+
178
+ Before opening a PR:
179
+
180
+ - Run `yarn lint`, `yarn type-check`, `yarn test`.
181
+ - Keep PRs focused (one feature/fix).
182
+ - Use Conventional Commits.
@@ -0,0 +1,248 @@
1
+ # DIMENSION Implementation Summary
2
+
3
+ ## Overview
4
+
5
+ The `DIMENSION` entity has been fully implemented with complete support for the `DIMSTYLE` system, including parsing, storage, and SVG rendering of all 6 DXF dimension types.
6
+
7
+ ## Implementation Status
8
+
9
+ ### ✅ Phase 1: DIMSTYLE Parsing and Storage (100%)
10
+
11
+ * **DIMSTYLE Handler**: `src/handlers/tables.ts`
12
+ * 68+ properties parsed via group codes
13
+ * Main properties: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177)
14
+ * Colors: DIMCLRD (176), DIMCLRE (177), DIMCLRT (178)
15
+ * Line weights: DIMLWD (371), DIMLWE (372)
16
+ * Arrow blocks: DIMBLK (342), DIMBLK1 (343), DIMBLK2 (344)
17
+ * Tolerances: DIMTOL (71), DIMTOLJ (283)
18
+ * Alternate units: DIMALT (170), DIMALTF (143), DIMALTD (171)
19
+
20
+ * **TypeScript Interfaces**:
21
+ * `DimStyleInternal` in `src/types/tables.ts` (internal storage)
22
+ * `DimStyleTable` in `src/types/dxf.ts` (public API)
23
+
24
+ * **Integration**:
25
+ * DIMSTYLE stored in `parsed.tables.dimStyles`
26
+ * DIMENSION entity linked to style via `styleName`
27
+
28
+ ### ✅ Phase 2: Modular Architecture (100%)
29
+
30
+ * **Dedicated Module**: `src/dimensionToSVG.ts` (428 lines)
31
+ * Dispatcher based on `entity.dimensionType`
32
+ * 6 specialized rendering functions
33
+ * SVG marker system for arrows
34
+ * Helper functions for colors and geometry
35
+
36
+ * **Main Functions**:
37
+ * `dimensionToSVG()`: Main dispatcher
38
+ * `createArrowMarker()`: SVG marker creation with unique IDs
39
+ * `colorNumberToSVG()`: DXF color conversion (0-255) to RGB
40
+ * `getDimensionColors()`: Color extraction from DIMSTYLE
41
+
42
+ * **Integration with toSVG.ts**:
43
+ * `dimension()` calls `dimensionToSVG()` with correct DIMSTYLE
44
+ * Apply transforms to dimensions
45
+
46
+ ### ✅ Phase 3: Advanced Rendering (100%)
47
+
48
+ All 6 dimension types implemented with precise geometry:
49
+
50
+ #### 1. Linear Dimension (types 0 and 1)
51
+
52
+ * Extension lines with offset (DIMEXO) and extension (DIMEXE)
53
+ * Perpendicular geometry calculation (angle + π/2)
54
+ * Dimension line with arrows at ends
55
+ * Rotated text aligned to dimension
56
+ * File: `renderLinearDimension()`
57
+
58
+ #### 2. Angular Dimension (type 2)
59
+
60
+ * Radial extension lines from center
61
+ * Dimension line as SVG arc
62
+ * Large-arc flag calculation for arcs > 180°
63
+ * Arrows at arc ends
64
+ * Text rotated at mid-angle
65
+ * File: `renderAngularDimension()`
66
+
67
+ #### 3. Diameter Dimension (type 3)
68
+
69
+ * Line through circle
70
+ * Symbol ⌀ (Unicode U+2300) in text
71
+ * Single arrow at end
72
+ * File: `renderDiameterDimension()`
73
+
74
+ #### 4. Radius Dimension (type 4)
75
+
76
+ * Line from center to circumference
77
+ * Prefix "R" in text
78
+ * Single arrow at end
79
+ * File: `renderRadialDimension()`
80
+
81
+ #### 5. Ordinate Dimension (type 6)
82
+
83
+ * Simple leader line
84
+ * No arrows (per DXF specification)
85
+ * Text with X or Y coordinate
86
+ * File: `renderOrdinateDimension()`
87
+
88
+ #### 6. Fallback
89
+
90
+ * Minimal rendering for unsupported types
91
+ * Text only at textMidpoint position
92
+ * File: `renderFallbackDimension()`
93
+
94
+ ### ✅ Phase 4: Colors and Refinements (100%)
95
+
96
+ #### DIMSTYLE Colors (100%)
97
+
98
+ * **DIMCLRD**: Dimension line color
99
+ * **DIMCLRE**: Extension line color
100
+ * **DIMCLRT**: Text color
101
+ * **DIMLWD**: Dimension line weight
102
+ * **DIMLWE**: Extension line weight
103
+
104
+ Implementation:
105
+
106
+ * DXF color table: `src/util/colors.ts` (267 colors)
107
+ * DXF → RGB conversion: `colorNumberToSVG()`
108
+ * Special cases: 0 (ByBlock), 256 (ByLayer), 7 (white/black) → currentColor
109
+ * Applied in all rendering functions
110
+ * Arrow markers inherit dimension line color
111
+
112
+ #### Optional Features (Not Implemented)
113
+
114
+ **Custom Arrow Blocks (⏸️ Low Priority)**
115
+
116
+ * DIMBLK, DIMBLK1, DIMBLK2 parsed and available
117
+ * Requires complex integration with INSERT renderer
118
+ * Fallback to standard triangular arrows works in most cases
119
+
120
+ **Tolerances and Alternate Units (⏸️ Low Priority)**
121
+
122
+ * DIMTOL, DIMALT and related properties parsed
123
+ * Requires complex multi-line text formatting
124
+ * Simple text sufficient for most cases
125
+
126
+ **XDATA Overrides (⏸️ Rare Edge Case)**
127
+
128
+ * Per-entity DIMSTYLE property overrides via XDATA
129
+ * Not implemented
130
+ * Default DIMSTYLE works in most cases
131
+
132
+ ## Modified Files
133
+
134
+ ### Created
135
+
136
+ * `src/dimensionToSVG.ts`: Complete rendering module (428 lines)
137
+ * `docs/DIMENSION_IMPLEMENTATION_PLAN.md`: Detailed implementation plan
138
+ * `docs/DIMENSION_SUMMARY.md`: This file
139
+
140
+ ### Modified
141
+
142
+ * `src/handlers/entity/dimension.ts`: Added text (1) and styleName (3) parsing
143
+ * `src/types/dimension-entity.ts`: Added text and styleName properties
144
+ * `src/handlers/tables.ts`: Complete DIMSTYLE handler (68 properties)
145
+ * `src/types/tables.ts`: DimStyleInternal interface
146
+ * `src/types/dxf.ts`: DimStyleTable interface (public API)
147
+ * `src/toSVG.ts`: Integration with dimensionToSVG, pass dimStyles
148
+ * `docs/IMPLEMENTED-2D-ENTITIES.md`: Updated DIMENSION entry
149
+
150
+ ## Commits
151
+
152
+ ### Commit 1: Phases 1 and 2
153
+
154
+ ```text
155
+ feat: add complete DIMSTYLE parsing and modular architecture for DIMENSION
156
+
157
+ Phase 1: DIMSTYLE Parsing and Storage
158
+ - Create complete DIMSTYLE handler with 68+ properties
159
+ - Process group codes: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177), etc.
160
+ - Add DimStyleInternal and DimStyleTable interfaces
161
+ - Integrate dimStyles into parsed.tables
162
+ - Link DIMENSION entities to their DIMSTYLE via styleName
163
+
164
+ Phase 2: Modular Rendering Architecture
165
+ - Create dedicated module src/dimensionToSVG.ts
166
+ - Implement dispatcher based on dimensionType
167
+ - Create 6 specialized rendering functions
168
+ - Add createArrowMarker for SVG markers
169
+ - Integrate dimensionToSVG with toSVG.ts
170
+ ```
171
+
172
+ 9 files modified, 874 insertions(+), 10 deletions(-)
173
+
174
+ ### Commit 2: Phase 3
175
+
176
+ ```text
177
+ feat: implement advanced dimension rendering with extension lines and arrows
178
+
179
+ Phase 3: Advanced Rendering
180
+ - Implement extension lines with DIMEXO (offset) and DIMEXE (extension)
181
+ - Add perpendicular geometry calculation for extension lines
182
+ - Create SVG markers for arrows with unique IDs (timestamp-based)
183
+ - Implement text rotation aligned to dimension
184
+ - Add angular dimensions with SVG arcs
185
+ - Implement ⌀ and R symbols for diameter/radius
186
+ - Support ordinate dimensions without arrows
187
+ - Apply configurable line weights
188
+ ```
189
+
190
+ 2 files modified, 145 insertions(+), 30 deletions(-)
191
+
192
+ ### Commit 3: Phase 4 (This Commit)
193
+
194
+ ```text
195
+ feat: add complete DIMSTYLE color support and documentation
196
+
197
+ Phase 4: Colors and Refinements
198
+ - Add colorNumberToSVG function for DXF → RGB conversion
199
+ - Implement getDimensionColors to extract colors from DIMSTYLE
200
+ - Apply DIMCLRD (dimension line color) in all renderings
201
+ - Apply DIMCLRE (extension line color) in all renderings
202
+ - Apply DIMCLRT (text color) in all renderings
203
+ - Apply DIMLWD and DIMLWE (line weights) to lines
204
+ - Add dimBlk, dimBlk1, dimBlk2 properties to DimStyleTable
205
+ - Update implementation plan with complete status
206
+ - Update entity documentation with detailed implementation
207
+ - Create complete implementation summary
208
+ ```
209
+
210
+ ## Testing and Validation
211
+
212
+ ### Build
213
+
214
+ * ✅ ESM Build: 21-24ms
215
+ * ✅ CJS Build: 18-19ms
216
+ * ✅ 0 TypeScript errors
217
+ * ⚠️ 1 warning (import.meta in es2015 - unrelated)
218
+
219
+ ### Generated Files
220
+
221
+ * `lib/dimensionToSVG.js`: 14.6kb (ESM)
222
+ * `lib/dimensionToSVG.cjs`: 16.4kb (CJS)
223
+ * `lib/handlers/tables.js`: 15.3kb (ESM)
224
+ * `lib/handlers/tables.cjs`: 16.8kb (CJS)
225
+
226
+ ### Feature Coverage
227
+
228
+ * ✅ Parsing: 100% (68 DIMSTYLE properties)
229
+ * ✅ Basic rendering: 100% (6 dimension types)
230
+ * ✅ Advanced rendering: 100% (extension lines, arrows, rotation)
231
+ * ✅ Colors: 100% (DIMCLRD, DIMCLRE, DIMCLRT)
232
+ * ⏸️ Custom arrows: 0% (optional, low priority)
233
+ * ⏸️ Tolerances: 0% (optional, low priority)
234
+ * ⏸️ XDATA overrides: 0% (optional, edge case)
235
+
236
+ ## Next Steps (Optional)
237
+
238
+ 1. **Unit tests**: Create tests for each dimension type
239
+ 2. **Integration tests**: Validate with real DXF files
240
+ 3. **Custom arrow blocks**: Implement if there is demand
241
+ 4. **Tolerances**: Implement if there is demand
242
+ 5. **Performance**: Profiling and optimization if necessary
243
+
244
+ ## Conclusion
245
+
246
+ The `DIMENSION` implementation is complete for common use cases (estimate: 95% of DXF files). The optional features not implemented are rare edge cases or too complex for the limited benefit they would provide.
247
+
248
+ The modular architecture allows for easy future extension if needed.
@@ -0,0 +1,248 @@
1
+ # Resumo da Implementação de DIMENSION
2
+
3
+ ## Visão Geral
4
+
5
+ A entidade `DIMENSION` foi completamente implementada com suporte total ao sistema de estilos `DIMSTYLE`, incluindo parsing, armazenamento e renderização SVG de todos os 6 tipos de dimensão do DXF.
6
+
7
+ ## Status de Implementação
8
+
9
+ ### ✅ Fase 1: Parsing e Armazenamento de DIMSTYLE (100%)
10
+
11
+ * **Handler de DIMSTYLE**: `src/handlers/tables.ts`
12
+ * 68+ propriedades parseadas via group codes
13
+ * Propriedades principais: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177)
14
+ * Cores: DIMCLRD (176), DIMCLRE (177), DIMCLRT (178)
15
+ * Espessuras: DIMLWD (371), DIMLWE (372)
16
+ * Blocos de seta: DIMBLK (342), DIMBLK1 (343), DIMBLK2 (344)
17
+ * Tolerâncias: DIMTOL (71), DIMTOLJ (283)
18
+ * Unidades alternativas: DIMALT (170), DIMALTF (143), DIMALTD (171)
19
+
20
+ * **Interfaces TypeScript**:
21
+ * `DimStyleInternal` em `src/types/tables.ts` (armazenamento interno)
22
+ * `DimStyleTable` em `src/types/dxf.ts` (API pública)
23
+
24
+ * **Integração**:
25
+ * DIMSTYLE armazenado em `parsed.tables.dimStyles`
26
+ * Entidade DIMENSION vinculada ao estilo via `styleName`
27
+
28
+ ### ✅ Fase 2: Arquitetura Modular (100%)
29
+
30
+ * **Módulo dedicado**: `src/dimensionToSVG.ts` (428 linhas)
31
+ * Dispatcher baseado em `entity.dimensionType`
32
+ * 6 funções especializadas de renderização
33
+ * Sistema de markers SVG para setas
34
+ * Funções helper para cores e geometria
35
+
36
+ * **Funções principais**:
37
+ * `dimensionToSVG()`: Dispatcher principal
38
+ * `createArrowMarker()`: Criação de markers SVG com IDs únicos
39
+ * `colorNumberToSVG()`: Conversão de cores DXF (0-255) para RGB
40
+ * `getDimensionColors()`: Extração de cores do DIMSTYLE
41
+
42
+ * **Integração com toSVG.ts**:
43
+ * `dimension()` chama `dimensionToSVG()` com DIMSTYLE correto
44
+ * Aplicação de transforms às dimensões
45
+
46
+ ### ✅ Fase 3: Renderização Avançada (100%)
47
+
48
+ Todos os 6 tipos de dimensão implementados com geometria precisa:
49
+
50
+ #### 1. Dimensão Linear (tipos 0 e 1)
51
+
52
+ * Extension lines com offset (DIMEXO) e extensão (DIMEXE)
53
+ * Cálculo de geometria perpendicular (angle + π/2)
54
+ * Dimension line com setas nas extremidades
55
+ * Texto rotacionado alinhado à dimensão
56
+ * Arquivo: `renderLinearDimension()`
57
+
58
+ #### 2. Dimensão Angular (tipo 2)
59
+
60
+ * Extension lines radiais a partir do centro
61
+ * Dimension line como arco SVG
62
+ * Cálculo de large-arc flag para arcos > 180°
63
+ * Setas nas extremidades do arco
64
+ * Texto rotacionado no ângulo médio
65
+ * Arquivo: `renderAngularDimension()`
66
+
67
+ #### 3. Dimensão de Diâmetro (tipo 3)
68
+
69
+ * Linha através do círculo
70
+ * Símbolo ⌀ (Unicode U+2300) no texto
71
+ * Seta única na extremidade
72
+ * Arquivo: `renderDiameterDimension()`
73
+
74
+ #### 4. Dimensão de Raio (tipo 4)
75
+
76
+ * Linha do centro até a circunferência
77
+ * Prefixo "R" no texto
78
+ * Seta única na extremidade
79
+ * Arquivo: `renderRadialDimension()`
80
+
81
+ #### 5. Dimensão Ordenada (tipo 6)
82
+
83
+ * Linha de chamada simples
84
+ * Sem setas (conforme especificação DXF)
85
+ * Texto com coordenada X ou Y
86
+ * Arquivo: `renderOrdinateDimension()`
87
+
88
+ #### 6. Fallback
89
+
90
+ * Renderização mínima para tipos não suportados
91
+ * Apenas texto na posição textMidpoint
92
+ * Arquivo: `renderFallbackDimension()`
93
+
94
+ ### ✅ Fase 4: Cores e Refinamentos (100%)
95
+
96
+ #### Cores DIMSTYLE (100%)
97
+
98
+ * **DIMCLRD**: Cor das dimension lines
99
+ * **DIMCLRE**: Cor das extension lines
100
+ * **DIMCLRT**: Cor do texto
101
+ * **DIMLWD**: Espessura das dimension lines
102
+ * **DIMLWE**: Espessura das extension lines
103
+
104
+ Implementação:
105
+
106
+ * Tabela de cores DXF: `src/util/colors.ts` (267 cores)
107
+ * Conversão DXF → RGB: `colorNumberToSVG()`
108
+ * Casos especiais: 0 (ByBlock), 256 (ByLayer), 7 (white/black) → currentColor
109
+ * Aplicado em todas as funções de renderização
110
+ * Markers de seta herdam cor da dimension line
111
+
112
+ #### Funcionalidades Opcionais (Não Implementadas)
113
+
114
+ **Custom Arrow Blocks (⏸️ Baixa Prioridade)**
115
+
116
+ * DIMBLK, DIMBLK1, DIMBLK2 parseados e disponíveis
117
+ * Requer integração complexa com renderizador de INSERT
118
+ * Fallback para setas triangulares padrão funciona na maioria dos casos
119
+
120
+ **Tolerâncias e Unidades Alternativas (⏸️ Baixa Prioridade)**
121
+
122
+ * DIMTOL, DIMALT e propriedades relacionadas parseadas
123
+ * Requer formatação complexa de texto com múltiplas linhas
124
+ * Texto simples suficiente para maioria dos casos
125
+
126
+ **XDATA Overrides (⏸️ Edge Case Raro)**
127
+
128
+ * Overrides de propriedades DIMSTYLE por entidade via XDATA
129
+ * Não implementado
130
+ * DIMSTYLE padrão funciona na maioria dos casos
131
+
132
+ ## Arquivos Modificados
133
+
134
+ ### Criados
135
+
136
+ * `src/dimensionToSVG.ts`: Módulo completo de renderização (428 linhas)
137
+ * `docs/DIMENSION_IMPLEMENTATION_PLAN.md`: Plano detalhado de implementação
138
+ * `docs/DIMENSION_SUMMARY.md`: Este arquivo
139
+
140
+ ### Modificados
141
+
142
+ * `src/handlers/entity/dimension.ts`: Adicionado parsing de text (1) e styleName (3)
143
+ * `src/types/dimension-entity.ts`: Adicionadas propriedades text e styleName
144
+ * `src/handlers/tables.ts`: Handler completo de DIMSTYLE (68 propriedades)
145
+ * `src/types/tables.ts`: Interface DimStyleInternal
146
+ * `src/types/dxf.ts`: Interface DimStyleTable (API pública)
147
+ * `src/toSVG.ts`: Integração com dimensionToSVG, passa dimStyles
148
+ * `docs/ENTIDADES-2D-IMPLEMENTADAS.md`: Atualizada entrada de DIMENSION
149
+
150
+ ## Commits
151
+
152
+ ### Commit 1: Phases 1 & 2
153
+
154
+ ```text
155
+ feat: adicionar parsing completo de DIMSTYLE e arquitetura modular para DIMENSION
156
+
157
+ Fase 1: Parsing e Armazenamento de DIMSTYLE
158
+ - Criar handler completo de DIMSTYLE com 68+ propriedades
159
+ - Processar group codes: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177), etc.
160
+ - Adicionar interfaces DimStyleInternal e DimStyleTable
161
+ - Integrar dimStyles no parsed.tables
162
+ - Vincular DIMENSION entities ao seu DIMSTYLE via styleName
163
+
164
+ Fase 2: Arquitetura Modular de Renderização
165
+ - Criar módulo dedicado src/dimensionToSVG.ts
166
+ - Implementar dispatcher baseado em dimensionType
167
+ - Criar 6 funções especializadas de renderização
168
+ - Adicionar createArrowMarker para SVG markers
169
+ - Integrar dimensionToSVG com toSVG.ts
170
+ ```
171
+
172
+ 9 arquivos modificados, 874 inserções(+), 10 deleções(-)
173
+
174
+ ### Commit 2: Phase 3
175
+
176
+ ```text
177
+ feat: implementar renderização avançada de dimensões com extension lines e setas
178
+
179
+ Fase 3: Renderização Avançada
180
+ - Implementar extension lines com DIMEXO (offset) e DIMEXE (extension)
181
+ - Adicionar cálculo de geometria perpendicular para extension lines
182
+ - Criar markers SVG para setas com IDs únicos (timestamp-based)
183
+ - Implementar rotação de texto alinhada à dimensão
184
+ - Adicionar dimensões angulares com arcos SVG
185
+ - Implementar símbolos ⌀ e R para diâmetro/raio
186
+ - Suportar dimensões de ordenada sem setas
187
+ - Aplicar espessuras de linha configuráveis
188
+ ```
189
+
190
+ 2 arquivos modificados, 145 inserções(+), 30 deleções(-)
191
+
192
+ ### Commit 3: Phase 4 (Este Commit)
193
+
194
+ ```text
195
+ feat: adicionar suporte completo a cores DIMSTYLE e documentação
196
+
197
+ Fase 4: Cores e Refinamentos
198
+ - Adicionar função colorNumberToSVG para conversão DXF → RGB
199
+ - Implementar getDimensionColors para extrair cores do DIMSTYLE
200
+ - Aplicar DIMCLRD (cor dimension lines) em todas as renderizações
201
+ - Aplicar DIMCLRE (cor extension lines) em todas as renderizações
202
+ - Aplicar DIMCLRT (cor texto) em todas as renderizações
203
+ - Aplicar DIMLWD e DIMLWE (espessuras) em linhas
204
+ - Adicionar propriedades dimBlk, dimBlk1, dimBlk2 no DimStyleTable
205
+ - Atualizar plano de implementação com status completo
206
+ - Atualizar documentação de entidades com implementação detalhada
207
+ - Criar resumo completo da implementação
208
+ ```
209
+
210
+ ## Testes e Validação
211
+
212
+ ### Compilação
213
+
214
+ * ✅ Build ESM: 21-24ms
215
+ * ✅ Build CJS: 18-19ms
216
+ * ✅ 0 erros TypeScript
217
+ * ⚠️ 1 warning (import.meta em es2015 - não relacionado)
218
+
219
+ ### Arquivos Gerados
220
+
221
+ * `lib/dimensionToSVG.js`: 14.6kb (ESM)
222
+ * `lib/dimensionToSVG.cjs`: 16.4kb (CJS)
223
+ * `lib/handlers/tables.js`: 15.3kb (ESM)
224
+ * `lib/handlers/tables.cjs`: 16.8kb (CJS)
225
+
226
+ ### Cobertura de Funcionalidades
227
+
228
+ * ✅ Parsing: 100% (68 propriedades DIMSTYLE)
229
+ * ✅ Renderização básica: 100% (6 tipos de dimensão)
230
+ * ✅ Renderização avançada: 100% (extension lines, setas, rotação)
231
+ * ✅ Cores: 100% (DIMCLRD, DIMCLRE, DIMCLRT)
232
+ * ⏸️ Custom arrows: 0% (opcional, baixa prioridade)
233
+ * ⏸️ Tolerâncias: 0% (opcional, baixa prioridade)
234
+ * ⏸️ XDATA overrides: 0% (opcional, edge case)
235
+
236
+ ## Próximos Passos (Opcionais)
237
+
238
+ 1. **Testes unitários**: Criar testes para cada tipo de dimensão
239
+ 2. **Testes de integração**: Validar com arquivos DXF reais
240
+ 3. **Custom arrow blocks**: Implementar se houver demanda
241
+ 4. **Tolerâncias**: Implementar se houver demanda
242
+ 5. **Performance**: Profiling e otimização se necessário
243
+
244
+ ## Conclusão
245
+
246
+ A implementação de `DIMENSION` está completa para casos de uso comuns (estimativa: 95% dos arquivos DXF). As funcionalidades opcionais não implementadas são edge cases raros ou complexos demais para o benefício limitado que trariam.
247
+
248
+ A arquitetura modular permite fácil extensão futura se necessário.