@design-core/core 0.0.1 → 0.0.3
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/.eslintrc.json +14 -7
- package/.github/workflows/DesignCoreQA.yml +3 -1
- package/README.md +11 -4
- package/TODO.md +19 -0
- package/core/core/core.js +49 -42
- package/core/designCore.js +61 -2
- package/core/dimensions/alignedDimension.js +142 -0
- package/core/dimensions/angularDimension.js +550 -0
- package/core/dimensions/baseCircularDimension.js +244 -0
- package/core/dimensions/baseDimension.js +558 -0
- package/core/dimensions/baseLinearDimension.js +371 -0
- package/core/dimensions/diametricDimension.js +82 -0
- package/core/dimensions/dimension.js +298 -0
- package/core/dimensions/linearDimension.js +29 -0
- package/core/dimensions/radialDimension.js +78 -0
- package/core/dimensions/rotatedDimension.js +167 -0
- package/core/entities/arc.js +314 -60
- package/core/entities/arctext.js +642 -0
- package/core/entities/basePolyline.js +553 -94
- package/core/entities/circle.js +181 -54
- package/core/entities/entity.js +154 -74
- package/core/entities/hatch.js +807 -0
- package/core/entities/insert.js +200 -39
- package/core/entities/line.js +196 -134
- package/core/entities/lwpolyline.js +21 -44
- package/core/entities/point.js +194 -29
- package/core/entities/polyline.js +54 -7
- package/core/entities/rectangle.js +43 -13
- package/core/entities/solid.js +43 -6
- package/core/entities/text.js +324 -181
- package/core/lib/boundingBox.js +73 -13
- package/core/lib/canvas.js +256 -65
- package/core/lib/clipboard.js +198 -0
- package/core/lib/colour.js +144 -0
- package/core/lib/colours.js +367 -301
- package/core/lib/commandLine.js +16 -28
- package/core/lib/commandManager.js +115 -58
- package/core/lib/constants.js +23 -0
- package/core/lib/dxf/dxf.js +249 -34
- package/core/lib/dxf/dxfFile.js +23 -38
- package/core/lib/dxf/dxfIterator.js +17 -5
- package/core/lib/dxf/dxfRead.js +23 -7
- package/core/lib/dxf/dxfWrite.js +39 -129
- package/core/lib/dxf/handleManager.js +97 -0
- package/core/lib/dxf/sections/blocks.js +16 -2
- package/core/lib/dxf/sections/entities.js +17 -3
- package/core/lib/dxf/sections/header.js +10 -1
- package/core/lib/dxf/sections/objects.js +36 -0
- package/core/lib/dxf/sections/section.js +43 -5
- package/core/lib/dxf/sections/tables.js +17 -3
- package/core/lib/entityManager.js +178 -0
- package/core/lib/fileio.js +14 -4
- package/core/lib/headers.js +229 -0
- package/core/lib/input.js +46 -0
- package/core/lib/inputManager.js +199 -194
- package/core/lib/intersect.js +341 -468
- package/core/lib/logging.js +25 -1
- package/core/lib/matrix.js +6 -8
- package/core/lib/mouse.js +24 -79
- package/core/lib/patterns.js +690 -0
- package/core/lib/promptOptions.js +133 -0
- package/core/lib/scene.js +71 -174
- package/core/lib/selectionManager.js +74 -48
- package/core/lib/selectionWindow.js +24 -10
- package/core/lib/settings.js +18 -11
- package/core/lib/snapping.js +129 -21
- package/core/lib/stateManager.js +288 -0
- package/core/lib/strings.js +57 -5
- package/core/lib/utils.js +95 -11
- package/core/objects/dictionary.js +43 -0
- package/core/objects/dictionaryManager.js +80 -0
- package/core/properties/dimType.js +117 -0
- package/core/properties/flags.js +66 -0
- package/core/properties/property.js +26 -0
- package/core/properties/propertyManager.js +65 -19
- package/core/tables/appId.js +31 -0
- package/core/tables/appIdManager.js +44 -0
- package/core/tables/block.js +323 -0
- package/core/tables/blockManager.js +48 -0
- package/core/tables/blockRecord.js +29 -0
- package/core/tables/blockRecordManager.js +37 -0
- package/core/tables/dimStyle.js +627 -0
- package/core/tables/dimStyleManager.js +187 -0
- package/core/tables/endblk.js +28 -0
- package/core/tables/layer.js +219 -0
- package/core/tables/layerManager.js +47 -0
- package/core/tables/ltype.js +85 -0
- package/core/tables/ltypeManager.js +65 -0
- package/core/tables/style.js +145 -0
- package/core/tables/styleManager.js +55 -0
- package/core/tables/styleManagerBase.js +110 -0
- package/core/tables/tableManagerBase.js +354 -0
- package/core/tables/ucs.js +28 -0
- package/core/tables/ucsManager.js +44 -0
- package/core/tables/view.js +28 -0
- package/core/tables/viewManager.js +44 -0
- package/core/tables/vport.js +70 -0
- package/core/tables/vportManager.js +65 -0
- package/core/tools/chamfer.js +343 -0
- package/core/tools/chamferFilletBase.js +162 -0
- package/core/tools/copy.js +68 -40
- package/core/tools/copybase.js +65 -0
- package/core/tools/copyclip.js +59 -0
- package/core/tools/cornerEntity.js +138 -0
- package/core/tools/cutclip.js +72 -0
- package/core/tools/distance.js +37 -9
- package/core/tools/erase.js +43 -13
- package/core/tools/explode.js +117 -0
- package/core/tools/extend.js +71 -32
- package/core/tools/fillet.js +336 -0
- package/core/tools/identify.js +33 -6
- package/core/tools/matchProp.js +106 -0
- package/core/tools/mirror.js +141 -0
- package/core/tools/move.js +65 -32
- package/core/tools/offset.js +321 -0
- package/core/tools/pan.js +54 -0
- package/core/tools/pasteclip.js +93 -0
- package/core/tools/purge.js +90 -0
- package/core/tools/rotate.js +105 -70
- package/core/tools/scale.js +166 -0
- package/core/tools/tool.js +14 -4
- package/core/tools/trim.js +71 -32
- package/core/tools/zoom.js +152 -0
- package/package.json +3 -305
- package/test/dimensions/alignedDimension.test.js +211 -0
- package/test/dimensions/angularDimension.test.js +243 -0
- package/test/dimensions/baseDimension.test.js +239 -0
- package/test/dimensions/diametricDimension.test.js +203 -0
- package/test/dimensions/dimension.test.js +102 -0
- package/test/dimensions/radialDimension.test.js +203 -0
- package/test/dimensions/rotatedDimension.test.js +224 -0
- package/test/entities/arc.test.js +463 -41
- package/test/entities/arctext.test.js +329 -0
- package/test/entities/basePolyline.test.js +459 -10
- package/test/entities/circle.test.js +312 -7
- package/test/entities/entity.test.js +28 -9
- package/test/entities/hatch.test.js +606 -0
- package/test/entities/insert.test.js +90 -0
- package/test/entities/line.test.js +182 -6
- package/test/entities/point.test.js +375 -37
- package/test/entities/solid.test.js +156 -0
- package/test/entities/text.test.js +533 -7
- package/test/integration/exportIntegration.reference.dxf +1706 -0
- package/test/integration/exportIntegration.test.js +186 -0
- package/test/integration/importExportIntegration.test.js +126 -0
- package/test/integration/intersectionIntegration.test.js +880 -0
- package/test/integration/userInputIntegration.reference.dxf +1410 -0
- package/test/integration/userInputIntegration.test.js +269 -0
- package/test/lib/boundingBox.test.js +26 -2
- package/test/lib/canvas.test.js +613 -5
- package/test/lib/clipboard.test.js +70 -0
- package/test/lib/colour.test.js +114 -0
- package/test/lib/colours.test.js +63 -18
- package/test/lib/commandLine.test.js +159 -22
- package/test/lib/commandManager.test.js +4 -4
- package/test/lib/constants.test.js +9 -0
- package/test/lib/dxf/dxfFile.test.js +6 -2
- package/test/lib/dxf/dxfIterator.test.js +1 -1
- package/test/lib/dxf/dxfWrite.test.js +173 -0
- package/test/lib/dxf/handleManager.test.js +137 -0
- package/test/lib/dxf/sections/blocks.test.js +5 -5
- package/test/lib/dxf/sections/entities.test.js +4 -4
- package/test/lib/dxf/sections/header.test.js +18 -4
- package/test/lib/dxf/sections/objects.test.js +132 -0
- package/test/lib/dxf/sections/section.test.js +29 -29
- package/test/lib/dxf/sections/tables.test.js +3 -3
- package/test/lib/entityManager.test.js +163 -0
- package/test/lib/headers.test.js +233 -0
- package/test/lib/inputManager.test.js +1144 -5
- package/test/lib/intersect.test.js +454 -331
- package/test/lib/logging.test.js +1 -1
- package/test/lib/matrix.test.js +1 -1
- package/test/lib/mouse.test.js +327 -4
- package/test/lib/patterns.test.js +105 -0
- package/test/lib/promptOptions.test.js +179 -0
- package/test/lib/scene.test.js +16 -52
- package/test/lib/selectionManager.test.js +17 -5
- package/test/lib/settings.test.js +111 -5
- package/test/lib/snapping.test.js +142 -4
- package/test/lib/stateManager.test.js +155 -0
- package/test/lib/utils.test.js +81 -1
- package/test/objects/dictionary.test.js +81 -0
- package/test/objects/dictionaryManager.test.js +34 -0
- package/test/properties/dimType.test.js +62 -0
- package/test/properties/flags.test.js +164 -0
- package/test/properties/property.test.js +13 -0
- package/test/properties/propertyManager.test.js +10 -11
- package/test/tables/appId.test.js +46 -0
- package/test/tables/appIdManager.test.js +72 -0
- package/test/tables/block.test.js +157 -0
- package/test/tables/blockManager.test.js +52 -0
- package/test/tables/blockRecord.test.js +39 -0
- package/test/tables/blockRecordManager.test.js +60 -0
- package/test/tables/dimstyle.test.js +72 -0
- package/test/tables/endblk.test.js +30 -0
- package/test/tables/layer.test.js +95 -0
- package/test/tables/layerManager.test.js +172 -0
- package/test/{styles → tables}/ltype.test.js +7 -7
- package/test/{styles → tables}/ltypeManager.test.js +2 -2
- package/test/tables/style.test.js +44 -0
- package/test/tables/stylemanagerbase.test.js +220 -0
- package/test/tables/tableManagerBase.test.js +194 -0
- package/test/tables/ucs.test.js +37 -0
- package/test/tables/ucsManager.test.js +48 -0
- package/test/tables/view.test.js +37 -0
- package/test/tables/viewManager.test.js +48 -0
- package/test/tables/vport.test.js +117 -0
- package/test/tables/vportManager.test.js +54 -0
- package/test/test-helpers/test-helpers.js +66 -0
- package/test/tools/chamfer.test.js +970 -0
- package/test/tools/chamferFilletBase.test.js +446 -0
- package/test/tools/copy.test.js +22 -14
- package/test/tools/copybase.test.js +93 -0
- package/test/tools/copyclip.test.js +92 -0
- package/test/tools/cornerEntity.test.js +201 -0
- package/test/tools/cutclip.test.js +94 -0
- package/test/tools/distance.test.js +140 -18
- package/test/tools/erase.test.js +12 -12
- package/test/tools/explode.test.js +45 -0
- package/test/tools/extend.test.js +326 -44
- package/test/tools/fillet.test.js +831 -0
- package/test/tools/identify.test.js +115 -16
- package/test/tools/matchProp.test.js +84 -0
- package/test/tools/mirror.test.js +475 -0
- package/test/tools/move.test.js +75 -19
- package/test/tools/offset.test.js +748 -0
- package/test/tools/pan.test.js +72 -0
- package/test/tools/pasteclip.test.js +100 -0
- package/test/tools/purge.test.js +89 -0
- package/test/tools/rotate.test.js +89 -23
- package/test/tools/scale.test.js +529 -0
- package/test/tools/trim.test.js +419 -84
- package/test/tools/zoom.test.js +504 -0
- package/core/entities/alignedDimension.js +0 -279
- package/core/entities/angularDimension.js +0 -194
- package/core/entities/baseDimension.js +0 -227
- package/core/entities/block.js +0 -247
- package/core/entities/diametricDimension.js +0 -133
- package/core/entities/dimension.js +0 -202
- package/core/entities/radialDimension.js +0 -126
- package/core/styles/dimStyle.js +0 -719
- package/core/styles/dimStyleManager.js +0 -47
- package/core/styles/layer.js +0 -133
- package/core/styles/layerManager.js +0 -40
- package/core/styles/ltype.js +0 -86
- package/core/styles/ltypeManager.js +0 -50
- package/core/styles/style.js +0 -158
- package/core/styles/styleManager.js +0 -43
- package/core/styles/styleManagerBase.js +0 -299
- package/test/entities/block.test.js +0 -22
- package/test/styles/dimstyle.test.js +0 -19
- package/test/styles/layerManager.test.js +0 -150
- package/test/styles/style.test.js +0 -33
- package/test/styles/stylemanagerbase.test.js +0 -219
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BlockManager } from '../../core/tables/blockManager.js';
|
|
2
|
+
import { Core } from '../../core/core/core.js';
|
|
3
|
+
|
|
4
|
+
// initialise core
|
|
5
|
+
new Core();
|
|
6
|
+
|
|
7
|
+
const blockManager = new BlockManager();
|
|
8
|
+
|
|
9
|
+
// mock block data
|
|
10
|
+
blockManager.items = [{ name: 'blockOne' }, { name: 'blockTwo' }];
|
|
11
|
+
|
|
12
|
+
test('Test blockManager.getItems', () => {
|
|
13
|
+
const blocks = blockManager.getItems();
|
|
14
|
+
expect(blocks).toHaveLength(2);
|
|
15
|
+
|
|
16
|
+
expect(blocks[0]).toHaveProperty('name', 'blockOne');
|
|
17
|
+
expect(blocks[1]).toHaveProperty('name', 'blockTwo');
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('Test blockManager.itemCount', () => {
|
|
21
|
+
const count = blockManager.itemCount();
|
|
22
|
+
expect(count).toBe(2);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test('Test blockManager.addItem', () => {
|
|
26
|
+
const count = blockManager.itemCount();
|
|
27
|
+
blockManager.addItem({ name: 'blockThree' });
|
|
28
|
+
expect(blockManager.itemCount()).toBe(count + 1);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('Test blockManager.deleteblock', () => {
|
|
32
|
+
const count = blockManager.itemCount();
|
|
33
|
+
|
|
34
|
+
// get block index
|
|
35
|
+
const blockIndex = blockManager.getItemIndex('blockThree');
|
|
36
|
+
blockManager.deleteItem(blockIndex);
|
|
37
|
+
expect(blockManager.itemCount()).toBe(count - 1);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('Test blockManager.getItemIndex', () => {
|
|
41
|
+
expect(blockManager.getItemIndex('blockOne')).toBe(0);
|
|
42
|
+
expect(blockManager.getItemIndex('blockTwo')).toBe(1);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('Test blockManager.getItemByName', () => {
|
|
46
|
+
// add a new block to blocks
|
|
47
|
+
blockManager.items.push({ 'name': 'test' });
|
|
48
|
+
const block = blockManager.getItemByName('test');
|
|
49
|
+
expect(block.name).toBe('test');
|
|
50
|
+
// get a block that doesn't exist
|
|
51
|
+
expect(blockManager.getItemByName('Non-Existent')).toBeUndefined();
|
|
52
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
2
|
+
import { BlockRecord } from '../../core/tables/blockRecord.js';
|
|
3
|
+
|
|
4
|
+
test('Test BlockRecord constructor defaults', () => {
|
|
5
|
+
const record = new BlockRecord();
|
|
6
|
+
expect(record.name).toBe('');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Test BlockRecord constructor with name property', () => {
|
|
10
|
+
const record = new BlockRecord({ name: '*Model_Space' });
|
|
11
|
+
expect(record.name).toBe('*Model_Space');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('Test BlockRecord constructor with DXF group code', () => {
|
|
15
|
+
const record = new BlockRecord({ 2: '*Paper_Space' });
|
|
16
|
+
expect(record.name).toBe('*Paper_Space');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('Test BlockRecord.dxf', () => {
|
|
20
|
+
const record = new BlockRecord({ name: '*Model_Space', handle: 'C' });
|
|
21
|
+
const file = new DXFFile();
|
|
22
|
+
record.dxf(file);
|
|
23
|
+
|
|
24
|
+
const dxfString = `0
|
|
25
|
+
BLOCK_RECORD
|
|
26
|
+
5
|
|
27
|
+
C
|
|
28
|
+
100
|
|
29
|
+
AcDbSymbolTableRecord
|
|
30
|
+
100
|
|
31
|
+
AcDbBlockTableRecord
|
|
32
|
+
2
|
|
33
|
+
*Model_Space
|
|
34
|
+
340
|
|
35
|
+
0
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
expect(file.contents).toEqual(dxfString);
|
|
39
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
3
|
+
|
|
4
|
+
const core = new Core();
|
|
5
|
+
const blockRecordManager = core.blockRecordManager;
|
|
6
|
+
|
|
7
|
+
test('Test BlockRecordManager.dxf', () => {
|
|
8
|
+
const file = new DXFFile();
|
|
9
|
+
blockRecordManager.dxf(file);
|
|
10
|
+
|
|
11
|
+
const dxfString = `0
|
|
12
|
+
TABLE
|
|
13
|
+
2
|
|
14
|
+
BLOCK_RECORD
|
|
15
|
+
5
|
|
16
|
+
25
|
|
17
|
+
100
|
|
18
|
+
AcDbSymbolTable
|
|
19
|
+
70
|
|
20
|
+
2
|
|
21
|
+
0
|
|
22
|
+
BLOCK_RECORD
|
|
23
|
+
5
|
|
24
|
+
C
|
|
25
|
+
100
|
|
26
|
+
AcDbSymbolTableRecord
|
|
27
|
+
100
|
|
28
|
+
AcDbBlockTableRecord
|
|
29
|
+
2
|
|
30
|
+
*Model_Space
|
|
31
|
+
340
|
|
32
|
+
0
|
|
33
|
+
0
|
|
34
|
+
BLOCK_RECORD
|
|
35
|
+
5
|
|
36
|
+
F
|
|
37
|
+
100
|
|
38
|
+
AcDbSymbolTableRecord
|
|
39
|
+
100
|
|
40
|
+
AcDbBlockTableRecord
|
|
41
|
+
2
|
|
42
|
+
*Paper_Space
|
|
43
|
+
340
|
|
44
|
+
0
|
|
45
|
+
0
|
|
46
|
+
ENDTAB
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
expect(file.contents).toEqual(dxfString);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('Test BlockRecordManager.dxf block count', () => {
|
|
53
|
+
const file = new DXFFile();
|
|
54
|
+
blockRecordManager.dxf(file);
|
|
55
|
+
|
|
56
|
+
// default blocks: *Model_Space and *Paper_Space
|
|
57
|
+
const lines = file.contents.split('\n');
|
|
58
|
+
const seventyIndex = lines.indexOf('70');
|
|
59
|
+
expect(lines[seventyIndex + 1]).toBe('2');
|
|
60
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DimStyle } from '../../core/tables/dimStyle';
|
|
2
|
+
|
|
3
|
+
describe('DimStyle', () => {
|
|
4
|
+
let style;
|
|
5
|
+
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
const data = {};
|
|
8
|
+
style = new DimStyle(data);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('getValue returns correct default values', () => {
|
|
12
|
+
expect(style.getValue('DIMSE1')).toBe(0); // Suppress first extension line
|
|
13
|
+
expect(style.getValue('DIMASZ')).toBe(0.18); // Arrow size
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('vertical flag getter and setter', () => {
|
|
17
|
+
expect(style.vertical).toBe(false);
|
|
18
|
+
expect(style.standardFlags.getFlagValue()).toBe(0);
|
|
19
|
+
|
|
20
|
+
style.vertical = true;
|
|
21
|
+
expect(style.vertical).toBe(true);
|
|
22
|
+
expect(style.standardFlags.hasFlag(4)).toBe(true);
|
|
23
|
+
expect(style.standardFlags.getFlagValue()).toBe(4);
|
|
24
|
+
|
|
25
|
+
style.vertical = false;
|
|
26
|
+
expect(style.vertical).toBe(false);
|
|
27
|
+
expect(style.standardFlags.hasFlag(4)).toBe(false);
|
|
28
|
+
expect(style.standardFlags.getFlagValue()).toBe(0);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('DimStyle text-related properties and edge cases', () => {
|
|
32
|
+
// Test default text style properties
|
|
33
|
+
expect(style.getValue('DIMTXSTY')).toBeDefined(); // Text style name
|
|
34
|
+
expect(typeof style.getValue('DIMTXT')).toBe('number'); // Text height
|
|
35
|
+
expect(typeof style.getValue('DIMGAP')).toBe('number'); // Gap between text and dimension line
|
|
36
|
+
expect(typeof style.getValue('DIMTAD')).toBe('number'); // Text vertical position
|
|
37
|
+
expect(typeof style.getValue('DIMJUST')).toBe('number'); // Text justification
|
|
38
|
+
expect(typeof style.getValue('DIMTIH')).toBe('number'); // Text inside horizontal
|
|
39
|
+
expect(typeof style.getValue('DIMTOH')).toBe('number'); // Text outside horizontal
|
|
40
|
+
|
|
41
|
+
// Set and get a custom value
|
|
42
|
+
style.setValue('DIMTXT', 3.14);
|
|
43
|
+
expect(style.getValue('DIMTXT')).toBe(3.14);
|
|
44
|
+
|
|
45
|
+
// Unknown property returns undefined or default
|
|
46
|
+
expect(style.getValue('DOES_NOT_EXIST')).toBeUndefined();
|
|
47
|
+
|
|
48
|
+
// Test setting and getting string property
|
|
49
|
+
style.setValue('DIMTXSTY', 'MyTextStyle');
|
|
50
|
+
expect(style.getValue('DIMTXSTY')).toBe('MyTextStyle');
|
|
51
|
+
|
|
52
|
+
// Test boolean property
|
|
53
|
+
style.setValue('DIMTIX', true);
|
|
54
|
+
expect(style.getValue('DIMTIX')).toBe(1);
|
|
55
|
+
style.setValue('DIMTIX', false);
|
|
56
|
+
expect(style.getValue('DIMTIX')).toBe(0);
|
|
57
|
+
|
|
58
|
+
// Test numeric property edge case
|
|
59
|
+
style.setValue('DIMTAD', 99);
|
|
60
|
+
expect(style.getValue('DIMTAD')).toBe(99);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('setValue sets property correctly', () => {
|
|
64
|
+
style.setValue('DIMTXT', 42);
|
|
65
|
+
expect(style.DIMTXT).toBe(42);
|
|
66
|
+
expect(style.getValue('DIMTXT')).toBe(42);
|
|
67
|
+
style.setValue('customProp', 'hello');
|
|
68
|
+
expect(style.customProp).toBeUndefined();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EndBlock } from '../../core/tables/endblk.js';
|
|
2
|
+
import { File } from '../test-helpers/test-helpers.js';
|
|
3
|
+
|
|
4
|
+
test('Test EndBlock constructor defaults', () => {
|
|
5
|
+
const endblk = new EndBlock();
|
|
6
|
+
expect(endblk.layer).toBe('0');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
test('Test EndBlock constructor with layer', () => {
|
|
10
|
+
const endblk = new EndBlock({ 8: 'TestLayer' });
|
|
11
|
+
expect(endblk.layer).toBe('TestLayer');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('Test EndBlock.dxf', () => {
|
|
15
|
+
const endblk = new EndBlock({ handle: '1' });
|
|
16
|
+
const file = new File();
|
|
17
|
+
endblk.dxf(file);
|
|
18
|
+
|
|
19
|
+
const dxfString = `0
|
|
20
|
+
ENDBLK
|
|
21
|
+
5
|
|
22
|
+
1
|
|
23
|
+
100
|
|
24
|
+
AcDbEntity
|
|
25
|
+
100
|
|
26
|
+
AcDbBlockEnd
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
expect(file.contents).toEqual(dxfString);
|
|
30
|
+
});
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Layer } from '../../core/tables/layer';
|
|
2
|
+
|
|
3
|
+
import { File } from '../test-helpers/test-helpers.js';
|
|
4
|
+
|
|
5
|
+
test('Test Layer.frozen', () => {
|
|
6
|
+
const layer = new Layer();
|
|
7
|
+
expect(layer.frozen).toBe(false);
|
|
8
|
+
expect(layer.flags.getFlagValue()).toBe(0);
|
|
9
|
+
|
|
10
|
+
layer.frozen = true;
|
|
11
|
+
expect(layer.frozen).toBe(true);
|
|
12
|
+
expect(layer.flags.hasFlag(1)).toBe(true);
|
|
13
|
+
expect(layer.flags.getFlagValue()).toBe(1);
|
|
14
|
+
|
|
15
|
+
layer.frozen = false;
|
|
16
|
+
expect(layer.frozen).toBe(false);
|
|
17
|
+
expect(layer.flags.hasFlag(1)).toBe(false);
|
|
18
|
+
expect(layer.flags.getFlagValue()).toBe(0);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('Test Layer.locked', () => {
|
|
22
|
+
const layer = new Layer();
|
|
23
|
+
expect(layer.locked).toBe(false);
|
|
24
|
+
expect(layer.flags.getFlagValue()).toBe(0);
|
|
25
|
+
|
|
26
|
+
layer.locked = true;
|
|
27
|
+
expect(layer.locked).toBe(true);
|
|
28
|
+
expect(layer.flags.hasFlag(4)).toBe(true);
|
|
29
|
+
expect(layer.flags.getFlagValue()).toBe(4);
|
|
30
|
+
|
|
31
|
+
layer.locked = false;
|
|
32
|
+
expect(layer.locked).toBe(false);
|
|
33
|
+
expect(layer.flags.hasFlag(4)).toBe(false);
|
|
34
|
+
expect(layer.flags.getFlagValue()).toBe(0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('Test Layer.isVisible', () => {
|
|
38
|
+
const layer = new Layer();
|
|
39
|
+
expect(layer.isVisible).toBe(true);
|
|
40
|
+
|
|
41
|
+
layer.frozen = true;
|
|
42
|
+
expect(layer.isVisible).toBe(false);
|
|
43
|
+
|
|
44
|
+
layer.frozen = false;
|
|
45
|
+
expect(layer.isVisible).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('Test Layer.isSelectable', () => {
|
|
49
|
+
const layer = new Layer();
|
|
50
|
+
expect(layer.isSelectable).toBe(true);
|
|
51
|
+
|
|
52
|
+
layer.frozen = true;
|
|
53
|
+
expect(layer.isSelectable).toBe(false);
|
|
54
|
+
|
|
55
|
+
layer.frozen = false;
|
|
56
|
+
expect(layer.isSelectable).toBe(true);
|
|
57
|
+
|
|
58
|
+
layer.locked = true;
|
|
59
|
+
expect(layer.isSelectable).toBe(false);
|
|
60
|
+
|
|
61
|
+
layer.locked = false;
|
|
62
|
+
expect(layer.isSelectable).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('Test Layer.dxf', () => {
|
|
66
|
+
const layer = new Layer({ handle: 'A', name: 'TestLayer' });
|
|
67
|
+
const file = new File();
|
|
68
|
+
layer.dxf(file);
|
|
69
|
+
// console.log(file.contents);
|
|
70
|
+
|
|
71
|
+
const dxfString = `0
|
|
72
|
+
LAYER
|
|
73
|
+
5
|
|
74
|
+
A
|
|
75
|
+
100
|
|
76
|
+
AcDbSymbolTableRecord
|
|
77
|
+
100
|
|
78
|
+
AcDbLayerTableRecord
|
|
79
|
+
2
|
|
80
|
+
TestLayer
|
|
81
|
+
70
|
|
82
|
+
0
|
|
83
|
+
62
|
|
84
|
+
7
|
|
85
|
+
6
|
|
86
|
+
CONTINUOUS
|
|
87
|
+
290
|
|
88
|
+
1
|
|
89
|
+
390
|
|
90
|
+
0
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
expect(file.contents).toEqual(dxfString);
|
|
94
|
+
});
|
|
95
|
+
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
|
+
import { Point } from '../../core/entities/point.js';
|
|
3
|
+
|
|
4
|
+
const core = new Core();
|
|
5
|
+
const layerManager = core.layerManager;
|
|
6
|
+
|
|
7
|
+
test('Test LayerManager.getItems', () => {
|
|
8
|
+
const layers = layerManager.getItems();
|
|
9
|
+
expect(layers).toHaveLength(2);
|
|
10
|
+
|
|
11
|
+
expect(layers[0]).toHaveProperty('name', '0');
|
|
12
|
+
expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('Test LayerManager.itemCount', () => {
|
|
16
|
+
const count = layerManager.itemCount();
|
|
17
|
+
expect(count).toBe(2);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('Test LayerManager.newItem', () => {
|
|
21
|
+
const count = layerManager.itemCount();
|
|
22
|
+
layerManager.newItem();
|
|
23
|
+
expect(layerManager.itemCount()).toBe(count + 1);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('Test LayerManager.getUniqueName', () => {
|
|
27
|
+
// existing defpoints layer
|
|
28
|
+
let name = layerManager.getUniqueName('DEFPOINTS');
|
|
29
|
+
expect(name).toBe('DEFPOINTS_1');
|
|
30
|
+
// existing NEW_LAYER layer
|
|
31
|
+
name = layerManager.getUniqueName('NEW_LAYER');
|
|
32
|
+
expect(name).toBe('NEW_LAYER_1');
|
|
33
|
+
// unique layer
|
|
34
|
+
name = layerManager.getUniqueName('UNIQUE_LAYER');
|
|
35
|
+
expect(name).toBe('UNIQUE_LAYER');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('Test LayerManager.addItem', () => {
|
|
39
|
+
const count = layerManager.itemCount();
|
|
40
|
+
layerManager.addItem({ 'name': 'test', 'colour': '#00BFFF' });
|
|
41
|
+
expect(layerManager.itemCount()).toBe(count + 1);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('Test LayerManager.deleteStyle', () => {
|
|
45
|
+
const count = layerManager.itemCount();
|
|
46
|
+
// defpoints can't be deleted
|
|
47
|
+
layerManager.deleteStyle('DEFPOINTS');
|
|
48
|
+
expect(layerManager.itemCount()).toBe(count);
|
|
49
|
+
|
|
50
|
+
// clayer can't be deleted
|
|
51
|
+
layerManager.deleteStyle(layerManager.getCstyle());
|
|
52
|
+
expect(layerManager.itemCount()).toBe(count);
|
|
53
|
+
|
|
54
|
+
// test should be deleted
|
|
55
|
+
layerManager.deleteStyle(layerManager.getItemIndex('test'));
|
|
56
|
+
expect(layerManager.itemCount()).toBe(count - 1);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('Test LayerManager.deleteStyle', () => {
|
|
60
|
+
const count = layerManager.itemCount();
|
|
61
|
+
layerManager.deleteStyle(2);
|
|
62
|
+
expect(layerManager.itemCount()).toBe(count - 1);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('Test LayerManager.getCstyle', () => {
|
|
66
|
+
const clayer = layerManager.getCstyle();
|
|
67
|
+
expect(clayer).toBe('0');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('Test LayerManager.setCstyle', () => {
|
|
71
|
+
const layer = layerManager.getItems().at(-1).name;
|
|
72
|
+
layerManager.setCstyle(layer);
|
|
73
|
+
expect(layerManager.getCstyle()).toBe(layer);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('Test LayerManager.itemExists', () => {
|
|
77
|
+
expect(layerManager.itemExists('DEFPOINTS')).toBe(true);
|
|
78
|
+
expect(layerManager.itemExists('OBSCURE_LAYER_NAME')).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('Test LayerManager.checkStyles', () => {
|
|
82
|
+
layerManager.layers = [];
|
|
83
|
+
|
|
84
|
+
const newItemName = 'checkStyles';
|
|
85
|
+
const startPoint = new Point();
|
|
86
|
+
const endPoint = new Point(10, 10);
|
|
87
|
+
|
|
88
|
+
const data = {
|
|
89
|
+
points: [startPoint, endPoint],
|
|
90
|
+
colour: '#FFFFFF',
|
|
91
|
+
layer: newItemName,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
core.scene.addItem('Line', data);
|
|
95
|
+
|
|
96
|
+
layerManager.checkStyles();
|
|
97
|
+
const layers = layerManager.getItems();
|
|
98
|
+
expect(layers).toHaveLength(3);
|
|
99
|
+
|
|
100
|
+
expect(layers[0]).toHaveProperty('name', '0');
|
|
101
|
+
expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
|
|
102
|
+
expect(layers[2]).toHaveProperty('name', newItemName);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('Test LayerManager.checkItems', () => {
|
|
106
|
+
layerManager.layers = [];
|
|
107
|
+
|
|
108
|
+
const newItemName = 'checkStyles';
|
|
109
|
+
const startPoint = new Point();
|
|
110
|
+
const endPoint = new Point(10, 10);
|
|
111
|
+
|
|
112
|
+
const data = {
|
|
113
|
+
points: [startPoint, endPoint],
|
|
114
|
+
colour: '#FFFFFF',
|
|
115
|
+
layer: newItemName,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
core.scene.addItem('Line', data);
|
|
119
|
+
|
|
120
|
+
layerManager.checkItems();
|
|
121
|
+
const layers = layerManager.getItems();
|
|
122
|
+
expect(layers).toHaveLength(3);
|
|
123
|
+
|
|
124
|
+
expect(layers[0]).toHaveProperty('name', '0');
|
|
125
|
+
expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
|
|
126
|
+
expect(layers[2]).toHaveProperty('name', newItemName);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('Test LayerManager.addStandardItems', () => {
|
|
130
|
+
layerManager.clearItems();
|
|
131
|
+
|
|
132
|
+
layerManager.addStandardItems();
|
|
133
|
+
|
|
134
|
+
const layers = layerManager.getItems();
|
|
135
|
+
expect(layers).toHaveLength(2);
|
|
136
|
+
|
|
137
|
+
expect(layers[0]).toHaveProperty('name', '0');
|
|
138
|
+
expect(layers[1]).toHaveProperty('name', 'DEFPOINTS');
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('Test LayerManager.getItemIndex', () => {
|
|
142
|
+
layerManager.addItem({ 'name': 'addItem', 'colour': '#00BFFF' });
|
|
143
|
+
// get index for test layer - should be the last layer
|
|
144
|
+
expect(layerManager.getItemIndex('addItem')).toBe(layerManager.itemCount() - 1);
|
|
145
|
+
// get index for a layer that doesn't exist
|
|
146
|
+
expect(layerManager.getItemIndex('no-exist')).toBe(-1);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('Test LayerManager.getItemByName', () => {
|
|
150
|
+
layerManager.addItem({ 'name': 'test' });
|
|
151
|
+
const layer = layerManager.getItemByName('test');
|
|
152
|
+
expect(layer.name).toBe('test');
|
|
153
|
+
// get a layer that doesn't exist
|
|
154
|
+
expect(layerManager.getItemByName('Non-Existent')).toBeUndefined();
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test('Test LayerManager.getItemByIndex', () => {
|
|
158
|
+
const testLayer = layerManager.getItemByName('test');
|
|
159
|
+
const layer = layerManager.getItemByIndex(layerManager.getItemIndex('test'));
|
|
160
|
+
expect(testLayer === layer).toBe(true);
|
|
161
|
+
// get a layer that doesn't exist
|
|
162
|
+
expect(layerManager.getItemByIndex(1000)).toBeUndefined();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test('Test LayerManager.renameStyle', () => {
|
|
166
|
+
const index = layerManager.getItemIndex('test');
|
|
167
|
+
const newItemname = 'RENAMED_TEST';
|
|
168
|
+
layerManager.renameStyle(index, newItemname);
|
|
169
|
+
|
|
170
|
+
expect(layerManager.getItemIndex(newItemname)).toBe(index);
|
|
171
|
+
expect(layerManager.getItemIndex('test')).toBe(-1);
|
|
172
|
+
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {DXFFile} from '../../core/lib/dxf/dxfFile.js';
|
|
2
|
-
import {LType} from '../../core/
|
|
1
|
+
import { DXFFile } from '../../core/lib/dxf/dxfFile.js';
|
|
2
|
+
import { LType } from '../../core/tables/ltype.js';
|
|
3
3
|
|
|
4
4
|
const file = new DXFFile();
|
|
5
5
|
const R12File = new DXFFile('R12');
|
|
6
6
|
|
|
7
|
-
const continuousLType = new LType({'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________'});
|
|
8
|
-
const dashedLType = new LType({'name': 'DASHED', 'pattern': [12.7, -6.35], 'description': 'Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _'});
|
|
7
|
+
const continuousLType = new LType({ 'handle': 'A', 'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________' });
|
|
8
|
+
const dashedLType = new LType({ 'handle': 'A', 'name': 'DASHED', 'pattern': [12.7, -6.35], 'description': 'Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _' });
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
const continuousDxf = `0
|
|
@@ -119,9 +119,9 @@ test('Test LType.dxf', () => {
|
|
|
119
119
|
});
|
|
120
120
|
|
|
121
121
|
test('Test LType.getPattern', () => {
|
|
122
|
-
const patternOneLType = new LType({'name': 'Pattern One', 'pattern': [10, 10]});
|
|
123
|
-
const patternTwoLType = new LType({'name': 'Pattern Two', 'pattern': [10, -10]});
|
|
124
|
-
const patternThreeLType = new LType({'name': 'Pattern Three', 'pattern': [10, 0, -1]});
|
|
122
|
+
const patternOneLType = new LType({ 'name': 'Pattern One', 'pattern': [10, 10] });
|
|
123
|
+
const patternTwoLType = new LType({ 'name': 'Pattern Two', 'pattern': [10, -10] });
|
|
124
|
+
const patternThreeLType = new LType({ 'name': 'Pattern Three', 'pattern': [10, 0, -1] });
|
|
125
125
|
// Scale 1
|
|
126
126
|
expect(patternOneLType.getPattern(1)).toEqual([11, 11]);
|
|
127
127
|
expect(patternTwoLType.getPattern(1)).toEqual([11, 11]);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {Core} from '../../core/core/core.js';
|
|
1
|
+
import { Core } from '../../core/core/core.js';
|
|
2
2
|
|
|
3
3
|
const core = new Core();
|
|
4
4
|
const lineTypeManager = core.ltypeManager;
|
|
5
5
|
|
|
6
|
-
test('Test LineTypeManager.
|
|
6
|
+
test('Test LineTypeManager.getItems', () => {
|
|
7
7
|
const layers = lineTypeManager.getOptionalStyles();
|
|
8
8
|
expect(layers).toHaveLength(6);
|
|
9
9
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Style } from '../../core/tables/style';
|
|
2
|
+
|
|
3
|
+
test('Test Style.vertical', () => {
|
|
4
|
+
const style = new Style();
|
|
5
|
+
expect(style.vertical).toBe(false);
|
|
6
|
+
expect(style.standardFlags.getFlagValue()).toBe(0);
|
|
7
|
+
|
|
8
|
+
style.vertical = true;
|
|
9
|
+
expect(style.vertical).toBe(true);
|
|
10
|
+
expect(style.standardFlags.hasFlag(4)).toBe(true);
|
|
11
|
+
expect(style.standardFlags.getFlagValue()).toBe(4);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
test('Test Style.backwards', () => {
|
|
16
|
+
const style = new Style();
|
|
17
|
+
expect(style.backwards).toBe(false);
|
|
18
|
+
expect(style.flags.getFlagValue()).toBe(0);
|
|
19
|
+
|
|
20
|
+
style.backwards = true;
|
|
21
|
+
expect(style.backwards).toBe(true);
|
|
22
|
+
expect(style.flags.hasFlag(2)).toBe(true);
|
|
23
|
+
expect(style.flags.getFlagValue()).toBe(2);
|
|
24
|
+
|
|
25
|
+
style.backwards = false;
|
|
26
|
+
expect(style.backwards).toBe(false);
|
|
27
|
+
expect(style.flags.hasFlag(2)).toBe(false);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('Test Style.upsideDown', () => {
|
|
31
|
+
const style = new Style();
|
|
32
|
+
expect(style.upsideDown).toBe(false);
|
|
33
|
+
expect(style.flags.getFlagValue()).toBe(0);
|
|
34
|
+
|
|
35
|
+
style.upsideDown = true;
|
|
36
|
+
expect(style.upsideDown).toBe(true);
|
|
37
|
+
expect(style.flags.hasFlag(4)).toBe(true);
|
|
38
|
+
expect(style.flags.getFlagValue()).toBe(4);
|
|
39
|
+
|
|
40
|
+
style.upsideDown = false;
|
|
41
|
+
expect(style.upsideDown).toBe(false);
|
|
42
|
+
expect(style.flags.hasFlag(4)).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
|