@mlightcad/cad-simple-viewer 1.7.3 → 1.7.5

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 (235) hide show
  1. package/README.md +5 -0
  2. package/dist/cad-simple-viewer.js +10348 -8246
  3. package/dist/cad-simple-viewer.umd.cjs +431 -87
  4. package/dist/mtext-renderer-worker.js +2191 -2124
  5. package/lib/app/AcApDocManager.d.ts +57 -0
  6. package/lib/app/AcApDocManager.d.ts.map +1 -1
  7. package/lib/app/AcApDocManager.js +171 -9
  8. package/lib/app/AcApDocManager.js.map +1 -1
  9. package/lib/app/AcApOpenDatabaseOptions.d.ts +34 -8
  10. package/lib/app/AcApOpenDatabaseOptions.d.ts.map +1 -1
  11. package/lib/app/AcApOpenFileDialog.d.ts +1 -1
  12. package/lib/app/AcApOpenFileDialog.d.ts.map +1 -1
  13. package/lib/app/AcApOpenFileDialog.js +22 -92
  14. package/lib/app/AcApOpenFileDialog.js.map +1 -1
  15. package/lib/app/AcApOpenFileProfiler.d.ts +14 -0
  16. package/lib/app/AcApOpenFileProfiler.d.ts.map +1 -1
  17. package/lib/app/AcApOpenFileProfiler.js +25 -3
  18. package/lib/app/AcApOpenFileProfiler.js.map +1 -1
  19. package/lib/app/dataSource/AcApDataSource.d.ts +97 -0
  20. package/lib/app/dataSource/AcApDataSource.d.ts.map +1 -0
  21. package/lib/app/dataSource/AcApDataSource.js +2 -0
  22. package/lib/app/dataSource/AcApDataSource.js.map +1 -0
  23. package/lib/app/dataSource/AcApDataSourceManager.d.ts +70 -0
  24. package/lib/app/dataSource/AcApDataSourceManager.d.ts.map +1 -0
  25. package/lib/app/dataSource/AcApDataSourceManager.js +84 -0
  26. package/lib/app/dataSource/AcApDataSourceManager.js.map +1 -0
  27. package/lib/app/dataSource/AcApLocalDataSource.d.ts +25 -0
  28. package/lib/app/dataSource/AcApLocalDataSource.d.ts.map +1 -0
  29. package/lib/app/dataSource/AcApLocalDataSource.js +153 -0
  30. package/lib/app/dataSource/AcApLocalDataSource.js.map +1 -0
  31. package/lib/app/dataSource/AcApUrlDataSource.d.ts +17 -0
  32. package/lib/app/dataSource/AcApUrlDataSource.d.ts.map +1 -0
  33. package/lib/app/dataSource/AcApUrlDataSource.js +214 -0
  34. package/lib/app/dataSource/AcApUrlDataSource.js.map +1 -0
  35. package/lib/app/dataSource/acapBuildDataSourceMenu.d.ts +42 -0
  36. package/lib/app/dataSource/acapBuildDataSourceMenu.d.ts.map +1 -0
  37. package/lib/app/dataSource/acapBuildDataSourceMenu.js +121 -0
  38. package/lib/app/dataSource/acapBuildDataSourceMenu.js.map +1 -0
  39. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.d.ts +17 -0
  40. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.d.ts.map +1 -0
  41. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.js +74 -0
  42. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.js.map +1 -0
  43. package/lib/app/dataSource/acapOpenCenteredPopup.d.ts +13 -0
  44. package/lib/app/dataSource/acapOpenCenteredPopup.d.ts.map +1 -0
  45. package/lib/app/dataSource/acapOpenCenteredPopup.js +35 -0
  46. package/lib/app/dataSource/acapOpenCenteredPopup.js.map +1 -0
  47. package/lib/app/dataSource/acapOpenDataSourceResult.d.ts +13 -0
  48. package/lib/app/dataSource/acapOpenDataSourceResult.d.ts.map +1 -0
  49. package/lib/app/dataSource/acapOpenDataSourceResult.js +90 -0
  50. package/lib/app/dataSource/acapOpenDataSourceResult.js.map +1 -0
  51. package/lib/app/dataSource/acapRunDataSourceMenuAction.d.ts +15 -0
  52. package/lib/app/dataSource/acapRunDataSourceMenuAction.d.ts.map +1 -0
  53. package/lib/app/dataSource/acapRunDataSourceMenuAction.js +74 -0
  54. package/lib/app/dataSource/acapRunDataSourceMenuAction.js.map +1 -0
  55. package/lib/app/dataSource/acapWithDataSourceBusy.d.ts +12 -0
  56. package/lib/app/dataSource/acapWithDataSourceBusy.d.ts.map +1 -0
  57. package/lib/app/dataSource/acapWithDataSourceBusy.js +88 -0
  58. package/lib/app/dataSource/acapWithDataSourceBusy.js.map +1 -0
  59. package/lib/app/dataSource/index.d.ts +11 -0
  60. package/lib/app/dataSource/index.d.ts.map +1 -0
  61. package/lib/app/dataSource/index.js +10 -0
  62. package/lib/app/dataSource/index.js.map +1 -0
  63. package/lib/app/index.d.ts +1 -0
  64. package/lib/app/index.d.ts.map +1 -1
  65. package/lib/app/index.js +1 -0
  66. package/lib/app/index.js.map +1 -1
  67. package/lib/command/AcApZoomCmd.d.ts +3 -0
  68. package/lib/command/AcApZoomCmd.d.ts.map +1 -1
  69. package/lib/command/AcApZoomCmd.js +20 -6
  70. package/lib/command/AcApZoomCmd.js.map +1 -1
  71. package/lib/command/convert/AcApConvertToRasterImageCmd.d.ts +4 -2
  72. package/lib/command/convert/AcApConvertToRasterImageCmd.d.ts.map +1 -1
  73. package/lib/command/convert/AcApConvertToRasterImageCmd.js +33 -17
  74. package/lib/command/convert/AcApConvertToRasterImageCmd.js.map +1 -1
  75. package/lib/command/markup/AcApMarkupCalloutCmd.d.ts.map +1 -1
  76. package/lib/command/markup/AcApMarkupCalloutCmd.js +8 -4
  77. package/lib/command/markup/AcApMarkupCalloutCmd.js.map +1 -1
  78. package/lib/command/markup/AcApMarkupShapeCallout.d.ts.map +1 -1
  79. package/lib/command/markup/AcApMarkupShapeCallout.js +8 -4
  80. package/lib/command/markup/AcApMarkupShapeCallout.js.map +1 -1
  81. package/lib/command/markup/AcApMarkupUtil.d.ts.map +1 -1
  82. package/lib/command/markup/AcApMarkupUtil.js +6 -4
  83. package/lib/command/markup/AcApMarkupUtil.js.map +1 -1
  84. package/lib/command/measure/AcApMeasureAngleArc.d.ts +9 -2
  85. package/lib/command/measure/AcApMeasureAngleArc.d.ts.map +1 -1
  86. package/lib/command/measure/AcApMeasureAngleArc.js +9 -2
  87. package/lib/command/measure/AcApMeasureAngleArc.js.map +1 -1
  88. package/lib/command/measure/AcApMeasureAngleCmd.d.ts.map +1 -1
  89. package/lib/command/measure/AcApMeasureAngleCmd.js +17 -4
  90. package/lib/command/measure/AcApMeasureAngleCmd.js.map +1 -1
  91. package/lib/command/measure/AcApMeasureArcCmd.d.ts.map +1 -1
  92. package/lib/command/measure/AcApMeasureArcCmd.js +12 -8
  93. package/lib/command/measure/AcApMeasureArcCmd.js.map +1 -1
  94. package/lib/command/measure/AcApMeasureAreaCmd.d.ts.map +1 -1
  95. package/lib/command/measure/AcApMeasureAreaCmd.js +17 -4
  96. package/lib/command/measure/AcApMeasureAreaCmd.js.map +1 -1
  97. package/lib/command/measure/AcApMeasureContinuousCmd.d.ts.map +1 -1
  98. package/lib/command/measure/AcApMeasureContinuousCmd.js +36 -6
  99. package/lib/command/measure/AcApMeasureContinuousCmd.js.map +1 -1
  100. package/lib/command/measure/AcApMeasureDistanceCmd.d.ts.map +1 -1
  101. package/lib/command/measure/AcApMeasureDistanceCmd.js +28 -8
  102. package/lib/command/measure/AcApMeasureDistanceCmd.js.map +1 -1
  103. package/lib/command/measure/AcApMeasurementStore.d.ts.map +1 -1
  104. package/lib/command/measure/AcApMeasurementStore.js +44 -28
  105. package/lib/command/measure/AcApMeasurementStore.js.map +1 -1
  106. package/lib/command/measure/entity/AcApMeasureAngleEntity.d.ts.map +1 -1
  107. package/lib/command/measure/entity/AcApMeasureAngleEntity.js +43 -7
  108. package/lib/command/measure/entity/AcApMeasureAngleEntity.js.map +1 -1
  109. package/lib/command/measure/entity/AcApMeasureArcEntity.d.ts.map +1 -1
  110. package/lib/command/measure/entity/AcApMeasureArcEntity.js +46 -8
  111. package/lib/command/measure/entity/AcApMeasureArcEntity.js.map +1 -1
  112. package/lib/command/measure/entity/AcApMeasureAreaEntity.d.ts.map +1 -1
  113. package/lib/command/measure/entity/AcApMeasureAreaEntity.js +43 -7
  114. package/lib/command/measure/entity/AcApMeasureAreaEntity.js.map +1 -1
  115. package/lib/command/measure/entity/AcApMeasureDistanceEntity.d.ts.map +1 -1
  116. package/lib/command/measure/entity/AcApMeasureDistanceEntity.js +56 -8
  117. package/lib/command/measure/entity/AcApMeasureDistanceEntity.js.map +1 -1
  118. package/lib/command/measure/entity/AcApMeasureEntity.d.ts +8 -0
  119. package/lib/command/measure/entity/AcApMeasureEntity.d.ts.map +1 -1
  120. package/lib/command/measure/entity/AcApMeasureEntity.js +16 -1
  121. package/lib/command/measure/entity/AcApMeasureEntity.js.map +1 -1
  122. package/lib/command/measure/entity/AcApMeasureEntityGrips.d.ts.map +1 -1
  123. package/lib/command/measure/entity/AcApMeasureEntityGrips.js +2 -1
  124. package/lib/command/measure/entity/AcApMeasureEntityGrips.js.map +1 -1
  125. package/lib/command/overlay/AcApHtmlLivePreview.d.ts +6 -0
  126. package/lib/command/overlay/AcApHtmlLivePreview.d.ts.map +1 -1
  127. package/lib/command/overlay/AcApHtmlLivePreview.js +9 -2
  128. package/lib/command/overlay/AcApHtmlLivePreview.js.map +1 -1
  129. package/lib/command/overlay/AcApOverlayDrawUtil.d.ts +5 -0
  130. package/lib/command/overlay/AcApOverlayDrawUtil.d.ts.map +1 -1
  131. package/lib/command/overlay/AcApOverlayDrawUtil.js +54 -23
  132. package/lib/command/overlay/AcApOverlayDrawUtil.js.map +1 -1
  133. package/lib/editor/global/AcEdConditionWaiter.d.ts +3 -0
  134. package/lib/editor/global/AcEdConditionWaiter.d.ts.map +1 -1
  135. package/lib/editor/global/AcEdConditionWaiter.js +9 -2
  136. package/lib/editor/global/AcEdConditionWaiter.js.map +1 -1
  137. package/lib/editor/global/AcEdUiTheme.d.ts +10 -1
  138. package/lib/editor/global/AcEdUiTheme.d.ts.map +1 -1
  139. package/lib/editor/global/AcEdUiTheme.js +35 -2
  140. package/lib/editor/global/AcEdUiTheme.js.map +1 -1
  141. package/lib/editor/input/ui/AcEdCommandLine.d.ts.map +1 -1
  142. package/lib/editor/input/ui/AcEdCommandLine.js +7 -7
  143. package/lib/editor/input/ui/AcEdCommandLine.js.map +1 -1
  144. package/lib/editor/view/AcEdBaseView.d.ts +14 -1
  145. package/lib/editor/view/AcEdBaseView.d.ts.map +1 -1
  146. package/lib/editor/view/AcEdBaseView.js.map +1 -1
  147. package/lib/i18n/ar/main.d.ts +28 -0
  148. package/lib/i18n/ar/main.d.ts.map +1 -1
  149. package/lib/i18n/ar/main.js +28 -0
  150. package/lib/i18n/ar/main.js.map +1 -1
  151. package/lib/i18n/cs/main.d.ts +28 -0
  152. package/lib/i18n/cs/main.d.ts.map +1 -1
  153. package/lib/i18n/cs/main.js +28 -0
  154. package/lib/i18n/cs/main.js.map +1 -1
  155. package/lib/i18n/en/main.d.ts +28 -0
  156. package/lib/i18n/en/main.d.ts.map +1 -1
  157. package/lib/i18n/en/main.js +28 -0
  158. package/lib/i18n/en/main.js.map +1 -1
  159. package/lib/i18n/tr/main.d.ts +28 -0
  160. package/lib/i18n/tr/main.d.ts.map +1 -1
  161. package/lib/i18n/tr/main.js +28 -0
  162. package/lib/i18n/tr/main.js.map +1 -1
  163. package/lib/i18n/zh/main.d.ts +28 -0
  164. package/lib/i18n/zh/main.d.ts.map +1 -1
  165. package/lib/i18n/zh/main.js +28 -0
  166. package/lib/i18n/zh/main.js.map +1 -1
  167. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts +11 -0
  168. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts.map +1 -1
  169. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js +92 -0
  170. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js.map +1 -1
  171. package/lib/ui/AcUiFileOpenPanel.d.ts +156 -0
  172. package/lib/ui/AcUiFileOpenPanel.d.ts.map +1 -0
  173. package/lib/ui/AcUiFileOpenPanel.js +695 -0
  174. package/lib/ui/AcUiFileOpenPanel.js.map +1 -0
  175. package/lib/ui/icons.d.ts +4 -0
  176. package/lib/ui/icons.d.ts.map +1 -1
  177. package/lib/ui/icons.js +4 -0
  178. package/lib/ui/icons.js.map +1 -1
  179. package/lib/ui/index.d.ts +1 -0
  180. package/lib/ui/index.d.ts.map +1 -1
  181. package/lib/ui/index.js +1 -0
  182. package/lib/ui/index.js.map +1 -1
  183. package/lib/util/AcApDrawingExtents.d.ts +29 -0
  184. package/lib/util/AcApDrawingExtents.d.ts.map +1 -0
  185. package/lib/util/AcApDrawingExtents.js +34 -0
  186. package/lib/util/AcApDrawingExtents.js.map +1 -0
  187. package/lib/util/AcApFontUtil.d.ts +18 -0
  188. package/lib/util/AcApFontUtil.d.ts.map +1 -1
  189. package/lib/util/AcApFontUtil.js +126 -0
  190. package/lib/util/AcApFontUtil.js.map +1 -1
  191. package/lib/util/AcApMeasureBadgeFont.d.ts +99 -0
  192. package/lib/util/AcApMeasureBadgeFont.d.ts.map +1 -0
  193. package/lib/util/AcApMeasureBadgeFont.js +207 -0
  194. package/lib/util/AcApMeasureBadgeFont.js.map +1 -0
  195. package/lib/util/AcApMeasurementUnits.d.ts.map +1 -1
  196. package/lib/util/AcApMeasurementUnits.js +41 -2
  197. package/lib/util/AcApMeasurementUnits.js.map +1 -1
  198. package/lib/util/AcApTextStyleFontPreload.d.ts +42 -0
  199. package/lib/util/AcApTextStyleFontPreload.d.ts.map +1 -0
  200. package/lib/util/AcApTextStyleFontPreload.js +149 -0
  201. package/lib/util/AcApTextStyleFontPreload.js.map +1 -0
  202. package/lib/util/index.d.ts +3 -0
  203. package/lib/util/index.d.ts.map +1 -1
  204. package/lib/util/index.js +3 -0
  205. package/lib/util/index.js.map +1 -1
  206. package/lib/view/AcTrExtentCluster.d.ts +10 -0
  207. package/lib/view/AcTrExtentCluster.d.ts.map +1 -1
  208. package/lib/view/AcTrExtentCluster.js +76 -0
  209. package/lib/view/AcTrExtentCluster.js.map +1 -1
  210. package/lib/view/AcTrIntelligentExtents.d.ts +8 -0
  211. package/lib/view/AcTrIntelligentExtents.d.ts.map +1 -1
  212. package/lib/view/AcTrIntelligentExtents.js +247 -10
  213. package/lib/view/AcTrIntelligentExtents.js.map +1 -1
  214. package/lib/view/AcTrLayer.d.ts +4 -0
  215. package/lib/view/AcTrLayer.d.ts.map +1 -1
  216. package/lib/view/AcTrLayer.js +6 -0
  217. package/lib/view/AcTrLayer.js.map +1 -1
  218. package/lib/view/AcTrLayout.d.ts +41 -0
  219. package/lib/view/AcTrLayout.d.ts.map +1 -1
  220. package/lib/view/AcTrLayout.js +132 -0
  221. package/lib/view/AcTrLayout.js.map +1 -1
  222. package/lib/view/AcTrScene.d.ts +11 -0
  223. package/lib/view/AcTrScene.d.ts.map +1 -1
  224. package/lib/view/AcTrScene.js +84 -48
  225. package/lib/view/AcTrScene.js.map +1 -1
  226. package/lib/view/AcTrView2d.d.ts +79 -6
  227. package/lib/view/AcTrView2d.d.ts.map +1 -1
  228. package/lib/view/AcTrView2d.js +411 -113
  229. package/lib/view/AcTrView2d.js.map +1 -1
  230. package/lib/view/AcTrWorkSlice.d.ts +23 -0
  231. package/lib/view/AcTrWorkSlice.d.ts.map +1 -0
  232. package/lib/view/AcTrWorkSlice.js +92 -0
  233. package/lib/view/AcTrWorkSlice.js.map +1 -0
  234. package/package.json +8 -8
  235. package/src/ui/icons.ts +9 -0
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Fit-to-screen measure badges must not swallow the segment they label.
3
+ * Capsule width is limited to a fraction of the segment's screen length.
4
+ *
5
+ * Capsule padding and border are authored in `em` (see {@link AcTrHtmlBadge}),
6
+ * so horizontal chrome scales with font size.
7
+ */
8
+ var __values = (this && this.__values) || function(o) {
9
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
10
+ if (m) return m.call(o);
11
+ if (o && typeof o.length === "number") return {
12
+ next: function () {
13
+ if (o && i >= o.length) o = void 0;
14
+ return { value: o && o[i++], done: !o };
15
+ }
16
+ };
17
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
18
+ };
19
+ /** Reference font size matching {@link AcTrHtmlBadge} authoring. */
20
+ export var ACAP_MEASURE_BADGE_REF_FONT_PX = 13;
21
+ /** Horizontal padding at {@link ACAP_MEASURE_BADGE_REF_FONT_PX} (each side). */
22
+ export var ACAP_MEASURE_BADGE_PAD_X_PX = 14;
23
+ /** Border width at {@link ACAP_MEASURE_BADGE_REF_FONT_PX} (each side). */
24
+ export var ACAP_MEASURE_BADGE_BORDER_PX = 1;
25
+ /**
26
+ * Horizontal pad+border at the reference font size (legacy constant).
27
+ * Prefer {@link acapMeasureBadgeChromePx} when font size varies.
28
+ */
29
+ export var ACAP_MEASURE_BADGE_H_CHROME_PX = ACAP_MEASURE_BADGE_PAD_X_PX * 2 + ACAP_MEASURE_BADGE_BORDER_PX * 2;
30
+ /** Max fraction of the measured segment a mid-line badge may occupy. */
31
+ export var ACAP_MEASURE_BADGE_MAX_LINE_FRACTION = 0.5;
32
+ /**
33
+ * Angle badge reference uses this fraction of the shorter arm (screen),
34
+ * matching the dimension-arc radius so the capsule stays near the wedge.
35
+ */
36
+ export var ACAP_MEASURE_ANGLE_BADGE_REF_ARM_FRACTION = 0.5;
37
+ var measureCtx;
38
+ function textMeasureContext() {
39
+ if (measureCtx !== undefined)
40
+ return measureCtx;
41
+ if (typeof document === 'undefined') {
42
+ measureCtx = null;
43
+ return null;
44
+ }
45
+ try {
46
+ measureCtx = document.createElement('canvas').getContext('2d');
47
+ }
48
+ catch (_a) {
49
+ measureCtx = null;
50
+ }
51
+ return measureCtx;
52
+ }
53
+ function padXEm(options) {
54
+ var _a;
55
+ return ((_a = options === null || options === void 0 ? void 0 : options.padXEm) !== null && _a !== void 0 ? _a : ACAP_MEASURE_BADGE_PAD_X_PX / ACAP_MEASURE_BADGE_REF_FONT_PX);
56
+ }
57
+ function borderEm(options) {
58
+ var _a;
59
+ var b = (_a = options === null || options === void 0 ? void 0 : options.borderEm) !== null && _a !== void 0 ? _a : ACAP_MEASURE_BADGE_BORDER_PX / ACAP_MEASURE_BADGE_REF_FONT_PX;
60
+ return b > 0 ? b : 0;
61
+ }
62
+ /** Horizontal capsule chrome (pad + border) at a given font size. */
63
+ export function acapMeasureBadgeChromePx(fontSizePx, options) {
64
+ if (!(fontSizePx > 0))
65
+ return 0;
66
+ return 2 * (padXEm(options) + borderEm(options)) * fontSizePx;
67
+ }
68
+ /** Estimates the rendered width of a measure value capsule at `fontSizePx`. */
69
+ export function acapEstimateMeasureBadgeWidthPx(text, fontSizePx, options) {
70
+ var _a, _b;
71
+ var chrome = acapMeasureBadgeChromePx(fontSizePx, options);
72
+ if (!(fontSizePx > 0))
73
+ return chrome;
74
+ var ctx = textMeasureContext();
75
+ if (!ctx) {
76
+ // Headless / no canvas: rough CJK-aware fallback (~0.6em average).
77
+ return text.length * fontSizePx * 0.6 + chrome;
78
+ }
79
+ var weight = (_a = options === null || options === void 0 ? void 0 : options.fontWeight) !== null && _a !== void 0 ? _a : '500';
80
+ var family = (_b = options === null || options === void 0 ? void 0 : options.fontFamily) !== null && _b !== void 0 ? _b : 'sans-serif';
81
+ ctx.font = "".concat(weight, " ").concat(fontSizePx, "px ").concat(family);
82
+ return ctx.measureText(text).width + chrome;
83
+ }
84
+ /**
85
+ * Returns `preferredFontSizePx`, or a smaller size so the capsule width is at
86
+ * most {@link ACAP_MEASURE_BADGE_MAX_LINE_FRACTION} of `lineLengthScreenPx`.
87
+ *
88
+ * Assumes em-based horizontal padding and border so chrome shrinks with the font.
89
+ */
90
+ export function acapClampMeasureBadgeFontSize(text, preferredFontSizePx, lineLengthScreenPx, options) {
91
+ var _a;
92
+ if (!(preferredFontSizePx > 0) || !(lineLengthScreenPx > 0)) {
93
+ return preferredFontSizePx;
94
+ }
95
+ var fraction = (_a = options === null || options === void 0 ? void 0 : options.maxLineFraction) !== null && _a !== void 0 ? _a : ACAP_MEASURE_BADGE_MAX_LINE_FRACTION;
96
+ var maxWidth = lineLengthScreenPx * fraction;
97
+ var preferredWidth = acapEstimateMeasureBadgeWidthPx(text, preferredFontSizePx, options);
98
+ if (preferredWidth <= maxWidth)
99
+ return preferredFontSizePx;
100
+ if (!(maxWidth > 0))
101
+ return 1;
102
+ var textWidth = Math.max(0, preferredWidth - acapMeasureBadgeChromePx(preferredFontSizePx, options));
103
+ var kText = textWidth / preferredFontSizePx;
104
+ var kChrome = 2 * (padXEm(options) + borderEm(options));
105
+ var denom = kText + kChrome;
106
+ if (!(denom > 0))
107
+ return preferredFontSizePx;
108
+ return Math.max(1, maxWidth / denom);
109
+ }
110
+ /**
111
+ * Fit-to-screen only: clamp badge font so the capsule stays within half the
112
+ * segment. Custom (WCS) heights are left unchanged.
113
+ */
114
+ export function acapAdaptiveMeasureBadgeFontSize(text, style, lineLengthScreenPx, options) {
115
+ if (style.textHeightMode === 'custom')
116
+ return style.fontSize;
117
+ return acapClampMeasureBadgeFontSize(text, style.fontSize, lineLengthScreenPx, options);
118
+ }
119
+ /** Screen-space length of a world-space segment. */
120
+ export function acapScreenSegmentLengthPx(worldToScreen, a, b) {
121
+ var sa = worldToScreen(a);
122
+ var sb = worldToScreen(b);
123
+ return Math.hypot(sb.x - sa.x, sb.y - sa.y);
124
+ }
125
+ /**
126
+ * Scales a Fit-to-screen overlay length (arrow head, etc.) with the badge font
127
+ * clamp so endpoint arrows shrink when the capsule is forced smaller.
128
+ */
129
+ export function acapScaleMeasureOverlayPx(preferredPx, preferredFontSizePx, clampedFontSizePx) {
130
+ if (!(preferredPx > 0) || !(preferredFontSizePx > 0))
131
+ return preferredPx;
132
+ if (!(clampedFontSizePx > 0) || clampedFontSizePx >= preferredFontSizePx) {
133
+ return preferredPx;
134
+ }
135
+ return Math.max(1, preferredPx * (clampedFontSizePx / preferredFontSizePx));
136
+ }
137
+ /** Screen length of the angle dimension arc radius (shorter arm × fraction). */
138
+ export function acapScreenAngleBadgeRefLengthPx(worldToScreen, vertex, arm1, arm2) {
139
+ return (Math.min(acapScreenSegmentLengthPx(worldToScreen, vertex, arm1), acapScreenSegmentLengthPx(worldToScreen, vertex, arm2)) * ACAP_MEASURE_ANGLE_BADGE_REF_ARM_FRACTION);
140
+ }
141
+ /**
142
+ * Screen length of a measured arc, via uniform scale `screenR / radiusWcs`.
143
+ */
144
+ export function acapScreenArcLengthPx(worldToScreen, center, radiusWcs, arcLengthWcs) {
145
+ if (!(radiusWcs > 0) || !(arcLengthWcs > 0))
146
+ return 0;
147
+ var a = worldToScreen(center);
148
+ var b = worldToScreen({ x: center.x + radiusWcs, y: center.y });
149
+ var screenR = Math.hypot(b.x - a.x, b.y - a.y);
150
+ return (screenR / radiusWcs) * arcLengthWcs;
151
+ }
152
+ /** Distance from point `p` to segment `a`→`b` in the same coordinate space. */
153
+ function distPointToSegment2d(p, a, b) {
154
+ var dx = b.x - a.x;
155
+ var dy = b.y - a.y;
156
+ var len2 = dx * dx + dy * dy;
157
+ if (!(len2 > 0))
158
+ return Math.hypot(p.x - a.x, p.y - a.y);
159
+ var t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;
160
+ t = Math.max(0, Math.min(1, t));
161
+ return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));
162
+ }
163
+ /**
164
+ * Reference screen length for an area badge at the vertex centroid.
165
+ *
166
+ * Uses the shorter of: minimum polygon edge, and twice the screen distance
167
+ * from the centroid to the nearest edge (local “width” around the label).
168
+ */
169
+ export function acapScreenAreaBadgeRefLengthPx(worldToScreen, points) {
170
+ var e_1, _a;
171
+ var n = points.length;
172
+ if (n < 3)
173
+ return 0;
174
+ var minEdge = Infinity;
175
+ for (var i = 0; i < n; i++) {
176
+ var a = points[i];
177
+ var b = points[(i + 1) % n];
178
+ minEdge = Math.min(minEdge, acapScreenSegmentLengthPx(worldToScreen, a, b));
179
+ }
180
+ var cx = 0;
181
+ var cy = 0;
182
+ try {
183
+ for (var points_1 = __values(points), points_1_1 = points_1.next(); !points_1_1.done; points_1_1 = points_1.next()) {
184
+ var p = points_1_1.value;
185
+ cx += p.x;
186
+ cy += p.y;
187
+ }
188
+ }
189
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
190
+ finally {
191
+ try {
192
+ if (points_1_1 && !points_1_1.done && (_a = points_1.return)) _a.call(points_1);
193
+ }
194
+ finally { if (e_1) throw e_1.error; }
195
+ }
196
+ cx /= n;
197
+ cy /= n;
198
+ var sc = worldToScreen({ x: cx, y: cy });
199
+ var minToEdge = Infinity;
200
+ for (var i = 0; i < n; i++) {
201
+ var a = worldToScreen(points[i]);
202
+ var b = worldToScreen(points[(i + 1) % n]);
203
+ minToEdge = Math.min(minToEdge, distPointToSegment2d(sc, a, b));
204
+ }
205
+ return Math.min(minEdge, 2 * minToEdge);
206
+ }
207
+ //# sourceMappingURL=AcApMeasureBadgeFont.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApMeasureBadgeFont.js","sourceRoot":"","sources":["../../src/util/AcApMeasureBadgeFont.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AcApMeasurementUnits.d.ts","sourceRoot":"","sources":["../../src/util/AcApMeasurementUnits.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAE1B,MAAM,uBAAuB,CAAA;AAE9B,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,+EAA+E;AAC/E,eAAO,MAAM,sCAAsC,KAAK,CAAA;AA+CxD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAIR;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,uFAAuF;AACvF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhD,uEAAuE;AACvE,eAAO,MAAM,iCAAiC,EAAE,oBAG/C,CAAA;AAYD,2DAA2D;AAC3D,eAAO,MAAM,gCAAgC,EAAE,oBAI9C,CAAA;AAoBD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,YAAY,GACf,oBAAoB,CAUtB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACnC,IAAI,CAON;AAED,wEAAwE;AACxE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AA+GD,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAwD,GAChE,MAAM,CAgBR;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAwD,GAChE,MAAM,CAgBR;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAuD,GAC/D,MAAM,CAIR;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAcR"}
1
+ {"version":3,"file":"AcApMeasurementUnits.d.ts","sourceRoot":"","sources":["../../src/util/AcApMeasurementUnits.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAE1B,MAAM,uBAAuB,CAAA;AAE9B,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,6FAA6F;IAC7F,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,+EAA+E;AAC/E,eAAO,MAAM,sCAAsC,KAAK,CAAA;AA+CxD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAIR;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,uFAAuF;AACvF,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhD,uEAAuE;AACvE,eAAO,MAAM,iCAAiC,EAAE,oBAG/C,CAAA;AAYD,2DAA2D;AAC3D,eAAO,MAAM,gCAAgC,EAAE,oBAI9C,CAAA;AAoBD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,YAAY,GACf,oBAAoB,CAUtB;AAED,4EAA4E;AAC5E,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAE1E;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACnC,IAAI,CAON;AAED,wEAAwE;AACxE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AA+GD,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAwD,GAChE,MAAM,CAgBR;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAwD,GAChE,MAAM,CAgBR;AA4CD,oEAAoE;AACpE,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAuD,GAC/D,MAAM,CAUR;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAcR"}
@@ -9,7 +9,7 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { AcDbLinearUnits } from '@mlightcad/data-model';
12
+ import { AcDbAngleUnits, AcDbLinearUnits } from '@mlightcad/data-model';
13
13
  /** Sentinel length unit meaning "follow the drawing units" (no conversion). */
14
14
  export var MEASUREMENT_LENGTH_UNIT_FOLLOW_DRAWING = -1;
15
15
  /** AutoCAD INSUNITS code → scale factor expressed in millimeters. */
@@ -245,11 +245,50 @@ export function formatMeasurementArea(db, value, options) {
245
245
  var symbol = measurementLengthUnitSymbol(target);
246
246
  return symbol ? "".concat(text, " ").concat(symbol, "\u00B2") : "".concat(text, "\u00B2");
247
247
  }
248
+ /**
249
+ * Rounds `value` to `precision` decimal places.
250
+ *
251
+ * Used to work around {@link AcDbFormatter} `formatDecimal`: for non-integers it
252
+ * runs `toFixed(precision)` then strips with `/\.?0+$/`, which turns `"90"` into
253
+ * `"9"` (and `"100"` into `"1"`). Pre-rounding lets whole numbers hit the
254
+ * `Number.isInteger` fast path that returns the full digit string.
255
+ */
256
+ function quantizeDecimal(value, precision) {
257
+ if (!Number.isFinite(value))
258
+ return value;
259
+ var p = Math.max(0, Math.floor(precision));
260
+ var factor = Math.pow(10, p);
261
+ var quantized = Math.round(value * factor) / factor;
262
+ return Object.is(quantized, -0) ? 0 : quantized;
263
+ }
264
+ /**
265
+ * Pre-round an included angle so {@link AcDbFormatter.formatAngle} cannot drop
266
+ * trailing zeros from the decimal-degree (or similar) display string.
267
+ */
268
+ function radiansForMeasurementFormat(radians, aunits, auprec) {
269
+ switch (aunits) {
270
+ case AcDbAngleUnits.DecimalDegrees: {
271
+ var deg = quantizeDecimal((radians * 180) / Math.PI, auprec);
272
+ return (deg * Math.PI) / 180;
273
+ }
274
+ case AcDbAngleUnits.Gradians: {
275
+ // π rad = 200 gon
276
+ var grads = quantizeDecimal(radians * (200 / Math.PI), auprec);
277
+ return grads * (Math.PI / 200);
278
+ }
279
+ case AcDbAngleUnits.Radians:
280
+ return quantizeDecimal(radians, auprec);
281
+ default:
282
+ return radians;
283
+ }
284
+ }
248
285
  /** Format an angle in radians using effective measurement units. */
249
286
  export function formatMeasurementAngle(db, radians, options) {
250
287
  if (options === void 0) { options = MEASUREMENT_ANGLE_FORMAT_OPTIONS; }
251
288
  return withMeasurementFormatContext(db, function () {
252
- return db.formatter.formatAngle(radians, options);
289
+ var _a = getEffectiveMeasurementUnits(db), aunits = _a.aunits, auprec = _a.auprec;
290
+ var value = radiansForMeasurementFormat(radians, aunits, auprec);
291
+ return db.formatter.formatAngle(value, __assign(__assign(__assign({}, MEASUREMENT_ANGLE_FORMAT_OPTIONS), options), { applyAngbaseAngdir: false }));
253
292
  });
254
293
  }
255
294
  /** Format a stored measurement value for a badge label. */
@@ -1 +1 @@
1
- {"version":3,"file":"AcApMeasurementUnits.js","sourceRoot":"","sources":["../../src/util/AcApMeasurementUnits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AcApMeasurementUnits.js","sourceRoot":"","sources":["../../src/util/AcApMeasurementUnits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { AcDbDatabase } from '@mlightcad/data-model';
2
+ /**
3
+ * Collects unique font face names referenced by the drawing text style table.
4
+ *
5
+ * Uses {@link AcDbTextStyleTable.fonts} (primary + big-font file names) plus
6
+ * TrueType {@link AcDbTextStyleTableRecord} `extendedFont` faces that are not
7
+ * always present on `fileName`.
8
+ */
9
+ export declare function collectTextStyleFontNames(database: AcDbDatabase): string[];
10
+ export interface AcApTextStyleFontPreloadPlan {
11
+ /**
12
+ * Style-table faces loaded on the main thread before deferred glyph finalize.
13
+ * Matches {@link FontManager.awaitFontsBeforeDraw} content/style await set.
14
+ */
15
+ critical: string[];
16
+ /**
17
+ * Small subset of {@link critical} that is also in the active default/symbol
18
+ * preset. Kept for diagnostics / planning; open-time preset load now covers
19
+ * the full chain via {@link AcApDocManager.ensurePresetFontsForOpen}.
20
+ */
21
+ workerWarm: string[];
22
+ /**
23
+ * Unused preset fallback faces (not referenced by the style table).
24
+ * Loaded at open start with the rest of the preset — not as a STYLE-stage
25
+ * background request.
26
+ */
27
+ background: string[];
28
+ }
29
+ /**
30
+ * Splits style-table faces (critical) from unused preset fallbacks (background)
31
+ * and picks a small worker warm set.
32
+ *
33
+ * When the style table is empty, the first default face is promoted to critical
34
+ * so Latin metrics still resolve before the first glyph bake.
35
+ */
36
+ export declare function planTextStyleFontPreload(styleFonts: readonly string[], fallbackFonts: readonly string[], options?: {
37
+ firstDefaultFont?: string;
38
+ }): AcApTextStyleFontPreloadPlan;
39
+ /** Case-insensitive unique list preserving first-seen casing. */
40
+ export declare function dedupeFontNames(names: readonly string[]): string[];
41
+ export declare function normalizeFontNameKey(fontName: string): string;
42
+ //# sourceMappingURL=AcApTextStyleFontPreload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApTextStyleFontPreload.d.ts","sourceRoot":"","sources":["../../src/util/AcApTextStyleFontPreload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CA4B1E;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,4BAA4B,CAyB9B;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAWlE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY7D"}
@@ -0,0 +1,149 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __values = (this && this.__values) || function(o) {
27
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
28
+ if (m) return m.call(o);
29
+ if (o && typeof o.length === "number") return {
30
+ next: function () {
31
+ if (o && i >= o.length) o = void 0;
32
+ return { value: o && o[i++], done: !o };
33
+ }
34
+ };
35
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
36
+ };
37
+ /**
38
+ * Collects unique font face names referenced by the drawing text style table.
39
+ *
40
+ * Uses {@link AcDbTextStyleTable.fonts} (primary + big-font file names) plus
41
+ * TrueType {@link AcDbTextStyleTableRecord} `extendedFont` faces that are not
42
+ * always present on `fileName`.
43
+ */
44
+ export function collectTextStyleFontNames(database) {
45
+ var e_1, _a;
46
+ var _b;
47
+ var names = [];
48
+ try {
49
+ var table = database.tables.textStyleTable;
50
+ // Primary + big-font file names (already normalized/deduped by data-model).
51
+ names.push.apply(names, __spreadArray([], __read(((_b = table.fonts) !== null && _b !== void 0 ? _b : [])), false));
52
+ // Also pick TrueType `font` / `extendedFont` when they differ from fileName
53
+ // (e.g. face "仿宋" with an empty primary file).
54
+ if (table.newIterator) {
55
+ try {
56
+ for (var _c = __values(table.newIterator()), _d = _c.next(); !_d.done; _d = _c.next()) {
57
+ var record = _d.value;
58
+ var style = record.textStyle;
59
+ if (style === null || style === void 0 ? void 0 : style.font)
60
+ names.push(style.font);
61
+ if (style === null || style === void 0 ? void 0 : style.bigFont)
62
+ names.push(style.bigFont);
63
+ if (style === null || style === void 0 ? void 0 : style.extendedFont)
64
+ names.push(style.extendedFont);
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
+ }
75
+ }
76
+ catch (_e) {
77
+ return [];
78
+ }
79
+ return dedupeFontNames(names);
80
+ }
81
+ /**
82
+ * Splits style-table faces (critical) from unused preset fallbacks (background)
83
+ * and picks a small worker warm set.
84
+ *
85
+ * When the style table is empty, the first default face is promoted to critical
86
+ * so Latin metrics still resolve before the first glyph bake.
87
+ */
88
+ export function planTextStyleFontPreload(styleFonts, fallbackFonts, options) {
89
+ var critical = dedupeFontNames(__spreadArray([], __read(styleFonts), false));
90
+ if (critical.length === 0 && (options === null || options === void 0 ? void 0 : options.firstDefaultFont)) {
91
+ critical.push(options.firstDefaultFont);
92
+ }
93
+ var criticalKeys = new Set(critical.map(normalizeFontNameKey));
94
+ var fallbackKeys = new Set(fallbackFonts.map(normalizeFontNameKey));
95
+ var background = dedupeFontNames(fallbackFonts.filter(function (name) { return !criticalKeys.has(normalizeFontNameKey(name)); }));
96
+ // Prefer preset faces already referenced by styles (usually 0–3 names). Cap
97
+ // so a pathological preset cannot reintroduce a multi-megafont worker barrier.
98
+ var workerWarm = dedupeFontNames(critical.filter(function (name) { return fallbackKeys.has(normalizeFontNameKey(name)); }));
99
+ if (workerWarm.length === 0 && (options === null || options === void 0 ? void 0 : options.firstDefaultFont)) {
100
+ var key = normalizeFontNameKey(options.firstDefaultFont);
101
+ if (key && criticalKeys.has(key)) {
102
+ workerWarm = [options.firstDefaultFont];
103
+ }
104
+ }
105
+ if (workerWarm.length > 3) {
106
+ workerWarm = workerWarm.slice(0, 3);
107
+ }
108
+ return { critical: critical, workerWarm: workerWarm, background: background };
109
+ }
110
+ /** Case-insensitive unique list preserving first-seen casing. */
111
+ export function dedupeFontNames(names) {
112
+ var e_2, _a;
113
+ var seen = new Set();
114
+ var out = [];
115
+ try {
116
+ for (var names_1 = __values(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) {
117
+ var name_1 = names_1_1.value;
118
+ if (!name_1)
119
+ continue;
120
+ var key = normalizeFontNameKey(name_1);
121
+ if (!key || seen.has(key))
122
+ continue;
123
+ seen.add(key);
124
+ out.push(name_1);
125
+ }
126
+ }
127
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
128
+ finally {
129
+ try {
130
+ if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1);
131
+ }
132
+ finally { if (e_2) throw e_2.error; }
133
+ }
134
+ return out;
135
+ }
136
+ export function normalizeFontNameKey(fontName) {
137
+ if (fontName == null)
138
+ return '';
139
+ var name = String(fontName).trim();
140
+ if (!name)
141
+ return '';
142
+ var dotIndex = name.lastIndexOf('.');
143
+ if (dotIndex > 0 &&
144
+ (dotIndex === name.length - 4 || dotIndex === name.length - 5)) {
145
+ name = name.substring(0, dotIndex);
146
+ }
147
+ return name.toLowerCase();
148
+ }
149
+ //# sourceMappingURL=AcApTextStyleFontPreload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcApTextStyleFontPreload.js","sourceRoot":"","sources":["../../src/util/AcApTextStyleFontPreload.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,13 @@ export * from './AcApAciPalette';
2
2
  export * from './AcApCommandUtil';
3
3
  export * from './AcApCssColor';
4
4
  export * from './AcApDatabaseEdit';
5
+ export * from './AcApDrawingExtents';
5
6
  export * from './AcApGeTransform';
6
7
  export * from './AcApExportFileNameUtil';
7
8
  export * from './AcApFontUtil';
9
+ export * from './AcApTextStyleFontPreload';
8
10
  export * from './AcApMeasurementUtil';
11
+ export * from './AcApMeasureBadgeFont';
9
12
  export * from './AcApMeasurementUnits';
10
13
  export * from './AcApOpenFileErrorMessage';
11
14
  export * from './AcApMessageLink';
@@ -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,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
+ {"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,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,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
@@ -2,10 +2,13 @@ export * from './AcApAciPalette';
2
2
  export * from './AcApCommandUtil';
3
3
  export * from './AcApCssColor';
4
4
  export * from './AcApDatabaseEdit';
5
+ export * from './AcApDrawingExtents';
5
6
  export * from './AcApGeTransform';
6
7
  export * from './AcApExportFileNameUtil';
7
8
  export * from './AcApFontUtil';
9
+ export * from './AcApTextStyleFontPreload';
8
10
  export * from './AcApMeasurementUtil';
11
+ export * from './AcApMeasureBadgeFont';
9
12
  export * from './AcApMeasurementUnits';
10
13
  export * from './AcApOpenFileErrorMessage';
11
14
  export * from './AcApMessageLink';
@@ -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,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
+ {"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,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,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"}
@@ -27,4 +27,14 @@ export declare function splitDominantCluster(boxes: AcTrClusterBox[], axis: 'x'
27
27
  * @returns Union of the surviving cluster, or `null` when empty.
28
28
  */
29
29
  export declare function unionDominantCluster(boxes: AcTrClusterBox[]): AcTrClusterBox | null;
30
+ /**
31
+ * Async variant of {@link unionDominantCluster} that yields between peel
32
+ * iterations so large drawings do not freeze the UI thread.
33
+ *
34
+ * Produces the same box as the synchronous version for the same input.
35
+ */
36
+ export declare function unionDominantClusterAsync(boxes: AcTrClusterBox[], work: {
37
+ maybeYield(): Promise<void>;
38
+ yieldNow(): Promise<void>;
39
+ }): Promise<AcTrClusterBox | null>;
30
40
  //# sourceMappingURL=AcTrExtentCluster.d.ts.map
@@ -1 +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"}
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;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,cAAc,EAAE,EACvB,IAAI,EAAE;IAAE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAC/D,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkBhC"}