import DxfArrayScanner, { IGroup } from '../DxfArrayScanner'; import * as helpers from '../ParseHelpers' import IGeometry, { IEntity, IPoint } from './geomtry'; export interface IArcEntity extends IEntity { center: IPoint; radius: number; startAngle: number; endAngle: number; angleLength: number; extrusionDirectionX: number; extrusionDirectionY: number; extrusionDirectionZ: number; } export default class Arc implements IGeometry { public ForEntityName = 'ARC' as const; public parseEntity(scanner: DxfArrayScanner, curr: IGroup) { const entity = { type: curr.value } as IArcEntity; curr = scanner.next(); while (!scanner.isEOF()) { if (curr.code === 0) break; switch (curr.code) { case 10: // X coordinate of point entity.center = helpers.parsePoint(scanner); break; case 40: // radius entity.radius = curr.value as number; break; case 50: // start angle entity.startAngle = Math.PI / 180 * (curr.value as number); break; case 51: // end angle entity.endAngle = Math.PI / 180 * (curr.value as number); entity.angleLength = entity.endAngle - entity.startAngle; // angleLength is deprecated break; case 210: entity.extrusionDirectionX = curr.value as number; break; case 220: entity.extrusionDirectionY = curr.value as number; break; case 230: entity.extrusionDirectionZ = curr.value as number; break; default: // ignored attribute helpers.checkCommonEntityProperties(entity, curr, scanner); break; } curr = scanner.next(); } return entity; } }