{"version":3,"sources":["../src/IGESLoader.ts"],"names":["Loader","FileLoader","data","Group","Vector2","EllipseCurve","BufferGeometry","LineBasicMaterial","Line","Vector3","Float32BufferAttribute","PointsMaterial","Points"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n  BufferGeometry,\n  EllipseCurve,\n  FileLoader,\n  Float32BufferAttribute,\n  Group,\n  Line,\n  LineBasicMaterial,\n  Loader,\n  LoadingManager,\n  Points,\n  PointsMaterial,\n  Vector2,\n  Vector3,\n} from \"three\";\n\n/**\n * Entity attribute interface for IGES entities\n */\ninterface EntityAttribute {\n  entityType: number;\n  entityIndex?: number;\n  igesVersion?: number;\n  lineType?: number;\n  level?: number;\n  view?: number;\n  transMatrix?: number;\n  labelDisp?: number;\n  status?: string;\n  sequenceNumber?: number;\n  lineWidth?: number;\n  color?: number;\n  paramLine?: number;\n  formNumber?: number;\n  entityName?: string;\n  entitySub?: number;\n}\n\n/**\n * Entity parameter type - can be string or number\n */\ntype EntityParam = string | number;\n\n/**\n * IGES Entity class\n */\nclass Entity {\n  type: string;\n  attr: EntityAttribute;\n  params: EntityParam[];\n\n  constructor(attribute: EntityAttribute = { entityType: 0 }, params: EntityParam[] = []) {\n    this.type = attribute.entityType.toString();\n    this.attr = attribute;\n    this.params = params;\n  }\n}\n\n/**\n * IGES file structure interface\n */\ninterface IGESData {\n  fieldDelimiter: string;\n  termDelimiter: string;\n  entities: Entity[];\n  comment?: string;\n  exportID?: string;\n  fileName?: string;\n  systemID?: string;\n  translateVer?: string;\n  integerBits?: string;\n  singleExpBits?: string;\n  singleMantissaBits?: string;\n  doubleExpBits?: string;\n  doubleMantissaBits?: string;\n  receiveID?: string;\n  scale?: string;\n  unitFlag?: string;\n  unit?: string;\n  maxStep?: string;\n  maxWidth?: string;\n  createDate?: string;\n  resolution?: string;\n  maxValue?: string;\n  createUser?: string;\n  createOrg?: string;\n  igesVer?: string;\n  formatCode?: string;\n  lastModifiedDate?: string;\n  lineNum_S?: number;\n  lineNum_G?: number;\n  lineNum_D?: number;\n  lineNum_P?: number;\n}\n\n/**\n * Description: A THREE loader for IGES files, as created by Solidworks and other CAD programs.\n *\n * @see https://wiki.eclipse.org/IGES_file_Specification\n * @see https://web.archive.org/web/20120821190122/http://www.uspro.org/documents/IGES5-3_forDownload.pdf\n * @see https://filemonger.com/specs/igs/devdept.com/version6.pdf - IGES Version 6.0\n * @see https://en.wikipedia.org/wiki/IGES - More info on IGES\n *\n * @example\n * ```typescript\n * const loader = new IGESLoader();\n * loader.load('/path/to/file.igs', (geometry) => {\n *   scene.add(geometry);\n * });\n * ```\n */\nclass IGESLoader extends Loader<Group> {\n  constructor(manager?: LoadingManager) {\n    super(manager);\n  }\n\n  /**\n   * Load an IGES file from a URL\n   * @param url - The URL or path to the IGES file\n   * @param onLoad - Callback when loading is complete\n   * @param onProgress - Callback for loading progress\n   * @param onError - Callback when an error occurs\n   */\n  override load(\n    url: string,\n    onLoad: (geometry: Group) => void,\n    onProgress?: (event: ProgressEvent) => void,\n    onError?: (event: unknown) => void\n  ): void {\n    const loader = new FileLoader(this.manager);\n    loader.setPath(this.path);\n    loader.setResponseType(\"text\");\n\n    loader.load(\n      url,\n      (text: unknown) => {\n        try {\n          onLoad(this.parse(text as string));\n        } catch (e) {\n          if (onError) {\n            onError(e instanceof Error ? e : new Error(String(e)));\n          } else {\n            console.error(e);\n          }\n          this.manager.itemError(url);\n        }\n      },\n      onProgress,\n      onError\n    );\n  }\n\n  /**\n   * Parse IGES file content\n   * @param data - The IGES file content as string\n   * @returns A Three.js Group containing the parsed geometry\n   */\n  parse(data: string): Group {\n    class IGES implements IGESData {\n      fieldDelimiter = \",\"; // as default\n      termDelimiter = \";\"; // as default\n      entities: Entity[] = [];\n      comment?: string;\n      exportID?: string;\n      fileName?: string;\n      systemID?: string;\n      translateVer?: string;\n      integerBits?: string;\n      singleExpBits?: string;\n      singleMantissaBits?: string;\n      doubleExpBits?: string;\n      doubleMantissaBits?: string;\n      receiveID?: string;\n      scale?: string;\n      unitFlag?: string;\n      unit?: string;\n      maxStep?: string;\n      maxWidth?: string;\n      createDate?: string;\n      resolution?: string;\n      maxValue?: string;\n      createUser?: string;\n      createOrg?: string;\n      igesVer?: string;\n      formatCode?: string;\n      lastModifiedDate?: string;\n      lineNum_S?: number;\n      lineNum_G?: number;\n      lineNum_D?: number;\n      lineNum_P?: number;\n\n      parseStart(data: string): void {\n        this.comment = data;\n      }\n\n      parseGlobal(data: string): void {\n        if (data[0] !== \",\") {\n          this.fieldDelimiter = parseIgesString(data) || \",\";\n        }\n        const fields = data.split(this.fieldDelimiter);\n        if (data[0] !== \",\") {\n          fields.splice(0, 1);\n        }\n\n        this.termDelimiter = parseIgesString(fields[1] ?? \"\") || \";\";\n        this.exportID = parseIgesString(fields[2] ?? \"\");\n        this.fileName = parseIgesString(fields[3] ?? \"\");\n        this.systemID = parseIgesString(fields[4] ?? \"\");\n        this.translateVer = parseIgesString(fields[5] ?? \"\");\n        this.integerBits = fields[6];\n        this.singleExpBits = fields[7];\n        this.singleMantissaBits = fields[8];\n        this.doubleExpBits = fields[9];\n        this.doubleMantissaBits = fields[10];\n        this.receiveID = parseIgesString(fields[11] ?? \"\");\n        this.scale = fields[12];\n        this.unitFlag = fields[13];\n        this.unit = parseIgesString(fields[14] ?? \"\");\n        this.maxStep = fields[15];\n        this.maxWidth = fields[16];\n        this.createDate = parseIgesString(fields[17] ?? \"\");\n        this.resolution = fields[18];\n        this.maxValue = fields[19];\n        this.createUser = parseIgesString(fields[20] ?? \"\");\n        this.createOrg = parseIgesString(fields[21] ?? \"\");\n        this.igesVer = fields[22];\n        this.formatCode = fields[23];\n        this.lastModifiedDate = parseIgesString(fields[24] ?? \"\");\n      }\n\n      parseDirection(data: string): void {\n        for (let i = 0; i < data.length; i += 160) {\n          const entity = new Entity();\n          const attr = entity.attr;\n          const item = data.substr(i, 160);\n          attr.entityType = parseInt(item.substr(0, 8));\n          attr.entityIndex = parseInt(item.substr(8, 8));\n          attr.igesVersion = parseInt(item.substr(16, 8));\n          attr.lineType = parseInt(item.substr(24, 8));\n          attr.level = parseInt(item.substr(32, 8));\n          attr.view = parseInt(item.substr(40, 8));\n          attr.transMatrix = parseInt(item.substr(48, 8));\n          attr.labelDisp = parseInt(item.substr(56, 8));\n          attr.status = item.substr(64, 8);\n          attr.sequenceNumber = parseInt(item.substr(73, 7));\n\n          attr.lineWidth = parseInt(item.substr(88, 8));\n          attr.color = parseInt(item.substr(96, 8));\n          attr.paramLine = parseInt(item.substr(104, 8));\n          attr.formNumber = parseInt(item.substr(112, 8));\n\n          attr.entityName = item.substr(136, 8).trim();\n          attr.entitySub = parseInt(item.substr(144, 8));\n\n          this.entities.push(entity);\n        }\n      }\n\n      parseParameter(data: string): void {\n        const params = data.split(\";\");\n        params.pop();\n        const splitParams = params.map((item) => item.split(\",\"));\n\n        for (let i = 0; i < splitParams.length; i++) {\n          const entity = this.entities[i];\n          if (entity) {\n            const paramArray = splitParams[i];\n            if (paramArray) {\n              entity.type = paramArray.shift() || \"\";\n              entity.params = paramArray.map(parseIgesFloat);\n            }\n          }\n        }\n      }\n\n      parseTerminate(data: string): void {\n        this.lineNum_S = parseInt(data.substr(1, 7));\n        this.lineNum_G = parseInt(data.substr(9, 7));\n        this.lineNum_D = parseInt(data.substr(17, 7));\n        this.lineNum_P = parseInt(data.substr(25, 7));\n\n        if (this.lineNum_D && this.entities.length !== this.lineNum_D / 2) {\n          throw new Error(\"ERROR: Inconsistent entity count\");\n        }\n      }\n    }\n\n    function parseIges(data: string): Group {\n      const geometry = new Group();\n      geometry.name = \"Group_\" + Math.floor(Math.random() * 10000000);\n\n      const iges = new IGES();\n\n      // Split by newline and filter out completely empty lines\n      // Don't trim before filtering as IGES lines can be space-padded\n      const lines = data.split(/\\r?\\n/).filter((item) => item.length > 0);\n\n      let currentSection = \"\";\n      let startSec = \"\",\n        globalSec = \"\",\n        dirSec = \"\",\n        paramSec = \"\",\n        terminateSec = \"\";\n\n      for (let i = 0; i < lines.length; i++) {\n        let line = lines[i] ?? \"\";\n\n        // Skip lines that are too short (less than 73 characters for valid IGES)\n        if (line.length < 73) {\n          console.warn(\n            `Skipping invalid IGES line ${i}: line too short (${line.length} chars): \"${line.substring(0, 50)}\"`\n          );\n          continue;\n        }\n\n        currentSection = line[72] ?? \"\";\n        line = line.substr(0, 80);\n\n        switch (currentSection) {\n          case \"S\": {\n            startSec += line.substr(0, 72).trim();\n            break;\n          }\n          case \"G\": {\n            globalSec += line.substr(0, 72).trim();\n            break;\n          }\n          case \"D\": {\n            dirSec += line;\n            break;\n          }\n          case \"P\": {\n            paramSec += line.substr(0, 64).trim();\n            break;\n          }\n          case \"T\": {\n            terminateSec += line.substr(0, 72).trim();\n            break;\n          }\n          default:\n            console.warn(\n              `Skipping line ${i} with unknown section type: '${currentSection}' (char code: ${currentSection.charCodeAt(0)})`\n            );\n            // Don't throw error, just skip unknown section types\n            break;\n        }\n      }\n\n      iges.parseStart(startSec);\n      iges.parseGlobal(globalSec);\n      iges.parseDirection(dirSec);\n      iges.parseParameter(paramSec);\n      iges.parseTerminate(terminateSec);\n\n      const entities = iges.entities;\n\n      /**\n       * CIRCULAR ARC ENTITY (TYPE 100)\n       *\n       * Parameter Data\n       *\n       * Index  Name  Type  Description\n       * 1      ZT    Real  Parallel ZT displacement of arc from XT ; YT plane\n       * 2      X1    Real  Arc center abscissa\n       * 3      Y1    Real  Arc center ordinate\n       * 4      X2    Real  Start point abscissa\n       * 5      Y2    Real  Start point ordinate\n       * 6      X3    Real  Terminate point abscissa\n       * 7      Y3    Real  Terminate point ordinate\n       */\n      function drawCArc(entity: Entity): void {\n        const entityParams = entity.params;\n\n        const startVector = new Vector2(\n          Number(entityParams[3]) - Number(entityParams[1]),\n          Number(entityParams[4]) - Number(entityParams[2])\n        );\n        const endVector = new Vector2(\n          Number(entityParams[5]) - Number(entityParams[1]),\n          Number(entityParams[6]) - Number(entityParams[2])\n        );\n\n        const startAngle = startVector.angle();\n        const endAngle = endVector.angle();\n\n        const curve = new EllipseCurve(\n          Number(entityParams[1]),\n          Number(entityParams[2]), // ax, aY\n          1,\n          1, // xRadius, yRadius\n          startAngle,\n          endAngle, // aStartAngle, aEndAngle\n          false, // aClockwise\n          0 // aRotation\n        );\n\n        const points = curve.getPoints(50);\n\n        const geom = new BufferGeometry();\n        geom.setFromPoints(points);\n\n        const material = new LineBasicMaterial({ color: 0x0000ff });\n        const mesh = new Line(geom, material);\n\n        mesh.position.set(0, 0, 0);\n        mesh.rotation.set(-Math.PI / 2, 0, 0);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        geometry.add(mesh);\n      }\n\n      /**\n       * COMPOSITE CURVE ENTITY (TYPE 102)\n       *\n       * Parameter Data\n       *\n       * Index  Name   Type     Description\n       * 1      N      Integer  Number of entities\n       * 2      DE(1)  Pointer  Pointer to the DE of the first constituent entity\n       * ...\n       * 1+N    DE(N)  Pointer  Pointer to the DE of the last constituent entity\n       */\n      function drawCCurve(_entity: Entity): void {\n        // TODO: Implement composite curve\n      }\n\n      /**\n       * COPIOUS DATA ENTITY (TYPE 106, FORMS 1-3)\n       * LINEAR PATH ENTITY (TYPE 106, FORMS 11-13)\n       * CENTERLINE ENTITY (TYPE 106, FORMS 20-21)\n       * SECTION ENTITY (TYPE 106, FORMS 31–38)\n       * WITNESS LINE ENTITY (TYPE 106, FORM 40)\n       * SIMPLE CLOSED PLANAR CURVE ENTITY (TYPE 106, FORM 63)\n       */\n      function drawPath(entity: Entity): void {\n        const entityAttr = entity.attr;\n        const entityParams = entity.params;\n\n        const geom = new BufferGeometry();\n        const points: Vector3[] = [];\n\n        switch (entityAttr.formNumber?.toString()) {\n          /**\n           * LINEAR PATH ENTITY (TYPE 106, FORMS 11-13)\n           *\n           * For IP=2 (x,y,z triples), i.e., for Form 12:\n           * Index  Name   Type     Description\n           * 1      IP     Integer  Interpretation Flag (1/2/3)\n           * 2      N      Integer  Number of n-tuples; N >= 2\n           * 3      X(1)   Real     First data point x value\n           * 4      Y(1)   Real     First data point y value\n           * 5      Z(1)   Real     First data point z value\n           * ...\n           * 2+3*N  Z(N)   Real     Last data point z value\n           */\n          case \"12\":\n            for (let i = 0; i < Number(entityParams[1]); i++) {\n              points.push(\n                new Vector3(\n                  Number(entityParams[2 + 3 * i]),\n                  Number(entityParams[3 + 3 * i]),\n                  Number(entityParams[4 + 3 * i])\n                )\n              );\n            }\n            break;\n          /**\n           * WITNESS LINE ENTITY (TYPE 106, FORM 40)\n           *\n           * Index  Name   Type     Description\n           * 1      IP     Integer  Interpretation Flag: IP = 1\n           * 2      N      Integer  Number of data points: N ≥ 3 and odd\n           * 3      ZT     Real     Common z displacement\n           * 4      X(1)   Real     First data point abscissa\n           * 5      Y(1)   Real     First data point ordinate\n           * ...\n           */\n          case \"40\":\n            for (let i = 0; i < Number(entityParams[1]); i++) {\n              points.push(\n                new Vector3(\n                  Number(entityParams[3 + 2 * i]),\n                  Number(entityParams[4 + 2 * i]),\n                  Number(entityParams[2])\n                )\n              );\n            }\n            break;\n\n          case \"63\":\n            for (let i = 0; i < Number(entityParams[1]); i++) {\n              points.push(\n                new Vector3(Number(entityParams[3 + 2 * i]), Number(entityParams[4 + 2 * i]), 0)\n              );\n            }\n            break;\n\n          default:\n            console.log(\"Unsupported Form Number: \", entityAttr.formNumber);\n        }\n\n        geom.setFromPoints(points);\n\n        const material = new LineBasicMaterial({ color: 0x0000ff });\n        const mesh = new Line(geom, material);\n\n        mesh.position.set(0, 0, 0);\n        mesh.rotation.set(-Math.PI / 2, 0, 0);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        geometry.add(mesh);\n      }\n\n      /**\n       * PLANE ENTITY (TYPE 108)\n       *\n       * Unbounded Plane Entity (Type 108, Form 0)\n       */\n      function drawPlane(_entity: Entity): void {\n        // TODO: Implement plane entity\n      }\n\n      /**\n       * LINE ENTITY (TYPE 110, FORM 0)\n       * LINE ENTITY (TYPE 110, FORMS 1-2)\n       */\n      function drawLine(entity: Entity): void {\n        const entityAttr = entity.attr;\n        const entityParams = entity.params;\n\n        const geom = new BufferGeometry();\n        const points: Vector3[] = [];\n\n        switch (entityAttr.formNumber?.toString()) {\n          /**\n           * LINE ENTITY (TYPE 110, FORMS 0)\n           *\n           * Index  Name  Type  Description\n           * 1      X1    Real  Start Point P1\n           * 2      Y1    Real\n           * 3      Z1    Real\n           * 4      X2    Real  Terminate Point P2\n           * 5      Y2    Real\n           * 6      Z2    Real\n           */\n          case \"0\":\n          case \"2\":\n            points.push(\n              new Vector3(Number(entityParams[0]), Number(entityParams[1]), Number(entityParams[2]))\n            );\n            points.push(\n              new Vector3(Number(entityParams[3]), Number(entityParams[4]), Number(entityParams[5]))\n            );\n            break;\n\n          default:\n            if (isNaN(Number(entityAttr.formNumber))) {\n              points.push(\n                new Vector3(\n                  Number(entityParams[0]),\n                  Number(entityParams[1]),\n                  Number(entityParams[2])\n                )\n              );\n              points.push(\n                new Vector3(\n                  Number(entityParams[3]),\n                  Number(entityParams[4]),\n                  Number(entityParams[5])\n                )\n              );\n            } else {\n              console.log(\n                \"LINE ENTITY - TYPE 110 - Unsupported Form Number: \",\n                entityAttr.formNumber\n              );\n            }\n        }\n\n        geom.setFromPoints(points);\n\n        const material = new LineBasicMaterial({ color: 0x0000ff });\n        const mesh = new Line(geom, material);\n\n        mesh.position.set(0, 0, 0);\n        mesh.rotation.set(-Math.PI / 2, 0, 0);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        geometry.add(mesh);\n      }\n\n      /**\n       * POINT ENTITY (TYPE 116)\n       */\n      function drawPoint(entity: Entity): void {\n        const entityParams = entity.params;\n\n        const geom = new BufferGeometry();\n\n        const points: number[] = [];\n        points.push(Number(entityParams[0]), Number(entityParams[1]), Number(entityParams[2]));\n\n        geom.setAttribute(\"position\", new Float32BufferAttribute(points, 3));\n\n        const material = new PointsMaterial({\n          size: 5,\n          sizeAttenuation: false,\n        });\n        const mesh = new Points(geom, material);\n\n        mesh.position.set(0, 0, 0);\n        mesh.rotation.set(-Math.PI / 2, 0, 0);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        geometry.add(mesh);\n      }\n\n      /**\n       * SURFACE OF REVOLUTION ENTITY (TYPE 120)\n       */\n      function drawRSurface(_entity: Entity): void {\n        // TODO: Implement surface of revolution\n      }\n\n      /**\n       * TABULATED CYLINDER ENTITY (TYPE 122)\n       */\n      function drawTCylinder(_entity: Entity): void {\n        // TODO: Implement tabulated cylinder\n      }\n\n      /**\n       * TRANSFORMATION MATRIX ENTITY (TYPE 124)\n       *\n       * Parameter Data\n       *\n       * Index  Name  Type  Description\n       * 1      R11   Real  Top Row\n       * 2      R12   Real\n       * 3      R13   Real\n       * 4      T1    Real\n       * 5      R21   Real  Second Row\n       * 6      R22   Real\n       * 7      R23   Real\n       * 8      T2    Real\n       * 9      R31   Real  Third Row\n       * 10     R32   Real\n       * 11     R33   Real\n       * 12     T3    Real\n       */\n      function drawTransMatrix(entity: Entity): void {\n        const entityAttr = entity.attr;\n\n        switch (entityAttr.formNumber?.toString()) {\n          /**\n           * Form 0: (default) R is an orthonormal matrix with determinant equal to positive one.\n           * T is arbitrary. The columns of R, taken in order, form a right-handed triple\n           * in the output coordinate system.\n           */\n          case \"0\":\n            // TODO: Implement transformation matrix\n            break;\n          default:\n            console.log(\n              \"TRANSFORMATION MATRIX - TYPE 124 - Unsupported Form Number: \",\n              entityAttr.formNumber\n            );\n        }\n      }\n\n      /**\n       * RATIONAL B-SPLINE CURVE ENTITY (TYPE 126)\n       */\n      function drawRBSplineCurve(entity: Entity): void {\n        const entityAttr = entity.attr;\n        const entityParams = entity.params;\n\n        const geom = new BufferGeometry();\n        const points: Vector3[] = [];\n\n        const K = Number(entityParams[0]);\n        const M = Number(entityParams[1]);\n        const N = 1 + K - M;\n        const A = N + 2 * M;\n\n        switch (entityAttr.formNumber?.toString()) {\n          /**\n           * Form  Meaning\n           * 0     Form of curve is determined from the rational B-spline parameters\n           * 1     Line\n           * 2     Circular arc\n           * 3     Elliptical arc\n           * 4     Parabolic arc\n           * 5     Hyperbolic arc\n           */\n          case \"0\":\n          case \"1\":\n            for (let i = 0; i < K + 1; i++) {\n              points.push(\n                new Vector3(\n                  Number(entityParams[i * 3 + 8 + A + K]),\n                  Number(entityParams[i * 3 + 9 + A + K]),\n                  Number(entityParams[i * 3 + 10 + A + K])\n                )\n              );\n            }\n            break;\n          default:\n          // TODO: Implement other B-spline forms\n        }\n\n        geom.setFromPoints(points);\n\n        const material = new LineBasicMaterial({ color: 0x0000ff });\n        const mesh = new Line(geom, material);\n\n        mesh.position.set(0, 0, 0);\n        mesh.rotation.set(-Math.PI / 2, 0, 0);\n\n        mesh.castShadow = true;\n        mesh.receiveShadow = true;\n\n        geometry.add(mesh);\n      }\n\n      /**\n       * RATIONAL B-SPLINE SURFACE ENTITY (TYPE 128)\n       */\n      function drawRBSplineSurface(_entity: Entity): void {\n        // TODO: Implement B-spline surface\n      }\n\n      /**\n       * CURVE ON A PARAMETRIC SURFACE ENTITY (TYPE 142)\n       */\n      function drawCurveOnPSurface(_entity: Entity): void {\n        // TODO: Implement curve on parametric surface\n      }\n\n      /**\n       * TRIMMED (PARAMETRIC) SURFACE ENTITY (TYPE 144)\n       */\n      function drawTPSurface(_entity: Entity): void {\n        // TODO: Implement trimmed parametric surface\n      }\n\n      /**\n       * GENERAL NOTE ENTITY (TYPE 212)\n       */\n      function drawGeneralNote(_entity: Entity): void {\n        // TODO: Implement general note\n      }\n\n      /**\n       * LEADER (ARROW) ENTITY (TYPE 214)\n       */\n      function drawLeaderArrow(_entity: Entity): void {\n        // TODO: Implement leader arrow\n      }\n\n      /**\n       * LINEAR DIMENSION ENTITY (TYPE 216)\n       */\n      function drawLinearDimension(_entity: Entity): void {\n        // TODO: Implement linear dimension\n      }\n\n      /**\n       * COLOR DEFINITION ENTITY (TYPE 314)\n       */\n      function drawColor(_entity: Entity): void {\n        // TODO: Implement color definition\n      }\n\n      /**\n       * ASSOCIATIVITY INSTANCE ENTITY (TYPE 402)\n       */\n      function drawAInstance(_entity: Entity): void {\n        // TODO: Implement associativity instance\n      }\n\n      /**\n       * PROPERTY ENTITY (TYPE 406)\n       */\n      function propertyEntity(_entity: Entity): void {\n        // TODO: Implement property entity\n      }\n\n      // Process all entities\n      for (const entity of entities) {\n        switch (entity.type) {\n          case \"100\":\n            drawCArc(entity);\n            break;\n          case \"102\":\n            drawCCurve(entity);\n            break;\n          case \"106\":\n            drawPath(entity);\n            break;\n          case \"108\":\n            drawPlane(entity);\n            break;\n          case \"110\":\n            drawLine(entity);\n            break;\n          case \"116\":\n            drawPoint(entity);\n            break;\n          case \"120\":\n            drawRSurface(entity);\n            break;\n          case \"122\":\n            drawTCylinder(entity);\n            break;\n          case \"124\":\n            drawTransMatrix(entity);\n            break;\n          case \"126\":\n            drawRBSplineCurve(entity);\n            break;\n          case \"128\":\n            drawRBSplineSurface(entity);\n            break;\n          case \"142\":\n            drawCurveOnPSurface(entity);\n            break;\n          case \"144\":\n            drawTPSurface(entity);\n            break;\n          case \"212\":\n            drawGeneralNote(entity);\n            break;\n          case \"214\":\n            drawLeaderArrow(entity);\n            break;\n          case \"216\":\n            drawLinearDimension(entity);\n            break;\n          case \"314\":\n            drawColor(entity);\n            break;\n          case \"402\":\n            drawAInstance(entity);\n            break;\n          case \"406\":\n            propertyEntity(entity);\n            break;\n          default:\n            console.log(\"Uncompliment entity type\", entity.type);\n        }\n      }\n\n      return geometry;\n    }\n\n    function parseIgesFloat(p: string): number {\n      return parseFloat(p.replace(/D/g, \"e\"));\n    }\n\n    function parseIgesString(str: string): string | undefined {\n      try {\n        const d = str.indexOf(\"H\");\n        if (d === -1) return undefined;\n        const digit = str.substr(0, d);\n        const value = str.substr(d + 1, parseInt(digit));\n        return value;\n      } catch (e) {\n        console.error(e);\n        return undefined;\n      }\n    }\n\n    return parseIges(data);\n  }\n}\n\nexport { IGESLoader };\nexport type { EntityAttribute, EntityParam, IGESData };\n"]}