dxf-json 0.0.20 → 0.0.22
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.
- package/package.json +5 -2
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/custom.md +0 -10
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/pull_request_template.md +0 -23
- package/.github/workflows/npm-publish.yml +0 -55
- package/.swcrc +0 -8
- package/jest.config.js +0 -20
- package/src/consts/block.ts +0 -22
- package/src/consts/color.ts +0 -6
- package/src/consts/config.ts +0 -2
- package/src/consts/dimension.ts +0 -69
- package/src/consts/hatch.ts +0 -52
- package/src/consts/header.ts +0 -10
- package/src/consts/index.ts +0 -9
- package/src/consts/lineweight.ts +0 -5
- package/src/consts/measurement.ts +0 -4
- package/src/consts/obscuredLineTypes.ts +0 -21
- package/src/consts/scene.ts +0 -2
- package/src/consts/viewport.ts +0 -62
- package/src/index.ts +0 -3
- package/src/parser/AutoCadColorIndex.ts +0 -265
- package/src/parser/DxfArrayScanner.ts +0 -161
- package/src/parser/DxfParser.ts +0 -109
- package/src/parser/ParseHelpers.ts +0 -124
- package/src/parser/blocks/blocks.test.ts +0 -97
- package/src/parser/blocks/index.ts +0 -88
- package/src/parser/blocks/types.ts +0 -15
- package/src/parser/entities/arc/index.ts +0 -2
- package/src/parser/entities/arc/parser.ts +0 -67
- package/src/parser/entities/arc/types.ts +0 -13
- package/src/parser/entities/attdef/consts.ts +0 -12
- package/src/parser/entities/attdef/index.ts +0 -3
- package/src/parser/entities/attdef/parser.ts +0 -119
- package/src/parser/entities/attdef/types.ts +0 -19
- package/src/parser/entities/attribute/consts.ts +0 -6
- package/src/parser/entities/attribute/index.ts +0 -3
- package/src/parser/entities/attribute/parser.ts +0 -198
- package/src/parser/entities/attribute/types.ts +0 -31
- package/src/parser/entities/circle/index.ts +0 -2
- package/src/parser/entities/circle/parser.ts +0 -58
- package/src/parser/entities/circle/types.ts +0 -11
- package/src/parser/entities/dimension/common.ts +0 -98
- package/src/parser/entities/dimension/index.ts +0 -24
- package/src/parser/entities/dimension/types.ts +0 -65
- package/src/parser/entities/ellipse/index.ts +0 -2
- package/src/parser/entities/ellipse/parser.ts +0 -66
- package/src/parser/entities/ellipse/types.ts +0 -13
- package/src/parser/entities/entities.test.ts +0 -86
- package/src/parser/entities/hatch/boundaryPathData/edge.ts +0 -190
- package/src/parser/entities/hatch/boundaryPathData/index.ts +0 -27
- package/src/parser/entities/hatch/boundaryPathData/polyline.ts +0 -43
- package/src/parser/entities/hatch/boundaryPathData/shared.ts +0 -16
- package/src/parser/entities/hatch/index.ts +0 -189
- package/src/parser/entities/hatch/patternData.ts +0 -57
- package/src/parser/entities/hatch/types/boundaryPath.ts +0 -72
- package/src/parser/entities/hatch/types/definitionLine.ts +0 -14
- package/src/parser/entities/hatch/types/hatch.ts +0 -47
- package/src/parser/entities/hatch/types/index.ts +0 -3
- package/src/parser/entities/index.ts +0 -87
- package/src/parser/entities/insert/index.ts +0 -2
- package/src/parser/entities/insert/parser.ts +0 -106
- package/src/parser/entities/insert/types.ts +0 -19
- package/src/parser/entities/leader/consts.ts +0 -6
- package/src/parser/entities/leader/index.ts +0 -3
- package/src/parser/entities/leader/parser.ts +0 -119
- package/src/parser/entities/leader/types.ts +0 -24
- package/src/parser/entities/line/index.ts +0 -2
- package/src/parser/entities/line/parser.ts +0 -55
- package/src/parser/entities/line/types.ts +0 -11
- package/src/parser/entities/lwpolyline/consts.ts +0 -4
- package/src/parser/entities/lwpolyline/index.ts +0 -3
- package/src/parser/entities/lwpolyline/parser.ts +0 -122
- package/src/parser/entities/lwpolyline/types.ts +0 -21
- package/src/parser/entities/mtext/consts.ts +0 -5
- package/src/parser/entities/mtext/index.ts +0 -3
- package/src/parser/entities/mtext/parser.ts +0 -195
- package/src/parser/entities/mtext/types.ts +0 -34
- package/src/parser/entities/point/index.ts +0 -2
- package/src/parser/entities/point/parser.ts +0 -60
- package/src/parser/entities/point/types.ts +0 -10
- package/src/parser/entities/polyline/consts.ts +0 -17
- package/src/parser/entities/polyline/index.ts +0 -3
- package/src/parser/entities/polyline/parser.ts +0 -126
- package/src/parser/entities/polyline/types.ts +0 -20
- package/src/parser/entities/section/index.ts +0 -2
- package/src/parser/entities/section/parser.ts +0 -104
- package/src/parser/entities/section/types.ts +0 -20
- package/src/parser/entities/shared.ts +0 -166
- package/src/parser/entities/solid/index.ts +0 -2
- package/src/parser/entities/solid/parser.ts +0 -56
- package/src/parser/entities/solid/types.ts +0 -10
- package/src/parser/entities/spline/consts.ts +0 -8
- package/src/parser/entities/spline/index.ts +0 -3
- package/src/parser/entities/spline/parser.ts +0 -121
- package/src/parser/entities/spline/types.ts +0 -22
- package/src/parser/entities/text/consts.ts +0 -21
- package/src/parser/entities/text/index.ts +0 -3
- package/src/parser/entities/text/parser.ts +0 -117
- package/src/parser/entities/text/types.ts +0 -21
- package/src/parser/entities/vertex/consts.ts +0 -10
- package/src/parser/entities/vertex/index.ts +0 -3
- package/src/parser/entities/vertex/parser.ts +0 -90
- package/src/parser/entities/vertex/types.ts +0 -17
- package/src/parser/entities/viewport/index.ts +0 -178
- package/src/parser/entities/viewport/types.ts +0 -58
- package/src/parser/filterDummyBlocks.ts +0 -49
- package/src/parser/header/index.ts +0 -30
- package/src/parser/objects/common.ts +0 -55
- package/src/parser/objects/dictionary.ts +0 -61
- package/src/parser/objects/index.ts +0 -45
- package/src/parser/objects/layout.ts +0 -136
- package/src/parser/objects/plotSettings.ts +0 -231
- package/src/parser/objects/treefy.ts +0 -53
- package/src/parser/objects/types.ts +0 -17
- package/src/parser/shared/index.ts +0 -21
- package/src/parser/shared/parsePoint.ts +0 -37
- package/src/parser/shared/parserGenerator.test.ts +0 -164
- package/src/parser/shared/parserGenerator.ts +0 -180
- package/src/parser/shared/xdata/index.ts +0 -3
- package/src/parser/shared/xdata/interpreter.test.ts +0 -85
- package/src/parser/shared/xdata/interpreter.ts +0 -65
- package/src/parser/shared/xdata/parser.test.ts +0 -66
- package/src/parser/shared/xdata/parser.ts +0 -140
- package/src/parser/shared/xdata/types.ts +0 -22
- package/src/parser/tables/blockRecord/index.ts +0 -2
- package/src/parser/tables/blockRecord/parser.ts +0 -49
- package/src/parser/tables/blockRecord/types.ts +0 -11
- package/src/parser/tables/dimStyle/consts.ts +0 -428
- package/src/parser/tables/dimStyle/index.ts +0 -3
- package/src/parser/tables/dimStyle/parser.ts +0 -37
- package/src/parser/tables/dimStyle/types.ts +0 -164
- package/src/parser/tables/index.ts +0 -2
- package/src/parser/tables/layer/index.ts +0 -2
- package/src/parser/tables/layer/parser.ts +0 -58
- package/src/parser/tables/layer/types.ts +0 -14
- package/src/parser/tables/ltype/consts.ts +0 -6
- package/src/parser/tables/ltype/index.ts +0 -3
- package/src/parser/tables/ltype/parser.ts +0 -110
- package/src/parser/tables/ltype/types.ts +0 -23
- package/src/parser/tables/parser.ts +0 -100
- package/src/parser/tables/shared.ts +0 -32
- package/src/parser/tables/style/index.ts +0 -2
- package/src/parser/tables/style/parser.ts +0 -70
- package/src/parser/tables/style/types.ts +0 -15
- package/src/parser/tables/types.ts +0 -15
- package/src/parser/tables/vport/index.ts +0 -2
- package/src/parser/tables/vport/parser.ts +0 -205
- package/src/parser/tables/vport/types.ts +0 -48
- package/src/parser/types.ts +0 -30
- package/src/types/color.ts +0 -5
- package/src/types/dxfHeader.ts +0 -21
- package/src/types/entity.ts +0 -7
- package/src/types/index.ts +0 -30
- package/src/utils/binarySearch.ts +0 -20
- package/src/utils/disjointSet.ts +0 -52
- package/src/utils/flooding.ts +0 -37
- package/src/utils/functional.ts +0 -124
- package/src/utils/graph.ts +0 -53
- package/src/utils/index.ts +0 -102
- package/src/utils/queue.ts +0 -77
- package/src/utils/triangle.ts +0 -28
- package/tsconfig.json +0 -37
- package/webpack.config.js +0 -53
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type DxfArrayScanner from '../../DxfArrayScanner';
|
|
2
|
-
import type { ScannerGroup } from '../../DxfArrayScanner';
|
|
3
|
-
import {
|
|
4
|
-
createParser,
|
|
5
|
-
DXFParserSnippet,
|
|
6
|
-
Identity,
|
|
7
|
-
PointParser,
|
|
8
|
-
} from '../../shared/parserGenerator';
|
|
9
|
-
import { CommonEntitySnippets } from '../shared';
|
|
10
|
-
import type { CircleEntity } from './types';
|
|
11
|
-
|
|
12
|
-
const DefaultCircleEntity = {
|
|
13
|
-
thickness: 0,
|
|
14
|
-
extrusionDirection: { x: 0, y: 0, z: 1 },
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const CircleEntityParserSnippets: DXFParserSnippet[] = [
|
|
18
|
-
{
|
|
19
|
-
code: 210,
|
|
20
|
-
name: 'extrusionDirection',
|
|
21
|
-
parser: PointParser,
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
code: 40,
|
|
25
|
-
name: 'radius',
|
|
26
|
-
parser: Identity,
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
code: 10,
|
|
30
|
-
name: 'center',
|
|
31
|
-
parser: PointParser,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
code: 39,
|
|
35
|
-
name: 'thickness',
|
|
36
|
-
parser: Identity,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
code: 100,
|
|
40
|
-
name: 'subclassMarker',
|
|
41
|
-
parser: Identity,
|
|
42
|
-
},
|
|
43
|
-
...CommonEntitySnippets,
|
|
44
|
-
];
|
|
45
|
-
|
|
46
|
-
export class CircleEntityParser {
|
|
47
|
-
static ForEntityName = 'CIRCLE';
|
|
48
|
-
private parser = createParser(
|
|
49
|
-
CircleEntityParserSnippets,
|
|
50
|
-
DefaultCircleEntity,
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
parseEntity(scanner: DxfArrayScanner, curr: ScannerGroup) {
|
|
54
|
-
const entity = {} as any;
|
|
55
|
-
this.parser(curr, scanner, entity);
|
|
56
|
-
return entity as CircleEntity;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Point3D } from '../../../types';
|
|
2
|
-
import type { CommonDxfEntity } from '../shared';
|
|
3
|
-
|
|
4
|
-
export interface CircleEntity extends CommonDxfEntity {
|
|
5
|
-
type: 'CIRCLE';
|
|
6
|
-
subclassMarker: 'AcDbCircle';
|
|
7
|
-
thickness: number;
|
|
8
|
-
center: Point3D;
|
|
9
|
-
radius: number;
|
|
10
|
-
extrusionDirection: Point3D;
|
|
11
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import DxfArrayScanner, { ScannerGroup } from 'parser/DxfArrayScanner';
|
|
2
|
-
import { Point3D } from 'types';
|
|
3
|
-
import * as helpers from '../../ParseHelpers';
|
|
4
|
-
import { parsePoint } from '../../shared/parsePoint';
|
|
5
|
-
import { AlignedDimensionEntity, AngularDimensionEntity, DimensionEntity, DimensionEntityCommon, OrdinateDimensionEntity, RadialDiameterDimensionEntity } from './types';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @returns Return `false` if curr is not related to common dimension group
|
|
9
|
-
*/
|
|
10
|
-
export function parseDimension(entity: DimensionEntity, curr: ScannerGroup, scanner: DxfArrayScanner) {
|
|
11
|
-
switch (curr.code) {
|
|
12
|
-
case 100:
|
|
13
|
-
entity.subclassMarker = curr.value;
|
|
14
|
-
break;
|
|
15
|
-
case 280:
|
|
16
|
-
entity.version = curr.value;
|
|
17
|
-
break;
|
|
18
|
-
case 2:
|
|
19
|
-
entity.name = curr.value;
|
|
20
|
-
break;
|
|
21
|
-
case 10:
|
|
22
|
-
entity.definitionPoint = parsePoint(scanner) as Point3D;
|
|
23
|
-
break;
|
|
24
|
-
case 11:
|
|
25
|
-
entity.textPoint = parsePoint(scanner) as Point3D;
|
|
26
|
-
break;
|
|
27
|
-
case 12:
|
|
28
|
-
// for aligned
|
|
29
|
-
(entity as AlignedDimensionEntity).insertionPoint = parsePoint(scanner) as Point3D;
|
|
30
|
-
break;
|
|
31
|
-
case 13:
|
|
32
|
-
// group 13 and 14 are subclass specific definition point
|
|
33
|
-
// for further information, look dxf dimension specification
|
|
34
|
-
(entity as AlignedDimensionEntity | AngularDimensionEntity | OrdinateDimensionEntity).subDefinitionPoint1 = parsePoint(scanner) as Point3D;
|
|
35
|
-
break;
|
|
36
|
-
case 14:
|
|
37
|
-
(entity as AlignedDimensionEntity | AngularDimensionEntity | OrdinateDimensionEntity).subDefinitionPoint2 = parsePoint(scanner) as Point3D;
|
|
38
|
-
break;
|
|
39
|
-
case 15:
|
|
40
|
-
// for angular, radial, diameter
|
|
41
|
-
(entity as AngularDimensionEntity | RadialDiameterDimensionEntity).centerPoint = parsePoint(scanner) as Point3D;
|
|
42
|
-
break;
|
|
43
|
-
case 16:
|
|
44
|
-
// for angular
|
|
45
|
-
(entity as AngularDimensionEntity).arcPoint = parsePoint(scanner) as Point3D;
|
|
46
|
-
break;
|
|
47
|
-
case 70:
|
|
48
|
-
entity.dimensionType = curr.value;
|
|
49
|
-
break;
|
|
50
|
-
case 71:
|
|
51
|
-
entity.attachmentPoint = curr.value;
|
|
52
|
-
break;
|
|
53
|
-
case 72:
|
|
54
|
-
entity.textLineSpacingStyle = curr.value;
|
|
55
|
-
break;
|
|
56
|
-
case 40:
|
|
57
|
-
// for radial, diameter
|
|
58
|
-
(entity as RadialDiameterDimensionEntity).leaderLength = curr.value;
|
|
59
|
-
break;
|
|
60
|
-
case 41:
|
|
61
|
-
entity.textLineSpacingFactor = curr.value;
|
|
62
|
-
break;
|
|
63
|
-
case 42:
|
|
64
|
-
entity.measurement = curr.value;
|
|
65
|
-
break;
|
|
66
|
-
case 1:
|
|
67
|
-
// if value === null or "<>", measurement should be drawn as text instead
|
|
68
|
-
// if value === "", text is suppressed.
|
|
69
|
-
// otherwise text should be drawn as is.
|
|
70
|
-
entity.text = curr.value;
|
|
71
|
-
break;
|
|
72
|
-
case 50:
|
|
73
|
-
// for aligned
|
|
74
|
-
(entity as AlignedDimensionEntity).rotationAngle = curr.value;
|
|
75
|
-
break;
|
|
76
|
-
case 52:
|
|
77
|
-
// for aligned
|
|
78
|
-
(entity as AlignedDimensionEntity).obliqueAngle = curr.value;
|
|
79
|
-
break;
|
|
80
|
-
case 53:
|
|
81
|
-
entity.textRotation = curr.value;
|
|
82
|
-
break;
|
|
83
|
-
case 51:
|
|
84
|
-
// This group value is the negative of the angle between the OCS X axis
|
|
85
|
-
// and the UCS X axis. It is always in the XY plane of the OCS
|
|
86
|
-
entity.ocsRotation = curr.value;
|
|
87
|
-
break;
|
|
88
|
-
case 210:
|
|
89
|
-
entity.extrusionDirection = parsePoint(scanner) as Point3D;
|
|
90
|
-
break;
|
|
91
|
-
case 3:
|
|
92
|
-
entity.styleName = curr.value;
|
|
93
|
-
break;
|
|
94
|
-
default:
|
|
95
|
-
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import DxfArrayScanner, { ScannerGroup } from 'parser/DxfArrayScanner';
|
|
2
|
-
import { isMatched } from '../../shared';
|
|
3
|
-
import { parseDimension } from './common';
|
|
4
|
-
import { DimensionEntity } from './types';
|
|
5
|
-
|
|
6
|
-
export default class DimensionParser {
|
|
7
|
-
static ForEntityName = 'DIMENSION';
|
|
8
|
-
|
|
9
|
-
parseEntity(scanner: DxfArrayScanner, curr: ScannerGroup) {
|
|
10
|
-
const entity = {} as DimensionEntity;
|
|
11
|
-
|
|
12
|
-
while (!isMatched(curr, 0, 'EOF')) {
|
|
13
|
-
if (curr.code === 0) {
|
|
14
|
-
scanner.rewind();
|
|
15
|
-
return entity;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
parseDimension(entity, curr, scanner);
|
|
19
|
-
curr = scanner.next();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
return entity;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AttachmentPoint,
|
|
3
|
-
DimensionTextLineSpacing,
|
|
4
|
-
DimensionType,
|
|
5
|
-
} from '../../../consts';
|
|
6
|
-
import type { Point3D } from '../../../types';
|
|
7
|
-
import type { CommonDxfEntity } from '../shared';
|
|
8
|
-
|
|
9
|
-
export interface DimensionEntityCommon extends CommonDxfEntity {
|
|
10
|
-
type: 'DIMENSION';
|
|
11
|
-
subclassMarker: string;
|
|
12
|
-
handle: string;
|
|
13
|
-
version: string;
|
|
14
|
-
// Name of the block that contains the entities that make up the dimension picture
|
|
15
|
-
name: string;
|
|
16
|
-
definitionPoint: Point3D;
|
|
17
|
-
textPoint: Point3D;
|
|
18
|
-
dimensionType: DimensionType;
|
|
19
|
-
attachmentPoint: AttachmentPoint;
|
|
20
|
-
textLineSpacingStyle?: DimensionTextLineSpacing;
|
|
21
|
-
textLineSpacingFactor?: number;
|
|
22
|
-
measurement?: number;
|
|
23
|
-
text?: string;
|
|
24
|
-
textRotation?: number;
|
|
25
|
-
ocsRotation?: number;
|
|
26
|
-
extrusionDirection?: Point3D;
|
|
27
|
-
styleName: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface AlignedDimensionEntity extends DimensionEntityCommon {
|
|
31
|
-
subclassMarker: 'AcDbAlignedDimension' | 'AcDbRotatedDimension';
|
|
32
|
-
insertionPoint?: Point3D;
|
|
33
|
-
subDefinitionPoint1: Point3D;
|
|
34
|
-
subDefinitionPoint2: Point3D;
|
|
35
|
-
rotationAngle: number;
|
|
36
|
-
obliqueAngle: number;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface AngularDimensionEntity extends DimensionEntityCommon {
|
|
40
|
-
subclassMarker: 'AcDb3PointAngularDimension';
|
|
41
|
-
subDefinitionPoint1: Point3D;
|
|
42
|
-
subDefinitionPoint2: Point3D;
|
|
43
|
-
centerPoint: Point3D;
|
|
44
|
-
arcPoint: Point3D;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface OrdinateDimensionEntity extends DimensionEntityCommon {
|
|
48
|
-
subclassMarker: 'AcDbOrdinateDimension';
|
|
49
|
-
subDefinitionPoint1: Point3D;
|
|
50
|
-
subDefinitionPoint2: Point3D;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface RadialDiameterDimensionEntity extends DimensionEntityCommon {
|
|
54
|
-
subclassMarker: 'AcDbRadialDimension' | 'AcDbDiametricDimension';
|
|
55
|
-
centerPoint: Point3D;
|
|
56
|
-
leaderLength: number;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export type DimensionEntity = DimensionEntityCommon &
|
|
60
|
-
(
|
|
61
|
-
| Partial<AlignedDimensionEntity>
|
|
62
|
-
| Partial<AngularDimensionEntity>
|
|
63
|
-
| Partial<OrdinateDimensionEntity>
|
|
64
|
-
| Partial<RadialDiameterDimensionEntity>
|
|
65
|
-
);
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import DxfArrayScanner, { ScannerGroup } from '../../DxfArrayScanner';
|
|
2
|
-
import {
|
|
3
|
-
createParser,
|
|
4
|
-
DXFParserSnippet,
|
|
5
|
-
Identity,
|
|
6
|
-
PointParser,
|
|
7
|
-
} from '../../shared/parserGenerator';
|
|
8
|
-
import { CommonEntitySnippets } from '../shared';
|
|
9
|
-
import { EllipseEntity } from './types';
|
|
10
|
-
|
|
11
|
-
const DefaultEllipseEnitty = {
|
|
12
|
-
extrusionDirection: { x: 0, y: 0, z: 1 },
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const EllipseEntityParserSnippets: DXFParserSnippet[] = [
|
|
16
|
-
{
|
|
17
|
-
code: 42,
|
|
18
|
-
name: 'endAngle',
|
|
19
|
-
parser: Identity,
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
code: 41,
|
|
23
|
-
name: 'startAngle',
|
|
24
|
-
parser: Identity,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: 40,
|
|
28
|
-
name: 'axisRatio',
|
|
29
|
-
parser: Identity,
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
code: 210,
|
|
33
|
-
name: 'extrusionDirection',
|
|
34
|
-
parser: PointParser,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: 11,
|
|
38
|
-
name: 'majorAxisEndPoint',
|
|
39
|
-
parser: PointParser,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
code: 10,
|
|
43
|
-
name: 'center',
|
|
44
|
-
parser: PointParser,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: 100,
|
|
48
|
-
name: 'subclassMarker',
|
|
49
|
-
parser: Identity,
|
|
50
|
-
},
|
|
51
|
-
...CommonEntitySnippets,
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
export class EllipseEntityParser {
|
|
55
|
-
static ForEntityName = 'ELLIPSE';
|
|
56
|
-
private parser = createParser(
|
|
57
|
-
EllipseEntityParserSnippets,
|
|
58
|
-
DefaultEllipseEnitty,
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
parseEntity(scanner: DxfArrayScanner, curr: ScannerGroup) {
|
|
62
|
-
const entity = {} as any;
|
|
63
|
-
this.parser(curr, scanner, entity);
|
|
64
|
-
return entity as EllipseEntity;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Point3D } from '../../../types';
|
|
2
|
-
import type { CommonDxfEntity } from '../shared';
|
|
3
|
-
|
|
4
|
-
export interface EllipseEntity extends CommonDxfEntity {
|
|
5
|
-
type: 'ELLIPSE';
|
|
6
|
-
subclassMarker: 'AcDbEllipse';
|
|
7
|
-
center: Point3D;
|
|
8
|
-
majorAxisEndPoint: Point3D;
|
|
9
|
-
extrusionDirection: Point3D;
|
|
10
|
-
axisRatio: number;
|
|
11
|
-
startAngle: number; // radian
|
|
12
|
-
endAngle: number; // radian
|
|
13
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { parseEntities } from '.';
|
|
2
|
-
import DxfArrayScanner from '../DxfArrayScanner';
|
|
3
|
-
|
|
4
|
-
describe('ENTITIES section', () => {
|
|
5
|
-
describe('parseEntities', () => {
|
|
6
|
-
it('BLOCKS 섹션 안에서 parseEntities를 실행하면 scanner.next()가 <0, ENDBLK>이어야 한다.', () => {
|
|
7
|
-
const content = ` 0
|
|
8
|
-
LINE
|
|
9
|
-
5
|
|
10
|
-
entity-0
|
|
11
|
-
100
|
|
12
|
-
AcDbLine
|
|
13
|
-
100
|
|
14
|
-
AcDbEntity
|
|
15
|
-
0
|
|
16
|
-
ENDBLK
|
|
17
|
-
0
|
|
18
|
-
EOF
|
|
19
|
-
`.split('\n');
|
|
20
|
-
const scanner = new DxfArrayScanner(content);
|
|
21
|
-
let curr = scanner.next();
|
|
22
|
-
|
|
23
|
-
parseEntities(curr, scanner);
|
|
24
|
-
|
|
25
|
-
curr = scanner.next();
|
|
26
|
-
|
|
27
|
-
expect(curr.code).toBe(0);
|
|
28
|
-
expect(curr.value).toBe('ENDBLK');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it('ENTITIES 섹션 안에서 parseEntities를 실행하면 scanner.next()가 <0, ENDSEC>이어야 한다.', () => {
|
|
32
|
-
const content = ` 0
|
|
33
|
-
LINE
|
|
34
|
-
5
|
|
35
|
-
entity-0
|
|
36
|
-
100
|
|
37
|
-
AcDbLine
|
|
38
|
-
100
|
|
39
|
-
AcDbEntity
|
|
40
|
-
0
|
|
41
|
-
ENDSEC
|
|
42
|
-
0
|
|
43
|
-
EOF
|
|
44
|
-
`.split('\n');
|
|
45
|
-
const scanner = new DxfArrayScanner(content);
|
|
46
|
-
let curr = scanner.next();
|
|
47
|
-
|
|
48
|
-
parseEntities(curr, scanner);
|
|
49
|
-
|
|
50
|
-
curr = scanner.next();
|
|
51
|
-
|
|
52
|
-
expect(curr.code).toBe(0);
|
|
53
|
-
expect(curr.value).toBe('ENDSEC');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it('parseEntities는 모든 ENTITY를 소모하여야 한다.', () => {
|
|
57
|
-
const content = ` 0
|
|
58
|
-
LINE
|
|
59
|
-
5
|
|
60
|
-
entity-0
|
|
61
|
-
100
|
|
62
|
-
AcDbLine
|
|
63
|
-
0
|
|
64
|
-
LINE
|
|
65
|
-
5
|
|
66
|
-
entity-1
|
|
67
|
-
100
|
|
68
|
-
AcDbLine
|
|
69
|
-
100
|
|
70
|
-
AcDbEntity
|
|
71
|
-
0
|
|
72
|
-
ENDBLK
|
|
73
|
-
0
|
|
74
|
-
EOF
|
|
75
|
-
`.split('\n');
|
|
76
|
-
const scanner = new DxfArrayScanner(content);
|
|
77
|
-
let curr = scanner.next();
|
|
78
|
-
|
|
79
|
-
const entities = parseEntities(curr, scanner);
|
|
80
|
-
|
|
81
|
-
expect(entities.length).toBe(2);
|
|
82
|
-
expect(entities[0].handle).toBe('entity-0');
|
|
83
|
-
expect(entities[1].handle).toBe('entity-1');
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
});
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { BoundaryPathEdgeType } from '../../../../consts';
|
|
2
|
-
import { parsePoint } from '../../../shared/parsePoint';
|
|
3
|
-
import {
|
|
4
|
-
createParser,
|
|
5
|
-
DXFParserSnippet,
|
|
6
|
-
Identity,
|
|
7
|
-
PointParser,
|
|
8
|
-
ToBoolean,
|
|
9
|
-
} from '../../../shared/parserGenerator';
|
|
10
|
-
import { CommonBoundaryPathDataSnippets } from './shared';
|
|
11
|
-
|
|
12
|
-
export const LineEdgeSnippets: DXFParserSnippet[] = [
|
|
13
|
-
{
|
|
14
|
-
code: 11,
|
|
15
|
-
name: 'end',
|
|
16
|
-
parser: PointParser,
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
code: 10,
|
|
20
|
-
name: 'start',
|
|
21
|
-
parser: PointParser,
|
|
22
|
-
},
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
export const CircularEdgeSnippets: DXFParserSnippet[] = [
|
|
26
|
-
{
|
|
27
|
-
code: 73,
|
|
28
|
-
name: 'isCCW',
|
|
29
|
-
parser: ToBoolean,
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
code: 51,
|
|
33
|
-
name: 'endAngle',
|
|
34
|
-
parser: Identity,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: 50,
|
|
38
|
-
name: 'startAngle',
|
|
39
|
-
parser: Identity,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
code: 40,
|
|
43
|
-
name: 'radius',
|
|
44
|
-
parser: Identity,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
code: 10,
|
|
48
|
-
name: 'center',
|
|
49
|
-
parser: PointParser,
|
|
50
|
-
},
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
export const EllipseEdgeSnippets: DXFParserSnippet[] = [
|
|
54
|
-
{
|
|
55
|
-
code: 73,
|
|
56
|
-
name: 'isCCW',
|
|
57
|
-
parser: ToBoolean,
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
code: 51,
|
|
61
|
-
name: 'endAngle',
|
|
62
|
-
parser: Identity,
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
code: 50,
|
|
66
|
-
name: 'startAngle',
|
|
67
|
-
parser: Identity,
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
code: 40,
|
|
71
|
-
name: 'lengthOfMinorAxis',
|
|
72
|
-
parser: Identity,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
code: 11,
|
|
76
|
-
name: 'end',
|
|
77
|
-
parser: PointParser,
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
code: 10,
|
|
81
|
-
name: 'center',
|
|
82
|
-
parser: PointParser,
|
|
83
|
-
},
|
|
84
|
-
];
|
|
85
|
-
|
|
86
|
-
export const SplineEdgeSnippets: DXFParserSnippet[] = [
|
|
87
|
-
{
|
|
88
|
-
code: 13,
|
|
89
|
-
name: 'endTangent',
|
|
90
|
-
parser: PointParser,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
code: 12,
|
|
94
|
-
name: 'startTangent',
|
|
95
|
-
parser: PointParser,
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
code: 11,
|
|
99
|
-
name: 'fitDatum',
|
|
100
|
-
isMultiple: true,
|
|
101
|
-
parser: PointParser,
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
code: 97,
|
|
105
|
-
name: 'numberOfFitData',
|
|
106
|
-
parser: Identity,
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
code: 10,
|
|
110
|
-
name: 'controlPoints',
|
|
111
|
-
isMultiple: true,
|
|
112
|
-
parser(curr, scanner) {
|
|
113
|
-
const controlPoint = { ...parsePoint(scanner), weight: 1 };
|
|
114
|
-
curr = scanner.next();
|
|
115
|
-
|
|
116
|
-
if (curr.code === 42) {
|
|
117
|
-
controlPoint.weight = curr.value;
|
|
118
|
-
} else {
|
|
119
|
-
scanner.rewind();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return controlPoint;
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
code: 40,
|
|
127
|
-
name: 'knots',
|
|
128
|
-
isMultiple: true,
|
|
129
|
-
parser: Identity,
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
code: 96,
|
|
133
|
-
name: 'numberOfControlPoints',
|
|
134
|
-
parser: Identity,
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
code: 95,
|
|
138
|
-
name: 'numberOfKnots',
|
|
139
|
-
parser: Identity,
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
code: 74,
|
|
143
|
-
name: 'isPeriodic',
|
|
144
|
-
parser: ToBoolean,
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
code: 73,
|
|
148
|
-
name: 'splineFlag',
|
|
149
|
-
parser: Identity,
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
code: 94,
|
|
153
|
-
name: 'degree',
|
|
154
|
-
parser: Identity,
|
|
155
|
-
},
|
|
156
|
-
];
|
|
157
|
-
|
|
158
|
-
const EdgeSnippetMap = {
|
|
159
|
-
[BoundaryPathEdgeType.Line]: LineEdgeSnippets,
|
|
160
|
-
[BoundaryPathEdgeType.Circular]: CircularEdgeSnippets,
|
|
161
|
-
[BoundaryPathEdgeType.Elliptic]: EllipseEdgeSnippets,
|
|
162
|
-
[BoundaryPathEdgeType.Spline]: SplineEdgeSnippets,
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
export const EdgeBoundaryPathDataSnippets: DXFParserSnippet[] = [
|
|
166
|
-
...CommonBoundaryPathDataSnippets,
|
|
167
|
-
{
|
|
168
|
-
code: 72,
|
|
169
|
-
name: 'edges',
|
|
170
|
-
parser(curr, scanner) {
|
|
171
|
-
const edge = { type: curr.value };
|
|
172
|
-
const parser = createParser(
|
|
173
|
-
EdgeSnippetMap[edge.type as BoundaryPathEdgeType],
|
|
174
|
-
);
|
|
175
|
-
|
|
176
|
-
if (!parser) {
|
|
177
|
-
throw new Error(`Invalid edge type ${edge.type}`);
|
|
178
|
-
}
|
|
179
|
-
curr = scanner.next();
|
|
180
|
-
parser(curr, scanner, edge);
|
|
181
|
-
return edge;
|
|
182
|
-
},
|
|
183
|
-
isMultiple: true,
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
code: 93,
|
|
187
|
-
name: 'numberOfEdges',
|
|
188
|
-
parser: Identity,
|
|
189
|
-
},
|
|
190
|
-
];
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { BoundaryPathTypeFlag } from '../../../../consts';
|
|
2
|
-
import type DxfArrayScanner from '../../../DxfArrayScanner';
|
|
3
|
-
import type { ScannerGroup } from '../../../DxfArrayScanner';
|
|
4
|
-
import { createParser } from '../../../shared/parserGenerator';
|
|
5
|
-
import { EdgeBoundaryPathDataSnippets } from './edge';
|
|
6
|
-
import { PolylineSnippets } from './polyline';
|
|
7
|
-
|
|
8
|
-
export function parseBoundaryPathData(
|
|
9
|
-
curr: ScannerGroup,
|
|
10
|
-
scanner: DxfArrayScanner,
|
|
11
|
-
) {
|
|
12
|
-
// assume start with 92
|
|
13
|
-
const boundaryPathData = {
|
|
14
|
-
boundaryPathTypeFlag: curr.value,
|
|
15
|
-
};
|
|
16
|
-
const isPolyline =
|
|
17
|
-
boundaryPathData.boundaryPathTypeFlag & BoundaryPathTypeFlag.Polyline;
|
|
18
|
-
|
|
19
|
-
curr = scanner.next();
|
|
20
|
-
|
|
21
|
-
if (isPolyline) {
|
|
22
|
-
createParser(PolylineSnippets)(curr, scanner, boundaryPathData);
|
|
23
|
-
return boundaryPathData;
|
|
24
|
-
}
|
|
25
|
-
createParser(EdgeBoundaryPathDataSnippets)(curr, scanner, boundaryPathData);
|
|
26
|
-
return boundaryPathData;
|
|
27
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { parsePoint } from '../../../shared/parsePoint';
|
|
2
|
-
import {
|
|
3
|
-
DXFParserSnippet,
|
|
4
|
-
Identity,
|
|
5
|
-
ToBoolean,
|
|
6
|
-
} from '../../../shared/parserGenerator';
|
|
7
|
-
import { CommonBoundaryPathDataSnippets } from './shared';
|
|
8
|
-
|
|
9
|
-
export const PolylineSnippets: DXFParserSnippet[] = [
|
|
10
|
-
...CommonBoundaryPathDataSnippets,
|
|
11
|
-
{
|
|
12
|
-
code: 10,
|
|
13
|
-
name: 'vertices',
|
|
14
|
-
parser(curr, scanner) {
|
|
15
|
-
const vertex = { ...parsePoint(scanner), bulge: 0 };
|
|
16
|
-
|
|
17
|
-
curr = scanner.next();
|
|
18
|
-
if (curr.code === 42) {
|
|
19
|
-
vertex.bulge = curr.value;
|
|
20
|
-
} else {
|
|
21
|
-
scanner.rewind();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return vertex;
|
|
25
|
-
},
|
|
26
|
-
isMultiple: true,
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
code: 93,
|
|
30
|
-
name: 'numberOfVertices',
|
|
31
|
-
parser: Identity,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
code: 73,
|
|
35
|
-
name: 'isClosed',
|
|
36
|
-
parser: ToBoolean,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
code: 72,
|
|
40
|
-
name: 'hasBulge',
|
|
41
|
-
parser: ToBoolean,
|
|
42
|
-
},
|
|
43
|
-
];
|