@mlightcad/data-model 1.10.7 → 1.11.0

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 (218) hide show
  1. package/README.md +1 -1
  2. package/dist/data-model.cjs +12 -12
  3. package/lib/acis/AcDbAcisDecode.d.ts +3 -3
  4. package/lib/acis/AcDbAcisDecode.js +8 -8
  5. package/lib/acis/AcDbAcisEntities.d.ts +2 -2
  6. package/lib/acis/AcDbAcisEntities.js +2 -2
  7. package/lib/acis/AcDbAcisGeometry.d.ts +5 -5
  8. package/lib/acis/AcDbAcisGeometry.js +5 -5
  9. package/lib/acis/AcDbAcisSab.d.ts +1 -1
  10. package/lib/acis/AcDbAcisSab.js +1 -1
  11. package/lib/acis/AcDbAcisSatWireframe.d.ts +1 -1
  12. package/lib/acis/AcDbAcisSatWireframe.js +3 -3
  13. package/lib/acis/AcDbAcisWireframe.js +8 -8
  14. package/lib/acis/index.d.ts +6 -6
  15. package/lib/acis/index.d.ts.map +1 -1
  16. package/lib/acis/index.js +6 -6
  17. package/lib/acis/index.js.map +1 -1
  18. package/lib/base/AcDbHostApplicationServices.d.ts +1 -1
  19. package/lib/base/AcDbHostApplicationServices.js +3 -3
  20. package/lib/base/AcDbObject.d.ts +1 -1
  21. package/lib/base/AcDbObject.d.ts.map +1 -1
  22. package/lib/base/AcDbObject.js +9 -6
  23. package/lib/base/AcDbObject.js.map +1 -1
  24. package/lib/base/index.d.ts +2 -2
  25. package/lib/base/index.js +2 -2
  26. package/lib/converter/AcDbRegenerator.d.ts.map +1 -1
  27. package/lib/converter/AcDbRegenerator.js +40 -4
  28. package/lib/converter/AcDbRegenerator.js.map +1 -1
  29. package/lib/converter/index.d.ts +1 -1
  30. package/lib/converter/index.d.ts.map +1 -1
  31. package/lib/converter/index.js +1 -1
  32. package/lib/converter/index.js.map +1 -1
  33. package/lib/converter/worker/AcDbWorkerManager.d.ts +1 -1
  34. package/lib/converter/worker/AcDbWorkerManager.d.ts.map +1 -1
  35. package/lib/converter/worker/AcDbWorkerManager.js +1 -1
  36. package/lib/converter/worker/AcDbWorkerManager.js.map +1 -1
  37. package/lib/converter/worker/index.d.ts +1 -1
  38. package/lib/converter/worker/index.d.ts.map +1 -1
  39. package/lib/converter/worker/index.js +1 -1
  40. package/lib/converter/worker/index.js.map +1 -1
  41. package/lib/database/AcDbDatabase.d.ts +49 -0
  42. package/lib/database/AcDbDatabase.d.ts.map +1 -1
  43. package/lib/database/AcDbDatabase.js +304 -27
  44. package/lib/database/AcDbDatabase.js.map +1 -1
  45. package/lib/database/AcDbLayerTableRecord.d.ts +1 -1
  46. package/lib/database/AcDbLayerTableRecord.d.ts.map +1 -1
  47. package/lib/database/AcDbLayerTableRecord.js +3 -3
  48. package/lib/database/AcDbLayerTableRecord.js.map +1 -1
  49. package/lib/database/index.d.ts +1 -1
  50. package/lib/database/index.d.ts.map +1 -1
  51. package/lib/database/index.js +1 -1
  52. package/lib/database/index.js.map +1 -1
  53. package/lib/database/transaction/AcDbChangeApplier.d.ts +4 -4
  54. package/lib/database/transaction/AcDbChangeApplier.d.ts.map +1 -1
  55. package/lib/database/transaction/AcDbChangeApplier.js +6 -6
  56. package/lib/database/transaction/AcDbChangeApplier.js.map +1 -1
  57. package/lib/database/transaction/AcDbChangeRecorder.d.ts.map +1 -1
  58. package/lib/database/transaction/AcDbChangeRecorder.js +2 -2
  59. package/lib/database/transaction/AcDbChangeRecorder.js.map +1 -1
  60. package/lib/database/transaction/AcDbDatabaseChange.d.ts +1 -1
  61. package/lib/database/transaction/AcDbDatabaseChange.d.ts.map +1 -1
  62. package/lib/database/transaction/AcDbDatabaseChange.js +1 -1
  63. package/lib/database/transaction/AcDbDatabaseChange.js.map +1 -1
  64. package/lib/database/transaction/AcDbDatabaseTransactionManager.js +7 -7
  65. package/lib/database/transaction/AcDbDatabaseTransactionManager.js.map +1 -1
  66. package/lib/database/transaction/index.d.ts +2 -2
  67. package/lib/database/transaction/index.d.ts.map +1 -1
  68. package/lib/database/transaction/index.js +2 -2
  69. package/lib/database/transaction/index.js.map +1 -1
  70. package/lib/entity/AcDb3dSolid.js +3 -3
  71. package/lib/entity/AcDbArc.d.ts.map +1 -1
  72. package/lib/entity/AcDbArc.js +7 -7
  73. package/lib/entity/AcDbArc.js.map +1 -1
  74. package/lib/entity/AcDbBlockReference.d.ts +6 -0
  75. package/lib/entity/AcDbBlockReference.d.ts.map +1 -1
  76. package/lib/entity/AcDbBlockReference.js +12 -0
  77. package/lib/entity/AcDbBlockReference.js.map +1 -1
  78. package/lib/entity/AcDbCircle.d.ts.map +1 -1
  79. package/lib/entity/AcDbCircle.js +3 -3
  80. package/lib/entity/AcDbCircle.js.map +1 -1
  81. package/lib/entity/AcDbEllipse.d.ts.map +1 -1
  82. package/lib/entity/AcDbEllipse.js +3 -3
  83. package/lib/entity/AcDbEllipse.js.map +1 -1
  84. package/lib/entity/AcDbFace.js +2 -2
  85. package/lib/entity/AcDbFrame.d.ts +15 -0
  86. package/lib/entity/AcDbFrame.d.ts.map +1 -0
  87. package/lib/entity/AcDbFrame.js +36 -0
  88. package/lib/entity/AcDbFrame.js.map +1 -0
  89. package/lib/entity/AcDbLeader.js +2 -2
  90. package/lib/entity/AcDbLeader.js.map +1 -1
  91. package/lib/entity/AcDbOle2Frame.d.ts +390 -0
  92. package/lib/entity/AcDbOle2Frame.d.ts.map +1 -0
  93. package/lib/entity/AcDbOle2Frame.js +717 -0
  94. package/lib/entity/AcDbOle2Frame.js.map +1 -0
  95. package/lib/entity/AcDbOleFrame.d.ts +112 -0
  96. package/lib/entity/AcDbOleFrame.d.ts.map +1 -0
  97. package/lib/entity/AcDbOleFrame.js +198 -0
  98. package/lib/entity/AcDbOleFrame.js.map +1 -0
  99. package/lib/entity/AcDbPolyFaceMesh.js +2 -2
  100. package/lib/entity/AcDbPolyFaceMesh.js.map +1 -1
  101. package/lib/entity/AcDbPolygonMesh.js +2 -2
  102. package/lib/entity/AcDbPolygonMesh.js.map +1 -1
  103. package/lib/entity/AcDbPolyline.d.ts +2 -2
  104. package/lib/entity/AcDbPolyline.d.ts.map +1 -1
  105. package/lib/entity/AcDbPolyline.js +4 -4
  106. package/lib/entity/AcDbPolyline.js.map +1 -1
  107. package/lib/entity/AcDbProxyEntity.d.ts.map +1 -1
  108. package/lib/entity/AcDbProxyEntity.js +3 -3
  109. package/lib/entity/AcDbProxyEntity.js.map +1 -1
  110. package/lib/entity/AcDbRasterImage.d.ts +1 -1
  111. package/lib/entity/AcDbRasterImage.d.ts.map +1 -1
  112. package/lib/entity/AcDbRasterImage.js +4 -4
  113. package/lib/entity/AcDbRasterImage.js.map +1 -1
  114. package/lib/entity/AcDbRay.d.ts.map +1 -1
  115. package/lib/entity/AcDbRay.js +2 -2
  116. package/lib/entity/AcDbRay.js.map +1 -1
  117. package/lib/entity/AcDbSpline.d.ts.map +1 -1
  118. package/lib/entity/AcDbSpline.js +4 -4
  119. package/lib/entity/AcDbSpline.js.map +1 -1
  120. package/lib/entity/AcDbTrace.js +2 -2
  121. package/lib/entity/AcDbTrace.js.map +1 -1
  122. package/lib/entity/AcDbXline.d.ts.map +1 -1
  123. package/lib/entity/AcDbXline.js +2 -2
  124. package/lib/entity/AcDbXline.js.map +1 -1
  125. package/lib/entity/index.d.ts +5 -1
  126. package/lib/entity/index.d.ts.map +1 -1
  127. package/lib/entity/index.js +4 -1
  128. package/lib/entity/index.js.map +1 -1
  129. package/lib/index.d.ts +11 -9
  130. package/lib/index.d.ts.map +1 -1
  131. package/lib/index.js +8 -7
  132. package/lib/index.js.map +1 -1
  133. package/lib/ly/AcLyBoolExpr.d.ts +28 -0
  134. package/lib/ly/AcLyBoolExpr.d.ts.map +1 -0
  135. package/lib/ly/AcLyBoolExpr.js +36 -0
  136. package/lib/ly/AcLyBoolExpr.js.map +1 -0
  137. package/lib/ly/AcLyLayerFilter.d.ts +289 -0
  138. package/lib/ly/AcLyLayerFilter.d.ts.map +1 -0
  139. package/lib/ly/AcLyLayerFilter.js +509 -0
  140. package/lib/ly/AcLyLayerFilter.js.map +1 -0
  141. package/lib/ly/AcLyLayerFilterIO.d.ts +155 -0
  142. package/lib/ly/AcLyLayerFilterIO.d.ts.map +1 -0
  143. package/lib/ly/AcLyLayerFilterIO.js +506 -0
  144. package/lib/ly/AcLyLayerFilterIO.js.map +1 -0
  145. package/lib/ly/AcLyLayerFilterTree.d.ts +71 -0
  146. package/lib/ly/AcLyLayerFilterTree.d.ts.map +1 -0
  147. package/lib/ly/AcLyLayerFilterTree.js +95 -0
  148. package/lib/ly/AcLyLayerFilterTree.js.map +1 -0
  149. package/lib/ly/AcLyLayerGroup.d.ts +107 -0
  150. package/lib/ly/AcLyLayerGroup.d.ts.map +1 -0
  151. package/lib/ly/AcLyLayerGroup.js +158 -0
  152. package/lib/ly/AcLyLayerGroup.js.map +1 -0
  153. package/lib/ly/index.d.ts +8 -0
  154. package/lib/ly/index.d.ts.map +1 -0
  155. package/lib/ly/index.js +6 -0
  156. package/lib/ly/index.js.map +1 -0
  157. package/lib/misc/AcDbCodePage.d.ts +1 -1
  158. package/lib/misc/AcDbCodePage.d.ts.map +1 -1
  159. package/lib/misc/AcDbCodePage.js +1 -1
  160. package/lib/misc/AcDbCodePage.js.map +1 -1
  161. package/lib/misc/AcDbFormatter.d.ts.map +1 -1
  162. package/lib/misc/AcDbFormatter.js +3 -3
  163. package/lib/misc/AcDbFormatter.js.map +1 -1
  164. package/lib/misc/AcDbMLeaderStyleColorCodec.d.ts +2 -2
  165. package/lib/misc/AcDbMLeaderStyleColorCodec.d.ts.map +1 -1
  166. package/lib/misc/AcDbMLeaderStyleColorCodec.js +2 -2
  167. package/lib/misc/AcDbMLeaderStyleColorCodec.js.map +1 -1
  168. package/lib/misc/AcDbOleImageExtractor.d.ts +21 -0
  169. package/lib/misc/AcDbOleImageExtractor.d.ts.map +1 -0
  170. package/lib/misc/AcDbOleImageExtractor.js +659 -0
  171. package/lib/misc/AcDbOleImageExtractor.js.map +1 -0
  172. package/lib/misc/AcDbUnitsValue.d.ts +6 -6
  173. package/lib/misc/AcDbUnitsValue.d.ts.map +1 -1
  174. package/lib/misc/AcDbUnitsValue.js +6 -6
  175. package/lib/misc/AcDbUnitsValue.js.map +1 -1
  176. package/lib/misc/acdbDrawImageFrame.d.ts +17 -0
  177. package/lib/misc/acdbDrawImageFrame.d.ts.map +1 -0
  178. package/lib/misc/acdbDrawImageFrame.js +44 -0
  179. package/lib/misc/acdbDrawImageFrame.js.map +1 -0
  180. package/lib/misc/index.d.ts +7 -7
  181. package/lib/misc/index.d.ts.map +1 -1
  182. package/lib/misc/index.js +7 -7
  183. package/lib/misc/index.js.map +1 -1
  184. package/lib/misc/proxyGraphic/AcDbProxyGraphic.d.ts +1 -1
  185. package/lib/misc/proxyGraphic/AcDbProxyGraphic.d.ts.map +1 -1
  186. package/lib/misc/proxyGraphic/AcDbProxyGraphic.js +9 -9
  187. package/lib/misc/proxyGraphic/AcDbProxyGraphic.js.map +1 -1
  188. package/lib/misc/proxyGraphic/AcDbProxyGraphicBinaryStream.d.ts +2 -2
  189. package/lib/misc/proxyGraphic/AcDbProxyGraphicBinaryStream.d.ts.map +1 -1
  190. package/lib/misc/proxyGraphic/AcDbProxyGraphicBinaryStream.js +2 -2
  191. package/lib/misc/proxyGraphic/AcDbProxyGraphicBinaryStream.js.map +1 -1
  192. package/lib/misc/proxyGraphic/index.d.ts +2 -2
  193. package/lib/misc/proxyGraphic/index.d.ts.map +1 -1
  194. package/lib/misc/proxyGraphic/index.js +2 -2
  195. package/lib/misc/proxyGraphic/index.js.map +1 -1
  196. package/lib/object/AcDbFilter.d.ts +51 -0
  197. package/lib/object/AcDbFilter.d.ts.map +1 -0
  198. package/lib/object/AcDbFilter.js +63 -0
  199. package/lib/object/AcDbFilter.js.map +1 -0
  200. package/lib/object/AcDbIndex.d.ts +144 -0
  201. package/lib/object/AcDbIndex.d.ts.map +1 -0
  202. package/lib/object/AcDbIndex.js +146 -0
  203. package/lib/object/AcDbIndex.js.map +1 -0
  204. package/lib/object/AcDbLayerFilter.d.ts +144 -0
  205. package/lib/object/AcDbLayerFilter.d.ts.map +1 -0
  206. package/lib/object/AcDbLayerFilter.js +250 -0
  207. package/lib/object/AcDbLayerFilter.js.map +1 -0
  208. package/lib/object/AcDbLayerIndex.d.ts +165 -0
  209. package/lib/object/AcDbLayerIndex.d.ts.map +1 -0
  210. package/lib/object/AcDbLayerIndex.js +295 -0
  211. package/lib/object/AcDbLayerIndex.js.map +1 -0
  212. package/lib/object/AcDbMLeaderStyle.js +4 -4
  213. package/lib/object/AcDbMLeaderStyle.js.map +1 -1
  214. package/lib/object/index.d.ts +6 -0
  215. package/lib/object/index.d.ts.map +1 -1
  216. package/lib/object/index.js +4 -0
  217. package/lib/object/index.js.map +1 -1
  218. package/package.json +4 -4
@@ -0,0 +1,506 @@
1
+ var __values = (this && this.__values) || function(o) {
2
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3
+ if (m) return m.call(o);
4
+ if (o && typeof o.length === "number") return {
5
+ next: function () {
6
+ if (o && i >= o.length) o = void 0;
7
+ return { value: o && o[i++], done: !o };
8
+ }
9
+ };
10
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
+ };
12
+ var __read = (this && this.__read) || function (o, n) {
13
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
14
+ if (!m) return o;
15
+ var i = m.call(o), r, ar = [], e;
16
+ try {
17
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
+ }
19
+ catch (error) { e = { error: error }; }
20
+ finally {
21
+ try {
22
+ if (r && !r.done && (m = i["return"])) m.call(i);
23
+ }
24
+ finally { if (e) throw e.error; }
25
+ }
26
+ return ar;
27
+ };
28
+ import { AcDbResultBuffer } from '../base/AcDbResultBuffer';
29
+ import { AcLyLayerFilter } from './AcLyLayerFilter';
30
+ import { AcLyLayerFilterTree } from './AcLyLayerFilterTree';
31
+ import { AcLyLayerGroup } from './AcLyLayerGroup';
32
+ /**
33
+ * Dictionary name for the legacy (pre-2005) layer-filter store.
34
+ *
35
+ * @remarks
36
+ * Lives in the Layer Table extension dictionary. Typically holds only
37
+ * top-level filter heads; nested filters are stored under
38
+ * {@link ACLY_DICTIONARY_NAME}.
39
+ *
40
+ * @see https://blog.autodesk.io/delete-layer-filters-using-objectarx/
41
+ */
42
+ export var ACAD_LAYERFILTERS_NAME = 'ACAD_LAYERFILTERS';
43
+ /**
44
+ * Dictionary name for the modern nested layer-filter store (AutoCAD 2005+).
45
+ *
46
+ * @remarks
47
+ * Lives in the Layer Table extension dictionary. Nested filters are reached
48
+ * through child `ACLYDICTIONARY` dictionaries owned by parent filter
49
+ * XRecords (via each XRecord's extension dictionary).
50
+ *
51
+ * @see https://forums.autodesk.com/t5/vba-forum/lost-in-acad-layerfilters-dictionnary/td-p/1841031
52
+ */
53
+ export var ACLY_DICTIONARY_NAME = 'ACLYDICTIONARY';
54
+ /**
55
+ * Reads an {@link AcLyLayerFilterTree} from Layer Table extension-dictionary
56
+ * objects (`ACAD_LAYERFILTERS` / `ACLYDICTIONARY` + XRecords).
57
+ *
58
+ * @remarks
59
+ * Prefer {@link ACLY_DICTIONARY_NAME} when present (supports nesting). Fall
60
+ * back to the legacy flat {@link ACAD_LAYERFILTERS_NAME} dictionary.
61
+ *
62
+ * Legacy property-filter XRecord layout (documented VBA samples):
63
+ * `(1 name) (1 expression) (1 colorPat) (1 linetypePat) (70 flags) (1 ...) (1 ...)`
64
+ * Group filters additionally store layer object IDs as soft/hard pointers
65
+ * (group codes 330 / 340 / 350 / 360).
66
+ *
67
+ * @param source - Dictionaries and XRecords from the drawing.
68
+ * @returns The reconstructed filter tree.
69
+ */
70
+ export function acdbReadLayerFilterTree(source) {
71
+ var e_1, _a, e_2, _b;
72
+ var root = AcLyLayerFilterTree.createDefaultRoot();
73
+ var tree = new AcLyLayerFilterTree(root, root);
74
+ var aclyDict = findNamedDictionary(source, ACLY_DICTIONARY_NAME);
75
+ var legacyDict = findNamedDictionary(source, ACAD_LAYERFILTERS_NAME);
76
+ if (aclyDict) {
77
+ try {
78
+ for (var _c = __values(Object.entries(aclyDict.entries)), _d = _c.next(); !_d.done; _d = _c.next()) {
79
+ var _e = __read(_d.value, 2), key = _e[0], handle = _e[1];
80
+ var child = readFilterNode(source, handle, key);
81
+ if (child) {
82
+ root.addNested(child);
83
+ }
84
+ }
85
+ }
86
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
87
+ finally {
88
+ try {
89
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
90
+ }
91
+ finally { if (e_1) throw e_1.error; }
92
+ }
93
+ return tree;
94
+ }
95
+ if (legacyDict) {
96
+ try {
97
+ for (var _f = __values(Object.entries(legacyDict.entries)), _g = _f.next(); !_g.done; _g = _f.next()) {
98
+ var _h = __read(_g.value, 2), key = _h[0], handle = _h[1];
99
+ var child = readFilterNode(source, handle, key);
100
+ if (child) {
101
+ root.addNested(child);
102
+ }
103
+ }
104
+ }
105
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
106
+ finally {
107
+ try {
108
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
109
+ }
110
+ finally { if (e_2) throw e_2.error; }
111
+ }
112
+ }
113
+ return tree;
114
+ }
115
+ /**
116
+ * Serializes an {@link AcLyLayerFilterTree} into dictionary/XRecord payloads.
117
+ *
118
+ * @param tree - Filter tree to serialize.
119
+ * @returns Serialized nodes for `ACAD_LAYERFILTERS` / `ACLYDICTIONARY`.
120
+ */
121
+ export function acdbSerializeLayerFilterTree(tree) {
122
+ var e_3, _a;
123
+ var nodes = [];
124
+ try {
125
+ for (var _b = __values(tree.root.getNestedFilters()), _c = _b.next(); !_c.done; _c = _b.next()) {
126
+ var child = _c.value;
127
+ nodes.push(serializeFilterNode(child));
128
+ }
129
+ }
130
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
131
+ finally {
132
+ try {
133
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
134
+ }
135
+ finally { if (e_3) throw e_3.error; }
136
+ }
137
+ return { nodes: nodes };
138
+ }
139
+ /**
140
+ * Converts typed XRecord groups into an {@link AcDbResultBuffer}.
141
+ *
142
+ * @param groups - DXF group pairs.
143
+ * @returns Result buffer suitable for {@link AcDbXrecord.data}.
144
+ */
145
+ export function acdbLayerGroupsToResultBuffer(groups) {
146
+ var e_4, _a;
147
+ var buffer = new AcDbResultBuffer();
148
+ try {
149
+ for (var groups_1 = __values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) {
150
+ var group = groups_1_1.value;
151
+ buffer.add({
152
+ code: group.code,
153
+ value: group.value
154
+ });
155
+ }
156
+ }
157
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
158
+ finally {
159
+ try {
160
+ if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
161
+ }
162
+ finally { if (e_4) throw e_4.error; }
163
+ }
164
+ return buffer;
165
+ }
166
+ /**
167
+ * Converts an {@link AcDbResultBuffer} into DXF group pairs.
168
+ *
169
+ * @param buffer - Source result buffer.
170
+ * @returns DXF group pairs.
171
+ */
172
+ export function acdbResultBufferToLayerGroups(buffer) {
173
+ if (!buffer)
174
+ return [];
175
+ return buffer.toArray().map(function (item) { return ({
176
+ code: Number(item.code),
177
+ value: item.value
178
+ }); });
179
+ }
180
+ /**
181
+ * Finds a dictionary that appears as a named entry (`ACAD_LAYERFILTERS` or
182
+ * `ACLYDICTIONARY`) in any parent dictionary.
183
+ *
184
+ * Prefers the Layer Table extension-dictionary entry (parent not owned by an
185
+ * XRecord) over nested per-filter `ACLYDICTIONARY` instances.
186
+ *
187
+ * @param source - Persist source.
188
+ * @param name - Dictionary entry name to find.
189
+ * @returns The named dictionary, or `undefined`.
190
+ */
191
+ function findNamedDictionary(source, name) {
192
+ var e_5, _a;
193
+ var nestedFallback;
194
+ try {
195
+ for (var _b = __values(source.dictionaries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
196
+ var dict = _c.value;
197
+ var handle = dict.entries[name];
198
+ if (!handle)
199
+ continue;
200
+ var nested = source.dictionaries.get(normalizeHandle(handle));
201
+ if (!nested)
202
+ continue;
203
+ var ownerIsXRecord = dict.ownerObjectId
204
+ ? source.xrecords.has(normalizeHandle(dict.ownerObjectId))
205
+ : false;
206
+ if (!ownerIsXRecord) {
207
+ return nested;
208
+ }
209
+ nestedFallback = nested;
210
+ }
211
+ }
212
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
213
+ finally {
214
+ try {
215
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
216
+ }
217
+ finally { if (e_5) throw e_5.error; }
218
+ }
219
+ return nestedFallback;
220
+ }
221
+ /**
222
+ * Reads one filter node (and its nested children) from an XRecord handle.
223
+ *
224
+ * @param source - Persist source.
225
+ * @param handle - XRecord handle.
226
+ * @param fallbackName - Dictionary entry key used when the XRecord omits name.
227
+ * @returns The filter instance, or `undefined` if the handle is missing.
228
+ */
229
+ function readFilterNode(source, handle, fallbackName) {
230
+ var e_6, _a, e_7, _b;
231
+ var xrecord = source.xrecords.get(normalizeHandle(handle));
232
+ if (!xrecord) {
233
+ return undefined;
234
+ }
235
+ var parsed = acdbParseFilterXRecordData(xrecord.data, fallbackName);
236
+ var filter = parsed.isIdFilter
237
+ ? new AcLyLayerGroup()
238
+ : new AcLyLayerFilter();
239
+ filter.setAllowRename(true);
240
+ filter.setName(parsed.name || fallbackName);
241
+ if (!parsed.isIdFilter) {
242
+ filter.setFilterExpression(parsed.filterExpression);
243
+ }
244
+ else {
245
+ var group = filter;
246
+ try {
247
+ for (var _c = __values(parsed.layerIds), _d = _c.next(); !_d.done; _d = _c.next()) {
248
+ var layerId = _d.value;
249
+ group.addLayerId(layerId);
250
+ }
251
+ }
252
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
253
+ finally {
254
+ try {
255
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
256
+ }
257
+ finally { if (e_6) throw e_6.error; }
258
+ }
259
+ }
260
+ try {
261
+ for (var _e = __values(findNestedFilterHandles(source, xrecord)), _f = _e.next(); !_f.done; _f = _e.next()) {
262
+ var childHandle = _f.value;
263
+ var child = readFilterNode(source, childHandle.handle, childHandle.key);
264
+ if (child) {
265
+ filter.addNested(child);
266
+ }
267
+ }
268
+ }
269
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
270
+ finally {
271
+ try {
272
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
273
+ }
274
+ finally { if (e_7) throw e_7.error; }
275
+ }
276
+ return filter;
277
+ }
278
+ /**
279
+ * Locates nested filter XRecord handles under a parent filter XRecord.
280
+ *
281
+ * Nesting is represented as:
282
+ * parent XRecord → extension dictionary → `ACLYDICTIONARY` → child XRecords
283
+ * or any dictionary owned by the parent XRecord / its extension dictionary.
284
+ *
285
+ * @param source - Persist source.
286
+ * @param parent - Parent XRecord.
287
+ * @returns Child dictionary entries.
288
+ */
289
+ function findNestedFilterHandles(source, parent) {
290
+ var e_8, _a, e_9, _b, e_10, _c;
291
+ var result = [];
292
+ var parentHandle = normalizeHandle(parent.handle);
293
+ var extensionId = parent.extensionDictionaryId
294
+ ? normalizeHandle(parent.extensionDictionaryId)
295
+ : undefined;
296
+ try {
297
+ for (var _d = __values(source.dictionaries.values()), _e = _d.next(); !_e.done; _e = _d.next()) {
298
+ var dict = _e.value;
299
+ var owner = dict.ownerObjectId
300
+ ? normalizeHandle(dict.ownerObjectId)
301
+ : undefined;
302
+ var ownedByParent = owner === parentHandle || owner === extensionId;
303
+ if (!ownedByParent) {
304
+ continue;
305
+ }
306
+ var nestedAcly = dict.entries[ACLY_DICTIONARY_NAME];
307
+ if (nestedAcly) {
308
+ var nestedDict = source.dictionaries.get(normalizeHandle(nestedAcly));
309
+ if (nestedDict) {
310
+ try {
311
+ for (var _f = (e_9 = void 0, __values(Object.entries(nestedDict.entries))), _g = _f.next(); !_g.done; _g = _f.next()) {
312
+ var _h = __read(_g.value, 2), key = _h[0], handle = _h[1];
313
+ result.push({ key: key, handle: handle });
314
+ }
315
+ }
316
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
317
+ finally {
318
+ try {
319
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
320
+ }
321
+ finally { if (e_9) throw e_9.error; }
322
+ }
323
+ continue;
324
+ }
325
+ }
326
+ try {
327
+ // Direct children listed on a dictionary owned by the parent.
328
+ for (var _j = (e_10 = void 0, __values(Object.entries(dict.entries))), _k = _j.next(); !_k.done; _k = _j.next()) {
329
+ var _l = __read(_k.value, 2), key = _l[0], handle = _l[1];
330
+ if (key === ACLY_DICTIONARY_NAME || key === ACAD_LAYERFILTERS_NAME) {
331
+ continue;
332
+ }
333
+ result.push({ key: key, handle: handle });
334
+ }
335
+ }
336
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
337
+ finally {
338
+ try {
339
+ if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
340
+ }
341
+ finally { if (e_10) throw e_10.error; }
342
+ }
343
+ }
344
+ }
345
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
346
+ finally {
347
+ try {
348
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
349
+ }
350
+ finally { if (e_8) throw e_8.error; }
351
+ }
352
+ return result;
353
+ }
354
+ /**
355
+ * Parses legacy / modern filter XRecord group codes into structured fields.
356
+ *
357
+ * @param data - XRecord groups.
358
+ * @param fallbackName - Name used when group code 1 is missing.
359
+ * @returns Parsed filter fields.
360
+ */
361
+ export function acdbParseFilterXRecordData(data, fallbackName) {
362
+ var e_11, _a;
363
+ var _b;
364
+ if (fallbackName === void 0) { fallbackName = ''; }
365
+ var strings = [];
366
+ var layerIds = [];
367
+ var flags = 0;
368
+ var explicitIdFilter;
369
+ /** Modern ACLYDICTIONARY layout: name in group 300, expression in 301. */
370
+ var nameFrom300;
371
+ var expressionFrom301;
372
+ try {
373
+ for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {
374
+ var group = data_1_1.value;
375
+ var code = Number(group.code);
376
+ var value = group.value;
377
+ if (code === 1 && typeof value === 'string') {
378
+ strings.push(value);
379
+ }
380
+ else if (code === 300 && typeof value === 'string') {
381
+ nameFrom300 = value;
382
+ }
383
+ else if (code === 301 && typeof value === 'string') {
384
+ expressionFrom301 = value;
385
+ }
386
+ else if (code === 70 || code === 90) {
387
+ flags = Number(value) || 0;
388
+ }
389
+ else if (code === 290 || code === 280) {
390
+ // 290/280 used by some writers as boolean "is group/id filter".
391
+ // Prefer expression / layer-id heuristics when modern 301 is present,
392
+ // because some drawings set 290 even on property filters.
393
+ explicitIdFilter = Number(value) === 1;
394
+ }
395
+ else if ((code === 330 || code === 340 || code === 350 || code === 360) &&
396
+ value != null &&
397
+ String(value).length > 0) {
398
+ layerIds.push(normalizeHandle(String(value)));
399
+ }
400
+ }
401
+ }
402
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
403
+ finally {
404
+ try {
405
+ if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);
406
+ }
407
+ finally { if (e_11) throw e_11.error; }
408
+ }
409
+ var className = strings[0];
410
+ var isClassMarker = className === 'AcLyLayerFilter' || className === 'AcLyLayerGroup';
411
+ var name = nameFrom300 ||
412
+ (!isClassMarker ? className : undefined) ||
413
+ fallbackName;
414
+ var legacySecond = (_b = strings[1]) !== null && _b !== void 0 ? _b : '';
415
+ var filterExpression = expressionFrom301 !== null && expressionFrom301 !== void 0 ? expressionFrom301 : legacySecond;
416
+ // Legacy ACAD_LAYERFILTERS often stores a bare name pattern in the second
417
+ // string (for example `圆` or `多*`) instead of a full `NAME=="..."` clause.
418
+ if (!expressionFrom301 &&
419
+ filterExpression &&
420
+ filterExpression !== '*' &&
421
+ !/==/.test(filterExpression)) {
422
+ filterExpression = "NAME==\"".concat(filterExpression, "\"");
423
+ }
424
+ var isIdFilter = expressionFrom301 != null && expressionFrom301.length > 0
425
+ ? false
426
+ : explicitIdFilter === true && layerIds.length > 0
427
+ ? true
428
+ : layerIds.length > 0 &&
429
+ (filterExpression.length === 0 || filterExpression === '*');
430
+ return {
431
+ name: name,
432
+ filterExpression: isIdFilter ? '' : filterExpression,
433
+ flags: flags,
434
+ layerIds: layerIds,
435
+ isIdFilter: isIdFilter
436
+ };
437
+ }
438
+ /**
439
+ * Serializes one filter (and nested children) to XRecord payloads.
440
+ *
441
+ * @param filter - Filter to serialize.
442
+ * @returns Serialized node.
443
+ */
444
+ function serializeFilterNode(filter) {
445
+ var isIdFilter = filter.isIdFilter();
446
+ var data = acdbWriteFilterXRecordData(filter);
447
+ var children = filter
448
+ .getNestedFilters()
449
+ .map(function (child) { return serializeFilterNode(child); });
450
+ var key = filter.name || (isIdFilter ? 'Group' : 'Filter');
451
+ return { key: key, isIdFilter: isIdFilter, data: data, children: children };
452
+ }
453
+ /**
454
+ * Writes filter fields to the legacy-compatible XRecord group layout.
455
+ *
456
+ * @param filter - Filter to write.
457
+ * @returns DXF group pairs.
458
+ */
459
+ export function acdbWriteFilterXRecordData(filter) {
460
+ var e_12, _a;
461
+ var groups = [];
462
+ groups.push({ code: 1, value: filter.name });
463
+ if (filter.isIdFilter()) {
464
+ groups.push({ code: 1, value: '' });
465
+ groups.push({ code: 1, value: '*' });
466
+ groups.push({ code: 1, value: '*' });
467
+ groups.push({ code: 70, value: 0 });
468
+ groups.push({ code: 1, value: '*' });
469
+ groups.push({ code: 1, value: '*' });
470
+ groups.push({ code: 290, value: 1 });
471
+ var group = filter;
472
+ try {
473
+ for (var _b = __values(group.layerIds()), _c = _b.next(); !_c.done; _c = _b.next()) {
474
+ var layerId = _c.value;
475
+ groups.push({ code: 330, value: layerId });
476
+ }
477
+ }
478
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
479
+ finally {
480
+ try {
481
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
482
+ }
483
+ finally { if (e_12) throw e_12.error; }
484
+ }
485
+ }
486
+ else {
487
+ groups.push({ code: 1, value: filter.filterExpression || '*' });
488
+ groups.push({ code: 1, value: '*' });
489
+ groups.push({ code: 1, value: '*' });
490
+ groups.push({ code: 70, value: 0 });
491
+ groups.push({ code: 1, value: '*' });
492
+ groups.push({ code: 1, value: '*' });
493
+ groups.push({ code: 290, value: 0 });
494
+ }
495
+ return groups;
496
+ }
497
+ /**
498
+ * Normalizes a DXF/DWG handle to uppercase hexadecimal text.
499
+ *
500
+ * @param handle - Raw handle.
501
+ * @returns Normalized handle.
502
+ */
503
+ function normalizeHandle(handle) {
504
+ return handle.trim().toUpperCase();
505
+ }
506
+ //# sourceMappingURL=AcLyLayerFilterIO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcLyLayerFilterIO.js","sourceRoot":"","sources":["../../src/ly/AcLyLayerFilterIO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { AcLyLayerFilter } from './AcLyLayerFilter';
2
+ /**
3
+ * In-memory tree of Layer Manager filters for a drawing database.
4
+ *
5
+ * Mirrors the AutoCAD .NET `LayerFilterTree` wrapper around the ObjectARX
6
+ * `AcLy*` filter hierarchy. The tree is typically accessed through
7
+ * {@link AcDbDatabase.layerFilters}.
8
+ *
9
+ * @remarks
10
+ * AutoCAD exposes the tree **by value**: callers should get the tree, mutate
11
+ * {@link root} / nested filters, then assign it back to the database.
12
+ *
13
+ * @see https://help.autodesk.com/view/OARX/2024/ENU/?guid=OARX-RefGuide-AcLy_Classes
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const tree = db.layerFilters;
18
+ * const unlocked = new AcLyLayerFilter();
19
+ * unlocked.name = 'Unlocked Layers';
20
+ * unlocked.setFilterExpression('LOCKED=="False"');
21
+ * tree.root.addNested(unlocked);
22
+ * db.layerFilters = tree;
23
+ * ```
24
+ */
25
+ export declare class AcLyLayerFilterTree {
26
+ /** Root filter of the tree. */
27
+ private _root;
28
+ /** Currently active filter, if any. */
29
+ private _current;
30
+ /**
31
+ * Creates a new {@link AcLyLayerFilterTree}.
32
+ *
33
+ * @param root - Root filter. When omitted, a default `"All"` root is created.
34
+ * @param current - Currently active filter (defaults to `root`).
35
+ */
36
+ constructor(root?: AcLyLayerFilter, current?: AcLyLayerFilter | null);
37
+ /**
38
+ * Creates the default root property filter used by AutoCAD (`All`).
39
+ *
40
+ * @returns A root {@link AcLyLayerFilter}.
41
+ */
42
+ static createDefaultRoot(): AcLyLayerFilter;
43
+ /**
44
+ * Gets the root filter of this tree.
45
+ *
46
+ * @returns The root {@link AcLyLayerFilter}.
47
+ */
48
+ get root(): AcLyLayerFilter;
49
+ /**
50
+ * Gets the currently active filter.
51
+ *
52
+ * @returns The current filter, or `null`.
53
+ */
54
+ get current(): AcLyLayerFilter | null;
55
+ /**
56
+ * Sets the currently active filter.
57
+ *
58
+ * @param value - Filter to make current, or `null`.
59
+ */
60
+ set current(value: AcLyLayerFilter | null);
61
+ /**
62
+ * Creates a shallow copy of this tree that shares the same filter instances.
63
+ *
64
+ * @remarks
65
+ * Useful when following AutoCAD's by-value `Database.LayerFilters` pattern.
66
+ *
67
+ * @returns A new {@link AcLyLayerFilterTree}.
68
+ */
69
+ clone(): AcLyLayerFilterTree;
70
+ }
71
+ //# sourceMappingURL=AcLyLayerFilterTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcLyLayerFilterTree.d.ts","sourceRoot":"","sources":["../../src/ly/AcLyLayerFilterTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB;IAC9B,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAC9B,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAwB;IAExC;;;;;OAKG;gBACS,IAAI,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAKpE;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,IAAI,eAAe;IAS3C;;;;OAIG;IACH,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED;;;;OAIG;IACH,IAAI,OAAO,IAAI,eAAe,GAAG,IAAI,CAEpC;IAED;;;;OAIG;IACH,IAAI,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,EAExC;IAED;;;;;;;OAOG;IACH,KAAK,IAAI,mBAAmB;CAG7B"}