{
  "version": 3,
  "sources": ["../../../src/handlers/entity/spline.ts"],
  "sourcesContent": ["import type { DXFTuple } from '../../types/dxf'\n\nimport common from './common'\n\nexport const TYPE = 'SPLINE'\n\n\ninterface ControlPoint {\n  x: number\n  y: number\n  z?: number\n}\n\ninterface SplineEntity {\n  type: typeof TYPE\n  controlPoints: ControlPoint[]\n  knots: number[]\n  weights?: number[]\n  knotTolerance?: number\n  controlPointTolerance?: number\n  fitTolerance?: number\n  flag?: number\n  closed?: boolean\n  degree?: number\n  numberOfKnots?: number\n  numberOfControlPoints?: number\n  numberOfFitPoints?: number\n  [key: string]: unknown\n}\n\nexport const process = (tuples: DXFTuple[]): SplineEntity => {\n  let controlPoint: ControlPoint\n  return tuples.reduce(\n    (entity, tuple) => {\n      const type = tuple[0]\n      const value = tuple[1]\n      switch (type) {\n        case 10:\n          controlPoint = {\n            x: value as number,\n            y: 0,\n          }\n          entity.controlPoints.push(controlPoint)\n          break\n        case 20:\n          controlPoint.y = value as number\n          break\n        case 30:\n          controlPoint.z = value as number\n          break\n        case 40:\n          entity.knots.push(value as number)\n          break\n        case 41:\n          // Only create weights if needed\n          entity.weights ??= []\n          entity.weights.push(value as number)\n          break\n        case 42:\n          entity.knotTolerance = value as number\n          break\n        case 43:\n          entity.controlPointTolerance = value as number\n          break\n        case 44:\n          entity.fitTolerance = value as number\n          break\n        case 70: // Spline flag (bit coded):\n          // 1 = Closed spline\n          // 2 = Periodic spline\n          // 4 = Rational spline\n          // 8 = Planar\n          // 16 = Linear (planar bit is also set)\n          entity.flag = value as number\n          entity.closed = ((value as number) & 1) === 1\n          break\n        case 71:\n          entity.degree = value as number\n          break\n        case 72:\n          entity.numberOfKnots = value as number\n          break\n        case 73:\n          entity.numberOfControlPoints = value as number\n          break\n        case 74:\n          entity.numberOfFitPoints = value as number\n          break\n        default:\n          Object.assign(entity, common(type, value))\n          break\n      }\n      return entity\n    },\n    {\n      type: TYPE,\n      controlPoints: [],\n      knots: [],\n    } as SplineEntity,\n  )\n}\n\nexport default { TYPE, process }\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAAmB;AAEZ,MAAM,OAAO;AA0Bb,MAAM,UAAU,CAAC,WAAqC;AAC3D,MAAI;AACJ,SAAO,OAAO;AAAA,IACZ,CAAC,QAAQ,UAAU;AACjB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,MAAM,CAAC;AACrB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,yBAAe;AAAA,YACb,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AACA,iBAAO,cAAc,KAAK,YAAY;AACtC;AAAA,QACF,KAAK;AACH,uBAAa,IAAI;AACjB;AAAA,QACF,KAAK;AACH,uBAAa,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,KAAK,KAAe;AACjC;AAAA,QACF,KAAK;AAEH,iBAAO,YAAP,OAAO,UAAY,CAAC;AACpB,iBAAO,QAAQ,KAAK,KAAe;AACnC;AAAA,QACF,KAAK;AACH,iBAAO,gBAAgB;AACvB;AAAA,QACF,KAAK;AACH,iBAAO,wBAAwB;AAC/B;AAAA,QACF,KAAK;AACH,iBAAO,eAAe;AACtB;AAAA,QACF,KAAK;AAMH,iBAAO,OAAO;AACd,iBAAO,UAAW,QAAmB,OAAO;AAC5C;AAAA,QACF,KAAK;AACH,iBAAO,SAAS;AAChB;AAAA,QACF,KAAK;AACH,iBAAO,gBAAgB;AACvB;AAAA,QACF,KAAK;AACH,iBAAO,wBAAwB;AAC/B;AAAA,QACF,KAAK;AACH,iBAAO,oBAAoB;AAC3B;AAAA,QACF;AACE,iBAAO,OAAO,YAAQ,cAAAA,SAAO,MAAM,KAAK,CAAC;AACzC;AAAA,MACJ;AACA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,eAAe,CAAC;AAAA,MAChB,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AACF;AAEA,IAAO,iBAAQ,EAAE,MAAM,QAAQ;",
  "names": ["common"]
}
