@mlightcad/cad-simple-viewer 1.5.9 → 1.5.10
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/dist/cad-simple-viewer.js +8345 -7349
- package/dist/cad-simple-viewer.umd.cjs +37 -37
- package/dist/mtext-renderer-worker.js +2896 -2767
- package/lib/app/AcApDocManager.d.ts +17 -8
- package/lib/app/AcApDocManager.d.ts.map +1 -1
- package/lib/app/AcApDocManager.js +50 -13
- package/lib/app/AcApDocManager.js.map +1 -1
- package/lib/app/AcApFontLoader.d.ts +49 -26
- package/lib/app/AcApFontLoader.d.ts.map +1 -1
- package/lib/app/AcApFontLoader.js +245 -48
- package/lib/app/AcApFontLoader.js.map +1 -1
- package/lib/app/AcApOpenFileProfiler.d.ts +70 -17
- package/lib/app/AcApOpenFileProfiler.d.ts.map +1 -1
- package/lib/app/AcApOpenFileProfiler.js +96 -46
- package/lib/app/AcApOpenFileProfiler.js.map +1 -1
- package/lib/app/AcApOpenFileProgressController.d.ts +22 -5
- package/lib/app/AcApOpenFileProgressController.d.ts.map +1 -1
- package/lib/app/AcApOpenFileProgressController.js +76 -31
- package/lib/app/AcApOpenFileProgressController.js.map +1 -1
- package/lib/app/AcApProgress.d.ts +6 -0
- package/lib/app/AcApProgress.d.ts.map +1 -1
- package/lib/app/AcApProgress.js +11 -0
- package/lib/app/AcApProgress.js.map +1 -1
- package/lib/app/AcDbOpenDatabaseOptions.d.ts +15 -12
- package/lib/app/AcDbOpenDatabaseOptions.d.ts.map +1 -1
- package/lib/app/index.d.ts +1 -0
- package/lib/app/index.d.ts.map +1 -1
- package/lib/app/index.js +1 -0
- package/lib/app/index.js.map +1 -1
- package/lib/editor/view/AcEdSpatialQueryResult.d.ts +10 -0
- package/lib/editor/view/AcEdSpatialQueryResult.d.ts.map +1 -1
- package/lib/editor/view/AcEdSpatialQueryResult.js +36 -0
- package/lib/editor/view/AcEdSpatialQueryResult.js.map +1 -1
- package/lib/i18n/cs/command.d.ts +3 -0
- package/lib/i18n/cs/command.d.ts.map +1 -1
- package/lib/i18n/cs/command.js +3 -0
- package/lib/i18n/cs/command.js.map +1 -1
- package/lib/i18n/cs/main.d.ts +1 -0
- package/lib/i18n/cs/main.d.ts.map +1 -1
- package/lib/i18n/cs/main.js +1 -0
- package/lib/i18n/cs/main.js.map +1 -1
- package/lib/i18n/en/command.d.ts +3 -0
- package/lib/i18n/en/command.d.ts.map +1 -1
- package/lib/i18n/en/command.js +3 -0
- package/lib/i18n/en/command.js.map +1 -1
- package/lib/i18n/en/main.d.ts +1 -0
- package/lib/i18n/en/main.d.ts.map +1 -1
- package/lib/i18n/en/main.js +1 -0
- package/lib/i18n/en/main.js.map +1 -1
- package/lib/i18n/tr/command.d.ts +3 -0
- package/lib/i18n/tr/command.d.ts.map +1 -1
- package/lib/i18n/tr/command.js +3 -0
- package/lib/i18n/tr/command.js.map +1 -1
- package/lib/i18n/tr/main.d.ts +1 -0
- package/lib/i18n/tr/main.d.ts.map +1 -1
- package/lib/i18n/tr/main.js +1 -0
- package/lib/i18n/tr/main.js.map +1 -1
- package/lib/i18n/zh/command.d.ts +3 -0
- package/lib/i18n/zh/command.d.ts.map +1 -1
- package/lib/i18n/zh/command.js +3 -0
- package/lib/i18n/zh/command.js.map +1 -1
- package/lib/i18n/zh/main.d.ts +1 -0
- package/lib/i18n/zh/main.d.ts.map +1 -1
- package/lib/i18n/zh/main.js +1 -0
- package/lib/i18n/zh/main.js.map +1 -1
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts.map +1 -1
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js +2 -2
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js.map +1 -1
- package/lib/spatialIndex/AcTrLinearSpatialIndex.d.ts +6 -1
- package/lib/spatialIndex/AcTrLinearSpatialIndex.d.ts.map +1 -1
- package/lib/spatialIndex/AcTrLinearSpatialIndex.js +68 -11
- package/lib/spatialIndex/AcTrLinearSpatialIndex.js.map +1 -1
- package/lib/spatialIndex/AcTrRBushSpatialIndex.d.ts.map +1 -1
- package/lib/spatialIndex/AcTrRBushSpatialIndex.js +58 -12
- package/lib/spatialIndex/AcTrRBushSpatialIndex.js.map +1 -1
- package/lib/view/AcTrDirectBatch.d.ts +18 -0
- package/lib/view/AcTrDirectBatch.d.ts.map +1 -0
- package/lib/view/AcTrDirectBatch.js +113 -0
- package/lib/view/AcTrDirectBatch.js.map +1 -0
- package/lib/view/AcTrLayer.d.ts +7 -1
- package/lib/view/AcTrLayer.d.ts.map +1 -1
- package/lib/view/AcTrLayer.js +29 -0
- package/lib/view/AcTrLayer.js.map +1 -1
- package/lib/view/AcTrLayout.d.ts +11 -1
- package/lib/view/AcTrLayout.d.ts.map +1 -1
- package/lib/view/AcTrLayout.js +43 -0
- package/lib/view/AcTrLayout.js.map +1 -1
- package/lib/view/AcTrProgressiveOpenFitController.d.ts +10 -6
- package/lib/view/AcTrProgressiveOpenFitController.d.ts.map +1 -1
- package/lib/view/AcTrProgressiveOpenFitController.js +35 -76
- package/lib/view/AcTrProgressiveOpenFitController.js.map +1 -1
- package/lib/view/AcTrScene.d.ts +7 -1
- package/lib/view/AcTrScene.d.ts.map +1 -1
- package/lib/view/AcTrScene.js +18 -0
- package/lib/view/AcTrScene.js.map +1 -1
- package/lib/view/AcTrView2d.d.ts +87 -12
- package/lib/view/AcTrView2d.d.ts.map +1 -1
- package/lib/view/AcTrView2d.js +501 -166
- package/lib/view/AcTrView2d.js.map +1 -1
- package/lib/view/index.d.ts +1 -0
- package/lib/view/index.d.ts.map +1 -1
- package/lib/view/index.js +1 -0
- package/lib/view/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
1
12
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
13
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
14
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -34,41 +45,94 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
45
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
46
|
}
|
|
36
47
|
};
|
|
48
|
+
var __values = (this && this.__values) || function(o) {
|
|
49
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
50
|
+
if (m) return m.call(o);
|
|
51
|
+
if (o && typeof o.length === "number") return {
|
|
52
|
+
next: function () {
|
|
53
|
+
if (o && i >= o.length) o = void 0;
|
|
54
|
+
return { value: o && o[i++], done: !o };
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
58
|
+
};
|
|
59
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
60
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
61
|
+
if (!m) return o;
|
|
62
|
+
var i = m.call(o), r, ar = [], e;
|
|
63
|
+
try {
|
|
64
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
65
|
+
}
|
|
66
|
+
catch (error) { e = { error: error }; }
|
|
67
|
+
finally {
|
|
68
|
+
try {
|
|
69
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
70
|
+
}
|
|
71
|
+
finally { if (e) throw e.error; }
|
|
72
|
+
}
|
|
73
|
+
return ar;
|
|
74
|
+
};
|
|
75
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
76
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
77
|
+
if (ar || !(i in from)) {
|
|
78
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
79
|
+
ar[i] = from[i];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
83
|
+
};
|
|
37
84
|
import { AcDbOpenDatabaseError } from '@mlightcad/data-model';
|
|
38
85
|
import { AcTrFontLoader } from '@mlightcad/three-renderer';
|
|
39
86
|
import { eventBus } from '../editor';
|
|
87
|
+
var lastFontLoadStats = null;
|
|
88
|
+
/** Returns timing from the most recent {@link AcApFontLoader.load} call. */
|
|
89
|
+
export function getLastFontLoadStats() {
|
|
90
|
+
return lastFontLoadStats ? __assign({}, lastFontLoadStats) : null;
|
|
91
|
+
}
|
|
92
|
+
function isMeshFontInfo(info) {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
var type = String((_a = info.type) !== null && _a !== void 0 ? _a : '').toLowerCase();
|
|
95
|
+
if (type === 'mesh' || type === 'ttf' || type === 'otf' || type === 'woff') {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
var file = String((_b = info.file) !== null && _b !== void 0 ? _b : '').toLowerCase();
|
|
99
|
+
return (file.endsWith('.ttf') ||
|
|
100
|
+
file.endsWith('.otf') ||
|
|
101
|
+
file.endsWith('.woff') ||
|
|
102
|
+
file.endsWith('.woff2'));
|
|
103
|
+
}
|
|
40
104
|
/**
|
|
41
|
-
*
|
|
105
|
+
* Viewer-side font loader for explicit loads (default fonts, missing-font UI).
|
|
42
106
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* - Manage font availability checking
|
|
107
|
+
* Drawing open no longer collects or awaits fonts in data-model. Text entities
|
|
108
|
+
* load faces on demand via {@link FontManager.lazyFontLoading}. This class is
|
|
109
|
+
* still used for {@link AcApDocManager.loadFonts} /
|
|
110
|
+
* {@link AcApDocManager.loadDefaultFonts}.
|
|
48
111
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
112
|
+
* Mesh/TTF/WOFF fonts (e.g. `simsun.woff`) are expensive to re-parse from
|
|
113
|
+
* IndexedDB. When {@link deferMeshFonts} is true and a load mixes SHX with
|
|
114
|
+
* mesh fonts, SHX is awaited first and mesh continues in the background.
|
|
115
|
+
* Mesh-only loads always await so callers like
|
|
116
|
+
* {@link AcApFontUtil.ensureDrawingFontLoaded} see a ready face.
|
|
51
117
|
*
|
|
52
118
|
* @example
|
|
53
119
|
* ```typescript
|
|
54
|
-
* const
|
|
55
|
-
* const fontLoader = new AcApFontLoader(renderer);
|
|
56
|
-
*
|
|
57
|
-
* // Load specific fonts
|
|
120
|
+
* const fontLoader = new AcApFontLoader();
|
|
58
121
|
* await fontLoader.load(['Arial', 'SimSun']);
|
|
59
|
-
*
|
|
60
|
-
* // Get all available fonts
|
|
61
|
-
* const fonts = await fontLoader.getAvaiableFonts();
|
|
62
|
-
* console.log('Available fonts:', fonts);
|
|
63
122
|
* ```
|
|
64
123
|
*/
|
|
65
124
|
var AcApFontLoader = /** @class */ (function () {
|
|
66
125
|
/**
|
|
67
126
|
* Creates a new font loader instance.
|
|
68
|
-
*
|
|
69
|
-
* @param renderer - The Three.js renderer that will use the loaded fonts
|
|
70
127
|
*/
|
|
71
128
|
function AcApFontLoader() {
|
|
129
|
+
/**
|
|
130
|
+
* When true (default), mixed SHX+mesh {@link load} calls await only SHX;
|
|
131
|
+
* mesh fonts continue in the background. Mesh-only loads still await.
|
|
132
|
+
*/
|
|
133
|
+
this.deferMeshFonts = true;
|
|
134
|
+
/** Serialize overlapping loads (init defaults vs UI loads) to avoid double-parse. */
|
|
135
|
+
this._loadChain = Promise.resolve();
|
|
72
136
|
this._loader = new AcTrFontLoader();
|
|
73
137
|
}
|
|
74
138
|
Object.defineProperty(AcApFontLoader.prototype, "baseUrl", {
|
|
@@ -86,7 +150,7 @@ var AcApFontLoader = /** @class */ (function () {
|
|
|
86
150
|
});
|
|
87
151
|
Object.defineProperty(AcApFontLoader.prototype, "avaiableFonts", {
|
|
88
152
|
/**
|
|
89
|
-
*
|
|
153
|
+
* Available fonts already fetched into the underlying loader cache.
|
|
90
154
|
*/
|
|
91
155
|
get: function () {
|
|
92
156
|
return this._loader.avaiableFonts;
|
|
@@ -95,7 +159,7 @@ var AcApFontLoader = /** @class */ (function () {
|
|
|
95
159
|
configurable: true
|
|
96
160
|
});
|
|
97
161
|
/**
|
|
98
|
-
*
|
|
162
|
+
* Fetches available font metadata from the font repository.
|
|
99
163
|
*/
|
|
100
164
|
AcApFontLoader.prototype.getAvaiableFonts = function () {
|
|
101
165
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -108,52 +172,185 @@ var AcApFontLoader = /** @class */ (function () {
|
|
|
108
172
|
});
|
|
109
173
|
};
|
|
110
174
|
/**
|
|
111
|
-
* @
|
|
175
|
+
* Loads the given font names. With {@link deferMeshFonts}, mixed SHX+mesh
|
|
176
|
+
* loads await SHX first; mesh-only loads always await.
|
|
112
177
|
*/
|
|
113
178
|
AcApFontLoader.prototype.load = function (fontNames) {
|
|
114
179
|
return __awaiter(this, void 0, void 0, function () {
|
|
115
|
-
var
|
|
180
|
+
var run, result;
|
|
181
|
+
var _this = this;
|
|
116
182
|
return __generator(this, function (_a) {
|
|
117
|
-
|
|
183
|
+
run = function () { return _this.loadInternal(fontNames); };
|
|
184
|
+
result = this._loadChain.then(run, run);
|
|
185
|
+
this._loadChain = result.then(function () { return undefined; }, function () { return undefined; });
|
|
186
|
+
return [2 /*return*/, result];
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
AcApFontLoader.prototype.loadInternal = function (fontNames) {
|
|
191
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
192
|
+
var totalStartedAt, loadStatus, criticalFonts, deferredFonts, metaMs, criticalLoadMs, deferredLoadMs, metaStartedAt, available, byName, available_1, available_1_1, info, _a, _b, name_1, fontNames_1, fontNames_1_1, raw, key, info, shouldDeferMesh, criticalStartedAt, _c, deferredStartedAt, deferredStatus, stats_1, deferredStartedAt_1, error_1;
|
|
193
|
+
var e_1, _d, e_2, _e, e_3, _f;
|
|
194
|
+
var _this = this;
|
|
195
|
+
return __generator(this, function (_g) {
|
|
196
|
+
switch (_g.label) {
|
|
118
197
|
case 0:
|
|
119
|
-
|
|
120
|
-
|
|
198
|
+
totalStartedAt = performance.now();
|
|
199
|
+
loadStatus = [];
|
|
200
|
+
criticalFonts = [];
|
|
201
|
+
deferredFonts = [];
|
|
202
|
+
metaMs = 0;
|
|
203
|
+
criticalLoadMs = 0;
|
|
204
|
+
deferredLoadMs = 0;
|
|
205
|
+
_g.label = 1;
|
|
121
206
|
case 1:
|
|
122
|
-
|
|
123
|
-
|
|
207
|
+
_g.trys.push([1, 9, , 10]);
|
|
208
|
+
metaStartedAt = performance.now();
|
|
209
|
+
return [4 /*yield*/, this._loader.getAvailableFonts()];
|
|
124
210
|
case 2:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
211
|
+
available = _g.sent();
|
|
212
|
+
metaMs = performance.now() - metaStartedAt;
|
|
213
|
+
byName = new Map();
|
|
214
|
+
try {
|
|
215
|
+
for (available_1 = __values(available), available_1_1 = available_1.next(); !available_1_1.done; available_1_1 = available_1.next()) {
|
|
216
|
+
info = available_1_1.value;
|
|
217
|
+
try {
|
|
218
|
+
for (_a = (e_2 = void 0, __values(info.name)), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
219
|
+
name_1 = _b.value;
|
|
220
|
+
byName.set(name_1.toLowerCase(), info);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
224
|
+
finally {
|
|
225
|
+
try {
|
|
226
|
+
if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
|
|
227
|
+
}
|
|
228
|
+
finally { if (e_2) throw e_2.error; }
|
|
229
|
+
}
|
|
133
230
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
231
|
+
}
|
|
232
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
233
|
+
finally {
|
|
234
|
+
try {
|
|
235
|
+
if (available_1_1 && !available_1_1.done && (_d = available_1.return)) _d.call(available_1);
|
|
139
236
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
237
|
+
finally { if (e_1) throw e_1.error; }
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
for (fontNames_1 = __values(fontNames), fontNames_1_1 = fontNames_1.next(); !fontNames_1_1.done; fontNames_1_1 = fontNames_1.next()) {
|
|
241
|
+
raw = fontNames_1_1.value;
|
|
242
|
+
key = raw.toLowerCase();
|
|
243
|
+
info = byName.get(key);
|
|
244
|
+
if (this.deferMeshFonts && info && isMeshFontInfo(info)) {
|
|
245
|
+
deferredFonts.push(raw);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
criticalFonts.push(raw);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
253
|
+
finally {
|
|
254
|
+
try {
|
|
255
|
+
if (fontNames_1_1 && !fontNames_1_1.done && (_f = fontNames_1.return)) _f.call(fontNames_1);
|
|
256
|
+
}
|
|
257
|
+
finally { if (e_3) throw e_3.error; }
|
|
145
258
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
259
|
+
shouldDeferMesh = this.deferMeshFonts &&
|
|
260
|
+
deferredFonts.length > 0 &&
|
|
261
|
+
criticalFonts.length > 0;
|
|
262
|
+
criticalStartedAt = performance.now();
|
|
263
|
+
if (!(criticalFonts.length > 0)) return [3 /*break*/, 4];
|
|
264
|
+
return [4 /*yield*/, this._loader.load(criticalFonts)];
|
|
265
|
+
case 3:
|
|
266
|
+
_c = _g.sent();
|
|
267
|
+
return [3 /*break*/, 5];
|
|
268
|
+
case 4:
|
|
269
|
+
_c = [];
|
|
270
|
+
_g.label = 5;
|
|
271
|
+
case 5:
|
|
272
|
+
loadStatus = _c;
|
|
273
|
+
criticalLoadMs = performance.now() - criticalStartedAt;
|
|
274
|
+
if (!(deferredFonts.length > 0 && !shouldDeferMesh)) return [3 /*break*/, 7];
|
|
275
|
+
deferredStartedAt = performance.now();
|
|
276
|
+
return [4 /*yield*/, this._loader.load(deferredFonts)];
|
|
277
|
+
case 6:
|
|
278
|
+
deferredStatus = _g.sent();
|
|
279
|
+
deferredLoadMs = performance.now() - deferredStartedAt;
|
|
280
|
+
loadStatus = __spreadArray(__spreadArray([], __read(loadStatus), false), __read(deferredStatus), false);
|
|
281
|
+
return [3 /*break*/, 8];
|
|
282
|
+
case 7:
|
|
283
|
+
if (shouldDeferMesh) {
|
|
284
|
+
// Still in flight when load() resolves; null until the callback fills it in.
|
|
285
|
+
deferredLoadMs = null;
|
|
286
|
+
}
|
|
287
|
+
_g.label = 8;
|
|
288
|
+
case 8:
|
|
289
|
+
stats_1 = {
|
|
290
|
+
fontCount: fontNames.length,
|
|
291
|
+
criticalFonts: __spreadArray([], __read(criticalFonts), false),
|
|
292
|
+
deferredFonts: __spreadArray([], __read(deferredFonts), false),
|
|
293
|
+
metaMs: metaMs,
|
|
294
|
+
criticalLoadMs: criticalLoadMs,
|
|
295
|
+
deferredLoadMs: deferredLoadMs,
|
|
296
|
+
deferred: shouldDeferMesh,
|
|
297
|
+
totalMs: performance.now() - totalStartedAt
|
|
298
|
+
};
|
|
299
|
+
lastFontLoadStats = stats_1;
|
|
300
|
+
if (shouldDeferMesh && deferredFonts.length > 0) {
|
|
301
|
+
deferredStartedAt_1 = performance.now();
|
|
302
|
+
void this._loader.load(deferredFonts).then(function (status) {
|
|
303
|
+
if (lastFontLoadStats === stats_1) {
|
|
304
|
+
stats_1.deferredLoadMs = performance.now() - deferredStartedAt_1;
|
|
305
|
+
}
|
|
306
|
+
_this.emitPartialFailures(status);
|
|
307
|
+
}, function (error) {
|
|
308
|
+
if (lastFontLoadStats === stats_1) {
|
|
309
|
+
stats_1.deferredLoadMs = performance.now() - deferredStartedAt_1;
|
|
310
|
+
}
|
|
311
|
+
logDeferredFontError(error);
|
|
149
312
|
});
|
|
150
313
|
}
|
|
314
|
+
return [3 /*break*/, 10];
|
|
315
|
+
case 9:
|
|
316
|
+
error_1 = _g.sent();
|
|
317
|
+
throw new AcDbOpenDatabaseError(error_1 instanceof Error ? error_1.message : String(error_1), 'font_load_failed', { cause: error_1 });
|
|
318
|
+
case 10:
|
|
319
|
+
this.emitPartialFailures(loadStatus);
|
|
151
320
|
return [2 /*return*/];
|
|
152
321
|
}
|
|
153
322
|
});
|
|
154
323
|
});
|
|
155
324
|
};
|
|
325
|
+
AcApFontLoader.prototype.emitPartialFailures = function (loadStatus) {
|
|
326
|
+
var fontsNotFound = [];
|
|
327
|
+
var fontsNotLoaded = [];
|
|
328
|
+
loadStatus.forEach(function (item) {
|
|
329
|
+
if (item.status === 'NotFound') {
|
|
330
|
+
fontsNotFound.push(item.fontName);
|
|
331
|
+
}
|
|
332
|
+
else if (item.status === 'FailedToLoad') {
|
|
333
|
+
fontsNotLoaded.push({
|
|
334
|
+
fontName: item.fontName,
|
|
335
|
+
url: item.url
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
if (fontsNotFound.length > 0) {
|
|
340
|
+
eventBus.emit('fonts-not-found', {
|
|
341
|
+
fonts: fontsNotFound
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
if (fontsNotLoaded.length > 0) {
|
|
345
|
+
eventBus.emit('fonts-not-loaded', {
|
|
346
|
+
fonts: fontsNotLoaded
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
};
|
|
156
350
|
return AcApFontLoader;
|
|
157
351
|
}());
|
|
158
352
|
export { AcApFontLoader };
|
|
353
|
+
function logDeferredFontError(error) {
|
|
354
|
+
console.warn('[AcApFontLoader] Deferred mesh font load failed; text may use SHX fallbacks.', error);
|
|
355
|
+
}
|
|
159
356
|
//# sourceMappingURL=AcApFontLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcApFontLoader.js","sourceRoot":"","sources":["../../src/app/AcApFontLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AcApFontLoader.js","sourceRoot":"","sources":["../../src/app/AcApFontLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,70 @@
|
|
|
1
1
|
import { AcDbDatabase } from '@mlightcad/data-model';
|
|
2
2
|
import type { AcTrView2d } from '../view/AcTrView2d';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
|
|
4
|
+
* Snapshot of the most recent document-open profile for palette / console use.
|
|
5
|
+
*/
|
|
6
|
+
export interface AcApOpenFileProfileSnapshot {
|
|
7
|
+
collectedAt: number;
|
|
8
|
+
fileName?: string;
|
|
9
|
+
totalMs: number;
|
|
10
|
+
readMs: number;
|
|
11
|
+
convertMs: number;
|
|
12
|
+
parseMs: number;
|
|
13
|
+
entityMs: number;
|
|
14
|
+
stages: {
|
|
15
|
+
name: string;
|
|
16
|
+
durationMs: number;
|
|
17
|
+
}[];
|
|
18
|
+
cache: {
|
|
19
|
+
hits: number;
|
|
20
|
+
misses: number;
|
|
21
|
+
hitMs: number;
|
|
22
|
+
cloneMs: number;
|
|
23
|
+
missBuildMs: number;
|
|
24
|
+
missCompactMs: number;
|
|
25
|
+
setCloneMs: number;
|
|
26
|
+
applyMs: number;
|
|
27
|
+
topLevel: {
|
|
28
|
+
hits: number;
|
|
29
|
+
misses: number;
|
|
30
|
+
hitMs: number;
|
|
31
|
+
cloneMs: number;
|
|
32
|
+
missBuildMs: number;
|
|
33
|
+
missCompactMs: number;
|
|
34
|
+
setCloneMs: number;
|
|
35
|
+
applyMs: number;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
slowBlocks: {
|
|
39
|
+
blockName: string;
|
|
40
|
+
buildMs: number;
|
|
41
|
+
compactMs: number;
|
|
42
|
+
}[];
|
|
43
|
+
progressive?: {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
paintCount: number;
|
|
46
|
+
yieldCount: number;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Session open-file profiler.
|
|
6
51
|
*
|
|
7
|
-
*
|
|
8
|
-
* wall-clock read vs scene convert time, and {@link AcDbRenderingCache}
|
|
9
|
-
* counters
|
|
10
|
-
*
|
|
52
|
+
* Always records PARSE/ENTITY (and other `openProgress` sub-stages),
|
|
53
|
+
* wall-clock read vs scene convert time, and {@link AcDbRenderingCache}
|
|
54
|
+
* hit/miss counters for the last open. Console output remains gated by the
|
|
55
|
+
* {@link AcDbSystemVariables.OPENPROF} system variable.
|
|
11
56
|
*
|
|
12
57
|
* Stage durations use **active-stage wall time**: from the first event of a
|
|
13
|
-
* sub-stage until the first event of a different sub-stage.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
58
|
+
* sub-stage until the first event of a different sub-stage.
|
|
59
|
+
*
|
|
60
|
+
* Drawing fonts are loaded on demand during text draw, not during `db.read`.
|
|
61
|
+
* Explicit {@link AcApFontLoader} loads still contribute via
|
|
62
|
+
* {@link getLastFontLoadStats} in the console report.
|
|
16
63
|
*/
|
|
17
64
|
export declare class AcApOpenFileProfiler {
|
|
65
|
+
private static _lastSnapshot;
|
|
18
66
|
private _active;
|
|
67
|
+
private _printToConsole;
|
|
19
68
|
private _t0;
|
|
20
69
|
private _readEndMs;
|
|
21
70
|
private _stages;
|
|
@@ -25,34 +74,38 @@ export declare class AcApOpenFileProfiler {
|
|
|
25
74
|
private _database?;
|
|
26
75
|
private _finishScheduled;
|
|
27
76
|
/**
|
|
28
|
-
* Returns
|
|
77
|
+
* Returns the most recent completed open-file profile, if any.
|
|
78
|
+
*/
|
|
79
|
+
static getLastSnapshot(): AcApOpenFileProfileSnapshot | null;
|
|
80
|
+
/**
|
|
81
|
+
* Returns whether OPENPROF console logging is enabled for `database`.
|
|
29
82
|
*/
|
|
30
83
|
static isEnabled(database: AcDbDatabase): boolean;
|
|
31
84
|
/**
|
|
32
|
-
* Starts a profiling session
|
|
85
|
+
* Starts a profiling session for the next document open.
|
|
33
86
|
*
|
|
34
|
-
* Call from document-open start (before `db.read` / URI open).
|
|
35
|
-
*
|
|
87
|
+
* Call from document-open start (before `db.read` / URI open). Always
|
|
88
|
+
* collects a snapshot; console printing follows OPENPROF.
|
|
36
89
|
*
|
|
37
90
|
* @param database - Database that will emit `openProgress` for this open.
|
|
38
91
|
*/
|
|
39
92
|
begin(database: AcDbDatabase): void;
|
|
40
93
|
/**
|
|
41
|
-
* Marks the end of `db.read` / document open await and schedules the
|
|
42
|
-
*
|
|
94
|
+
* Marks the end of `db.read` / document open await and schedules the report
|
|
95
|
+
* once the view has finished converting entities.
|
|
43
96
|
*
|
|
44
97
|
* @param view - Active 2d view whose entity convert queue is drained.
|
|
45
98
|
*/
|
|
46
99
|
markReadCompleteAndScheduleReport(view: AcTrView2d): void;
|
|
47
100
|
/**
|
|
48
|
-
* Aborts an in-flight session without
|
|
101
|
+
* Aborts an in-flight session without publishing (e.g. document replaced).
|
|
49
102
|
*/
|
|
50
103
|
cancel(): void;
|
|
51
104
|
private onProgress;
|
|
52
105
|
private closeActiveStage;
|
|
53
106
|
private scheduleReport;
|
|
54
107
|
private waitForIdle;
|
|
55
|
-
private
|
|
108
|
+
private publishReport;
|
|
56
109
|
private detachProgressListener;
|
|
57
110
|
}
|
|
58
111
|
//# sourceMappingURL=AcApOpenFileProfiler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcApOpenFileProfiler.d.ts","sourceRoot":"","sources":["../../src/app/AcApOpenFileProfiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAMb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"AcApOpenFileProfiler.d.ts","sourceRoot":"","sources":["../../src/app/AcApOpenFileProfiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAMb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAOpD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9C,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,aAAa,EAAE,MAAM,CAAA;QACrB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAA;YACZ,MAAM,EAAE,MAAM,CAAA;YACd,KAAK,EAAE,MAAM,CAAA;YACb,OAAO,EAAE,MAAM,CAAA;YACf,WAAW,EAAE,MAAM,CAAA;YACnB,aAAa,EAAE,MAAM,CAAA;YACrB,UAAU,EAAE,MAAM,CAAA;YAClB,OAAO,EAAE,MAAM,CAAA;SAChB,CAAA;KACF,CAAA;IACD,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;KAClB,EAAE,CAAA;IACH,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2C;IAEvE,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,qBAAqB,CAAI;IACjC,OAAO,CAAC,iBAAiB,CAAC,CAAwC;IAClE,OAAO,CAAC,SAAS,CAAC,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAAQ;IAEhC;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,2BAA2B,GAAG,IAAI;IAI5D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;IAajD;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAsBnC;;;;;OAKG;IACH,iCAAiC,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAQzD;;OAEG;IACH,MAAM,IAAI,IAAI;IAad,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,cAAc;YAmBR,WAAW;IAkBzB,OAAO,CAAC,aAAa;IAwIrB,OAAO,CAAC,sBAAsB;CAQ/B"}
|