@mlightcad/cad-simple-viewer 1.5.0 → 1.5.1
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/index.js +11070 -34695
- package/dist/index.umd.cjs +39 -52
- package/dist/libredwg-parser-worker.js +3955 -7422
- package/dist/mtext-renderer-worker.js +978 -789
- package/dist/viewer-runtime.iife.js +3879 -0
- package/lib/app/AcApAnnotation.js +4 -4
- package/lib/app/AcApAnnotation.js.map +1 -1
- package/lib/app/AcApDocManager.d.ts +45 -1
- package/lib/app/AcApDocManager.d.ts.map +1 -1
- package/lib/app/AcApDocManager.js +127 -10
- package/lib/app/AcApDocManager.js.map +1 -1
- package/lib/command/AcApZoomCmd.js +3 -3
- package/lib/command/AcApZoomCmd.js.map +1 -1
- package/lib/command/convert/AcApExportHtmlCmd.d.ts +22 -0
- package/lib/command/convert/AcApExportHtmlCmd.d.ts.map +1 -0
- package/lib/command/convert/AcApExportHtmlCmd.js +93 -0
- package/lib/command/convert/AcApExportHtmlCmd.js.map +1 -0
- package/lib/command/convert/AcApHtmlConvertor.d.ts +61 -0
- package/lib/command/convert/AcApHtmlConvertor.d.ts.map +1 -0
- package/lib/command/convert/AcApHtmlConvertor.js +223 -0
- package/lib/command/convert/AcApHtmlConvertor.js.map +1 -0
- package/lib/command/convert/AcApHtmlSnapshotBuilder.d.ts +65 -0
- package/lib/command/convert/AcApHtmlSnapshotBuilder.d.ts.map +1 -0
- package/lib/command/convert/AcApHtmlSnapshotBuilder.js +301 -0
- package/lib/command/convert/AcApHtmlSnapshotBuilder.js.map +1 -0
- package/lib/command/convert/index.d.ts +3 -0
- package/lib/command/convert/index.d.ts.map +1 -1
- package/lib/command/convert/index.js +3 -0
- package/lib/command/convert/index.js.map +1 -1
- package/lib/command/draw/AcApArcCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApArcCmd.js +46 -20
- package/lib/command/draw/AcApArcCmd.js.map +1 -1
- package/lib/command/draw/AcApCircleCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApCircleCmd.js +5 -6
- package/lib/command/draw/AcApCircleCmd.js.map +1 -1
- package/lib/command/draw/AcApEllipseCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApEllipseCmd.js +4 -6
- package/lib/command/draw/AcApEllipseCmd.js.map +1 -1
- package/lib/command/draw/AcApMLineCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApMLineCmd.js +4 -7
- package/lib/command/draw/AcApMLineCmd.js.map +1 -1
- package/lib/command/draw/AcApMTextCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApMTextCmd.js +3 -1
- package/lib/command/draw/AcApMTextCmd.js.map +1 -1
- package/lib/command/draw/AcApPolygonCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApPolygonCmd.js +4 -5
- package/lib/command/draw/AcApPolygonCmd.js.map +1 -1
- package/lib/command/draw/AcApPolylineCmd.d.ts +49 -0
- package/lib/command/draw/AcApPolylineCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApPolylineCmd.js +200 -18
- package/lib/command/draw/AcApPolylineCmd.js.map +1 -1
- package/lib/command/draw/AcApRayCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApRayCmd.js +2 -3
- package/lib/command/draw/AcApRayCmd.js.map +1 -1
- package/lib/command/draw/AcApRectCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApRectCmd.js +9 -10
- package/lib/command/draw/AcApRectCmd.js.map +1 -1
- package/lib/command/draw/AcApSplineCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApSplineCmd.js +3 -6
- package/lib/command/draw/AcApSplineCmd.js.map +1 -1
- package/lib/command/draw/AcApXLineCmd.d.ts.map +1 -1
- package/lib/command/draw/AcApXLineCmd.js +2 -3
- package/lib/command/draw/AcApXLineCmd.js.map +1 -1
- package/lib/command/measure/AcApClearMeasurementsCmd.d.ts +11 -0
- package/lib/command/measure/AcApClearMeasurementsCmd.d.ts.map +1 -1
- package/lib/command/measure/AcApClearMeasurementsCmd.js +15 -4
- package/lib/command/measure/AcApClearMeasurementsCmd.js.map +1 -1
- package/lib/command/measure/AcApMeasureAngleCmd.d.ts.map +1 -1
- package/lib/command/measure/AcApMeasureAngleCmd.js +15 -6
- package/lib/command/measure/AcApMeasureAngleCmd.js.map +1 -1
- package/lib/command/measure/AcApMeasureArcCmd.d.ts.map +1 -1
- package/lib/command/measure/AcApMeasureArcCmd.js +11 -4
- package/lib/command/measure/AcApMeasureArcCmd.js.map +1 -1
- package/lib/command/measure/AcApMeasureAreaCmd.d.ts.map +1 -1
- package/lib/command/measure/AcApMeasureAreaCmd.js +11 -4
- package/lib/command/measure/AcApMeasureAreaCmd.js.map +1 -1
- package/lib/command/measure/AcApMeasureDistanceCmd.d.ts +3 -2
- package/lib/command/measure/AcApMeasureDistanceCmd.d.ts.map +1 -1
- package/lib/command/measure/AcApMeasureDistanceCmd.js +14 -6
- package/lib/command/measure/AcApMeasureDistanceCmd.js.map +1 -1
- package/lib/command/modify/AcApOffsetCmd.d.ts +30 -0
- package/lib/command/modify/AcApOffsetCmd.d.ts.map +1 -0
- package/lib/command/modify/AcApOffsetCmd.js +424 -0
- package/lib/command/modify/AcApOffsetCmd.js.map +1 -0
- package/lib/command/modify/AcApRotateCmd.d.ts.map +1 -1
- package/lib/command/modify/AcApRotateCmd.js +3 -4
- package/lib/command/modify/AcApRotateCmd.js.map +1 -1
- package/lib/command/modify/index.d.ts +1 -0
- package/lib/command/modify/index.d.ts.map +1 -1
- package/lib/command/modify/index.js +1 -0
- package/lib/command/modify/index.js.map +1 -1
- package/lib/command/review/AcApRevCircleCmd.d.ts.map +1 -1
- package/lib/command/review/AcApRevCircleCmd.js +4 -1
- package/lib/command/review/AcApRevCircleCmd.js.map +1 -1
- package/lib/editor/input/AcEdSelectionFilter.js +7 -6
- package/lib/editor/input/AcEdSelectionFilter.js.map +1 -1
- package/lib/editor/input/prompt/AcEdPromptDistanceOptions.d.ts.map +1 -1
- package/lib/editor/input/prompt/AcEdPromptDistanceOptions.js +1 -1
- package/lib/editor/input/prompt/AcEdPromptDistanceOptions.js.map +1 -1
- package/lib/editor/input/ui/AcEdFloatingInput.d.ts +9 -0
- package/lib/editor/input/ui/AcEdFloatingInput.d.ts.map +1 -1
- package/lib/editor/input/ui/AcEdFloatingInput.js +21 -3
- package/lib/editor/input/ui/AcEdFloatingInput.js.map +1 -1
- package/lib/editor/input/ui/AcEdInputManager.d.ts +25 -6
- package/lib/editor/input/ui/AcEdInputManager.d.ts.map +1 -1
- package/lib/editor/input/ui/AcEdInputManager.js +119 -39
- package/lib/editor/input/ui/AcEdInputManager.js.map +1 -1
- package/lib/editor/input/ui/AcEdMTextEditor.d.ts +67 -2
- package/lib/editor/input/ui/AcEdMTextEditor.d.ts.map +1 -1
- package/lib/editor/input/ui/AcEdMTextEditor.js +210 -19
- package/lib/editor/input/ui/AcEdMTextEditor.js.map +1 -1
- package/lib/editor/input/ui/AcEdRubberBand.d.ts.map +1 -1
- package/lib/editor/input/ui/AcEdRubberBand.js +16 -8
- package/lib/editor/input/ui/AcEdRubberBand.js.map +1 -1
- package/lib/i18n/en/command.d.ts +64 -10
- package/lib/i18n/en/command.d.ts.map +1 -1
- package/lib/i18n/en/command.js +67 -13
- package/lib/i18n/en/command.js.map +1 -1
- package/lib/i18n/en/jig.d.ts +8 -0
- package/lib/i18n/en/jig.d.ts.map +1 -1
- package/lib/i18n/en/jig.js +8 -0
- package/lib/i18n/en/jig.js.map +1 -1
- package/lib/i18n/zh/command.d.ts +64 -10
- package/lib/i18n/zh/command.d.ts.map +1 -1
- package/lib/i18n/zh/command.js +67 -13
- package/lib/i18n/zh/command.js.map +1 -1
- package/lib/i18n/zh/jig.d.ts +8 -0
- package/lib/i18n/zh/jig.d.ts.map +1 -1
- package/lib/i18n/zh/jig.js +8 -0
- package/lib/i18n/zh/jig.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/util/AcApFontUtil.d.ts +69 -0
- package/lib/util/AcApFontUtil.d.ts.map +1 -0
- package/lib/util/AcApFontUtil.js +161 -0
- package/lib/util/AcApFontUtil.js.map +1 -0
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/yieldToMain.d.ts +5 -0
- package/lib/util/yieldToMain.d.ts.map +1 -0
- package/lib/util/yieldToMain.js +11 -0
- package/lib/util/yieldToMain.js.map +1 -0
- package/lib/view/AcTrLayoutView.d.ts +12 -0
- package/lib/view/AcTrLayoutView.d.ts.map +1 -1
- package/lib/view/AcTrLayoutView.js +18 -0
- package/lib/view/AcTrLayoutView.js.map +1 -1
- package/lib/view/AcTrScene.d.ts +38 -6
- package/lib/view/AcTrScene.d.ts.map +1 -1
- package/lib/view/AcTrScene.js +57 -30
- package/lib/view/AcTrScene.js.map +1 -1
- package/lib/view/AcTrView2d.d.ts +166 -0
- package/lib/view/AcTrView2d.d.ts.map +1 -1
- package/lib/view/AcTrView2d.js +586 -53
- package/lib/view/AcTrView2d.js.map +1 -1
- package/package.json +14 -8
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __values = (this && this.__values) || function(o) {
|
|
38
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
39
|
+
if (m) return m.call(o);
|
|
40
|
+
if (o && typeof o.length === "number") return {
|
|
41
|
+
next: function () {
|
|
42
|
+
if (o && i >= o.length) o = void 0;
|
|
43
|
+
return { value: o && o[i++], done: !o };
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
47
|
+
};
|
|
48
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
49
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
50
|
+
if (!m) return o;
|
|
51
|
+
var i = m.call(o), r, ar = [], e;
|
|
52
|
+
try {
|
|
53
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
54
|
+
}
|
|
55
|
+
catch (error) { e = { error: error }; }
|
|
56
|
+
finally {
|
|
57
|
+
try {
|
|
58
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
59
|
+
}
|
|
60
|
+
finally { if (e) throw e.error; }
|
|
61
|
+
}
|
|
62
|
+
return ar;
|
|
63
|
+
};
|
|
64
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
65
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
66
|
+
if (ar || !(i in from)) {
|
|
67
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
68
|
+
ar[i] = from[i];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
72
|
+
};
|
|
73
|
+
import { ACEX_SNAPSHOT_VERSION, buildOsnapCatalog, buildViewerMetadata, collectBatchesFromObject3D } from '@mlightcad/cad-html-exporter';
|
|
74
|
+
import { AcApI18n } from '../../i18n';
|
|
75
|
+
import { yieldToMain } from '../../util';
|
|
76
|
+
/**
|
|
77
|
+
* Serializes the live Three.js scene into a versioned {@link AcExSnapshotV1}.
|
|
78
|
+
*
|
|
79
|
+
* The snapshot contains layer visibility, per-layout line/mesh batches, and
|
|
80
|
+
* viewer metadata (extents, units, background). It is display-only: no DXF/DWG
|
|
81
|
+
* entities or edit capability are preserved.
|
|
82
|
+
*/
|
|
83
|
+
var AcApHtmlSnapshotBuilder = /** @class */ (function () {
|
|
84
|
+
function AcApHtmlSnapshotBuilder() {
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Builds a snapshot synchronously in one pass.
|
|
88
|
+
*
|
|
89
|
+
* Prefer {@link buildAsync} for interactive export so the UI can stay responsive.
|
|
90
|
+
*
|
|
91
|
+
* @param scene - Current renderer scene (layouts, layers, active layout).
|
|
92
|
+
* @param database - Open drawing database used for layout names and metadata.
|
|
93
|
+
* @param options - Optional title, background, and locale overrides.
|
|
94
|
+
* @returns A complete v1 snapshot ready for `packHtml`.
|
|
95
|
+
*/
|
|
96
|
+
AcApHtmlSnapshotBuilder.prototype.build = function (scene, database, options) {
|
|
97
|
+
if (options === void 0) { options = {}; }
|
|
98
|
+
return this.buildSync(scene, database, options);
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Builds a snapshot incrementally, yielding to the main thread between layouts.
|
|
102
|
+
*
|
|
103
|
+
* Geometry is collected per layout layer so a busy indicator can repaint
|
|
104
|
+
* during large drawings.
|
|
105
|
+
*
|
|
106
|
+
* @param scene - Current renderer scene (layouts, layers, active layout).
|
|
107
|
+
* @param database - Open drawing database used for layout names and metadata.
|
|
108
|
+
* @param options - Optional title, background, and locale overrides.
|
|
109
|
+
* @returns A complete v1 snapshot ready for `packHtml`.
|
|
110
|
+
*/
|
|
111
|
+
AcApHtmlSnapshotBuilder.prototype.buildAsync = function (scene_1, database_1) {
|
|
112
|
+
return __awaiter(this, arguments, void 0, function (scene, database, options) {
|
|
113
|
+
var meta, layers, layouts, _a, _b, _c, btrId, layout, lineBatches, meshBatches, _d, _e, _f, layer, collected, e_1_1, e_2_1;
|
|
114
|
+
var e_2, _g, e_1, _h;
|
|
115
|
+
if (options === void 0) { options = {}; }
|
|
116
|
+
return __generator(this, function (_j) {
|
|
117
|
+
switch (_j.label) {
|
|
118
|
+
case 0: return [4 /*yield*/, yieldToMain()];
|
|
119
|
+
case 1:
|
|
120
|
+
_j.sent();
|
|
121
|
+
meta = buildViewerMetadata(database, {
|
|
122
|
+
title: options.title,
|
|
123
|
+
background: options.background
|
|
124
|
+
});
|
|
125
|
+
layers = [];
|
|
126
|
+
scene.layers.forEach(function (layer) {
|
|
127
|
+
var _a;
|
|
128
|
+
layers.push({
|
|
129
|
+
name: layer.name,
|
|
130
|
+
color: (_a = layer.color.RGB) !== null && _a !== void 0 ? _a : 0xffffff,
|
|
131
|
+
visible: !layer.isOff && !layer.isFrozen
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
layouts = [];
|
|
135
|
+
_j.label = 2;
|
|
136
|
+
case 2:
|
|
137
|
+
_j.trys.push([2, 15, 16, 17]);
|
|
138
|
+
_a = __values(scene.layouts), _b = _a.next();
|
|
139
|
+
_j.label = 3;
|
|
140
|
+
case 3:
|
|
141
|
+
if (!!_b.done) return [3 /*break*/, 14];
|
|
142
|
+
_c = __read(_b.value, 2), btrId = _c[0], layout = _c[1];
|
|
143
|
+
lineBatches = [];
|
|
144
|
+
meshBatches = [];
|
|
145
|
+
_j.label = 4;
|
|
146
|
+
case 4:
|
|
147
|
+
_j.trys.push([4, 9, 10, 11]);
|
|
148
|
+
_d = (e_1 = void 0, __values(layout.layers)), _e = _d.next();
|
|
149
|
+
_j.label = 5;
|
|
150
|
+
case 5:
|
|
151
|
+
if (!!_e.done) return [3 /*break*/, 8];
|
|
152
|
+
_f = __read(_e.value, 2), layer = _f[1];
|
|
153
|
+
collected = collectBatchesFromObject3D(layer.internalObject);
|
|
154
|
+
lineBatches.push.apply(lineBatches, __spreadArray([], __read(collected.lineBatches), false));
|
|
155
|
+
meshBatches.push.apply(meshBatches, __spreadArray([], __read(collected.meshBatches), false));
|
|
156
|
+
return [4 /*yield*/, yieldToMain()];
|
|
157
|
+
case 6:
|
|
158
|
+
_j.sent();
|
|
159
|
+
_j.label = 7;
|
|
160
|
+
case 7:
|
|
161
|
+
_e = _d.next();
|
|
162
|
+
return [3 /*break*/, 5];
|
|
163
|
+
case 8: return [3 /*break*/, 11];
|
|
164
|
+
case 9:
|
|
165
|
+
e_1_1 = _j.sent();
|
|
166
|
+
e_1 = { error: e_1_1 };
|
|
167
|
+
return [3 /*break*/, 11];
|
|
168
|
+
case 10:
|
|
169
|
+
try {
|
|
170
|
+
if (_e && !_e.done && (_h = _d.return)) _h.call(_d);
|
|
171
|
+
}
|
|
172
|
+
finally { if (e_1) throw e_1.error; }
|
|
173
|
+
return [7 /*endfinally*/];
|
|
174
|
+
case 11:
|
|
175
|
+
layouts.push({
|
|
176
|
+
btrId: btrId,
|
|
177
|
+
name: resolveLayoutName(database, btrId),
|
|
178
|
+
isModelSpace: btrId === scene.modelSpaceBtrId,
|
|
179
|
+
lineBatches: lineBatches,
|
|
180
|
+
meshBatches: meshBatches,
|
|
181
|
+
osnap: buildOsnapCatalog(database, btrId)
|
|
182
|
+
});
|
|
183
|
+
return [4 /*yield*/, yieldToMain()];
|
|
184
|
+
case 12:
|
|
185
|
+
_j.sent();
|
|
186
|
+
_j.label = 13;
|
|
187
|
+
case 13:
|
|
188
|
+
_b = _a.next();
|
|
189
|
+
return [3 /*break*/, 3];
|
|
190
|
+
case 14: return [3 /*break*/, 17];
|
|
191
|
+
case 15:
|
|
192
|
+
e_2_1 = _j.sent();
|
|
193
|
+
e_2 = { error: e_2_1 };
|
|
194
|
+
return [3 /*break*/, 17];
|
|
195
|
+
case 16:
|
|
196
|
+
try {
|
|
197
|
+
if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
|
|
198
|
+
}
|
|
199
|
+
finally { if (e_2) throw e_2.error; }
|
|
200
|
+
return [7 /*endfinally*/];
|
|
201
|
+
case 17: return [2 /*return*/, {
|
|
202
|
+
version: ACEX_SNAPSHOT_VERSION,
|
|
203
|
+
meta: buildSnapshotMeta(meta, options),
|
|
204
|
+
layers: layers,
|
|
205
|
+
layouts: layouts,
|
|
206
|
+
activeLayoutBtrId: scene.activeLayoutBtrId || scene.modelSpaceBtrId
|
|
207
|
+
}];
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Synchronous implementation shared by {@link build} and {@link buildAsync}.
|
|
214
|
+
*
|
|
215
|
+
* @param scene - Current renderer scene.
|
|
216
|
+
* @param database - Open drawing database.
|
|
217
|
+
* @param options - Snapshot overrides.
|
|
218
|
+
* @returns A complete v1 snapshot.
|
|
219
|
+
*/
|
|
220
|
+
AcApHtmlSnapshotBuilder.prototype.buildSync = function (scene, database, options) {
|
|
221
|
+
var meta = buildViewerMetadata(database, {
|
|
222
|
+
title: options.title,
|
|
223
|
+
background: options.background
|
|
224
|
+
});
|
|
225
|
+
var layers = [];
|
|
226
|
+
scene.layers.forEach(function (layer) {
|
|
227
|
+
var _a;
|
|
228
|
+
layers.push({
|
|
229
|
+
name: layer.name,
|
|
230
|
+
color: (_a = layer.color.RGB) !== null && _a !== void 0 ? _a : 0xffffff,
|
|
231
|
+
visible: !layer.isOff && !layer.isFrozen
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
var layouts = [];
|
|
235
|
+
scene.layouts.forEach(function (layout, btrId) {
|
|
236
|
+
var _a = collectBatchesFromObject3D(layout.internalObject), lineBatches = _a.lineBatches, meshBatches = _a.meshBatches;
|
|
237
|
+
layouts.push({
|
|
238
|
+
btrId: btrId,
|
|
239
|
+
name: resolveLayoutName(database, btrId),
|
|
240
|
+
isModelSpace: btrId === scene.modelSpaceBtrId,
|
|
241
|
+
lineBatches: lineBatches,
|
|
242
|
+
meshBatches: meshBatches,
|
|
243
|
+
osnap: buildOsnapCatalog(database, btrId)
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
return {
|
|
247
|
+
version: ACEX_SNAPSHOT_VERSION,
|
|
248
|
+
meta: buildSnapshotMeta(meta, options),
|
|
249
|
+
layers: layers,
|
|
250
|
+
layouts: layouts,
|
|
251
|
+
activeLayoutBtrId: scene.activeLayoutBtrId || scene.modelSpaceBtrId
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
return AcApHtmlSnapshotBuilder;
|
|
255
|
+
}());
|
|
256
|
+
export { AcApHtmlSnapshotBuilder };
|
|
257
|
+
/**
|
|
258
|
+
* Merges database-derived viewer metadata with export-time options.
|
|
259
|
+
*
|
|
260
|
+
* @param meta - Extents, units, and background from {@link buildViewerMetadata}.
|
|
261
|
+
* @param options - User overrides (title is taken from `meta`; locale from options).
|
|
262
|
+
* @returns The `meta` block stored on {@link AcExSnapshotV1}.
|
|
263
|
+
*/
|
|
264
|
+
function buildSnapshotMeta(meta, options) {
|
|
265
|
+
var _a;
|
|
266
|
+
return {
|
|
267
|
+
title: meta.title,
|
|
268
|
+
createdAt: new Date().toISOString(),
|
|
269
|
+
extents: meta.extents,
|
|
270
|
+
units: meta.units,
|
|
271
|
+
background: meta.background,
|
|
272
|
+
locale: (_a = options.locale) !== null && _a !== void 0 ? _a : AcApI18n.currentLocale
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Resolves a block table record object id to its layout/block name.
|
|
277
|
+
*
|
|
278
|
+
* @param database - Drawing whose block table is searched.
|
|
279
|
+
* @param btrId - Object id of the layout's owning block table record.
|
|
280
|
+
* @returns The record name, or `btrId` if no matching block is found.
|
|
281
|
+
*/
|
|
282
|
+
function resolveLayoutName(database, btrId) {
|
|
283
|
+
var e_3, _a;
|
|
284
|
+
try {
|
|
285
|
+
for (var _b = __values(database.tables.blockTable.newIterator()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
286
|
+
var block = _c.value;
|
|
287
|
+
if (block.objectId === btrId) {
|
|
288
|
+
return block.name;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
293
|
+
finally {
|
|
294
|
+
try {
|
|
295
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
296
|
+
}
|
|
297
|
+
finally { if (e_3) throw e_3.error; }
|
|
298
|
+
}
|
|
299
|
+
return btrId;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=AcApHtmlSnapshotBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AcApHtmlSnapshotBuilder.js","sourceRoot":"","sources":["../../../src/command/convert/AcApHtmlSnapshotBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,8 @@ export * from './AcApConvertToDxfCmd';
|
|
|
2
2
|
export * from './AcApConvertToPngCmd';
|
|
3
3
|
export * from './AcApPngConvertor';
|
|
4
4
|
export * from './AcApConvertToSvgCmd';
|
|
5
|
+
export * from './AcApExportHtmlCmd';
|
|
6
|
+
export * from './AcApHtmlConvertor';
|
|
7
|
+
export * from './AcApHtmlSnapshotBuilder';
|
|
5
8
|
export * from './AcApDxfConvertor';
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA"}
|
|
@@ -2,5 +2,8 @@ export * from './AcApConvertToDxfCmd';
|
|
|
2
2
|
export * from './AcApConvertToPngCmd';
|
|
3
3
|
export * from './AcApPngConvertor';
|
|
4
4
|
export * from './AcApConvertToSvgCmd';
|
|
5
|
+
export * from './AcApExportHtmlCmd';
|
|
6
|
+
export * from './AcApHtmlConvertor';
|
|
7
|
+
export * from './AcApHtmlSnapshotBuilder';
|
|
5
8
|
export * from './AcApDxfConvertor';
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command/convert/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcApArcCmd.d.ts","sourceRoot":"","sources":["../../../src/command/draw/AcApArcCmd.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AcApArcCmd.d.ts","sourceRoot":"","sources":["../../../src/command/draw/AcApArcCmd.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAkB,MAAM,WAAW,CAAA;AACvD,OAAO,EAEL,WAAW,EASZ,MAAM,cAAc,CAAA;AAkwBrB;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC;;OAEG;;IAMH;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,WAAW;IA6BlC;;;;;;;;;;;OAWG;YACW,gBAAgB;IA+C9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;;;;;;;OAQG;YACW,gBAAgB;IAM9B;;;;;;;;OAQG;YACW,iBAAiB;IAW/B;;;;;;;;OAQG;YACW,cAAc;IAW5B;;;;;;;;;OASG;YACW,iBAAiB;IAS/B;;;;;;;;OAQG;YACW,sBAAsB;IAUpC;;;;;;;;OAQG;YACW,2BAA2B;IAMzC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,uBAAuB;IA4FrC;;;;;;;;;;OAUG;YACW,oBAAoB;IA+HlC;;;;;;;;OAQG;YACW,wBAAwB;IAMtC;;;;;;;;OAQG;YACW,0BAA0B;IASxC;;;;;;;;;;OAUG;YACW,yBAAyB;IAqCvC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;;;;;;;;OAUG;YACW,YAAY;IA6B1B;;;;;;OAMG;YACW,mBAAmB;IAuCjC;;;;;OAKG;YACW,kBAAkB;IAsBhC;;;;;;OAMG;YACW,kBAAkB;IAiBhC;;;;;;;;;;;OAWG;YACW,qBAAqB;IA6FnC;;;;;;;;;;;OAWG;YACW,eAAe;IA4H7B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -49,12 +49,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
49
49
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
import { AcDbArc, AcGePoint3d } from '@mlightcad/data-model';
|
|
52
|
+
import { AcDbArc, AcGePoint3d, AcGeTol, FLOAT_TOL, TAU } from '@mlightcad/data-model';
|
|
53
53
|
import { AcApDocManager } from '../../app';
|
|
54
54
|
import { AcEdCommand, AcEdOpenMode, AcEdPreviewJig, AcEdPromptAngleOptions, AcEdPromptDistanceOptions, AcEdPromptDoubleOptions, AcEdPromptPointOptions, AcEdPromptStatus, eventBus } from '../../editor';
|
|
55
55
|
import { AcApI18n } from '../../i18n';
|
|
56
|
-
var TAU = Math.PI * 2;
|
|
57
|
-
var EPSILON = 1e-9;
|
|
58
56
|
var POSITIVE_NORMAL = { x: 0, y: 0, z: 1 };
|
|
59
57
|
var NEGATIVE_NORMAL = { x: 0, y: 0, z: -1 };
|
|
60
58
|
/**
|
|
@@ -90,7 +88,7 @@ function directionAngleDeg(from, to) {
|
|
|
90
88
|
/**
|
|
91
89
|
* Computes point angle around a center under a given arc orientation.
|
|
92
90
|
*
|
|
93
|
-
* For `normalSign = -1` (clockwise), the
|
|
91
|
+
* For `normalSign = -1` (clockwise), the X component is mirrored so that
|
|
94
92
|
* angle growth still follows the selected arc direction convention.
|
|
95
93
|
*
|
|
96
94
|
* @param center - Arc center.
|
|
@@ -99,10 +97,11 @@ function directionAngleDeg(from, to) {
|
|
|
99
97
|
* @returns Direction-aware normalized angle in radians.
|
|
100
98
|
*/
|
|
101
99
|
function angleByNormalSign(center, point, normalSign) {
|
|
102
|
-
//
|
|
100
|
+
// AcDbArc stores start/end in OCS. For a -Z extrusion, data-model chooses
|
|
101
|
+
// OCS X = -WCS X and OCS Y = WCS Y, so mirror X rather than Y.
|
|
103
102
|
var dx = point.x - center.x;
|
|
104
103
|
var dy = point.y - center.y;
|
|
105
|
-
var raw = normalSign === 1 ? Math.atan2(dy, dx) : Math.atan2(
|
|
104
|
+
var raw = normalSign === 1 ? Math.atan2(dy, dx) : Math.atan2(dy, -dx);
|
|
106
105
|
return normalizeAngle(raw);
|
|
107
106
|
}
|
|
108
107
|
/**
|
|
@@ -114,6 +113,9 @@ function angleByNormalSign(center, point, normalSign) {
|
|
|
114
113
|
function toNormal(sign) {
|
|
115
114
|
return sign === 1 ? POSITIVE_NORMAL : NEGATIVE_NORMAL;
|
|
116
115
|
}
|
|
116
|
+
function normalSignOf(entity) {
|
|
117
|
+
return entity.normal.z >= 0 ? 1 : -1;
|
|
118
|
+
}
|
|
117
119
|
/**
|
|
118
120
|
* Creates one `AcDbArc` entity from normalized arc definition data.
|
|
119
121
|
*
|
|
@@ -166,7 +168,7 @@ function projectPointToCircle(center, radius, point) {
|
|
|
166
168
|
var dx = point.x - center.x;
|
|
167
169
|
var dy = point.y - center.y;
|
|
168
170
|
var distance = Math.hypot(dx, dy);
|
|
169
|
-
if (distance
|
|
171
|
+
if (AcGeTol.isNonPositive(distance))
|
|
170
172
|
return undefined;
|
|
171
173
|
var scale = radius / distance;
|
|
172
174
|
return {
|
|
@@ -240,7 +242,7 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
|
|
|
240
242
|
var x3 = end.x;
|
|
241
243
|
var y3 = end.y;
|
|
242
244
|
var d = 2 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
|
|
243
|
-
if (
|
|
245
|
+
if (AcGeTol.equalToZero(d))
|
|
244
246
|
return undefined;
|
|
245
247
|
var ux = ((x1 * x1 + y1 * y1) * (y2 - y3) +
|
|
246
248
|
(x2 * x2 + y2 * y2) * (y3 - y1) +
|
|
@@ -252,7 +254,7 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
|
|
|
252
254
|
d;
|
|
253
255
|
var center = { x: ux, y: uy, z: 0 };
|
|
254
256
|
var radius = distance2d(center, start);
|
|
255
|
-
if (!Number.isFinite(radius) || radius
|
|
257
|
+
if (!Number.isFinite(radius) || AcGeTol.isNonPositive(radius))
|
|
256
258
|
return undefined;
|
|
257
259
|
// By default, choose the arc that actually passes through the second point.
|
|
258
260
|
// Ctrl toggle can reverse this selection to the complementary direction.
|
|
@@ -280,11 +282,11 @@ function createArcFromThreePoints(start, second, end, reverseDirection) {
|
|
|
280
282
|
function createArcFromCenterStartEnd(center, start, end, normalSign) {
|
|
281
283
|
var radiusFromStart = distance2d(center, start);
|
|
282
284
|
var radiusFromEnd = distance2d(center, end);
|
|
283
|
-
if (radiusFromStart
|
|
285
|
+
if (AcGeTol.isNonPositive(radiusFromStart) || AcGeTol.isNonPositive(radiusFromEnd)) {
|
|
284
286
|
return undefined;
|
|
285
287
|
}
|
|
286
288
|
// Start/end must lie on the same circle (small tolerance for picked input).
|
|
287
|
-
var tolerance = Math.max(
|
|
289
|
+
var tolerance = Math.max(FLOAT_TOL, radiusFromStart * FLOAT_TOL);
|
|
288
290
|
if (Math.abs(radiusFromStart - radiusFromEnd) > tolerance) {
|
|
289
291
|
return undefined;
|
|
290
292
|
}
|
|
@@ -310,7 +312,7 @@ function createArcFromCenterStartEnd(center, start, end, normalSign) {
|
|
|
310
312
|
*/
|
|
311
313
|
function createArcFromCenterStartProjectedEnd(center, start, rawEnd, normalSign) {
|
|
312
314
|
var radius = distance2d(center, start);
|
|
313
|
-
if (radius
|
|
315
|
+
if (AcGeTol.isNonPositive(radius))
|
|
314
316
|
return undefined;
|
|
315
317
|
var end = projectPointToCircle(center, radius, rawEnd);
|
|
316
318
|
if (!end)
|
|
@@ -330,7 +332,9 @@ function createArcFromCenterStartProjectedEnd(center, start, rawEnd, normalSign)
|
|
|
330
332
|
function createArcFromCenterStartSweep(center, start, sweepRad) {
|
|
331
333
|
var radius = distance2d(center, start);
|
|
332
334
|
var sweep = Math.abs(sweepRad);
|
|
333
|
-
if (radius
|
|
335
|
+
if (AcGeTol.isNonPositive(radius) ||
|
|
336
|
+
AcGeTol.isNonPositive(sweep) ||
|
|
337
|
+
!AcGeTol.great(TAU - sweep, 0)) {
|
|
334
338
|
return undefined;
|
|
335
339
|
}
|
|
336
340
|
var normalSign = sweepRad >= 0 ? 1 : -1;
|
|
@@ -357,7 +361,9 @@ function createArcFromCenterStartSweep(center, start, sweepRad) {
|
|
|
357
361
|
function createArcFromCenterStartChord(center, start, chordLength) {
|
|
358
362
|
var radius = distance2d(center, start);
|
|
359
363
|
var chord = Math.abs(chordLength);
|
|
360
|
-
if (radius
|
|
364
|
+
if (AcGeTol.isNonPositive(radius) ||
|
|
365
|
+
AcGeTol.isNonPositive(chord) ||
|
|
366
|
+
AcGeTol.great(chord, 2 * radius)) {
|
|
361
367
|
return undefined;
|
|
362
368
|
}
|
|
363
369
|
var ratio = Math.max(-1, Math.min(1, chord / (2 * radius)));
|
|
@@ -376,16 +382,18 @@ function createArcFromCenterStartChord(center, start, chordLength) {
|
|
|
376
382
|
function createArcFromStartEndAngle(start, end, sweepRad) {
|
|
377
383
|
var chord = distance2d(start, end);
|
|
378
384
|
var sweep = Math.abs(sweepRad);
|
|
379
|
-
if (chord
|
|
385
|
+
if (AcGeTol.isNonPositive(chord) ||
|
|
386
|
+
AcGeTol.isNonPositive(sweep) ||
|
|
387
|
+
!AcGeTol.great(TAU - sweep, 0)) {
|
|
380
388
|
return undefined;
|
|
381
389
|
}
|
|
382
390
|
// chord = 2 * r * sin(theta/2) -> r = chord / (2 * sin(theta/2))
|
|
383
391
|
var sinHalf = Math.sin(sweep / 2);
|
|
384
|
-
if (
|
|
392
|
+
if (AcGeTol.equalToZero(sinHalf))
|
|
385
393
|
return undefined;
|
|
386
394
|
var radius = chord / (2 * sinHalf);
|
|
387
395
|
var offsetSquared = radius * radius - (chord * chord) / 4;
|
|
388
|
-
if (offsetSquared
|
|
396
|
+
if (AcGeTol.less(offsetSquared, 0))
|
|
389
397
|
return undefined;
|
|
390
398
|
var offset = Math.sqrt(Math.max(0, offsetSquared));
|
|
391
399
|
var midX = (start.x + end.x) / 2;
|
|
@@ -426,7 +434,7 @@ function createArcFromStartEndDirection(start, end, directionRad) {
|
|
|
426
434
|
var nx = -ty;
|
|
427
435
|
var ny = tx;
|
|
428
436
|
var denominator = 2 * (dx * nx + dy * ny);
|
|
429
|
-
if (
|
|
437
|
+
if (AcGeTol.equalToZero(denominator))
|
|
430
438
|
return undefined;
|
|
431
439
|
// Solve center = start + lambda * n so that |center-start| = |center-end|.
|
|
432
440
|
var lambda = (dx * dx + dy * dy) / denominator;
|
|
@@ -440,7 +448,7 @@ function createArcFromStartEndDirection(start, end, directionRad) {
|
|
|
440
448
|
var radiusVectorX = start.x - center.x;
|
|
441
449
|
var radiusVectorY = start.y - center.y;
|
|
442
450
|
var cross = radiusVectorX * ty - radiusVectorY * tx;
|
|
443
|
-
if (
|
|
451
|
+
if (AcGeTol.equalToZero(cross))
|
|
444
452
|
return undefined;
|
|
445
453
|
var normalSign = cross >= 0 ? 1 : -1;
|
|
446
454
|
return createArcFromCenterStartEnd(center, start, end, normalSign);
|
|
@@ -458,7 +466,9 @@ function createArcFromStartEndDirection(start, end, directionRad) {
|
|
|
458
466
|
function createArcFromStartEndRadius(start, end, radiusInput) {
|
|
459
467
|
var radius = Math.abs(radiusInput);
|
|
460
468
|
var chord = distance2d(start, end);
|
|
461
|
-
if (radius
|
|
469
|
+
if (AcGeTol.isNonPositive(radius) ||
|
|
470
|
+
AcGeTol.isNonPositive(chord) ||
|
|
471
|
+
AcGeTol.great(chord, 2 * radius)) {
|
|
462
472
|
return undefined;
|
|
463
473
|
}
|
|
464
474
|
var midX = (start.x + end.x) / 2;
|
|
@@ -520,6 +530,11 @@ var AcApArcJig = /** @class */ (function (_super) {
|
|
|
520
530
|
var definition = this._builder(point);
|
|
521
531
|
if (!definition)
|
|
522
532
|
return;
|
|
533
|
+
if (definition.normalSign !== normalSignOf(this._arc)) {
|
|
534
|
+
this.end();
|
|
535
|
+
this._arc = createArcEntity(definition);
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
523
538
|
applyArcDefinition(this._arc, definition);
|
|
524
539
|
};
|
|
525
540
|
return AcApArcJig;
|
|
@@ -567,6 +582,11 @@ var AcApArcValueJig = /** @class */ (function (_super) {
|
|
|
567
582
|
var definition = this._builder(value);
|
|
568
583
|
if (!definition)
|
|
569
584
|
return;
|
|
585
|
+
if (definition.normalSign !== normalSignOf(this._arc)) {
|
|
586
|
+
this.end();
|
|
587
|
+
this._arc = createArcEntity(definition);
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
570
590
|
applyArcDefinition(this._arc, definition);
|
|
571
591
|
};
|
|
572
592
|
return AcApArcValueJig;
|
|
@@ -1642,6 +1662,9 @@ var AcApArcCmd = /** @class */ (function (_super) {
|
|
|
1642
1662
|
chordPrompt = new AcEdPromptDistanceOptions(AcApI18n.t('jig.arc.chordLength'));
|
|
1643
1663
|
chordPrompt.allowZero = false;
|
|
1644
1664
|
chordPrompt.allowNegative = true;
|
|
1665
|
+
chordPrompt.useBasePoint = true;
|
|
1666
|
+
chordPrompt.useDashedLine = true;
|
|
1667
|
+
chordPrompt.basePoint = new AcGePoint3d(start);
|
|
1645
1668
|
return [4 /*yield*/, AcApDocManager.instance.editor.getDistance(chordPrompt)];
|
|
1646
1669
|
case 4:
|
|
1647
1670
|
chordResult = _a.sent();
|
|
@@ -1757,6 +1780,9 @@ var AcApArcCmd = /** @class */ (function (_super) {
|
|
|
1757
1780
|
radiusPrompt = new AcEdPromptDistanceOptions(AcApI18n.t('jig.arc.radius'));
|
|
1758
1781
|
radiusPrompt.allowZero = false;
|
|
1759
1782
|
radiusPrompt.allowNegative = true;
|
|
1783
|
+
radiusPrompt.useBasePoint = true;
|
|
1784
|
+
radiusPrompt.useDashedLine = true;
|
|
1785
|
+
radiusPrompt.basePoint = new AcGePoint3d(start);
|
|
1760
1786
|
return [4 /*yield*/, AcApDocManager.instance.editor.getDistance(radiusPrompt)];
|
|
1761
1787
|
case 7:
|
|
1762
1788
|
radiusResult = _a.sent();
|