@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,414 @@
1
+ // DXF Tables parsing types
2
+
3
+ import type { Point2D, Point3D } from './common'
4
+
5
+ /**
6
+ * Partial point for parsing (all coordinates optional)
7
+ */
8
+ export type PartialPoint2D = Partial<Point2D>
9
+
10
+ /**
11
+ * Partial 3D point for parsing (all coordinates optional)
12
+ */
13
+ export type PartialPoint3D = Partial<Point3D>
14
+
15
+ /**
16
+ * DXF Header section result
17
+ */
18
+ export interface ParsedHeader {
19
+ /** Minimum drawing extents */
20
+ extMin?: PartialPoint3D
21
+ /** Maximum drawing extents */
22
+ extMax?: PartialPoint3D
23
+ /** Drawing units for measurement (0=English, 1=Metric) */
24
+ measurement?: string | number
25
+ /** Default drawing units for AutoCAD DesignCenter blocks */
26
+ insUnits?: string | number
27
+ /** Dimension arrow size */
28
+ dimArrowSize?: string | number | Record<string, unknown>
29
+ }
30
+
31
+ /**
32
+ * Block table entry
33
+ * Internal representation during DXF parsing
34
+ */
35
+ export interface BlockInternal {
36
+ /** Block name */
37
+ name?: string | number
38
+ /** Base point X coordinate */
39
+ x?: string | number
40
+ /** Base point Y coordinate */
41
+ y?: string | number
42
+ /** Base point Z coordinate */
43
+ z?: string | number
44
+ /** External reference path */
45
+ xref?: string | number
46
+ /** Paper space flag */
47
+ paperSpace?: string | number
48
+ /** Layout name reference */
49
+ layout?: string | number
50
+ /** Entities within this block */
51
+ entities?: any[]
52
+ }
53
+
54
+ /**
55
+ * Line type element definition
56
+ * Represents a single element in a complex line type pattern
57
+ */
58
+ export interface LTypeElement {
59
+ /** Length of the element */
60
+ length?: string | number
61
+ /** Scale factors for the element */
62
+ scales?: Array<string | number>
63
+ /** Offset positions for the element */
64
+ offset?: Array<{ x: string | number; y: string | number }>
65
+ /** Shape definition code */
66
+ shape?: string | number
67
+ /** Shape number reference */
68
+ shapeNumber?: string | number
69
+ /** Style handle reference */
70
+ styleHandle?: string | number
71
+ /** Rotation angle */
72
+ rotation?: string | number
73
+ /** Text content for text elements */
74
+ text?: string | number
75
+ }
76
+
77
+ /**
78
+ * Line Type (LTYPE) table entry
79
+ * Internal representation during DXF parsing
80
+ */
81
+ export interface LTypeInternal {
82
+ type: string
83
+ /** Pattern elements that define the line type */
84
+ pattern: LTypeElement[]
85
+ /** Line type name */
86
+ name?: string | number
87
+ /** Line type description */
88
+ description?: string | number
89
+ /** Standard flag values (bit-coded) */
90
+ flag?: string | number
91
+ /** Alignment code (ASCII code for 'A' = 65) */
92
+ alignment?: string | number
93
+ /** Number of elements in the pattern */
94
+ elementCount?: number
95
+ /** Total pattern length */
96
+ patternLength?: string | number
97
+ }
98
+
99
+ /**
100
+ * Layer table entry
101
+ * Internal representation during DXF parsing
102
+ */
103
+ export interface LayerInternal {
104
+ type: string
105
+ /** Layer name */
106
+ name?: string | number
107
+ /** Line type name for this layer */
108
+ lineTypeName?: string | number
109
+ /** ACI color number */
110
+ colorNumber?: string | number
111
+ /** Standard flags (bit-coded) */
112
+ flags?: string | number
113
+ /** Plot flag */
114
+ plot?: boolean
115
+ /** Line weight enumeration */
116
+ lineWeightEnum?: string | number
117
+ }
118
+
119
+ /**
120
+ * Text Style (STYLE) table entry
121
+ * Internal representation during DXF parsing
122
+ */
123
+ export interface StyleInternal {
124
+ type: string
125
+ /** Style name */
126
+ name?: string | number
127
+ /** Line type name */
128
+ lineTypeName?: string | number
129
+ /** Fixed text height (0 if variable) */
130
+ fixedTextHeight?: string | number
131
+ /** Width factor */
132
+ widthFactor?: string | number
133
+ /** Oblique angle */
134
+ obliqueAngle?: string | number
135
+ /** Standard flags (bit-coded) */
136
+ flags?: string | number
137
+ /** Last height used */
138
+ lastHeightUsed?: string | number
139
+ /** Primary font file name */
140
+ primaryFontFileName?: string | number
141
+ /** Big font file name */
142
+ bigFontFileName?: string | number
143
+ }
144
+
145
+ /**
146
+ * Viewport (VPORT) table entry
147
+ * Internal representation during DXF parsing
148
+ */
149
+ export interface VPortInternal {
150
+ type: string
151
+ /** Viewport name */
152
+ name?: string | number
153
+ /** Handle reference */
154
+ handle?: string | number
155
+ /** Standard flags (bit-coded) */
156
+ flags?: string | number
157
+ /** Lower-left corner coordinates */
158
+ lowerLeft: { x?: number; y?: number }
159
+ /** Upper-right corner coordinates */
160
+ upperRight: { x?: number; y?: number }
161
+ /** Center point coordinates */
162
+ center: { x?: number; y?: number }
163
+ /** Snap settings */
164
+ snap?: Record<string, unknown>
165
+ /** Snap spacing */
166
+ snapSpacing: { x?: number; y?: number }
167
+ /** Grid spacing */
168
+ gridSpacing: { x?: number; y?: number }
169
+ /** View direction from target */
170
+ direction: { x?: number; y?: number; z?: number }
171
+ /** View target point */
172
+ target: { x?: number; y?: number; z?: number }
173
+ /** View height */
174
+ height?: number
175
+ /** Snap rotation angle */
176
+ snapAngle?: number
177
+ /** View twist angle */
178
+ angle?: number
179
+ /** UCS origin X coordinate */
180
+ x?: number
181
+ /** UCS origin Y coordinate */
182
+ y?: number
183
+ /** UCS origin Z coordinate */
184
+ z?: number
185
+ /** UCS X-axis X component */
186
+ xAxisX?: number
187
+ /** UCS X-axis Y component */
188
+ xAxisY?: number
189
+ /** UCS X-axis Z component */
190
+ xAxisZ?: number
191
+ /** View elevation */
192
+ elevation?: number
193
+ }
194
+
195
+ /**
196
+ * Layout object entry
197
+ * Internal representation during DXF parsing
198
+ */
199
+ export interface LayoutInternal {
200
+ /** Layout name */
201
+ name?: string | number
202
+ /** Handle reference */
203
+ handle?: string | number
204
+ /** Minimum limits X coordinate */
205
+ minLimitX?: number
206
+ /** Minimum limits Y coordinate */
207
+ minLimitY?: number
208
+ /** Maximum limits X coordinate */
209
+ maxLimitX?: number
210
+ /** Maximum limits Y coordinate */
211
+ maxLimitY?: number
212
+ /** Base point X coordinate */
213
+ x?: number
214
+ /** Base point Y coordinate */
215
+ y?: number
216
+ /** Base point Z coordinate */
217
+ z?: number
218
+ /** Minimum extents X coordinate */
219
+ minX?: number
220
+ /** Minimum extents Y coordinate */
221
+ minY?: number
222
+ /** Minimum extents Z coordinate */
223
+ minZ?: number
224
+ /** Maximum extents X coordinate */
225
+ maxX?: number
226
+ /** Maximum extents Y coordinate */
227
+ maxY?: number
228
+ /** Maximum extents Z coordinate */
229
+ maxZ?: number
230
+ /** Layout flag (PSLTSCALE or LIMCHECK) */
231
+ flag?: 'PSLTSCALE' | 'LIMCHECK'
232
+ /** Tab order */
233
+ tabOrder?: string | number
234
+ /** Elevation */
235
+ elevation?: number
236
+ /** UCS origin X coordinate */
237
+ ucsX?: number
238
+ /** UCS origin Y coordinate */
239
+ ucsY?: number
240
+ /** UCS origin Z coordinate */
241
+ ucsZ?: number
242
+ /** UCS X-axis X component */
243
+ ucsXaxisX?: number
244
+ /** UCS X-axis Y component */
245
+ ucsXaxisY?: number
246
+ /** UCS X-axis Z component */
247
+ ucsXaxisZ?: number
248
+ /** UCS Y-axis X component */
249
+ ucsYaxisX?: number
250
+ /** UCS Y-axis Y component */
251
+ ucsYaxisY?: number
252
+ /** UCS Y-axis Z component */
253
+ ucsYaxisZ?: number
254
+ /** UCS orthographic type */
255
+ ucsType?: 'NOT ORTHOGRAPHIC' | 'TOP' | 'BOTTOM' | 'FRONT' | 'BACK' | 'LEFT' | 'RIGHT'
256
+ /** Associated table record handle */
257
+ tableRecord?: string | number
258
+ /** Last active viewport handle */
259
+ lastActiveViewport?: string | number
260
+ /** Shade plot mode */
261
+ shadePlot?: string | number
262
+ }
263
+
264
+ /**
265
+ * Dimension Style (DIMSTYLE) table entry
266
+ * Internal representation during DXF parsing
267
+ */
268
+ export interface DimStyleInternal {
269
+ type: string
270
+ /** Dimension style name */
271
+ name?: string | number
272
+ /** Standard flags (bit-coded) */
273
+ flags?: string | number
274
+ /** DIMPOST - General dimensioning suffix */
275
+ dimPost?: string | number
276
+ /** DIMAPOST - Alternate dimensioning suffix */
277
+ dimAPost?: string | number
278
+ /** DIMSCALE - Overall dimensioning scale factor */
279
+ dimScale?: number
280
+ /** DIMASZ - Dimensioning arrow size */
281
+ dimAsz?: number
282
+ /** DIMEXO - Extension line offset */
283
+ dimExo?: number
284
+ /** DIMDLI - Dimension line increment */
285
+ dimDli?: number
286
+ /** DIMEXE - Extension line extension */
287
+ dimExe?: number
288
+ /** DIMRND - Rounding value for dimension distances */
289
+ dimRnd?: number
290
+ /** DIMDLE - Dimension line extension */
291
+ dimDle?: number
292
+ /** DIMTP - Plus tolerance */
293
+ dimTp?: number
294
+ /** DIMTM - Minus tolerance */
295
+ dimTm?: number
296
+ /** DIMTXT - Dimensioning text height */
297
+ dimTxt?: number
298
+ /** DIMCEN - Size of center mark/lines */
299
+ dimCen?: number
300
+ /** DIMTSZ - Dimensioning tick size */
301
+ dimTsz?: number
302
+ /** DIMALTF - Alternate unit scale factor */
303
+ dimAltf?: number
304
+ /** DIMLFAC - Linear measurements scale factor */
305
+ dimLfac?: number
306
+ /** DIMTVP - Text vertical position */
307
+ dimTvp?: number
308
+ /** DIMTFAC - Dimension tolerance display scale factor */
309
+ dimTfac?: number
310
+ /** DIMGAP - Dimension line gap */
311
+ dimGap?: number
312
+ /** DIMALTRND - Determines rounding of alternate units */
313
+ dimAltRnd?: number
314
+ /** DIMTOL - Dimension tolerances generated if nonzero */
315
+ dimTol?: number
316
+ /** DIMLIM - Dimension limits generated if nonzero */
317
+ dimLim?: number
318
+ /** DIMTIH - Text inside horizontal if nonzero */
319
+ dimTih?: number
320
+ /** DIMTOH - Text outside horizontal if nonzero */
321
+ dimToh?: number
322
+ /** DIMSE1 - First extension line suppressed if nonzero */
323
+ dimSe1?: number
324
+ /** DIMSE2 - Second extension line suppressed if nonzero */
325
+ dimSe2?: number
326
+ /** DIMTAD - Text above dimension line if nonzero */
327
+ dimTad?: number
328
+ /** DIMZIN - Controls suppression of zeros for primary unit values */
329
+ dimZin?: number
330
+ /** DIMAZIN - Controls suppression of zeros for angular dimensions */
331
+ dimAzin?: number
332
+ /** DIMALT - Alternate unit dimensioning performed if nonzero */
333
+ dimAlt?: number
334
+ /** DIMALTD - Alternate unit decimal places */
335
+ dimAltd?: number
336
+ /** DIMTOFL - Force text inside extensions if nonzero */
337
+ dimTofl?: number
338
+ /** DIMSAH - Use separate arrow blocks if nonzero */
339
+ dimSah?: number
340
+ /** DIMTIX - Force text inside extensions if nonzero */
341
+ dimTix?: number
342
+ /** DIMSOXD - Suppress outside-extensions dimension lines if nonzero */
343
+ dimSoxd?: number
344
+ /** DIMCLRD - Dimension line color */
345
+ dimClrd?: number
346
+ /** DIMCLRE - Dimension extension line color */
347
+ dimClre?: number
348
+ /** DIMCLRT - Dimension text color */
349
+ dimClrt?: number
350
+ /** DIMADEC - Number of precision places for angular dimensions */
351
+ dimAdec?: number
352
+ /** DIMUNIT - Units format (obsolete, now use DIMLUNIT AND DIMFRAC) */
353
+ dimUnit?: number
354
+ /** DIMDEC - Number of decimal places for tolerance values */
355
+ dimDec?: number
356
+ /** DIMTDEC - Number of decimal places for tolerance values */
357
+ dimTdec?: number
358
+ /** DIMALTU - Units format for alternate units */
359
+ dimAltu?: number
360
+ /** DIMALTTD - Number of decimal places for alternate tolerance values */
361
+ dimAlttd?: number
362
+ /** DIMAUNIT - Angle format for angular dimensions */
363
+ dimAunit?: number
364
+ /** DIMFRAC - Fraction format */
365
+ dimFrac?: number
366
+ /** DIMLUNIT - Linear unit format */
367
+ dimLunit?: number
368
+ /** DIMDSEP - Decimal separator character */
369
+ dimDsep?: number
370
+ /** DIMTMOVE - Dimension text movement rules */
371
+ dimTmove?: number
372
+ /** DIMJUST - Horizontal dimension text position */
373
+ dimJust?: number
374
+ /** DIMSD1 - Suppression of first extension line */
375
+ dimSd1?: number
376
+ /** DIMSD2 - Suppression of second extension line */
377
+ dimSd2?: number
378
+ /** DIMTOLJ - Vertical justification for tolerance values */
379
+ dimTolj?: number
380
+ /** DIMTZIN - Controls suppression of zeros for tolerance values */
381
+ dimTzin?: number
382
+ /** DIMALTZ - Controls suppression of zeros for alternate unit values */
383
+ dimAltz?: number
384
+ /** DIMALTTZ - Controls suppression of zeros for alternate tolerance values */
385
+ dimAlttz?: number
386
+ /** DIMFIT - Fit options (obsolete, now use DIMATFIT and DIMTMOVE) */
387
+ dimFit?: number
388
+ /** DIMUPT - Cursor functionality for user-positioned text */
389
+ dimUpt?: number
390
+ /** DIMATFIT - Controls dimension text and arrow placement */
391
+ dimAtfit?: number
392
+ /** DIMTXSTY - Dimension text style (handle reference) */
393
+ dimTxsty?: string | number
394
+ /** DIMLDRBLK - Leader arrow block (handle reference) */
395
+ dimLdrblk?: string | number
396
+ /** DIMBLK - Arrow block (handle reference) */
397
+ dimBlk?: string | number
398
+ /** DIMBLK1 - First arrow block (handle reference) */
399
+ dimBlk1?: string | number
400
+ /** DIMBLK2 - Second arrow block (handle reference) */
401
+ dimBlk2?: string | number
402
+ /** DIMLWD - Dimension line lineweight */
403
+ dimLwd?: number
404
+ /** DIMLWE - Extension line lineweight */
405
+ dimLwe?: number
406
+ }
407
+
408
+ /**
409
+ * DXF Objects section result
410
+ */
411
+ export interface ParsedObjects {
412
+ /** Layout objects */
413
+ layouts: LayoutInternal[]
414
+ }
@@ -0,0 +1,23 @@
1
+ // TEXT entity type
2
+
3
+ import type { BaseEntity } from './base-entity'
4
+
5
+ export interface TextEntity extends BaseEntity {
6
+ type: 'TEXT'
7
+ string: string
8
+ x?: number
9
+ y?: number
10
+ z?: number
11
+ x2?: number
12
+ y2?: number
13
+ z2?: number
14
+ thickness?: number
15
+ textHeight?: number
16
+ relScaleX?: number
17
+ rotation?: number
18
+ obliqueAngle?: number
19
+ styleName?: string
20
+ mirror?: number
21
+ hAlign?: number
22
+ vAlign?: number
23
+ }
@@ -0,0 +1,27 @@
1
+ // Utility-specific types
2
+
3
+ import type { Box2 } from 'vecks'
4
+ import type { Point2D } from './common'
5
+
6
+ /** Point for utility functions - extends Point2D with optional z */
7
+ export interface UtilPoint extends Point2D {
8
+ z?: number
9
+ }
10
+
11
+ /** Result of knot insertion operation */
12
+ export interface InsertKnotResult {
13
+ knots: number[]
14
+ controlPoints: UtilPoint[]
15
+ }
16
+
17
+ /** Result of bezier conversion */
18
+ export interface BezierResult {
19
+ controlPoints: UtilPoint[]
20
+ knots: number[]
21
+ }
22
+
23
+ /** Transform result with bounding box */
24
+ export interface TransformResult {
25
+ element: string
26
+ bbox: Box2
27
+ }
@@ -0,0 +1,29 @@
1
+ declare module 'vecks' {
2
+ export class V2 {
3
+ x: number
4
+ y: number
5
+
6
+ constructor(x: number, y: number)
7
+
8
+ add(other: V2): V2
9
+ sub(other: V2): V2
10
+ multiply(scalar: number): V2
11
+ norm(): V2
12
+ length(): number
13
+ }
14
+
15
+ interface Point {
16
+ x: number
17
+ y: number
18
+ }
19
+
20
+ export class Box2 {
21
+ min: Point
22
+ max: Point
23
+ valid: boolean
24
+
25
+ constructor()
26
+
27
+ expandByPoint(point: Point): Box2
28
+ }
29
+ }
@@ -0,0 +1,81 @@
1
+ // Viewport entity type
2
+
3
+ import type { BaseEntity } from './base-entity'
4
+
5
+ /**
6
+ * Viewport entity
7
+ * Represents a viewport in model space or paper space
8
+ */
9
+ export interface ViewportEntity extends BaseEntity {
10
+ type: 'VIEWPORT'
11
+ /** Layout reference */
12
+ layout?: number
13
+ /** Viewport width */
14
+ width?: number
15
+ /** Viewport height */
16
+ height?: number
17
+ /** Snap rotation angle */
18
+ snapAngle?: number
19
+ /** View twist angle */
20
+ angle?: number
21
+ /** Viewport status field */
22
+ status?: string | number
23
+ /** Viewport ID */
24
+ id?: string | number
25
+ /** Viewport flags */
26
+ flags?: string | number
27
+ /** UCS origin X coordinate */
28
+ x?: number
29
+ /** UCS origin Y coordinate */
30
+ y?: number
31
+ /** UCS origin Z coordinate */
32
+ z?: number
33
+ /** UCS X-axis X component */
34
+ xAxisX?: number
35
+ /** UCS X-axis Y component */
36
+ xAxisY?: number
37
+ /** UCS X-axis Z component */
38
+ xAxisZ?: number
39
+ /** View elevation */
40
+ elevation?: number
41
+ /** Render mode */
42
+ render?: string | number
43
+ /** Center point in WCS */
44
+ center?: {
45
+ x?: number
46
+ y?: number
47
+ z?: number
48
+ }
49
+ /** Center point in DCS */
50
+ centerDCS?: {
51
+ x?: number
52
+ y?: number
53
+ }
54
+ /** Snap base point */
55
+ snap?: {
56
+ x?: number
57
+ y?: number
58
+ }
59
+ /** Snap spacing */
60
+ snapSpacing?: {
61
+ x?: number
62
+ y?: number
63
+ }
64
+ /** Grid spacing */
65
+ gridSpacing?: {
66
+ x?: number
67
+ y?: number
68
+ }
69
+ /** View direction from target */
70
+ direction?: {
71
+ x?: number
72
+ y?: number
73
+ z?: number
74
+ }
75
+ /** View target point */
76
+ target?: {
77
+ x?: number
78
+ y?: number
79
+ z?: number
80
+ }
81
+ }
package/src/types.ts ADDED
@@ -0,0 +1,5 @@
1
+ // Legacy types.ts - re-exports from types/ directory for backward compatibility
2
+ // All types are now organized in separate files under src/types/
3
+
4
+ export * from './types/index';
5
+
@@ -0,0 +1,97 @@
1
+ import round10 from './round10'
2
+
3
+ /**
4
+ * Copied and ported to code standard as the b-spline library is not maintained any longer.
5
+ * Source:
6
+ * https://github.com/thibauts/b-spline
7
+ * Copyright (c) 2015 Thibaut Séguy <thibaut.seguy@gmail.com>
8
+ */
9
+ export default function bSpline(
10
+ t: number,
11
+ degree: number,
12
+ points: number[][],
13
+ knots?: number[],
14
+ weights?: number[]
15
+ ): number[] {
16
+ const n = points.length // points count
17
+ const d = points[0].length // point dimensionality
18
+
19
+ if (t < 0 || t > 1) {
20
+ throw new Error('t out of bounds [0,1]: ' + t)
21
+ }
22
+ if (degree < 1) throw new Error('degree must be at least 1 (linear)')
23
+ if (degree > n - 1)
24
+ throw new Error('degree must be less than or equal to point count - 1')
25
+
26
+ let actualWeights = weights
27
+ if (!actualWeights) {
28
+ // build weight vector of length [n]
29
+ actualWeights = []
30
+ for (let i = 0; i < n; i++) {
31
+ actualWeights[i] = 1
32
+ }
33
+ }
34
+
35
+ let actualKnots = knots
36
+ if (actualKnots === null || actualKnots === undefined) {
37
+ // build knot vector of length [n + degree + 1]
38
+ actualKnots = []
39
+ for (let i = 0; i < n + degree + 1; i++) {
40
+ actualKnots[i] = i
41
+ }
42
+ } else if (actualKnots.length !== n + degree + 1) {
43
+ throw new Error('bad knot vector length')
44
+ }
45
+
46
+ const domain = [degree, actualKnots.length - 1 - degree]
47
+
48
+ // remap t to the domain where the spline is defined
49
+ const low = actualKnots[domain[0]]
50
+ const high = actualKnots[domain[1]]
51
+ let tMapped = t * (high - low) + low
52
+
53
+ // Clamp to the upper & lower bounds instead of
54
+ // throwing an error like in the original lib
55
+ // https://github.com/bjnortier/dxf/issues/28
56
+ tMapped = Math.max(tMapped, low)
57
+ tMapped = Math.min(tMapped, high)
58
+
59
+ // find s (the spline segment) for the [t] value provided
60
+ let s
61
+ for (s = domain[0]; s < domain[1]; s++) {
62
+ if (tMapped >= actualKnots[s] && tMapped <= actualKnots[s + 1]) {
63
+ break
64
+ }
65
+ }
66
+
67
+ // convert points to homogeneous coordinates
68
+ const v: number[][] = []
69
+ for (let i = 0; i < n; i++) {
70
+ v[i] = []
71
+ for (let j = 0; j < d; j++) {
72
+ v[i][j] = points[i][j] * actualWeights[i]
73
+ }
74
+ v[i][d] = actualWeights[i]
75
+ }
76
+
77
+ // l (level) goes from 1 to the curve degree + 1
78
+ let alpha: number
79
+ for (let l = 1; l <= degree + 1; l++) {
80
+ // build level l of the pyramid
81
+ for (let i = s; i > s - degree - 1 + l; i--) {
82
+ alpha = (tMapped - actualKnots[i]) / (actualKnots[i + degree + 1 - l] - actualKnots[i])
83
+
84
+ // interpolate each component
85
+ for (let j = 0; j < d + 1; j++) {
86
+ v[i][j] = (1 - alpha) * v[i - 1][j] + alpha * v[i][j]
87
+ }
88
+ }
89
+ }
90
+
91
+ // convert back to cartesian and return
92
+ const result: number[] = []
93
+ for (let i = 0; i < d; i++) {
94
+ result[i] = round10(v[s][i] / v[s][d], -9)
95
+ }
96
+ return result
97
+ }