@mlightcad/cad-simple-viewer 1.7.1 → 1.7.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/LICENSE +21 -21
- package/README.md +185 -185
- package/dist/cad-simple-viewer.js +5401 -4880
- package/dist/cad-simple-viewer.umd.cjs +117 -113
- package/dist/mtext-renderer-worker.js +7083 -6992
- package/icons.ts +7 -7
- package/lib/app/AcApDocManager.d.ts +9 -6
- package/lib/app/AcApDocManager.d.ts.map +1 -1
- package/lib/app/AcApDocManager.js +44 -18
- package/lib/app/AcApDocManager.js.map +1 -1
- package/lib/app/AcApDocument.d.ts +3 -0
- package/lib/app/AcApDocument.d.ts.map +1 -1
- package/lib/app/AcApDocument.js +31 -24
- package/lib/app/AcApDocument.js.map +1 -1
- package/lib/app/AcApOpenDatabaseOptions.d.ts +27 -17
- package/lib/app/AcApOpenDatabaseOptions.d.ts.map +1 -1
- package/lib/app/AcApOpenFileProgressController.d.ts +12 -5
- package/lib/app/AcApOpenFileProgressController.d.ts.map +1 -1
- package/lib/app/AcApOpenFileProgressController.js +24 -7
- package/lib/app/AcApOpenFileProgressController.js.map +1 -1
- package/lib/app/AcApWorkerAssets.d.ts +3 -3
- package/lib/app/AcApWorkerAssets.d.ts.map +1 -1
- package/lib/app/AcApWorkerAssets.js +3 -3
- package/lib/app/AcApWorkerAssets.js.map +1 -1
- package/lib/app/notification/AcApNotificationEventBridge.d.ts.map +1 -1
- package/lib/app/notification/AcApNotificationEventBridge.js.map +1 -1
- package/lib/command/AcApZoomCmd.d.ts +26 -0
- package/lib/command/AcApZoomCmd.d.ts.map +1 -1
- package/lib/command/AcApZoomCmd.js +69 -3
- package/lib/command/AcApZoomCmd.js.map +1 -1
- package/lib/editor/input/ui/AcEdMTextEditor.d.ts.map +1 -1
- package/lib/editor/input/ui/AcEdMTextEditor.js +2 -1
- package/lib/editor/input/ui/AcEdMTextEditor.js.map +1 -1
- package/lib/editor/view/AcEdBaseView.d.ts +9 -0
- package/lib/editor/view/AcEdBaseView.d.ts.map +1 -1
- package/lib/editor/view/AcEdBaseView.js.map +1 -1
- package/lib/i18n/ar/jig.d.ts +10 -0
- package/lib/i18n/ar/jig.d.ts.map +1 -1
- package/lib/i18n/ar/jig.js +10 -2
- package/lib/i18n/ar/jig.js.map +1 -1
- package/lib/i18n/ar/main.d.ts +2 -0
- package/lib/i18n/ar/main.d.ts.map +1 -1
- package/lib/i18n/ar/main.js +4 -2
- package/lib/i18n/ar/main.js.map +1 -1
- package/lib/i18n/cs/jig.d.ts +10 -0
- package/lib/i18n/cs/jig.d.ts.map +1 -1
- package/lib/i18n/cs/jig.js +13 -3
- package/lib/i18n/cs/jig.js.map +1 -1
- package/lib/i18n/cs/main.d.ts +2 -0
- package/lib/i18n/cs/main.d.ts.map +1 -1
- package/lib/i18n/cs/main.js +4 -2
- package/lib/i18n/cs/main.js.map +1 -1
- package/lib/i18n/en/jig.d.ts +10 -0
- package/lib/i18n/en/jig.d.ts.map +1 -1
- package/lib/i18n/en/jig.js +13 -3
- package/lib/i18n/en/jig.js.map +1 -1
- package/lib/i18n/en/main.d.ts +2 -0
- package/lib/i18n/en/main.d.ts.map +1 -1
- package/lib/i18n/en/main.js +4 -2
- package/lib/i18n/en/main.js.map +1 -1
- package/lib/i18n/tr/jig.d.ts +10 -0
- package/lib/i18n/tr/jig.d.ts.map +1 -1
- package/lib/i18n/tr/jig.js +13 -3
- package/lib/i18n/tr/jig.js.map +1 -1
- package/lib/i18n/tr/main.d.ts +2 -0
- package/lib/i18n/tr/main.d.ts.map +1 -1
- package/lib/i18n/tr/main.js +4 -2
- package/lib/i18n/tr/main.js.map +1 -1
- package/lib/i18n/zh/jig.d.ts +10 -0
- package/lib/i18n/zh/jig.d.ts.map +1 -1
- package/lib/i18n/zh/jig.js +13 -3
- package/lib/i18n/zh/jig.js.map +1 -1
- package/lib/i18n/zh/main.d.ts +2 -0
- package/lib/i18n/zh/main.d.ts.map +1 -1
- package/lib/i18n/zh/main.js +4 -2
- package/lib/i18n/zh/main.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts.map +1 -1
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js +6 -3
- package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js.map +1 -1
- package/lib/ui/AcUiDefaultNotificationUi.d.ts.map +1 -1
- package/lib/ui/AcUiDefaultNotificationUi.js +3 -2
- package/lib/ui/AcUiDefaultNotificationUi.js.map +1 -1
- package/lib/ui/icons.d.ts +7 -1
- package/lib/ui/icons.d.ts.map +1 -1
- package/lib/ui/icons.js +10 -2
- package/lib/ui/icons.js.map +1 -1
- package/lib/util/AcApMessageLink.d.ts +41 -0
- package/lib/util/AcApMessageLink.d.ts.map +1 -0
- package/lib/util/AcApMessageLink.js +127 -0
- package/lib/util/AcApMessageLink.js.map +1 -0
- package/lib/util/AcApOpenFileErrorMessage.d.ts +18 -1
- package/lib/util/AcApOpenFileErrorMessage.d.ts.map +1 -1
- package/lib/util/AcApOpenFileErrorMessage.js +34 -2
- package/lib/util/AcApOpenFileErrorMessage.js.map +1 -1
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/view/AcTrDirectBatch.d.ts.map +1 -1
- package/lib/view/AcTrDirectBatch.js +12 -1
- package/lib/view/AcTrDirectBatch.js.map +1 -1
- package/lib/view/AcTrExtentCluster.d.ts +30 -0
- package/lib/view/AcTrExtentCluster.d.ts.map +1 -0
- package/lib/view/AcTrExtentCluster.js +133 -0
- package/lib/view/AcTrExtentCluster.js.map +1 -0
- package/lib/view/AcTrIntelligentExtents.d.ts +22 -0
- package/lib/view/AcTrIntelligentExtents.d.ts.map +1 -0
- package/lib/view/AcTrIntelligentExtents.js +91 -0
- package/lib/view/AcTrIntelligentExtents.js.map +1 -0
- package/lib/view/AcTrLayout.d.ts +10 -1
- package/lib/view/AcTrLayout.d.ts.map +1 -1
- package/lib/view/AcTrLayout.js +11 -0
- package/lib/view/AcTrLayout.js.map +1 -1
- package/lib/view/AcTrProgressiveOpenFitController.d.ts +8 -0
- package/lib/view/AcTrProgressiveOpenFitController.d.ts.map +1 -1
- package/lib/view/AcTrProgressiveOpenFitController.js +13 -0
- package/lib/view/AcTrProgressiveOpenFitController.js.map +1 -1
- package/lib/view/AcTrView2d.d.ts +94 -9
- package/lib/view/AcTrView2d.d.ts.map +1 -1
- package/lib/view/AcTrView2d.js +430 -64
- package/lib/view/AcTrView2d.js.map +1 -1
- package/lib/view/fontLoadRegen.d.ts +25 -0
- package/lib/view/fontLoadRegen.d.ts.map +1 -0
- package/lib/view/fontLoadRegen.js +33 -0
- package/lib/view/fontLoadRegen.js.map +1 -0
- package/lib/view/index.d.ts +2 -0
- package/lib/view/index.d.ts.map +1 -1
- package/lib/view/index.js +2 -0
- package/lib/view/index.js.map +1 -1
- package/package.json +10 -8
- package/src/ui/icons.ts +399 -387
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Product page for the commercial DWG parser (`@mlightcad/dwg-converter`).
|
|
14
|
+
* Shown when LibreDWG runs out of memory while opening a drawing.
|
|
15
|
+
*/
|
|
16
|
+
export var ACAP_DWG_PARSER_PRODUCT_URL = 'https://mlightcad.com/dwg-parser.html';
|
|
17
|
+
/** Matches a single markdown link `[label](https://...)`. */
|
|
18
|
+
var MARKDOWN_LINK_RE = /\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)/g;
|
|
19
|
+
/**
|
|
20
|
+
* Escapes text for safe interpolation into HTML content.
|
|
21
|
+
*
|
|
22
|
+
* @param text - Raw text.
|
|
23
|
+
* @returns HTML-escaped string.
|
|
24
|
+
*/
|
|
25
|
+
export function acapEscapeHtml(text) {
|
|
26
|
+
return text
|
|
27
|
+
.replace(/&/g, '&')
|
|
28
|
+
.replace(/</g, '<')
|
|
29
|
+
.replace(/>/g, '>')
|
|
30
|
+
.replace(/"/g, '"');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Builds a markdown link `[label](url)` for use in localized message templates.
|
|
34
|
+
*
|
|
35
|
+
* @param label - Visible link text.
|
|
36
|
+
* @param url - Absolute `http(s)` URL.
|
|
37
|
+
*/
|
|
38
|
+
export function acapMarkdownLink(label, url) {
|
|
39
|
+
return "[".concat(label, "](").concat(url, ")");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Converts plain text that may contain markdown links into safe HTML.
|
|
43
|
+
* Only `http` / `https` link targets are rendered as anchors.
|
|
44
|
+
*
|
|
45
|
+
* @param text - Message text, optionally with `[label](https://...)` links.
|
|
46
|
+
* @returns Escaped HTML with clickable anchors.
|
|
47
|
+
*/
|
|
48
|
+
export function acapFormatMessageHtml(text) {
|
|
49
|
+
var e_1, _a;
|
|
50
|
+
var _b;
|
|
51
|
+
var parts = [];
|
|
52
|
+
var lastIndex = 0;
|
|
53
|
+
try {
|
|
54
|
+
for (var _c = __values(text.matchAll(MARKDOWN_LINK_RE)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
55
|
+
var match = _d.value;
|
|
56
|
+
var index = (_b = match.index) !== null && _b !== void 0 ? _b : 0;
|
|
57
|
+
if (index > lastIndex) {
|
|
58
|
+
parts.push(acapEscapeHtml(text.slice(lastIndex, index)));
|
|
59
|
+
}
|
|
60
|
+
var label = acapEscapeHtml(match[1]);
|
|
61
|
+
// Escape attribute value so crafted file names cannot break out of href="...".
|
|
62
|
+
var href = acapEscapeHtml(match[2]);
|
|
63
|
+
parts.push("<a href=\"".concat(href, "\" target=\"_blank\" rel=\"noopener noreferrer\">").concat(label, "</a>"));
|
|
64
|
+
lastIndex = index + match[0].length;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
68
|
+
finally {
|
|
69
|
+
try {
|
|
70
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
71
|
+
}
|
|
72
|
+
finally { if (e_1) throw e_1.error; }
|
|
73
|
+
}
|
|
74
|
+
if (lastIndex < text.length) {
|
|
75
|
+
parts.push(acapEscapeHtml(text.slice(lastIndex)));
|
|
76
|
+
}
|
|
77
|
+
return parts.join('');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Appends plain text and markdown links as DOM nodes (no `innerHTML`).
|
|
81
|
+
*
|
|
82
|
+
* @param container - Element that receives text and optional `<a>` children.
|
|
83
|
+
* @param text - Message text, optionally with `[label](https://...)` links.
|
|
84
|
+
*/
|
|
85
|
+
export function acapAppendLinkedText(container, text) {
|
|
86
|
+
var e_2, _a;
|
|
87
|
+
var _b;
|
|
88
|
+
container.replaceChildren();
|
|
89
|
+
var lastIndex = 0;
|
|
90
|
+
try {
|
|
91
|
+
for (var _c = __values(text.matchAll(MARKDOWN_LINK_RE)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
92
|
+
var match = _d.value;
|
|
93
|
+
var index = (_b = match.index) !== null && _b !== void 0 ? _b : 0;
|
|
94
|
+
if (index > lastIndex) {
|
|
95
|
+
container.appendChild(document.createTextNode(text.slice(lastIndex, index)));
|
|
96
|
+
}
|
|
97
|
+
var anchor = document.createElement('a');
|
|
98
|
+
anchor.href = match[2];
|
|
99
|
+
anchor.target = '_blank';
|
|
100
|
+
anchor.rel = 'noopener noreferrer';
|
|
101
|
+
anchor.textContent = match[1];
|
|
102
|
+
container.appendChild(anchor);
|
|
103
|
+
lastIndex = index + match[0].length;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
107
|
+
finally {
|
|
108
|
+
try {
|
|
109
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
110
|
+
}
|
|
111
|
+
finally { if (e_2) throw e_2.error; }
|
|
112
|
+
}
|
|
113
|
+
if (lastIndex < text.length) {
|
|
114
|
+
container.appendChild(document.createTextNode(text.slice(lastIndex)));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Opens a URL in a new tab when `window` is available.
|
|
119
|
+
*
|
|
120
|
+
* @param url - Absolute URL to open.
|
|
121
|
+
*/
|
|
122
|
+
export function acapOpenUrl(url) {
|
|
123
|
+
if (typeof window === 'undefined')
|
|
124
|
+
return;
|
|
125
|
+
window.open(url, '_blank', 'noopener,noreferrer');
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=AcApMessageLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcApMessageLink.js","sourceRoot":"","sources":["../../src/util/AcApMessageLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,23 @@ import type { AcDbOpenDatabaseErrorCode } from '@mlightcad/data-model';
|
|
|
2
2
|
import type { AcEdEvents } from '../editor/global/eventBus';
|
|
3
3
|
export type AcApOpenFileErrorParams = AcEdEvents['failed-to-open-file'];
|
|
4
4
|
type TranslateFn = (key: string, params?: Record<string, string>) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Resolves a short toast message for an open-file failure.
|
|
7
|
+
*
|
|
8
|
+
* Toasts only report that opening failed; detailed reasons (including commercial
|
|
9
|
+
* parser guidance) belong in the notification center.
|
|
10
|
+
*/
|
|
11
|
+
export declare function acapResolveOpenFileErrorToastMessage(t: TranslateFn, params: AcApOpenFileErrorParams): string;
|
|
5
12
|
/**
|
|
6
13
|
* Resolves a user-facing open-file failure message from structured error metadata.
|
|
7
14
|
*
|
|
8
15
|
* Maps {@link AcDbOpenDatabaseErrorCode} values (including license failures) to
|
|
9
|
-
* localized `main.message.*` strings
|
|
16
|
+
* localized `main.message.*` strings for the **notification center**.
|
|
17
|
+
*
|
|
18
|
+
* For `worker_oom`, the message includes a markdown link (`[label](url)`) to the
|
|
19
|
+
* commercial DWG parser product page so notification UIs can render a hyperlink.
|
|
20
|
+
*
|
|
21
|
+
* Prefer {@link acapResolveOpenFileErrorToastMessage} for transient toasts.
|
|
10
22
|
*/
|
|
11
23
|
export declare function acapResolveOpenFileErrorMessage(t: TranslateFn, params: AcApOpenFileErrorParams): string;
|
|
12
24
|
/**
|
|
@@ -15,8 +27,13 @@ export declare function acapResolveOpenFileErrorMessage(t: TranslateFn, params:
|
|
|
15
27
|
export declare function acapResolveOpenFileErrorTitle(t: TranslateFn, errorCode?: AcDbOpenDatabaseErrorCode): string;
|
|
16
28
|
/**
|
|
17
29
|
* Resolves a localized open-file failure message using {@link AcApI18n}.
|
|
30
|
+
* Intended for the notification center (detailed).
|
|
18
31
|
*/
|
|
19
32
|
export declare function acapFormatOpenFileErrorMessage(params: AcApOpenFileErrorParams): string;
|
|
33
|
+
/**
|
|
34
|
+
* Resolves a localized short toast for an open-file failure using {@link AcApI18n}.
|
|
35
|
+
*/
|
|
36
|
+
export declare function acapFormatOpenFileErrorToastMessage(params: AcApOpenFileErrorParams): string;
|
|
20
37
|
/**
|
|
21
38
|
* Resolves a localized open-file failure title using {@link AcApI18n}.
|
|
22
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcApOpenFileErrorMessage.d.ts","sourceRoot":"","sources":["../../src/util/AcApOpenFileErrorMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"AcApOpenFileErrorMessage.d.ts","sourceRoot":"","sources":["../../src/util/AcApOpenFileErrorMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAO3D,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAA;AAEvE,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAA;AAsC3E;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,CAAC,EAAE,WAAW,EACd,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAIR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,+BAA+B,CAC7C,CAAC,EAAE,WAAW,EACd,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,CAAC,EAAE,WAAW,EACd,SAAS,CAAC,EAAE,yBAAyB,GACpC,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,CAAC,EAAE,yBAAyB,GACpC,MAAM,CAER"}
|
|
@@ -26,6 +26,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
26
26
|
return ar;
|
|
27
27
|
};
|
|
28
28
|
import { AcApI18n } from '../i18n/AcApI18n';
|
|
29
|
+
import { ACAP_DWG_PARSER_PRODUCT_URL, acapMarkdownLink } from './AcApMessageLink';
|
|
29
30
|
/**
|
|
30
31
|
* Applies `{name}` placeholders in a locale template string.
|
|
31
32
|
*/
|
|
@@ -55,17 +56,41 @@ function applyTemplateParams(template, params) {
|
|
|
55
56
|
function acapI18nTranslate(key, params) {
|
|
56
57
|
return applyTemplateParams(AcApI18n.t(key), params);
|
|
57
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds the `{dwgParserLink}` placeholder for LibreDWG out-of-memory messages.
|
|
61
|
+
* The value is a markdown link rendered as a clickable hyperlink in notification UIs.
|
|
62
|
+
*/
|
|
63
|
+
function resolveWorkerOomDwgParserLink(t) {
|
|
64
|
+
return acapMarkdownLink(t('main.message.failedToOpenFileWorkerOomLink'), ACAP_DWG_PARSER_PRODUCT_URL);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolves a short toast message for an open-file failure.
|
|
68
|
+
*
|
|
69
|
+
* Toasts only report that opening failed; detailed reasons (including commercial
|
|
70
|
+
* parser guidance) belong in the notification center.
|
|
71
|
+
*/
|
|
72
|
+
export function acapResolveOpenFileErrorToastMessage(t, params) {
|
|
73
|
+
return t('main.message.failedToOpenFileToast', {
|
|
74
|
+
fileName: params.fileName
|
|
75
|
+
});
|
|
76
|
+
}
|
|
58
77
|
/**
|
|
59
78
|
* Resolves a user-facing open-file failure message from structured error metadata.
|
|
60
79
|
*
|
|
61
80
|
* Maps {@link AcDbOpenDatabaseErrorCode} values (including license failures) to
|
|
62
|
-
* localized `main.message.*` strings
|
|
81
|
+
* localized `main.message.*` strings for the **notification center**.
|
|
82
|
+
*
|
|
83
|
+
* For `worker_oom`, the message includes a markdown link (`[label](url)`) to the
|
|
84
|
+
* commercial DWG parser product page so notification UIs can render a hyperlink.
|
|
85
|
+
*
|
|
86
|
+
* Prefer {@link acapResolveOpenFileErrorToastMessage} for transient toasts.
|
|
63
87
|
*/
|
|
64
88
|
export function acapResolveOpenFileErrorMessage(t, params) {
|
|
65
89
|
switch (params.errorCode) {
|
|
66
90
|
case 'worker_oom':
|
|
67
91
|
return t('main.message.failedToOpenFileWorkerOom', {
|
|
68
|
-
fileName: params.fileName
|
|
92
|
+
fileName: params.fileName,
|
|
93
|
+
dwgParserLink: resolveWorkerOomDwgParserLink(t)
|
|
69
94
|
});
|
|
70
95
|
case 'worker_timeout':
|
|
71
96
|
return t('main.message.failedToOpenFileWorkerTimeout', {
|
|
@@ -108,10 +133,17 @@ export function acapResolveOpenFileErrorTitle(t, errorCode) {
|
|
|
108
133
|
}
|
|
109
134
|
/**
|
|
110
135
|
* Resolves a localized open-file failure message using {@link AcApI18n}.
|
|
136
|
+
* Intended for the notification center (detailed).
|
|
111
137
|
*/
|
|
112
138
|
export function acapFormatOpenFileErrorMessage(params) {
|
|
113
139
|
return acapResolveOpenFileErrorMessage(acapI18nTranslate, params);
|
|
114
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolves a localized short toast for an open-file failure using {@link AcApI18n}.
|
|
143
|
+
*/
|
|
144
|
+
export function acapFormatOpenFileErrorToastMessage(params) {
|
|
145
|
+
return acapResolveOpenFileErrorToastMessage(acapI18nTranslate, params);
|
|
146
|
+
}
|
|
115
147
|
/**
|
|
116
148
|
* Resolves a localized open-file failure title using {@link AcApI18n}.
|
|
117
149
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcApOpenFileErrorMessage.js","sourceRoot":"","sources":["../../src/util/AcApOpenFileErrorMessage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"AcApOpenFileErrorMessage.js","sourceRoot":"","sources":["../../src/util/AcApOpenFileErrorMessage.ts"],"names":[],"mappings":"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"}
|
package/lib/util/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from './AcApFontUtil';
|
|
|
8
8
|
export * from './AcApMeasurementUtil';
|
|
9
9
|
export * from './AcApMeasurementUnits';
|
|
10
10
|
export * from './AcApOpenFileErrorMessage';
|
|
11
|
+
export * from './AcApMessageLink';
|
|
11
12
|
export * from './AcApAnalyzeUnsupportedDrawing';
|
|
12
13
|
export * from './AcApFormatUnsupportedEntitiesMessage';
|
|
13
14
|
export * from './AcApFormatFontMissedMessage';
|
package/lib/util/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA"}
|
package/lib/util/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export * from './AcApFontUtil';
|
|
|
8
8
|
export * from './AcApMeasurementUtil';
|
|
9
9
|
export * from './AcApMeasurementUnits';
|
|
10
10
|
export * from './AcApOpenFileErrorMessage';
|
|
11
|
+
export * from './AcApMessageLink';
|
|
11
12
|
export * from './AcApAnalyzeUnsupportedDrawing';
|
|
12
13
|
export * from './AcApFormatUnsupportedEntitiesMessage';
|
|
13
14
|
export * from './AcApFormatFontMissedMessage';
|
package/lib/util/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wCAAwC,CAAA;AACtD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcTrDirectBatch.d.ts","sourceRoot":"","sources":["../../src/view/AcTrDirectBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,uBAAuB,CAAA;AACtE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"AcTrDirectBatch.d.ts","sourceRoot":"","sources":["../../src/view/AcTrDirectBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,uBAAuB,CAAA;AACtE,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,YAAY,EAOI,MAAM,2BAA2B,CAAA;AAExD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,YAAY,GACrB,oBAAoB,GAAG,IAAI,CA6C7B;AAED,6EAA6E;AAC7E,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE3E"}
|
|
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
12
|
import { AcDbRay, AcDbXline } from '@mlightcad/data-model';
|
|
13
|
-
import { buildAreaGeometry, buildLineGeometry, buildLineSegmentsGeometry, buildPointGeometry, isDirectBatchRejectedMaterial, resolveAnchorFromBox } from '@mlightcad/three-renderer';
|
|
13
|
+
import { buildAreaGeometry, buildLineGeometry, buildLineSegmentsGeometry, buildOffsetRingDirectGeometry, buildPointGeometry, isDirectBatchRejectedMaterial, resolveAnchorFromBox } from '@mlightcad/three-renderer';
|
|
14
14
|
/**
|
|
15
15
|
* Whether the entity advertises a single batchable draw primitive.
|
|
16
16
|
* Prefer this over hard-coded `instanceof` lists.
|
|
@@ -108,6 +108,17 @@ function buildFromCapture(payload, renderer) {
|
|
|
108
108
|
}
|
|
109
109
|
return built;
|
|
110
110
|
}
|
|
111
|
+
if (payload.kind === 'offsetRing') {
|
|
112
|
+
var built = buildOffsetRingDirectGeometry(payload.outer, payload.inner, traits, renderer.context);
|
|
113
|
+
if (!built) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
if (isDirectBatchRejectedMaterial(built.material)) {
|
|
117
|
+
built.geometry.dispose();
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return built;
|
|
121
|
+
}
|
|
111
122
|
return null;
|
|
112
123
|
}
|
|
113
124
|
//# sourceMappingURL=AcTrDirectBatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcTrDirectBatch.js","sourceRoot":"","sources":["../../src/view/AcTrDirectBatch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AcTrDirectBatch.js","sourceRoot":"","sources":["../../src/view/AcTrDirectBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Axis-aligned box used while peeling outlier clusters for intelligent fit.
|
|
3
|
+
*/
|
|
4
|
+
export interface AcTrClusterBox {
|
|
5
|
+
minX: number;
|
|
6
|
+
minY: number;
|
|
7
|
+
maxX: number;
|
|
8
|
+
maxY: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Peels far outlier boxes along one axis, keeping the denser majority side.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors the PDF/HTML exporter's dominant-cluster heuristic: a gap must exceed
|
|
14
|
+
* both a fraction of the full span and an outlier threshold based on typical
|
|
15
|
+
* nearest-neighbor spacing inside the majority side. Small samples (< 8) are
|
|
16
|
+
* left unchanged so sparse drawings are not over-pruned.
|
|
17
|
+
*
|
|
18
|
+
* @param boxes - Candidate boxes (mutated only via returned subset).
|
|
19
|
+
* @param axis - Projection axis for the gap search.
|
|
20
|
+
* @returns Majority-side boxes, or the input when no outlier-scale gap exists.
|
|
21
|
+
*/
|
|
22
|
+
export declare function splitDominantCluster(boxes: AcTrClusterBox[], axis: 'x' | 'y'): AcTrClusterBox[];
|
|
23
|
+
/**
|
|
24
|
+
* Unions boxes after iteratively peeling dominant-cluster outliers on X then Y.
|
|
25
|
+
*
|
|
26
|
+
* @param boxes - Finite, non-empty candidate boxes.
|
|
27
|
+
* @returns Union of the surviving cluster, or `null` when empty.
|
|
28
|
+
*/
|
|
29
|
+
export declare function unionDominantCluster(boxes: AcTrClusterBox[]): AcTrClusterBox | null;
|
|
30
|
+
//# sourceMappingURL=AcTrExtentCluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcTrExtentCluster.d.ts","sourceRoot":"","sources":["../../src/view/AcTrExtentCluster.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE,GAAG,GAAG,GAAG,GACd,cAAc,EAAE,CAgDlB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EAAE,GACtB,cAAc,GAAG,IAAI,CAgBvB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Peels far outlier boxes along one axis, keeping the denser majority side.
|
|
14
|
+
*
|
|
15
|
+
* Mirrors the PDF/HTML exporter's dominant-cluster heuristic: a gap must exceed
|
|
16
|
+
* both a fraction of the full span and an outlier threshold based on typical
|
|
17
|
+
* nearest-neighbor spacing inside the majority side. Small samples (< 8) are
|
|
18
|
+
* left unchanged so sparse drawings are not over-pruned.
|
|
19
|
+
*
|
|
20
|
+
* @param boxes - Candidate boxes (mutated only via returned subset).
|
|
21
|
+
* @param axis - Projection axis for the gap search.
|
|
22
|
+
* @returns Majority-side boxes, or the input when no outlier-scale gap exists.
|
|
23
|
+
*/
|
|
24
|
+
export function splitDominantCluster(boxes, axis) {
|
|
25
|
+
if (boxes.length < 8) {
|
|
26
|
+
return boxes;
|
|
27
|
+
}
|
|
28
|
+
var keyed = boxes
|
|
29
|
+
.map(function (box) { return ({
|
|
30
|
+
value: axis === 'x' ? (box.minX + box.maxX) / 2 : (box.minY + box.maxY) / 2,
|
|
31
|
+
box: box
|
|
32
|
+
}); })
|
|
33
|
+
.sort(function (a, b) { return a.value - b.value; });
|
|
34
|
+
var span = keyed[keyed.length - 1].value - keyed[0].value;
|
|
35
|
+
if (!(span > 0)) {
|
|
36
|
+
return boxes;
|
|
37
|
+
}
|
|
38
|
+
var bestGap = 0;
|
|
39
|
+
var bestIndex = 0;
|
|
40
|
+
for (var i = 1; i < keyed.length; i++) {
|
|
41
|
+
var gap = keyed[i].value - keyed[i - 1].value;
|
|
42
|
+
if (gap > bestGap) {
|
|
43
|
+
bestGap = gap;
|
|
44
|
+
bestIndex = i;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (bestGap < span * 0.2) {
|
|
48
|
+
return boxes;
|
|
49
|
+
}
|
|
50
|
+
var left = keyed.slice(0, bestIndex);
|
|
51
|
+
var right = keyed.slice(bestIndex);
|
|
52
|
+
var majority = left.length >= right.length ? left : right;
|
|
53
|
+
var sizes = boxes.map(function (box) {
|
|
54
|
+
return Math.max(box.maxX - box.minX, box.maxY - box.minY, 1e-9);
|
|
55
|
+
});
|
|
56
|
+
sizes.sort(function (a, b) { return a - b; });
|
|
57
|
+
var medianSize = sizes[Math.floor(sizes.length / 2)] || 1;
|
|
58
|
+
var majNnGaps = [];
|
|
59
|
+
for (var i = 1; i < majority.length; i++) {
|
|
60
|
+
majNnGaps.push(majority[i].value - majority[i - 1].value);
|
|
61
|
+
}
|
|
62
|
+
majNnGaps.sort(function (a, b) { return a - b; });
|
|
63
|
+
var typicalGap = majNnGaps.length > 0
|
|
64
|
+
? majNnGaps[Math.floor(majNnGaps.length / 2)] || medianSize
|
|
65
|
+
: medianSize;
|
|
66
|
+
var outlierGap = Math.max(typicalGap * 10, medianSize * 20);
|
|
67
|
+
if (bestGap < outlierGap) {
|
|
68
|
+
return boxes;
|
|
69
|
+
}
|
|
70
|
+
return majority.map(function (item) { return item.box; });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Unions boxes after iteratively peeling dominant-cluster outliers on X then Y.
|
|
74
|
+
*
|
|
75
|
+
* @param boxes - Finite, non-empty candidate boxes.
|
|
76
|
+
* @returns Union of the surviving cluster, or `null` when empty.
|
|
77
|
+
*/
|
|
78
|
+
export function unionDominantCluster(boxes) {
|
|
79
|
+
var _a;
|
|
80
|
+
if (boxes.length === 0) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
var fallback = unionBoxes(boxes);
|
|
84
|
+
if (boxes.length < 8) {
|
|
85
|
+
return fallback;
|
|
86
|
+
}
|
|
87
|
+
var working = boxes.slice();
|
|
88
|
+
var previous = -1;
|
|
89
|
+
while (working.length !== previous) {
|
|
90
|
+
previous = working.length;
|
|
91
|
+
working = splitDominantCluster(working, 'x');
|
|
92
|
+
working = splitDominantCluster(working, 'y');
|
|
93
|
+
}
|
|
94
|
+
return (_a = unionBoxes(working)) !== null && _a !== void 0 ? _a : fallback;
|
|
95
|
+
}
|
|
96
|
+
function unionBoxes(boxes) {
|
|
97
|
+
var e_1, _a;
|
|
98
|
+
if (boxes.length === 0) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
var minX = Infinity;
|
|
102
|
+
var minY = Infinity;
|
|
103
|
+
var maxX = -Infinity;
|
|
104
|
+
var maxY = -Infinity;
|
|
105
|
+
try {
|
|
106
|
+
for (var boxes_1 = __values(boxes), boxes_1_1 = boxes_1.next(); !boxes_1_1.done; boxes_1_1 = boxes_1.next()) {
|
|
107
|
+
var box = boxes_1_1.value;
|
|
108
|
+
if (box.minX < minX)
|
|
109
|
+
minX = box.minX;
|
|
110
|
+
if (box.minY < minY)
|
|
111
|
+
minY = box.minY;
|
|
112
|
+
if (box.maxX > maxX)
|
|
113
|
+
maxX = box.maxX;
|
|
114
|
+
if (box.maxY > maxY)
|
|
115
|
+
maxY = box.maxY;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
119
|
+
finally {
|
|
120
|
+
try {
|
|
121
|
+
if (boxes_1_1 && !boxes_1_1.done && (_a = boxes_1.return)) _a.call(boxes_1);
|
|
122
|
+
}
|
|
123
|
+
finally { if (e_1) throw e_1.error; }
|
|
124
|
+
}
|
|
125
|
+
if (!Number.isFinite(minX) ||
|
|
126
|
+
!Number.isFinite(minY) ||
|
|
127
|
+
!Number.isFinite(maxX) ||
|
|
128
|
+
!Number.isFinite(maxY)) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return { minX: minX, minY: minY, maxX: maxX, maxY: maxY };
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=AcTrExtentCluster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcTrExtentCluster.js","sourceRoot":"","sources":["../../src/view/AcTrExtentCluster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AcGeBox2d } from '@mlightcad/data-model';
|
|
2
|
+
/**
|
|
3
|
+
* One finite AABB used as a candidate for intelligent zoom-to-fit.
|
|
4
|
+
*/
|
|
5
|
+
export interface AcTrExtentEntry {
|
|
6
|
+
minX: number;
|
|
7
|
+
minY: number;
|
|
8
|
+
maxX: number;
|
|
9
|
+
maxY: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Dominant-cluster fit from entity/spatial AABBs.
|
|
13
|
+
*
|
|
14
|
+
* Outlier-scale boxes (corrupt far entities) are dropped, then far-center
|
|
15
|
+
* boxes are peeled, then the majority cluster is unioned — same heuristic as
|
|
16
|
+
* the HTML export offline viewer's smart extents.
|
|
17
|
+
*
|
|
18
|
+
* @param entries - Candidate boxes (typically spatial-index leaves).
|
|
19
|
+
* @returns Clustered extents, or `undefined` when empty after filtering.
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeIntelligentExtents(entries: ReadonlyArray<AcTrExtentEntry>): AcGeBox2d | undefined;
|
|
22
|
+
//# sourceMappingURL=AcTrIntelligentExtents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcTrIntelligentExtents.d.ts","sourceRoot":"","sources":["../../src/view/AcTrIntelligentExtents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAQjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,GACtC,SAAS,GAAG,SAAS,CAmCvB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
import { AcGeBox2d } from '@mlightcad/data-model';
|
|
13
|
+
import { unionDominantCluster } from './AcTrExtentCluster';
|
|
14
|
+
import { isFiniteSpatialBBox } from './AcTrGroupWcsBboxAssert';
|
|
15
|
+
/**
|
|
16
|
+
* Dominant-cluster fit from entity/spatial AABBs.
|
|
17
|
+
*
|
|
18
|
+
* Outlier-scale boxes (corrupt far entities) are dropped, then far-center
|
|
19
|
+
* boxes are peeled, then the majority cluster is unioned — same heuristic as
|
|
20
|
+
* the HTML export offline viewer's smart extents.
|
|
21
|
+
*
|
|
22
|
+
* @param entries - Candidate boxes (typically spatial-index leaves).
|
|
23
|
+
* @returns Clustered extents, or `undefined` when empty after filtering.
|
|
24
|
+
*/
|
|
25
|
+
export function computeIntelligentExtents(entries) {
|
|
26
|
+
var e_1, _a;
|
|
27
|
+
var finite = entries.filter(isFiniteSpatialBBox);
|
|
28
|
+
if (finite.length === 0) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
var sizes = finite.map(function (entry) {
|
|
32
|
+
return Math.max(entry.maxX - entry.minX, entry.maxY - entry.minY, 1e-9);
|
|
33
|
+
});
|
|
34
|
+
sizes.sort(function (a, b) { return a - b; });
|
|
35
|
+
var medianSize = sizes[Math.floor(sizes.length / 2)] || 1;
|
|
36
|
+
var hugeSpan = Math.max(medianSize * 50, 1e10);
|
|
37
|
+
var boxes = [];
|
|
38
|
+
try {
|
|
39
|
+
for (var finite_1 = __values(finite), finite_1_1 = finite_1.next(); !finite_1_1.done; finite_1_1 = finite_1.next()) {
|
|
40
|
+
var entry = finite_1_1.value;
|
|
41
|
+
var span = Math.max(entry.maxX - entry.minX, entry.maxY - entry.minY);
|
|
42
|
+
if (span >= hugeSpan) {
|
|
43
|
+
// Drop the poisoned AABB so it cannot union into the fit.
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
boxes.push(entry);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
50
|
+
finally {
|
|
51
|
+
try {
|
|
52
|
+
if (finite_1_1 && !finite_1_1.done && (_a = finite_1.return)) _a.call(finite_1);
|
|
53
|
+
}
|
|
54
|
+
finally { if (e_1) throw e_1.error; }
|
|
55
|
+
}
|
|
56
|
+
if (boxes.length === 0) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
var peeled = peelFarCenterBoxes(boxes);
|
|
60
|
+
var clustered = unionDominantCluster(peeled.length > 0 ? peeled : boxes);
|
|
61
|
+
if (!clustered) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return new AcGeBox2d({ x: clustered.minX, y: clustered.minY }, { x: clustered.maxX, y: clustered.maxY });
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Drops boxes whose center sits outlier-scale away from the median center.
|
|
68
|
+
*/
|
|
69
|
+
function peelFarCenterBoxes(boxes) {
|
|
70
|
+
if (boxes.length < 2) {
|
|
71
|
+
return boxes;
|
|
72
|
+
}
|
|
73
|
+
var centers = boxes.map(function (box) { return ({
|
|
74
|
+
x: (box.minX + box.maxX) / 2,
|
|
75
|
+
y: (box.minY + box.maxY) / 2,
|
|
76
|
+
box: box
|
|
77
|
+
}); });
|
|
78
|
+
var xs = centers.map(function (c) { return c.x; }).sort(function (a, b) { return a - b; });
|
|
79
|
+
var ys = centers.map(function (c) { return c.y; }).sort(function (a, b) { return a - b; });
|
|
80
|
+
var medX = xs[Math.floor(xs.length / 2)];
|
|
81
|
+
var medY = ys[Math.floor(ys.length / 2)];
|
|
82
|
+
var sizes = boxes.map(function (box) {
|
|
83
|
+
return Math.max(box.maxX - box.minX, box.maxY - box.minY, 1e-9);
|
|
84
|
+
});
|
|
85
|
+
sizes.sort(function (a, b) { return a - b; });
|
|
86
|
+
var medianSize = sizes[Math.floor(sizes.length / 2)] || 1;
|
|
87
|
+
var limit = Math.max(medianSize * 50, 1e10);
|
|
88
|
+
var kept = centers.filter(function (c) { return Math.hypot(c.x - medX, c.y - medY) <= limit; });
|
|
89
|
+
return kept.length > 0 ? kept.map(function (c) { return c.box; }) : boxes;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=AcTrIntelligentExtents.js.map
|