{
  "version": 3,
  "sources": ["../../../src/handlers/entity/dimension.ts"],
  "sourcesContent": ["import type { DXFTuple } from '../../types/dxf'\n\nimport common from './common'\n\nexport const TYPE = 'DIMENSION'\n\n\ninterface Point3D {\n  x: number\n  y: number\n  z: number\n}\n\ninterface DimensionEntity {\n  type: typeof TYPE\n  block?: string\n  start: Point3D\n  angleVertex?: Point3D\n  arcPoint?: Point3D\n  textMidpoint: Point3D\n  measureStart: Point3D\n  measureEnd: Point3D\n  rotation?: number\n  horizonRotation?: number\n  extensionRotation?: number\n  textRotation?: number\n  ordinateType?: boolean\n  uniqueBlockReference?: boolean\n  userDefinedLocation?: boolean\n  dimensionType: number\n  attachementPoint: number\n  extrudeDirection?: Point3D\n  [key: string]: unknown\n}\n\ninterface BitCombinationsResult {\n  dimensionType: number\n  uniqueBlockReference: boolean\n  ordinateType: boolean\n  userDefinedLocation: boolean\n}\n\nexport const process = (tuples: DXFTuple[]): DimensionEntity => {\n  return tuples.reduce(\n    (entity, tuple) => {\n      const type = tuple[0]\n      const value = tuple[1]\n      switch (type) {\n        case 1:\n          entity.text = value as string\n          break\n        case 2:\n          entity.block = value as string\n          break\n        case 3:\n          entity.styleName = value as string\n          break\n        case 10:\n          entity.start.x = value as number\n          break\n        case 20:\n          entity.start.y = value as number\n          break\n        case 30:\n          entity.start.z = value as number\n          break\n        case 11:\n          entity.textMidpoint.x = value as number\n          break\n        case 21:\n          entity.textMidpoint.y = value as number\n          break\n        case 31:\n          entity.textMidpoint.z = value as number\n          break\n        case 13:\n          entity.measureStart.x = value as number\n          break\n        case 23:\n          entity.measureStart.y = value as number\n          break\n        case 33:\n          entity.measureStart.z = value as number\n          break\n        case 14:\n          entity.measureEnd.x = value as number\n          break\n        case 24:\n          entity.measureEnd.y = value as number\n          break\n        case 34:\n          entity.measureEnd.z = value as number\n          break\n        case 15:\n          entity.angleVertex = entity.angleVertex || { x: 0, y: 0, z: 0 }\n          entity.angleVertex.x = value as number\n          break\n        case 25:\n          entity.angleVertex = entity.angleVertex || { x: 0, y: 0, z: 0 }\n          entity.angleVertex.y = value as number\n          break\n        case 35:\n          entity.angleVertex = entity.angleVertex || { x: 0, y: 0, z: 0 }\n          entity.angleVertex.z = value as number\n          break\n        case 16:\n          entity.arcPoint = entity.arcPoint || { x: 0, y: 0, z: 0 }\n          entity.arcPoint.x = value as number\n          break\n        case 26:\n          entity.arcPoint = entity.arcPoint || { x: 0, y: 0, z: 0 }\n          entity.arcPoint.y = value as number\n          break\n        case 36:\n          entity.arcPoint = entity.arcPoint || { x: 0, y: 0, z: 0 }\n          entity.arcPoint.z = value as number\n          break\n        case 50:\n          entity.rotation = value as number\n          break\n        case 51:\n          entity.horizonRotation = value as number\n          break\n        case 52:\n          entity.extensionRotation = value as number\n          break\n        case 53:\n          entity.textRotation = value as number\n          break\n        case 70: {\n          const dimType = parseBitCombinationsFromValue(value as number)\n          if (dimType.ordinateType) {\n            entity.ordinateType = true\n          }\n          if (dimType.uniqueBlockReference) {\n            entity.uniqueBlockReference = true\n          }\n          if (dimType.userDefinedLocation) {\n            entity.userDefinedLocation = true\n          }\n          entity.dimensionType = dimType.dimensionType\n          break\n        }\n        case 71:\n          entity.attachementPoint = value as number\n          break\n        case 210:\n          entity.extrudeDirection = entity.extrudeDirection || {\n            x: 0,\n            y: 0,\n            z: 0,\n          }\n          entity.extrudeDirection.x = value as number\n          break\n        case 220:\n          entity.extrudeDirection = entity.extrudeDirection || {\n            x: 0,\n            y: 0,\n            z: 0,\n          }\n          entity.extrudeDirection.y = value as number\n          break\n        case 230:\n          entity.extrudeDirection = entity.extrudeDirection || {\n            x: 0,\n            y: 0,\n            z: 0,\n          }\n          entity.extrudeDirection.z = 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      start: { x: 0, y: 0, z: 0 },\n      measureStart: { x: 0, y: 0, z: 0 },\n      measureEnd: { x: 0, y: 0, z: 0 },\n      textMidpoint: { x: 0, y: 0, z: 0 },\n      attachementPoint: 1,\n      dimensionType: 0,\n    } as DimensionEntity,\n  )\n}\n\n/**\n * From DXF Reference for DIMENSION\n * Values 0-6 are integer values that represent the dimension type. Values 32, 64, and 128\n * are bit values, which are added to the integer values (value 32 is always set in R13 and\n * later releases)\n * 0 = Rotated, horizontal, or vertical; 1 = Aligned\n * 2 = Angular; 3 = Diameter; 4 = Radius\n * 5 = Angular 3 point; 6 = Ordinate\n * 32 = Indicates that the block reference (group code 2) is referenced by this dimension only\n * 64 = Ordinate type. This is a bit value (bit 7) used only with integer value 6. If set, ordinate is X-type; if not set, ordinate is Y-type\n * 128 = This is a bit value (bit 8) added to the other group 70 values if the dimension text has been positioned at a user-defined location rather than at the default location\n */\nfunction parseBitCombinationsFromValue(value: number): BitCombinationsResult {\n  let uniqueBlockReference = false\n  let ordinateType = false\n  let userDefinedLocation = false\n\n  // Note: keep this logic explicit; DXF stores flags as bit combinations.\n  if (value > 6) {\n    const alt1 = value - 32\n    const alt2 = value - 64\n    const alt3 = value - 32 - 64\n    const alt4 = value - 32 - 128\n    const alt5 = value - 32 - 64 - 128\n\n    if (alt1 >= 0 && alt1 <= 6) {\n      uniqueBlockReference = true\n      value = alt1\n    } else if (alt2 >= 0 && alt2 <= 6) {\n      ordinateType = true\n      value = alt2\n    } else if (alt3 >= 0 && alt3 <= 6) {\n      uniqueBlockReference = true\n      ordinateType = true\n      value = alt3\n    } else if (alt4 >= 0 && alt4 <= 6) {\n      uniqueBlockReference = true\n      userDefinedLocation = true\n      value = alt4\n    } else if (alt5 >= 0 && alt5 <= 6) {\n      uniqueBlockReference = true\n      ordinateType = true\n      userDefinedLocation = true\n      value = alt5\n    }\n  }\n  return {\n    dimensionType: value,\n    uniqueBlockReference,\n    ordinateType,\n    userDefinedLocation,\n  }\n}\n\nexport default { TYPE, process }\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAAmB;AAEZ,MAAM,OAAO;AAsCb,MAAM,UAAU,CAAC,WAAwC;AAC9D,SAAO,OAAO;AAAA,IACZ,CAAC,QAAQ,UAAU;AACjB,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,QAAQ,MAAM,CAAC;AACrB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,OAAO;AACd;AAAA,QACF,KAAK;AACH,iBAAO,QAAQ;AACf;AAAA,QACF,KAAK;AACH,iBAAO,YAAY;AACnB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,MAAM,IAAI;AACjB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,aAAa,IAAI;AACxB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,IAAI;AACtB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,IAAI;AACtB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,IAAI;AACtB;AAAA,QACF,KAAK;AACH,iBAAO,cAAc,OAAO,eAAe,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAC9D,iBAAO,YAAY,IAAI;AACvB;AAAA,QACF,KAAK;AACH,iBAAO,cAAc,OAAO,eAAe,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAC9D,iBAAO,YAAY,IAAI;AACvB;AAAA,QACF,KAAK;AACH,iBAAO,cAAc,OAAO,eAAe,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAC9D,iBAAO,YAAY,IAAI;AACvB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,OAAO,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACxD,iBAAO,SAAS,IAAI;AACpB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,OAAO,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACxD,iBAAO,SAAS,IAAI;AACpB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW,OAAO,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AACxD,iBAAO,SAAS,IAAI;AACpB;AAAA,QACF,KAAK;AACH,iBAAO,WAAW;AAClB;AAAA,QACF,KAAK;AACH,iBAAO,kBAAkB;AACzB;AAAA,QACF,KAAK;AACH,iBAAO,oBAAoB;AAC3B;AAAA,QACF,KAAK;AACH,iBAAO,eAAe;AACtB;AAAA,QACF,KAAK,IAAI;AACP,gBAAM,UAAU,8BAA8B,KAAe;AAC7D,cAAI,QAAQ,cAAc;AACxB,mBAAO,eAAe;AAAA,UACxB;AACA,cAAI,QAAQ,sBAAsB;AAChC,mBAAO,uBAAuB;AAAA,UAChC;AACA,cAAI,QAAQ,qBAAqB;AAC/B,mBAAO,sBAAsB;AAAA,UAC/B;AACA,iBAAO,gBAAgB,QAAQ;AAC/B;AAAA,QACF;AAAA,QACA,KAAK;AACH,iBAAO,mBAAmB;AAC1B;AAAA,QACF,KAAK;AACH,iBAAO,mBAAmB,OAAO,oBAAoB;AAAA,YACnD,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AACA,iBAAO,iBAAiB,IAAI;AAC5B;AAAA,QACF,KAAK;AACH,iBAAO,mBAAmB,OAAO,oBAAoB;AAAA,YACnD,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AACA,iBAAO,iBAAiB,IAAI;AAC5B;AAAA,QACF,KAAK;AACH,iBAAO,mBAAmB,OAAO,oBAAoB;AAAA,YACnD,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AACA,iBAAO,iBAAiB,IAAI;AAC5B;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,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC1B,cAAc,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACjC,YAAY,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC/B,cAAc,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACjC,kBAAkB;AAAA,MAClB,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAcA,SAAS,8BAA8B,OAAsC;AAC3E,MAAI,uBAAuB;AAC3B,MAAI,eAAe;AACnB,MAAI,sBAAsB;AAG1B,MAAI,QAAQ,GAAG;AACb,UAAM,OAAO,QAAQ;AACrB,UAAM,OAAO,QAAQ;AACrB,UAAM,OAAO,QAAQ,KAAK;AAC1B,UAAM,OAAO,QAAQ,KAAK;AAC1B,UAAM,OAAO,QAAQ,KAAK,KAAK;AAE/B,QAAI,QAAQ,KAAK,QAAQ,GAAG;AAC1B,6BAAuB;AACvB,cAAQ;AAAA,IACV,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,qBAAe;AACf,cAAQ;AAAA,IACV,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,6BAAuB;AACvB,qBAAe;AACf,cAAQ;AAAA,IACV,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,6BAAuB;AACvB,4BAAsB;AACtB,cAAQ;AAAA,IACV,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,6BAAuB;AACvB,qBAAe;AACf,4BAAsB;AACtB,cAAQ;AAAA,IACV;AAAA,EACF;AACA,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ,EAAE,MAAM,QAAQ;",
  "names": ["common"]
}
