@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.
Files changed (254) hide show
  1. package/.eslintrc.json +14 -7
  2. package/.github/workflows/DesignCoreQA.yml +3 -1
  3. package/README.md +11 -4
  4. package/TODO.md +19 -0
  5. package/core/core/core.js +49 -42
  6. package/core/designCore.js +61 -2
  7. package/core/dimensions/alignedDimension.js +142 -0
  8. package/core/dimensions/angularDimension.js +550 -0
  9. package/core/dimensions/baseCircularDimension.js +244 -0
  10. package/core/dimensions/baseDimension.js +558 -0
  11. package/core/dimensions/baseLinearDimension.js +371 -0
  12. package/core/dimensions/diametricDimension.js +82 -0
  13. package/core/dimensions/dimension.js +298 -0
  14. package/core/dimensions/linearDimension.js +29 -0
  15. package/core/dimensions/radialDimension.js +78 -0
  16. package/core/dimensions/rotatedDimension.js +167 -0
  17. package/core/entities/arc.js +314 -60
  18. package/core/entities/arctext.js +642 -0
  19. package/core/entities/basePolyline.js +553 -94
  20. package/core/entities/circle.js +181 -54
  21. package/core/entities/entity.js +154 -74
  22. package/core/entities/hatch.js +807 -0
  23. package/core/entities/insert.js +200 -39
  24. package/core/entities/line.js +196 -134
  25. package/core/entities/lwpolyline.js +21 -44
  26. package/core/entities/point.js +194 -29
  27. package/core/entities/polyline.js +54 -7
  28. package/core/entities/rectangle.js +43 -13
  29. package/core/entities/solid.js +43 -6
  30. package/core/entities/text.js +324 -181
  31. package/core/lib/boundingBox.js +73 -13
  32. package/core/lib/canvas.js +256 -65
  33. package/core/lib/clipboard.js +198 -0
  34. package/core/lib/colour.js +144 -0
  35. package/core/lib/colours.js +367 -301
  36. package/core/lib/commandLine.js +16 -28
  37. package/core/lib/commandManager.js +115 -58
  38. package/core/lib/constants.js +23 -0
  39. package/core/lib/dxf/dxf.js +249 -34
  40. package/core/lib/dxf/dxfFile.js +23 -38
  41. package/core/lib/dxf/dxfIterator.js +17 -5
  42. package/core/lib/dxf/dxfRead.js +23 -7
  43. package/core/lib/dxf/dxfWrite.js +39 -129
  44. package/core/lib/dxf/handleManager.js +97 -0
  45. package/core/lib/dxf/sections/blocks.js +16 -2
  46. package/core/lib/dxf/sections/entities.js +17 -3
  47. package/core/lib/dxf/sections/header.js +10 -1
  48. package/core/lib/dxf/sections/objects.js +36 -0
  49. package/core/lib/dxf/sections/section.js +43 -5
  50. package/core/lib/dxf/sections/tables.js +17 -3
  51. package/core/lib/entityManager.js +178 -0
  52. package/core/lib/fileio.js +14 -4
  53. package/core/lib/headers.js +229 -0
  54. package/core/lib/input.js +46 -0
  55. package/core/lib/inputManager.js +199 -194
  56. package/core/lib/intersect.js +341 -468
  57. package/core/lib/logging.js +25 -1
  58. package/core/lib/matrix.js +6 -8
  59. package/core/lib/mouse.js +24 -79
  60. package/core/lib/patterns.js +690 -0
  61. package/core/lib/promptOptions.js +133 -0
  62. package/core/lib/scene.js +71 -174
  63. package/core/lib/selectionManager.js +74 -48
  64. package/core/lib/selectionWindow.js +24 -10
  65. package/core/lib/settings.js +18 -11
  66. package/core/lib/snapping.js +129 -21
  67. package/core/lib/stateManager.js +288 -0
  68. package/core/lib/strings.js +57 -5
  69. package/core/lib/utils.js +95 -11
  70. package/core/objects/dictionary.js +43 -0
  71. package/core/objects/dictionaryManager.js +80 -0
  72. package/core/properties/dimType.js +117 -0
  73. package/core/properties/flags.js +66 -0
  74. package/core/properties/property.js +26 -0
  75. package/core/properties/propertyManager.js +65 -19
  76. package/core/tables/appId.js +31 -0
  77. package/core/tables/appIdManager.js +44 -0
  78. package/core/tables/block.js +323 -0
  79. package/core/tables/blockManager.js +48 -0
  80. package/core/tables/blockRecord.js +29 -0
  81. package/core/tables/blockRecordManager.js +37 -0
  82. package/core/tables/dimStyle.js +627 -0
  83. package/core/tables/dimStyleManager.js +187 -0
  84. package/core/tables/endblk.js +28 -0
  85. package/core/tables/layer.js +219 -0
  86. package/core/tables/layerManager.js +47 -0
  87. package/core/tables/ltype.js +85 -0
  88. package/core/tables/ltypeManager.js +65 -0
  89. package/core/tables/style.js +145 -0
  90. package/core/tables/styleManager.js +55 -0
  91. package/core/tables/styleManagerBase.js +110 -0
  92. package/core/tables/tableManagerBase.js +354 -0
  93. package/core/tables/ucs.js +28 -0
  94. package/core/tables/ucsManager.js +44 -0
  95. package/core/tables/view.js +28 -0
  96. package/core/tables/viewManager.js +44 -0
  97. package/core/tables/vport.js +70 -0
  98. package/core/tables/vportManager.js +65 -0
  99. package/core/tools/chamfer.js +343 -0
  100. package/core/tools/chamferFilletBase.js +162 -0
  101. package/core/tools/copy.js +68 -40
  102. package/core/tools/copybase.js +65 -0
  103. package/core/tools/copyclip.js +59 -0
  104. package/core/tools/cornerEntity.js +138 -0
  105. package/core/tools/cutclip.js +72 -0
  106. package/core/tools/distance.js +37 -9
  107. package/core/tools/erase.js +43 -13
  108. package/core/tools/explode.js +117 -0
  109. package/core/tools/extend.js +71 -32
  110. package/core/tools/fillet.js +336 -0
  111. package/core/tools/identify.js +33 -6
  112. package/core/tools/matchProp.js +106 -0
  113. package/core/tools/mirror.js +141 -0
  114. package/core/tools/move.js +65 -32
  115. package/core/tools/offset.js +321 -0
  116. package/core/tools/pan.js +54 -0
  117. package/core/tools/pasteclip.js +93 -0
  118. package/core/tools/purge.js +90 -0
  119. package/core/tools/rotate.js +105 -70
  120. package/core/tools/scale.js +166 -0
  121. package/core/tools/tool.js +14 -4
  122. package/core/tools/trim.js +71 -32
  123. package/core/tools/zoom.js +152 -0
  124. package/package.json +3 -305
  125. package/test/dimensions/alignedDimension.test.js +211 -0
  126. package/test/dimensions/angularDimension.test.js +243 -0
  127. package/test/dimensions/baseDimension.test.js +239 -0
  128. package/test/dimensions/diametricDimension.test.js +203 -0
  129. package/test/dimensions/dimension.test.js +102 -0
  130. package/test/dimensions/radialDimension.test.js +203 -0
  131. package/test/dimensions/rotatedDimension.test.js +224 -0
  132. package/test/entities/arc.test.js +463 -41
  133. package/test/entities/arctext.test.js +329 -0
  134. package/test/entities/basePolyline.test.js +459 -10
  135. package/test/entities/circle.test.js +312 -7
  136. package/test/entities/entity.test.js +28 -9
  137. package/test/entities/hatch.test.js +606 -0
  138. package/test/entities/insert.test.js +90 -0
  139. package/test/entities/line.test.js +182 -6
  140. package/test/entities/point.test.js +375 -37
  141. package/test/entities/solid.test.js +156 -0
  142. package/test/entities/text.test.js +533 -7
  143. package/test/integration/exportIntegration.reference.dxf +1706 -0
  144. package/test/integration/exportIntegration.test.js +186 -0
  145. package/test/integration/importExportIntegration.test.js +126 -0
  146. package/test/integration/intersectionIntegration.test.js +880 -0
  147. package/test/integration/userInputIntegration.reference.dxf +1410 -0
  148. package/test/integration/userInputIntegration.test.js +269 -0
  149. package/test/lib/boundingBox.test.js +26 -2
  150. package/test/lib/canvas.test.js +613 -5
  151. package/test/lib/clipboard.test.js +70 -0
  152. package/test/lib/colour.test.js +114 -0
  153. package/test/lib/colours.test.js +63 -18
  154. package/test/lib/commandLine.test.js +159 -22
  155. package/test/lib/commandManager.test.js +4 -4
  156. package/test/lib/constants.test.js +9 -0
  157. package/test/lib/dxf/dxfFile.test.js +6 -2
  158. package/test/lib/dxf/dxfIterator.test.js +1 -1
  159. package/test/lib/dxf/dxfWrite.test.js +173 -0
  160. package/test/lib/dxf/handleManager.test.js +137 -0
  161. package/test/lib/dxf/sections/blocks.test.js +5 -5
  162. package/test/lib/dxf/sections/entities.test.js +4 -4
  163. package/test/lib/dxf/sections/header.test.js +18 -4
  164. package/test/lib/dxf/sections/objects.test.js +132 -0
  165. package/test/lib/dxf/sections/section.test.js +29 -29
  166. package/test/lib/dxf/sections/tables.test.js +3 -3
  167. package/test/lib/entityManager.test.js +163 -0
  168. package/test/lib/headers.test.js +233 -0
  169. package/test/lib/inputManager.test.js +1144 -5
  170. package/test/lib/intersect.test.js +454 -331
  171. package/test/lib/logging.test.js +1 -1
  172. package/test/lib/matrix.test.js +1 -1
  173. package/test/lib/mouse.test.js +327 -4
  174. package/test/lib/patterns.test.js +105 -0
  175. package/test/lib/promptOptions.test.js +179 -0
  176. package/test/lib/scene.test.js +16 -52
  177. package/test/lib/selectionManager.test.js +17 -5
  178. package/test/lib/settings.test.js +111 -5
  179. package/test/lib/snapping.test.js +142 -4
  180. package/test/lib/stateManager.test.js +155 -0
  181. package/test/lib/utils.test.js +81 -1
  182. package/test/objects/dictionary.test.js +81 -0
  183. package/test/objects/dictionaryManager.test.js +34 -0
  184. package/test/properties/dimType.test.js +62 -0
  185. package/test/properties/flags.test.js +164 -0
  186. package/test/properties/property.test.js +13 -0
  187. package/test/properties/propertyManager.test.js +10 -11
  188. package/test/tables/appId.test.js +46 -0
  189. package/test/tables/appIdManager.test.js +72 -0
  190. package/test/tables/block.test.js +157 -0
  191. package/test/tables/blockManager.test.js +52 -0
  192. package/test/tables/blockRecord.test.js +39 -0
  193. package/test/tables/blockRecordManager.test.js +60 -0
  194. package/test/tables/dimstyle.test.js +72 -0
  195. package/test/tables/endblk.test.js +30 -0
  196. package/test/tables/layer.test.js +95 -0
  197. package/test/tables/layerManager.test.js +172 -0
  198. package/test/{styles → tables}/ltype.test.js +7 -7
  199. package/test/{styles → tables}/ltypeManager.test.js +2 -2
  200. package/test/tables/style.test.js +44 -0
  201. package/test/tables/stylemanagerbase.test.js +220 -0
  202. package/test/tables/tableManagerBase.test.js +194 -0
  203. package/test/tables/ucs.test.js +37 -0
  204. package/test/tables/ucsManager.test.js +48 -0
  205. package/test/tables/view.test.js +37 -0
  206. package/test/tables/viewManager.test.js +48 -0
  207. package/test/tables/vport.test.js +117 -0
  208. package/test/tables/vportManager.test.js +54 -0
  209. package/test/test-helpers/test-helpers.js +66 -0
  210. package/test/tools/chamfer.test.js +970 -0
  211. package/test/tools/chamferFilletBase.test.js +446 -0
  212. package/test/tools/copy.test.js +22 -14
  213. package/test/tools/copybase.test.js +93 -0
  214. package/test/tools/copyclip.test.js +92 -0
  215. package/test/tools/cornerEntity.test.js +201 -0
  216. package/test/tools/cutclip.test.js +94 -0
  217. package/test/tools/distance.test.js +140 -18
  218. package/test/tools/erase.test.js +12 -12
  219. package/test/tools/explode.test.js +45 -0
  220. package/test/tools/extend.test.js +326 -44
  221. package/test/tools/fillet.test.js +831 -0
  222. package/test/tools/identify.test.js +115 -16
  223. package/test/tools/matchProp.test.js +84 -0
  224. package/test/tools/mirror.test.js +475 -0
  225. package/test/tools/move.test.js +75 -19
  226. package/test/tools/offset.test.js +748 -0
  227. package/test/tools/pan.test.js +72 -0
  228. package/test/tools/pasteclip.test.js +100 -0
  229. package/test/tools/purge.test.js +89 -0
  230. package/test/tools/rotate.test.js +89 -23
  231. package/test/tools/scale.test.js +529 -0
  232. package/test/tools/trim.test.js +419 -84
  233. package/test/tools/zoom.test.js +504 -0
  234. package/core/entities/alignedDimension.js +0 -279
  235. package/core/entities/angularDimension.js +0 -194
  236. package/core/entities/baseDimension.js +0 -227
  237. package/core/entities/block.js +0 -247
  238. package/core/entities/diametricDimension.js +0 -133
  239. package/core/entities/dimension.js +0 -202
  240. package/core/entities/radialDimension.js +0 -126
  241. package/core/styles/dimStyle.js +0 -719
  242. package/core/styles/dimStyleManager.js +0 -47
  243. package/core/styles/layer.js +0 -133
  244. package/core/styles/layerManager.js +0 -40
  245. package/core/styles/ltype.js +0 -86
  246. package/core/styles/ltypeManager.js +0 -50
  247. package/core/styles/style.js +0 -158
  248. package/core/styles/styleManager.js +0 -43
  249. package/core/styles/styleManagerBase.js +0 -299
  250. package/test/entities/block.test.js +0 -22
  251. package/test/styles/dimstyle.test.js +0 -19
  252. package/test/styles/layerManager.test.js +0 -150
  253. package/test/styles/style.test.js +0 -33
  254. package/test/styles/stylemanagerbase.test.js +0 -219
@@ -1,47 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
- import {DimStyle} from './dimStyle.js';
3
- import {StyleManagerBase} from './styleManagerBase.js';
4
-
5
- export class DimStyleManager extends StyleManagerBase {
6
- constructor() {
7
- super();
8
-
9
- this.indelibleStyles.push('STANDARD');
10
- this.styleProperty = 'styleName';
11
- }
12
-
13
- createStyle(style) {
14
- return new DimStyle(style);
15
- }
16
-
17
- addStandardStyles() {
18
- this.addStyle({
19
- 'name': 'STANDARD',
20
- // DIMCLRD - 176 - Dimension line color
21
- // DIMCLRE - 177 - Dimension extension line color
22
- // DIMCLRT - 178 - Dimension text color
23
- });
24
-
25
- this.addStyle({
26
- 'name': 'ANNOTATIVE',
27
- });
28
-
29
- // DesignCore.scene.saveRequired();
30
- }
31
-
32
- dxf(file) {
33
- // Create table data for dimension styles
34
- file.writeGroupCode('0', 'TABLE');
35
- file.writeGroupCode('2', 'DIMSTYLE');
36
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000);
37
- file.writeGroupCode('100', 'AcDbSymbolTable', DXFFile.Version.R2000);
38
- file.writeGroupCode('100', 'AcDbDimStyleTable', DXFFile.Version.R2000);
39
- file.writeGroupCode('70', this.styleCount());
40
-
41
- for (let i = 0; i < this.styleCount(); i++) {
42
- this.getStyleByIndex(i).dxf(file);
43
- }
44
-
45
- file.writeGroupCode('0', 'ENDTAB');
46
- }
47
- }
@@ -1,133 +0,0 @@
1
- import {Colours} from '../lib/colours.js';
2
- import {DXFFile} from '../lib/dxf/dxfFile.js';
3
-
4
- export class Layer {
5
- constructor(data) {
6
- // Define Properties
7
- this.type = 'Layer';
8
- this.name = '';
9
- this.frozen = false;
10
- this.on = true;
11
- this.locked = false;
12
- this.colour = '#FFFFFF';
13
- this.lineType = 'CONTINUOUS';
14
- this.lineWeight = 'DEFAULT';
15
- this.plotting = true;
16
-
17
-
18
- if (data) {
19
- if (data.name || data[2]) {
20
- // DXF Groupcode 2 - Layer Name
21
- this.name = data.name || data[2];
22
- }
23
-
24
-
25
- if (data.flags || data[70]) {
26
- // DXF Groupcode 70 - Layer Flags
27
- // Standard flags (bit-coded values):
28
- // 1 = Layer is frozen; otherwise layer is thawed
29
- // 2 = Layer is frozen by default in new viewports
30
- // 4 = Layer is locked
31
- // 16 = If set, table entry is externally dependent on an xref
32
- // 32 = If both this bit and bit 16 are set, the externally dependent xref has been successfully resolved
33
- // 64 = If set, the table entry was referenced by at least one entity in the drawing the last time the drawing was edited.
34
-
35
- const flags = data.flags || data[70];
36
- switch (flags) {
37
- case 0:
38
- break;
39
- case 1:
40
- this.frozen = true;
41
- break;
42
- case 2:
43
- this.frozen = true;
44
- break;
45
- case 4:
46
- this.locked = true;
47
- break;
48
- case 16:
49
- break;
50
- case 32:
51
- break;
52
- case 64: // (This flag is for the benefit of AutoCAD commands. It can be ignored by most programs that read DXF files and need not be set by programs that write DXF files.)
53
- break;
54
- }
55
- }
56
-
57
- if (data.colour || data[62]) {
58
- // DXF Groupcode 62 - Color Number
59
- // (present if not BYLAYER); zero indicates the BYBLOCK
60
- // (floating) color; 256 indicates BYLAYER; a negative value indicates that
61
- // the layer is turned off (optional)
62
- this.colour = data.colour || Colours.getHexColour(data[62]);
63
- }
64
-
65
- if (data.lineType || data[6]) {
66
- // DXF Groupcode 6 - Linetype Name
67
- this.lineType = data.lineType || data[6];
68
- }
69
-
70
- if (data.lineWeight || data[370]) {
71
- // DXF Groupcode 370 - Linetype Weight
72
- this.lineWeight = data.lineWeight || data[370];
73
- }
74
-
75
- if (data.plotting || data[290]) {
76
- // DXF Groupcode 290 - Plotting flag
77
- // If set to 0, do not plot this layer
78
- this.plotting = data.plotting || data[290];
79
- }
80
- }
81
- }
82
-
83
- get isVisible() {
84
- if (this.on && !this.frozen) {
85
- return true;
86
- }
87
-
88
- return false;
89
- }
90
-
91
- get isSelectable() {
92
- if (this.isVisible && !this.locked) {
93
- return true;
94
- }
95
-
96
- return false;
97
- }
98
-
99
- getFlags() {
100
- // Standard flags (bit-coded values):
101
- // 1 = Layer is frozen; otherwise layer is thawed.
102
- // 2 = Layer is frozen by default in new viewports.
103
- // 4 = Layer is locked.
104
- // 16 = If set, table entry is externally dependent on an xref.
105
- // 32 = If this bit and bit 16 are both set, the externally dependent xref has been successfully resolved.
106
- // 64 = If set, the table entry was referenced by at least one entity in the drawing the last time the drawing was edited. (This flag is for the benefit of AutoCAD commands. It can be ignored by most programs that read DXF files and need not be set by programs that write DXF files.)
107
- let flags = 0;
108
-
109
- if (this.frozen) {
110
- flags += 1;
111
- }
112
- if (this.locked) {
113
- flags += 4;
114
- }
115
-
116
- return flags;
117
- }
118
-
119
- dxf(file) {
120
- file.writeGroupCode('0', 'LAYER');
121
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000);
122
- file.writeGroupCode('100', 'AcDbSymbolTableRecord', DXFFile.Version.R2000);
123
- file.writeGroupCode('100', 'AcDbLayerTableRecord', DXFFile.Version.R2000);
124
- file.writeGroupCode('2', this.name); // Layername
125
- file.writeGroupCode('70', this.getFlags()); // Flags
126
- const colourValue = this.on ? Colours.getACADColour(this.colour) : (0 - Colours.getACADColour(this.colour));
127
- file.writeGroupCode('62', colourValue); // Colour: Negative if layer is off
128
- file.writeGroupCode('6', this.lineType);
129
- file.writeGroupCode('390', file.nextHandle(), DXFFile.Version.R2000); // plotstylename handle - //TODO: this needs to be linked to the actual plotstyle
130
- // file.writeGroupCode('290', this.plotting ? 1 : 0); //plotting | These items codes don't seem to be
131
- // file.writeGroupCode('370', 'this.lineWeight '); // lineWeight | supported in ACAD.
132
- }
133
- }
@@ -1,40 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
- import {Layer} from './layer.js';
3
- import {StyleManagerBase} from './styleManagerBase.js';
4
-
5
- export class LayerManager extends StyleManagerBase {
6
- constructor() {
7
- super();
8
-
9
- this.indelibleStyles.push('0', 'DEFPOINTS');
10
- this.styleProperty = 'layer';
11
- }
12
-
13
- createStyle(style) {
14
- return new Layer(style);
15
- }
16
-
17
- addStandardStyles() {
18
- this.addStyle({'name': '0', 'colour': '#00BFFF'});
19
- this.addStyle({'name': 'DEFPOINTS', 'plotting': false});
20
- // this.addStyle({'name': 'CENTERLINE', 'colour': '#FFFF00', 'lineType': 'CENTER'});
21
- // this.addStyle({'name': 'HIDDEN', 'colour': '#D6D6D6', 'lineType': 'HIDDEN'});
22
- }
23
-
24
- dxf(file) {
25
- // Create table data for layers
26
- file.writeGroupCode('0', 'TABLE');
27
- file.writeGroupCode('2', 'LAYER');
28
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000);
29
- file.writeGroupCode('100', 'AcDbSymbolTable', DXFFile.Version.R2000);
30
- file.writeGroupCode('70', this.styleCount());
31
-
32
- for (let i = 0; i < this.styleCount(); i++) {
33
- if (this.getStyleByIndex(i).name !== 'DEFPOINTS') {
34
- this.getStyleByIndex(i).dxf(file);
35
- }
36
- }
37
-
38
- file.writeGroupCode('0', 'ENDTAB');
39
- }
40
- }
@@ -1,86 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
-
3
- export class LType {
4
- constructor(data) {
5
- this.type = 'LType';
6
- this.name = '';
7
- this.description = '';
8
- this.pattern = [];
9
- this.flags = 0;
10
-
11
- if (data) {
12
- if (data.name || data[2]) {
13
- // DXF Groupcode 2 - ltype name
14
- this.name = data.name || data[2];
15
- }
16
-
17
- if (data.description || data[3]) {
18
- // DXF Groupcode 3 - description text
19
- this.description = data.description || data[3];
20
- }
21
-
22
- if (data.pattern || data[49]) {
23
- // DXF Groupcode 49 - line type pattern
24
- this.pattern = data.pattern || data[49];
25
- }
26
-
27
- if (data[73]) {
28
- // DXF Groupcode 73 - number of line type elements in data[49]
29
- if (data[73] !== this.pattern.length) {
30
- throw Error('invalid line type pattern');
31
- }
32
- }
33
-
34
- if (data.flags || data[70]) {
35
- // DXF Groupcode 70 - Polyline flag (bit-coded; default = 0):
36
- // 16 = If set, table entry is externally dependent on an xref
37
- // 32 = If this bit and bit 16 are both set, the externally dependent xref has been successfully resolved
38
- // 64 = line type was referenced by at least one entity in the drawing the last time the drawing was edited. (This flag can be ignored by most programs)
39
- this.flags = data.flags || data[70];
40
- }
41
- }
42
- }
43
-
44
- /**
45
- * Get a dash pattern that cairo and html canvas understand
46
- * @param {array} scale
47
- * @returns array for dash pattern
48
- */
49
- getPattern(scale) {
50
- // DXF Patterns use -ve values for gaps and 0.0 for dots
51
- // cairo and canvas require pattern to include +ve non-zero values
52
- const pattern = this.pattern.map((x) => (Math.abs(x) + 1) / scale);
53
- return pattern;
54
- }
55
-
56
- /**
57
- * Write the dxf representation to file
58
- * @param {DXFFile} file
59
- */
60
- dxf(file) {
61
- file.writeGroupCode('0', 'LTYPE');
62
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000);
63
- file.writeGroupCode('100', 'AcDbSymbolTableRecord', DXFFile.Version.R2000);
64
- file.writeGroupCode('100', 'AcDbLinetypeTableRecord', DXFFile.Version.R2000);
65
- file.writeGroupCode('2', this.name);
66
- file.writeGroupCode('70', this.flags);
67
- file.writeGroupCode('3', this.description);
68
- file.writeGroupCode('72', 65); // Alignment code; value is always 65, the ASCII code for A
69
- file.writeGroupCode('73', this.pattern.length);
70
-
71
- let patternLength = 0;
72
-
73
- if (this.pattern.length) {
74
- patternLength = this.pattern.reduce(
75
- (accumulator, patternValue) => accumulator + Math.abs(patternValue),
76
- );
77
- }
78
-
79
- file.writeGroupCode('40', patternLength);
80
-
81
- for (let i = 0; i < this.pattern.length; i++) {
82
- file.writeGroupCode('49', this.pattern[i]);
83
- file.writeGroupCode('74', '0', DXFFile.Version.R2000);
84
- }
85
- }
86
- }
@@ -1,50 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
- import {StyleManagerBase} from './styleManagerBase.js';
3
- import {LType} from './ltype.js';
4
-
5
- export class LTypeManager extends StyleManagerBase {
6
- constructor() {
7
- super();
8
-
9
- this.indelibleStyles.push('CONTINUOUS', 'ByLayer', 'ByBlock');
10
- this.styleProperty = 'linetype';
11
- }
12
-
13
- createStyle(style) {
14
- return new LType(style);
15
- }
16
-
17
- addStandardStyles() {
18
- this.addStyle({'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________'});
19
- // this.addStyle({'name': 'ByLayer'});
20
- // this.addStyle({'name': 'ByBlock'});
21
- }
22
-
23
- getOptionalStyles() {
24
- const styles = [];
25
- styles.push({'name': 'CONTINUOUS', 'description': 'Solid Line ________________________________________'});
26
- styles.push({'name': 'CENTER', 'pattern': [31.75, -6.35, 6.35, -6.35], 'description': 'Center ____ _ ____ _ ____ _ ____ _ ____ _ ____'});
27
- styles.push({'name': 'DASHDOT', 'pattern': [12.7, -6.345, 0, -6.345], 'description': 'Dash dot __ . __ . __ . __ . __ . __ . __ . __'});
28
- styles.push({'name': 'DOT', 'pattern': [0, -6.35], 'description': 'Dot . . . . . . . . . . . . . . . . . . . . . .'});
29
- styles.push({'name': 'DASHED', 'pattern': [12.7, -6.35], 'description': 'Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _'});
30
- styles.push({'name': 'HIDDEN', 'pattern': [6.35, -3.175], 'description': 'Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ _'});
31
- return styles;
32
- }
33
-
34
- dxf(file) {
35
- // Create table data for ltype styles
36
- // The LTYPE Table must preceed the LAYER table
37
- file.writeGroupCode('0', 'TABLE');
38
- file.writeGroupCode('2', 'LTYPE');
39
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000);
40
- file.writeGroupCode('100', 'AcDbSymbolTable', DXFFile.Version.R2000);
41
- file.writeGroupCode('70', this.styleCount());
42
-
43
-
44
- for (let i = 0; i < this.styleCount(); i++) {
45
- this.getStyleByIndex(i).dxf(file);
46
- }
47
-
48
- file.writeGroupCode('0', 'ENDTAB');
49
- }
50
- }
@@ -1,158 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
-
3
- export class Style {
4
- constructor(data) {
5
- // Define Properties
6
- this.type = this.constructor.name;
7
- this.name = '';
8
- this.font = 'Arial'; // TODO: how to set the font to one thats available. See style.js also.
9
- this.textHeight = 2.5;
10
- this.widthFactor = 1;
11
- this.obliqueAngle = 0;
12
- this.lastTextHeight = this.textHeight;
13
- this.flags = 0;
14
- this.standardFlags = 0;
15
-
16
- if (data) {
17
- if (data.name || data[2]) {
18
- // DXF Groupcode 2 - ltype name
19
- this.name = data.name || data[2];
20
- }
21
-
22
- if (data.font || data[3]) {
23
- // DXF Groupcode 3 - style font
24
- this.font = data.font || data[3];
25
- }
26
-
27
- if (data.bigFont || data[4]) {
28
- // DXF Groupcode 4 - big font
29
- this.bigFont = data.bigFont || data[4];
30
- }
31
-
32
- if (data.textHeight || data[40]) {
33
- // DXF Groupcode 40 - Text height
34
- this.textHeight = data.textHeight || data[40];
35
- }
36
-
37
- if (data.widthFactor || data[41]) {
38
- // DXF Groupcode 41 - width factor
39
- this.widthFactor = data.widthFactor || data[41];
40
- }
41
-
42
- if (data.lastTextHeight || data[42]) {
43
- // DXF Groupcode 42 - Last text height
44
- this.lastTextHeight = data.lastTextHeight || data[42];
45
- }
46
-
47
- if (data.obliqueAngle || data[50]) {
48
- // DXF Groupcode 50 - test height
49
- this.obliqueAngle = data.obliqueAngle || data[50];
50
- }
51
-
52
- if (data.standardFlags || data[70]) {
53
- // DXF Groupcode 70 - standard flags
54
- /*
55
- 1 = If set, this entry describes a shape
56
- 4 = Vertical text
57
- 16 = If set, table entry is externally dependent on an xref
58
- 32 = If this bit and bit 16 are both set, the externally dependent xref has been successfully resolved
59
- 64 = If set, the table entry was referenced by at least one entity in the drawing the last time the drawing was edited.
60
- (This flag is for the benefit of AutoCAD commands. It can be ignored.
61
- */
62
- this.standardFlags = data.standardFlags || data[70];
63
- }
64
-
65
- if (data.flags || data[71]) {
66
- // DXF Groupcode 71 - flags (bit-coded values):
67
- // 2 = Text is backward (mirrored in X).
68
- // 4 = Text is upside down (mirrored in Y).
69
- this.flags = data.flags || data[71];
70
- }
71
- }
72
- }
73
-
74
- /**
75
- * Get the vertical value
76
- * @returns {bool}
77
- */
78
- get vertical() {
79
- // Vertical value is bitmasked in standardflags as value 4
80
- return Boolean(this.standardFlags & 4);
81
- }
82
-
83
- /**
84
- * Set the vertical value
85
- * @param {boolean} bool
86
- */
87
- set vertical(bool) {
88
- if (bool) {
89
- // Add vertical flag
90
- this.standardFlags = (this.standardFlags | 4);
91
- } else {
92
- // remove vertical flag
93
- this.standardFlags = (this.standardFlags ^ (this.standardFlags & 4));
94
- }
95
- }
96
-
97
- /**
98
- * Get the backwards value
99
- * @returns {bool}
100
- */
101
- get backwards() {
102
- // Upside down value is bitmasked in flags as value 2
103
- return Boolean(this.flags & 2);
104
- }
105
-
106
- /**
107
- * set the backwards value
108
- * @param {boolean} bool
109
- */
110
- set backwards(bool) {
111
- if (bool) {
112
- // Add flag
113
- this.flags = (this.flags | 2);
114
- } else {
115
- // remove flag
116
- this.flags = (this.flags ^ (this.flags & 2));
117
- }
118
- }
119
-
120
- /**
121
- * Get the upside down value
122
- * @returns {bool}
123
- */
124
- get upsideDown() {
125
- // Upside down value is bitmasked in flags as value 4
126
- return Boolean(this.flags & 4);
127
- }
128
-
129
- /**
130
- * Set the upside down value
131
- * @param {boolean} bool
132
- */
133
- set upsideDown(bool) {
134
- if (bool) {
135
- // Add flag
136
- this.flags = (this.flags | 4);
137
- } else {
138
- // remove flag
139
- this.flags = (this.flags ^ (this.flags & 4));
140
- }
141
- }
142
-
143
- dxf(file) {
144
- file.writeGroupCode('0', 'STYLE');
145
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000); // Handle
146
- file.writeGroupCode('100', 'AcDbSymbolTableRecord', DXFFile.Version.R2000);
147
- file.writeGroupCode('100', 'AcDbTextStyleTableRecord', DXFFile.Version.R2000);
148
- file.writeGroupCode('2', this.name); // Stylename
149
- file.writeGroupCode('3', this.font); // Font
150
- file.writeGroupCode('4', ''); // Big font name blank is none
151
- file.writeGroupCode('40', this.textHeight); // Text Height
152
- file.writeGroupCode('41', this.widthFactor); // Width Factor
153
- file.writeGroupCode('42', this.textHeight); // Last Text Height
154
- file.writeGroupCode('50', this.obliqueAngle);
155
- file.writeGroupCode('70', this.standardFlags); // Standard Flags
156
- file.writeGroupCode('71', this.flags); // Flags
157
- }
158
- }
@@ -1,43 +0,0 @@
1
- import {DXFFile} from '../lib/dxf/dxfFile.js';
2
- import {StyleManagerBase} from './styleManagerBase.js';
3
- import {Style} from './style.js';
4
-
5
- export class StyleManager extends StyleManagerBase {
6
- constructor() {
7
- super();
8
-
9
- this.indelibleStyles.push('STANDARD');
10
- this.styleProperty = 'style';
11
- }
12
-
13
- createStyle(style) {
14
- return new Style(style);
15
- }
16
-
17
- addStandardStyles() {
18
- this.addStyle({
19
- 'name': 'STANDARD',
20
- });
21
-
22
- this.addStyle({
23
- 'name': 'ANNOTATIVE',
24
- });
25
-
26
- // DesignCore.scene.saveRequired();
27
- }
28
-
29
- dxf(file) {
30
- // Create table data for text styles
31
- file.writeGroupCode('0', 'TABLE');
32
- file.writeGroupCode('2', 'STYLE');
33
- file.writeGroupCode('5', file.nextHandle(), DXFFile.Version.R2000); // Handle
34
- file.writeGroupCode('100', 'AcDbSymbolTable', DXFFile.Version.R2000);
35
- file.writeGroupCode('70', this.styleCount());
36
-
37
- for (let i = 0; i < this.styleCount(); i++) {
38
- this.getStyleByIndex(i).dxf(file);
39
- }
40
-
41
- file.writeGroupCode('0', 'ENDTAB');
42
- }
43
- }