@inweb/viewer-visualize 27.10.0 → 27.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/viewer-visualize.js +572 -235
- package/dist/viewer-visualize.js.map +1 -1
- package/dist/viewer-visualize.min.js +1 -1
- package/dist/viewer-visualize.module.js +457 -235
- package/dist/viewer-visualize.module.js.map +1 -1
- package/lib/Viewer/Commands/ClearSelected.d.ts +1 -1
- package/lib/Viewer/Commands/Deselect.d.ts +2 -0
- package/lib/Viewer/Commands/Explode.d.ts +1 -1
- package/lib/Viewer/Commands/GetHidden.d.ts +2 -0
- package/lib/Viewer/Commands/GetIsolated.d.ts +2 -0
- package/lib/Viewer/Commands/GetSelected.d.ts +2 -2
- package/lib/Viewer/Commands/GetSelected2.d.ts +1 -1
- package/lib/Viewer/Commands/Hide.d.ts +2 -0
- package/lib/Viewer/Commands/HideAll.d.ts +2 -0
- package/lib/Viewer/Commands/HideSelected.d.ts +1 -1
- package/lib/Viewer/Commands/Isolate.d.ts +2 -0
- package/lib/Viewer/Commands/IsolateSelected.d.ts +1 -1
- package/lib/Viewer/Commands/RegenerateAll.d.ts +1 -1
- package/lib/Viewer/Commands/ResetView.d.ts +1 -1
- package/lib/Viewer/Commands/Select.d.ts +2 -0
- package/lib/Viewer/Commands/SelectModel.d.ts +1 -1
- package/lib/Viewer/Commands/SetSelected.d.ts +2 -2
- package/lib/Viewer/Commands/SetSelected2.d.ts +2 -2
- package/lib/Viewer/Commands/Show.d.ts +2 -0
- package/lib/Viewer/Commands/ShowAll.d.ts +1 -1
- package/lib/Viewer/Commands/ToHandles.d.ts +2 -0
- package/lib/Viewer/Commands/ToHandles2.d.ts +2 -0
- package/lib/Viewer/Commands/ToggleSelection.d.ts +2 -0
- package/lib/Viewer/Commands/ZoomExtents.d.ts +2 -0
- package/lib/Viewer/Commands/ZoomTo.d.ts +2 -0
- package/lib/Viewer/Commands/ZoomToSelected.d.ts +1 -1
- package/lib/Viewer/Components/index.d.ts +1 -1
- package/lib/Viewer/Draggers/index.d.ts +2 -2
- package/lib/Viewer/Loaders/VSFCloudLoader.d.ts +2 -2
- package/lib/Viewer/Loaders/VSFXCloudLoader.d.ts +2 -2
- package/lib/Viewer/Loaders/VSFXCloudPartialLoader.d.ts +2 -2
- package/lib/Viewer/Loaders/VSFXCloudStreamingLoader.d.ts +2 -2
- package/lib/Viewer/Loaders/index.d.ts +4 -2
- package/lib/Viewer/Models/ModelImpl.d.ts +14 -0
- package/lib/Viewer/Models/ModelImpl.types.d.ts +6 -1
- package/lib/Viewer/Viewer.d.ts +18 -3
- package/package.json +5 -5
- package/src/Viewer/Commands/ClearSelected.ts +4 -8
- package/src/Viewer/Commands/Deselect.ts +35 -0
- package/src/Viewer/Commands/Explode.ts +4 -6
- package/src/Viewer/Commands/GetHidden.ts +30 -0
- package/src/Viewer/Commands/GetIsolated.ts +30 -0
- package/src/Viewer/Commands/GetModels.ts +2 -3
- package/src/Viewer/Commands/GetSelected.ts +5 -30
- package/src/Viewer/Commands/GetSelected2.ts +5 -7
- package/src/Viewer/Commands/Hide.ts +35 -0
- package/src/Viewer/Commands/HideAll.ts +32 -0
- package/src/Viewer/Commands/HideSelected.ts +2 -11
- package/src/Viewer/Commands/Isolate.ts +41 -0
- package/src/Viewer/Commands/IsolateSelected.ts +2 -8
- package/src/Viewer/Commands/RegenerateAll.ts +2 -3
- package/src/Viewer/Commands/ResetView.ts +2 -4
- package/src/Viewer/Commands/Select.ts +36 -0
- package/src/Viewer/Commands/SelectModel.ts +11 -14
- package/src/Viewer/Commands/SetSelected.ts +8 -19
- package/src/Viewer/Commands/SetSelected2.ts +6 -14
- package/src/Viewer/Commands/Show.ts +34 -0
- package/src/Viewer/Commands/ShowAll.ts +3 -6
- package/src/Viewer/Commands/ToHandles.ts +35 -0
- package/src/Viewer/Commands/ToHandles2.ts +36 -0
- package/src/Viewer/Commands/ToggleSelection.ts +40 -0
- package/src/Viewer/Commands/{ZoomToExtents.ts → ZoomExtents.ts} +2 -8
- package/src/Viewer/Commands/{ZoomToObjects.ts → ZoomTo.ts} +8 -13
- package/src/Viewer/Commands/ZoomToSelected.ts +3 -11
- package/src/Viewer/Commands/index.ts +29 -8
- package/src/Viewer/Components/index.ts +1 -1
- package/src/Viewer/Draggers/Actions/OrbitAction.ts +21 -14
- package/src/Viewer/Draggers/Common/OdBaseDragger.ts +32 -32
- package/src/Viewer/Draggers/OdZoomWheelDragger.ts +2 -2
- package/src/Viewer/Draggers/OrbitAroundBuildingDragger.ts +14 -10
- package/src/Viewer/Draggers/index.ts +2 -2
- package/src/Viewer/Loaders/VSFCloudLoader.ts +5 -4
- package/src/Viewer/Loaders/VSFFileLoader.ts +2 -1
- package/src/Viewer/Loaders/VSFXCloudLoader.ts +5 -4
- package/src/Viewer/Loaders/VSFXCloudPartialLoader.ts +5 -4
- package/src/Viewer/Loaders/VSFXCloudStreamingLoader.ts +5 -4
- package/src/Viewer/Loaders/VSFXFileLoader.ts +2 -1
- package/src/Viewer/Loaders/index.ts +4 -2
- package/src/Viewer/Models/ModelImpl.ts +149 -2
- package/src/Viewer/Models/ModelImpl.types.ts +9 -1
- package/src/Viewer/Viewer.ts +120 -18
- package/lib/Viewer/Commands/ZoomToExtents.d.ts +0 -2
- package/lib/Viewer/Commands/ZoomToObjects.d.ts +0 -2
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
// acknowledge and accept the above terms.
|
|
22
22
|
///////////////////////////////////////////////////////////////////////////////
|
|
23
23
|
|
|
24
|
-
import { draggersRegistry, commandsRegistry, componentsRegistry, Loader, loadersRegistry, Options, Info, CANVAS_EVENTS } from '@inweb/viewer-core';
|
|
24
|
+
import { draggersRegistry, commandsRegistry, componentsRegistry, Loader, loadersRegistry, Options, Info, CANVAS_EVENTS, Selector, VisibilityManager } from '@inweb/viewer-core';
|
|
25
25
|
export * from '@inweb/viewer-core';
|
|
26
26
|
import { EventEmitter2 } from '@inweb/eventemitter2';
|
|
27
27
|
import { Markup } from '@inweb/markup';
|
|
@@ -156,21 +156,21 @@ class OdBaseDragger extends OdaGeAction {
|
|
|
156
156
|
this.pointermove = this.pointermove.bind(this);
|
|
157
157
|
this.click = this.click.bind(this);
|
|
158
158
|
this.dblclick = this.dblclick.bind(this);
|
|
159
|
-
this.subject.addEventListener("pointerdown", this.pointerdown);
|
|
160
|
-
this.subject.addEventListener("pointerup", this.pointerup);
|
|
161
|
-
this.subject.addEventListener("pointercancel", this.pointercancel);
|
|
162
|
-
this.subject.addEventListener("pointermove", this.pointermove);
|
|
163
|
-
this.subject.addEventListener("click", this.click);
|
|
164
|
-
this.subject.addEventListener("dblclick", this.dblclick);
|
|
159
|
+
this.subject.canvas.addEventListener("pointerdown", this.pointerdown);
|
|
160
|
+
this.subject.canvas.addEventListener("pointerup", this.pointerup);
|
|
161
|
+
this.subject.canvas.addEventListener("pointercancel", this.pointercancel);
|
|
162
|
+
this.subject.canvas.addEventListener("pointermove", this.pointermove);
|
|
163
|
+
this.subject.canvas.addEventListener("click", this.click);
|
|
164
|
+
this.subject.canvas.addEventListener("dblclick", this.dblclick);
|
|
165
165
|
this.getViewer().setEnableAutoSelect(false);
|
|
166
166
|
}
|
|
167
167
|
dispose() {
|
|
168
|
-
this.subject.removeEventListener("pointerdown", this.pointerdown);
|
|
169
|
-
this.subject.removeEventListener("pointerup", this.pointerup);
|
|
170
|
-
this.subject.removeEventListener("pointercancel", this.pointercancel);
|
|
171
|
-
this.subject.removeEventListener("pointermove", this.pointermove);
|
|
172
|
-
this.subject.removeEventListener("click", this.click);
|
|
173
|
-
this.subject.removeEventListener("dblclick", this.dblclick);
|
|
168
|
+
this.subject.canvas.removeEventListener("pointerdown", this.pointerdown);
|
|
169
|
+
this.subject.canvas.removeEventListener("pointerup", this.pointerup);
|
|
170
|
+
this.subject.canvas.removeEventListener("pointercancel", this.pointercancel);
|
|
171
|
+
this.subject.canvas.removeEventListener("pointermove", this.pointermove);
|
|
172
|
+
this.subject.canvas.removeEventListener("click", this.click);
|
|
173
|
+
this.subject.canvas.removeEventListener("dblclick", this.dblclick);
|
|
174
174
|
}
|
|
175
175
|
relativeCoords(event) {
|
|
176
176
|
return { x: event.offsetX * window.devicePixelRatio, y: event.offsetY * window.devicePixelRatio };
|
|
@@ -216,25 +216,37 @@ class OdBaseDragger extends OdaGeAction {
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
click(ev) {
|
|
219
|
-
const viewer = this.getViewer();
|
|
220
219
|
const relCoord = this.relativeCoords(ev);
|
|
221
220
|
const x = relCoord.x;
|
|
222
221
|
const y = relCoord.y;
|
|
223
222
|
const isNotDragging = Math.abs(x - this.mouseDownPosition.x) < CLICK_DELTA && Math.abs(y - this.mouseDownPosition.y) < CLICK_DELTA;
|
|
224
223
|
if (this.autoSelect && isNotDragging) {
|
|
225
|
-
viewer.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
224
|
+
const viewer = this.getViewer();
|
|
225
|
+
const view = viewer.activeView;
|
|
226
|
+
const model = viewer.getActiveModel();
|
|
227
|
+
const opt = new this.m_module.OdTvSelectionOptions();
|
|
228
|
+
opt.setMode(this.m_module.SelectionMode.kPoint);
|
|
229
|
+
const selectionSet = view.select([x, y], opt, model);
|
|
230
|
+
const handles = this.subject.models[0].getHandlesBySelectionSet(selectionSet);
|
|
231
|
+
selectionSet.delete();
|
|
232
|
+
opt.delete();
|
|
233
|
+
if (handles.length > 0) {
|
|
234
|
+
if (!ev.shiftKey)
|
|
235
|
+
this.subject.setSelected(handles);
|
|
236
|
+
else
|
|
237
|
+
this.subject.toggleSelection(handles);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
if (!ev.shiftKey)
|
|
241
|
+
this.subject.clearSelected();
|
|
242
|
+
}
|
|
231
243
|
}
|
|
232
244
|
}
|
|
233
245
|
dblclick(ev) {
|
|
234
|
-
const viewer = this.getViewer();
|
|
235
246
|
const relCoord = this.relativeCoords(ev);
|
|
236
247
|
const x = relCoord.x;
|
|
237
248
|
const y = relCoord.y;
|
|
249
|
+
const viewer = this.getViewer();
|
|
238
250
|
const device = viewer.getActiveDevice();
|
|
239
251
|
const clickView = device.viewAt([x, y]);
|
|
240
252
|
if (clickView && !clickView.active) {
|
|
@@ -243,15 +255,7 @@ class OdBaseDragger extends OdaGeAction {
|
|
|
243
255
|
this.subject.update();
|
|
244
256
|
}
|
|
245
257
|
else if (this.autoSelect) {
|
|
246
|
-
|
|
247
|
-
if (!pSelected.isNull() && pSelected.numItems() !== 0) {
|
|
248
|
-
const itr = pSelected.getIterator();
|
|
249
|
-
const entity = itr.getEntity();
|
|
250
|
-
viewer.zoomToEntity(entity);
|
|
251
|
-
this.subject.emitEvent({ type: "zoomtoentity", data: entity });
|
|
252
|
-
this.subject.update();
|
|
253
|
-
this.deleteAll([itr, entity]);
|
|
254
|
-
}
|
|
258
|
+
this.subject.zoomToSelected();
|
|
255
259
|
}
|
|
256
260
|
device.delete();
|
|
257
261
|
}
|
|
@@ -1865,27 +1869,29 @@ class OrbitAction {
|
|
|
1865
1869
|
}
|
|
1866
1870
|
}
|
|
1867
1871
|
getCenter() {
|
|
1872
|
+
const handles = this._subject.getSelected();
|
|
1873
|
+
const selectionSet = this._subject.models[0].getSelectionSetByHandles(handles);
|
|
1868
1874
|
const viewer = this.getViewer();
|
|
1869
1875
|
let center;
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
const
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
ext = entId.getWCSExtents();
|
|
1876
|
+
if (selectionSet.numItems() > 0) {
|
|
1877
|
+
let extSelected;
|
|
1878
|
+
const itemItr = selectionSet.getIterator();
|
|
1879
|
+
while (!itemItr.done()) {
|
|
1880
|
+
const entityId = itemItr.getEntity();
|
|
1881
|
+
const entityExt = entityId.getWCSExtents();
|
|
1877
1882
|
if (extSelected)
|
|
1878
|
-
extSelected.addExt(
|
|
1883
|
+
extSelected.addExt(entityExt);
|
|
1879
1884
|
else
|
|
1880
|
-
extSelected =
|
|
1885
|
+
extSelected = entityExt;
|
|
1886
|
+
itemItr.step();
|
|
1881
1887
|
}
|
|
1888
|
+
itemItr.delete();
|
|
1882
1889
|
center = extSelected.center();
|
|
1883
|
-
extSelected.delete();
|
|
1884
|
-
itr.delete();
|
|
1885
1890
|
}
|
|
1886
1891
|
else {
|
|
1887
1892
|
center = viewer.getActiveExtents().center();
|
|
1888
1893
|
}
|
|
1894
|
+
selectionSet.delete();
|
|
1889
1895
|
return center;
|
|
1890
1896
|
}
|
|
1891
1897
|
getViewer() {
|
|
@@ -2064,14 +2070,14 @@ class OdZoomWheelDragger extends OdBaseDragger {
|
|
|
2064
2070
|
constructor(subject) {
|
|
2065
2071
|
super(subject);
|
|
2066
2072
|
this.wheel = this.wheel.bind(this);
|
|
2067
|
-
this.subject.addEventListener("wheel", this.wheel);
|
|
2073
|
+
this.subject.canvas.addEventListener("wheel", this.wheel);
|
|
2068
2074
|
this._zoomAction = new ZoomAction(this.m_module, this.subject);
|
|
2069
2075
|
this._endInteractivityTimeOutId = undefined;
|
|
2070
2076
|
this._isEnableInteractivityMode = false;
|
|
2071
2077
|
}
|
|
2072
2078
|
dispose() {
|
|
2073
2079
|
super.dispose();
|
|
2074
|
-
this.subject.removeEventListener("wheel", this.wheel);
|
|
2080
|
+
this.subject.canvas.removeEventListener("wheel", this.wheel);
|
|
2075
2081
|
if (this._endInteractivityTimeOutId) {
|
|
2076
2082
|
clearTimeout(this._endInteractivityTimeOutId);
|
|
2077
2083
|
this.endInteractivity();
|
|
@@ -2302,28 +2308,31 @@ class OrbitAroundBuildingDragger extends OdBaseDragger {
|
|
|
2302
2308
|
this.endInteractivity();
|
|
2303
2309
|
}
|
|
2304
2310
|
getCenter() {
|
|
2311
|
+
const handles = this.subject.getSelected();
|
|
2312
|
+
const selectionSet = this.subject.models[0].getSelectionSetByHandles(handles);
|
|
2305
2313
|
const viewer = this.getViewer();
|
|
2306
2314
|
let ext = viewer.getActiveExtents();
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
const
|
|
2310
|
-
const
|
|
2311
|
-
if (
|
|
2312
|
-
const obj =
|
|
2315
|
+
if (selectionSet.numItems() > 0) {
|
|
2316
|
+
const itemItr = selectionSet.getIterator();
|
|
2317
|
+
const entityId = itemItr.getEntity();
|
|
2318
|
+
const type = entityId.getType();
|
|
2319
|
+
if (type === this.m_module.OdTvEntityType.kEntity.value) {
|
|
2320
|
+
const obj = entityId.openObject();
|
|
2313
2321
|
ext.delete();
|
|
2314
2322
|
ext = obj.getExtents();
|
|
2315
2323
|
obj.delete();
|
|
2316
2324
|
}
|
|
2317
|
-
else if (
|
|
2318
|
-
const obj =
|
|
2325
|
+
else if (type === this.m_module.OdTvEntityType.kInsert.value) {
|
|
2326
|
+
const obj = entityId.openObjectAsInsert();
|
|
2319
2327
|
const extTuple = obj.getExtents();
|
|
2320
2328
|
ext.delete();
|
|
2321
2329
|
ext = extTuple.ext;
|
|
2322
2330
|
extTuple.delete();
|
|
2323
2331
|
obj.delete();
|
|
2324
2332
|
}
|
|
2325
|
-
|
|
2333
|
+
itemItr.delete();
|
|
2326
2334
|
}
|
|
2335
|
+
selectionSet.delete();
|
|
2327
2336
|
const center = ext.center();
|
|
2328
2337
|
ext.delete();
|
|
2329
2338
|
return center;
|
|
@@ -2506,38 +2515,40 @@ function clearMarkup(viewer) {
|
|
|
2506
2515
|
}
|
|
2507
2516
|
|
|
2508
2517
|
function clearSelected(viewer) {
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
visViewer.unselect();
|
|
2518
|
+
viewer.selector.clearSelected();
|
|
2519
|
+
viewer.emitEvent({ type: "select" });
|
|
2520
|
+
viewer.emitEvent({ type: "select2" });
|
|
2513
2521
|
viewer.update();
|
|
2514
|
-
viewer.emitEvent({ type: "select", handles: [] });
|
|
2515
|
-
viewer.emitEvent({ type: "select2", handles: [] });
|
|
2516
2522
|
}
|
|
2517
2523
|
|
|
2518
2524
|
function clearSlices(viewer) {
|
|
2519
2525
|
viewer.clearSlices();
|
|
2520
2526
|
}
|
|
2521
2527
|
|
|
2522
|
-
function
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
return ((_c = viewer.canvas) === null || _c === void 0 ? void 0 : _c.toDataURL(mimeType, imageQuality)) || "";
|
|
2528
|
+
function toHandles(viewer, handles2) {
|
|
2529
|
+
if (!Array.isArray(handles2))
|
|
2530
|
+
handles2 = [handles2];
|
|
2531
|
+
if (handles2.length === 0)
|
|
2532
|
+
return handles2;
|
|
2533
|
+
if (!handles2[0].includes(":"))
|
|
2534
|
+
return handles2;
|
|
2535
|
+
const handles = handles2.map((handle) => handle.slice(handle.indexOf(":") + 1));
|
|
2536
|
+
return handles;
|
|
2532
2537
|
}
|
|
2533
2538
|
|
|
2534
|
-
function
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
+
function deselect(viewer, handles = []) {
|
|
2540
|
+
handles = toHandles(viewer, handles);
|
|
2541
|
+
viewer.selector.deselect(handles);
|
|
2542
|
+
viewer.emitEvent({ type: "select" });
|
|
2543
|
+
viewer.emitEvent({ type: "select2" });
|
|
2544
|
+
viewer.update();
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
function explode(viewer, scale = 0) {
|
|
2548
|
+
viewer.models.forEach((model) => model.explode(scale));
|
|
2549
|
+
viewer.explodeScale = scale;
|
|
2539
2550
|
viewer.update();
|
|
2540
|
-
viewer.emitEvent({ type: "explode", data:
|
|
2551
|
+
viewer.emitEvent({ type: "explode", data: scale });
|
|
2541
2552
|
}
|
|
2542
2553
|
function collect(viewer) {
|
|
2543
2554
|
explode(viewer, 0);
|
|
@@ -2551,78 +2562,102 @@ function getDefaultViewPositions(viewer) {
|
|
|
2551
2562
|
return Object.keys(defViewPos).filter((x) => x !== "values");
|
|
2552
2563
|
}
|
|
2553
2564
|
|
|
2565
|
+
function toHandles2(viewer, handles) {
|
|
2566
|
+
if (!Array.isArray(handles))
|
|
2567
|
+
handles = [handles];
|
|
2568
|
+
if (handles.length === 0)
|
|
2569
|
+
return handles;
|
|
2570
|
+
if (handles[0].includes(":"))
|
|
2571
|
+
return handles;
|
|
2572
|
+
const model = viewer.models[0];
|
|
2573
|
+
const handles2 = handles.map((handle) => `${model.id}:${handle}`);
|
|
2574
|
+
return handles2;
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
function getHidden(viewer, multimodel = false) {
|
|
2578
|
+
const handles = Array.from(viewer.visibilityManager.hidden);
|
|
2579
|
+
return multimodel ? toHandles2(viewer, handles) : handles;
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
function getIsolated(viewer, multimodel = false) {
|
|
2583
|
+
const handles = Array.from(viewer.visibilityManager.isolated);
|
|
2584
|
+
return multimodel ? toHandles2(viewer, handles) : handles;
|
|
2585
|
+
}
|
|
2586
|
+
|
|
2554
2587
|
function getModels(viewer) {
|
|
2555
|
-
if (!viewer.visualizeJs)
|
|
2556
|
-
return [];
|
|
2557
2588
|
const visViewer = viewer.visViewer();
|
|
2558
2589
|
const handles = [];
|
|
2559
2590
|
const modelItr = visViewer.getModelIterator();
|
|
2560
|
-
|
|
2591
|
+
while (!modelItr.done()) {
|
|
2561
2592
|
const modelPtr = modelItr.getModel();
|
|
2562
2593
|
if (modelPtr.getName()[0] !== "$")
|
|
2563
2594
|
handles.push(modelPtr.getDatabaseHandle());
|
|
2595
|
+
modelItr.step();
|
|
2564
2596
|
}
|
|
2565
2597
|
modelItr.delete();
|
|
2566
2598
|
return handles;
|
|
2567
2599
|
}
|
|
2568
2600
|
|
|
2569
|
-
function getSelected(viewer) {
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
const visViewer = viewer.visViewer();
|
|
2573
|
-
const handles = [];
|
|
2574
|
-
const selectionSet = visViewer.getSelected();
|
|
2575
|
-
if (!selectionSet.isNull() && selectionSet.numItems() !== 0) {
|
|
2576
|
-
const itr = selectionSet.getIterator();
|
|
2577
|
-
for (; !itr.done(); itr.step()) {
|
|
2578
|
-
const entityId = itr.getEntity();
|
|
2579
|
-
const entityPtr = entityId.getType() === 1
|
|
2580
|
-
? entityId.openObject()
|
|
2581
|
-
: entityId.getType() === 2
|
|
2582
|
-
? entityId.openObjectAsInsert()
|
|
2583
|
-
: null;
|
|
2584
|
-
if (entityPtr) {
|
|
2585
|
-
const handle = entityPtr.getNativeDatabaseHandle();
|
|
2586
|
-
if (handle !== "-1")
|
|
2587
|
-
handles.push(handle);
|
|
2588
|
-
entityPtr.delete();
|
|
2589
|
-
}
|
|
2590
|
-
}
|
|
2591
|
-
itr.delete();
|
|
2592
|
-
}
|
|
2593
|
-
return handles;
|
|
2601
|
+
function getSelected(viewer, multimodel = false) {
|
|
2602
|
+
const handles = Array.from(viewer.selector.selected);
|
|
2603
|
+
return multimodel ? toHandles2(viewer, handles) : handles;
|
|
2594
2604
|
}
|
|
2595
2605
|
|
|
2596
2606
|
function getSelected2(viewer) {
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
const handles2 = handles.map((handle) => `${model.id}:${handle}`);
|
|
2600
|
-
return handles2;
|
|
2607
|
+
console.warn("getSelected2 command has been deprecated since 27.11 and will be removed in a future release, use getSelected instead");
|
|
2608
|
+
return viewer.executeCommand("getSelected", true);
|
|
2601
2609
|
}
|
|
2602
2610
|
|
|
2603
|
-
function
|
|
2611
|
+
function getSnapshot(viewer, type, quality) {
|
|
2612
|
+
var _a, _b, _c;
|
|
2604
2613
|
if (!viewer.visualizeJs)
|
|
2605
|
-
return;
|
|
2606
|
-
const
|
|
2607
|
-
|
|
2608
|
-
viewer.
|
|
2614
|
+
return "";
|
|
2615
|
+
const mimeType = (_a = type !== null && type !== void 0 ? type : viewer.options.snapshotMimeType) !== null && _a !== void 0 ? _a : "image/jpeg";
|
|
2616
|
+
const imageQuality = (_b = quality !== null && quality !== void 0 ? quality : viewer.options.snapshotQuality) !== null && _b !== void 0 ? _b : 0.25;
|
|
2617
|
+
if (viewer.markup) {
|
|
2618
|
+
return viewer.markup.getSnapshot(mimeType, imageQuality);
|
|
2619
|
+
}
|
|
2620
|
+
return ((_c = viewer.canvas) === null || _c === void 0 ? void 0 : _c.toDataURL(mimeType, imageQuality)) || "";
|
|
2621
|
+
}
|
|
2622
|
+
|
|
2623
|
+
function hide(viewer, handles) {
|
|
2624
|
+
handles = toHandles(viewer, handles);
|
|
2625
|
+
viewer.deselect(handles);
|
|
2626
|
+
viewer.visibilityManager.hide(handles);
|
|
2609
2627
|
viewer.emitEvent({ type: "hide" });
|
|
2610
|
-
viewer.
|
|
2611
|
-
viewer.emitEvent({ type: "select2", handles: [] });
|
|
2628
|
+
viewer.update();
|
|
2612
2629
|
}
|
|
2613
2630
|
|
|
2614
|
-
function
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
visViewer.isolateSelectedObjects(false);
|
|
2631
|
+
function hideAll(viewer) {
|
|
2632
|
+
viewer.clearSelected();
|
|
2633
|
+
viewer.visibilityManager.hideAll();
|
|
2634
|
+
viewer.emitEvent({ type: "hideall" });
|
|
2619
2635
|
viewer.update();
|
|
2636
|
+
}
|
|
2637
|
+
|
|
2638
|
+
function hideSelected(viewer) {
|
|
2639
|
+
viewer.hide(viewer.getSelected(false));
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
function isolate(viewer, handles) {
|
|
2643
|
+
handles = toHandles(viewer, handles);
|
|
2644
|
+
const handlesSet = new Set(handles);
|
|
2645
|
+
const toDeselect = [];
|
|
2646
|
+
for (const handle of viewer.selector.selected) {
|
|
2647
|
+
if (!handlesSet.has(handle))
|
|
2648
|
+
toDeselect.push(handle);
|
|
2649
|
+
}
|
|
2650
|
+
viewer.deselect(toDeselect);
|
|
2651
|
+
viewer.visibilityManager.isolate(handles);
|
|
2620
2652
|
viewer.emitEvent({ type: "isolate" });
|
|
2653
|
+
viewer.update();
|
|
2654
|
+
}
|
|
2655
|
+
|
|
2656
|
+
function isolateSelected(viewer) {
|
|
2657
|
+
viewer.isolate(viewer.getSelected(false));
|
|
2621
2658
|
}
|
|
2622
2659
|
|
|
2623
2660
|
function regenerateAll(viewer) {
|
|
2624
|
-
if (!viewer.visualizeJs)
|
|
2625
|
-
return;
|
|
2626
2661
|
const visViewer = viewer.visViewer();
|
|
2627
2662
|
visViewer.regenAll();
|
|
2628
2663
|
viewer.update();
|
|
@@ -2630,8 +2665,6 @@ function regenerateAll(viewer) {
|
|
|
2630
2665
|
}
|
|
2631
2666
|
|
|
2632
2667
|
function resetView(viewer) {
|
|
2633
|
-
if (!viewer.visualizeJs)
|
|
2634
|
-
return;
|
|
2635
2668
|
viewer.executeCommand("setActiveDragger");
|
|
2636
2669
|
viewer.executeCommand("clearSlices");
|
|
2637
2670
|
viewer.executeCommand("clearOverlay");
|
|
@@ -2639,29 +2672,35 @@ function resetView(viewer) {
|
|
|
2639
2672
|
viewer.executeCommand("clearSelected");
|
|
2640
2673
|
viewer.executeCommand("showAll");
|
|
2641
2674
|
viewer.executeCommand("explode", 0);
|
|
2642
|
-
viewer.executeCommand("
|
|
2675
|
+
viewer.executeCommand("zoomExtents");
|
|
2643
2676
|
viewer.emit({ type: "resetview" });
|
|
2644
2677
|
}
|
|
2645
2678
|
|
|
2679
|
+
function select(viewer, handles = []) {
|
|
2680
|
+
handles = toHandles(viewer, handles);
|
|
2681
|
+
viewer.show(handles);
|
|
2682
|
+
viewer.selector.select(handles);
|
|
2683
|
+
viewer.emitEvent({ type: "select" });
|
|
2684
|
+
viewer.emitEvent({ type: "select2" });
|
|
2685
|
+
viewer.update();
|
|
2686
|
+
}
|
|
2687
|
+
|
|
2646
2688
|
function selectModel(viewer, handle) {
|
|
2647
|
-
|
|
2648
|
-
return;
|
|
2689
|
+
let handles = [];
|
|
2649
2690
|
const visViewer = viewer.visViewer();
|
|
2650
|
-
const activeView = visViewer.activeView;
|
|
2651
2691
|
const modelItr = visViewer.getModelIterator();
|
|
2652
|
-
|
|
2653
|
-
const
|
|
2654
|
-
if (
|
|
2655
|
-
const
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
viewer.emitEvent({ type: "select", handles: viewer.getSelected() });
|
|
2659
|
-
viewer.emitEvent({ type: "select2", handles: viewer.getSelected2() });
|
|
2660
|
-
selectionSet.delete();
|
|
2692
|
+
while (!modelItr.done()) {
|
|
2693
|
+
const model = modelItr.getModel();
|
|
2694
|
+
if (model.getDatabaseHandle() === handle) {
|
|
2695
|
+
const entityItr = model.getEntitiesIterator();
|
|
2696
|
+
handles = viewer.models[0].getHandlesByEntityIterator(entityItr);
|
|
2697
|
+
entityItr.delete();
|
|
2661
2698
|
break;
|
|
2662
2699
|
}
|
|
2700
|
+
modelItr.step();
|
|
2663
2701
|
}
|
|
2664
2702
|
modelItr.delete();
|
|
2703
|
+
viewer.setSelected(handles);
|
|
2665
2704
|
}
|
|
2666
2705
|
|
|
2667
2706
|
function setActiveDragger(viewer, dragger = "") {
|
|
@@ -2683,94 +2722,74 @@ function setMarkupColor(viewer, r = 255, g = 0, b = 0) {
|
|
|
2683
2722
|
viewer.markup.setMarkupColor(r, g, b);
|
|
2684
2723
|
}
|
|
2685
2724
|
|
|
2686
|
-
function setSelected(viewer,
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
const selectionSet = new visLib.OdTvSelectionSet();
|
|
2693
|
-
handles.forEach((handle) => {
|
|
2694
|
-
const entityId = visViewer.getEntityByOriginalHandle(handle + "");
|
|
2695
|
-
if (!entityId.isNull())
|
|
2696
|
-
selectionSet.appendEntity(entityId);
|
|
2697
|
-
});
|
|
2698
|
-
visViewer.setSelected(selectionSet);
|
|
2725
|
+
function setSelected(viewer, handles = []) {
|
|
2726
|
+
handles = toHandles(viewer, handles);
|
|
2727
|
+
viewer.show(handles);
|
|
2728
|
+
viewer.selector.setSelected(handles);
|
|
2729
|
+
viewer.emitEvent({ type: "select" });
|
|
2730
|
+
viewer.emitEvent({ type: "select2" });
|
|
2699
2731
|
viewer.update();
|
|
2700
|
-
viewer.emitEvent({ type: "select", data: selectionSet, handles });
|
|
2701
|
-
viewer.emitEvent({ type: "select2", data: selectionSet, handles: handles2 });
|
|
2702
|
-
selectionSet.delete();
|
|
2703
2732
|
}
|
|
2704
2733
|
|
|
2705
2734
|
function setSelected2(viewer, handles2 = []) {
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
if (!handle.includes(":")) {
|
|
2709
|
-
handles.push(handle);
|
|
2710
|
-
}
|
|
2711
|
-
else
|
|
2712
|
-
viewer.models.forEach((model) => {
|
|
2713
|
-
if (handle.split(":", 1)[0] === model.id + "")
|
|
2714
|
-
handles.push(handle);
|
|
2715
|
-
});
|
|
2716
|
-
});
|
|
2717
|
-
return viewer.executeCommand("setSelected", handles);
|
|
2735
|
+
console.warn("setSelected2 command has been deprecated since 27.11 and will be removed in a future release, use setSelected instead");
|
|
2736
|
+
return viewer.executeCommand("setSelected", handles2);
|
|
2718
2737
|
}
|
|
2719
2738
|
|
|
2720
|
-
function
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
visViewer.unisolateSelectedObjects(false);
|
|
2739
|
+
function show(viewer, handles) {
|
|
2740
|
+
handles = toHandles(viewer, handles);
|
|
2741
|
+
viewer.visibilityManager.show(handles);
|
|
2742
|
+
viewer.emitEvent({ type: "show" });
|
|
2725
2743
|
viewer.update();
|
|
2744
|
+
}
|
|
2745
|
+
|
|
2746
|
+
function showAll(viewer) {
|
|
2747
|
+
viewer.visibilityManager.showAll();
|
|
2726
2748
|
viewer.emitEvent({ type: "showall" });
|
|
2749
|
+
viewer.update();
|
|
2727
2750
|
}
|
|
2728
2751
|
|
|
2729
|
-
function
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
viewer.
|
|
2752
|
+
function toggleSelection(viewer, handles = []) {
|
|
2753
|
+
handles = toHandles(viewer, handles);
|
|
2754
|
+
if (viewer.selector.selected.has(handles[0])) {
|
|
2755
|
+
viewer.selector.deselect(handles);
|
|
2756
|
+
}
|
|
2757
|
+
else {
|
|
2758
|
+
viewer.show(handles);
|
|
2759
|
+
viewer.selector.select(handles);
|
|
2760
|
+
}
|
|
2761
|
+
viewer.emitEvent({ type: "select" });
|
|
2762
|
+
viewer.emitEvent({ type: "select2" });
|
|
2739
2763
|
viewer.update();
|
|
2740
|
-
viewer.emitEvent({ type: "zoom" });
|
|
2741
2764
|
}
|
|
2742
2765
|
|
|
2743
|
-
function
|
|
2744
|
-
var _a;
|
|
2745
|
-
if (!viewer.visualizeJs)
|
|
2746
|
-
return;
|
|
2747
|
-
const visLib = viewer.visLib();
|
|
2766
|
+
function zoomExtents(viewer) {
|
|
2748
2767
|
const visViewer = viewer.visViewer();
|
|
2749
|
-
|
|
2750
|
-
handles.forEach((handle) => {
|
|
2751
|
-
const entityId = visViewer.getEntityByOriginalHandle(handle + "");
|
|
2752
|
-
if (!entityId.isNull())
|
|
2753
|
-
selectionSet.appendEntity(entityId);
|
|
2754
|
-
});
|
|
2755
|
-
(_a = visViewer.zoomToObjects) === null || _a === void 0 ? void 0 : _a.call(visViewer, selectionSet);
|
|
2768
|
+
visViewer.zoomExtents(true);
|
|
2756
2769
|
viewer.deviceAutoRegeneration();
|
|
2757
2770
|
viewer.update();
|
|
2758
2771
|
viewer.emitEvent({ type: "zoom" });
|
|
2759
|
-
selectionSet.delete();
|
|
2760
2772
|
}
|
|
2761
2773
|
|
|
2762
|
-
function
|
|
2774
|
+
function zoomTo(viewer, handles = []) {
|
|
2763
2775
|
var _a;
|
|
2764
|
-
|
|
2765
|
-
return;
|
|
2776
|
+
handles = toHandles(viewer, handles);
|
|
2766
2777
|
const visViewer = viewer.visViewer();
|
|
2767
|
-
const selectionSet =
|
|
2768
|
-
(
|
|
2778
|
+
const selectionSet = viewer.models[0].getSelectionSetByHandles(handles);
|
|
2779
|
+
if (selectionSet.numItems() > 0)
|
|
2780
|
+
(_a = visViewer.zoomToObjects) === null || _a === void 0 ? void 0 : _a.call(visViewer, selectionSet);
|
|
2781
|
+
else
|
|
2782
|
+
visViewer.zoomExtents(false);
|
|
2783
|
+
selectionSet.delete();
|
|
2769
2784
|
viewer.deviceAutoRegeneration();
|
|
2770
2785
|
viewer.update();
|
|
2771
2786
|
viewer.emitEvent({ type: "zoom" });
|
|
2772
2787
|
}
|
|
2773
2788
|
|
|
2789
|
+
function zoomToSelected(viewer) {
|
|
2790
|
+
zoomTo(viewer, viewer.getSelected(false));
|
|
2791
|
+
}
|
|
2792
|
+
|
|
2774
2793
|
function isTemplateModel(modelPtr) {
|
|
2775
2794
|
return modelPtr.getName()[0] === "$";
|
|
2776
2795
|
}
|
|
@@ -2833,26 +2852,35 @@ commands.registerCommand("applyModelTransform", applyModelTransform);
|
|
|
2833
2852
|
commands.registerCommand("clearMarkup", clearMarkup);
|
|
2834
2853
|
commands.registerCommand("clearSelected", clearSelected);
|
|
2835
2854
|
commands.registerCommand("clearSlices", clearSlices);
|
|
2836
|
-
commands.registerCommand("getSnapshot", getSnapshot);
|
|
2837
|
-
commands.registerCommand("explode", explode);
|
|
2838
2855
|
commands.registerCommand("collect", collect);
|
|
2856
|
+
commands.registerCommand("deselect", deselect);
|
|
2857
|
+
commands.registerCommand("explode", explode);
|
|
2858
|
+
commands.registerCommand("getSnapshot", getSnapshot);
|
|
2839
2859
|
commands.registerCommand("getDefaultViewPositions", getDefaultViewPositions);
|
|
2860
|
+
commands.registerCommand("getHidden", getHidden);
|
|
2861
|
+
commands.registerCommand("getIsolated", getIsolated);
|
|
2840
2862
|
commands.registerCommand("getModels", getModels);
|
|
2841
2863
|
commands.registerCommand("getSelected", getSelected);
|
|
2842
2864
|
commands.registerCommand("getSelected2", getSelected2);
|
|
2865
|
+
commands.registerCommand("hide", hide);
|
|
2866
|
+
commands.registerCommand("hideAll", hideAll);
|
|
2843
2867
|
commands.registerCommand("hideSelected", hideSelected);
|
|
2868
|
+
commands.registerCommand("isolate", isolate);
|
|
2844
2869
|
commands.registerCommand("isolateSelected", isolateSelected);
|
|
2845
2870
|
commands.registerCommand("regenerateAll", regenerateAll);
|
|
2846
2871
|
commands.registerCommand("resetView", resetView);
|
|
2872
|
+
commands.registerCommand("select", select);
|
|
2847
2873
|
commands.registerCommand("selectModel", selectModel);
|
|
2848
2874
|
commands.registerCommand("setActiveDragger", setActiveDragger);
|
|
2849
2875
|
commands.registerCommand("setDefaultViewPosition", setDefaultViewPosition);
|
|
2850
2876
|
commands.registerCommand("setMarkupColor", setMarkupColor);
|
|
2851
2877
|
commands.registerCommand("setSelected", setSelected);
|
|
2852
2878
|
commands.registerCommand("setSelected2", setSelected2);
|
|
2879
|
+
commands.registerCommand("show", show);
|
|
2853
2880
|
commands.registerCommand("showAll", showAll);
|
|
2854
|
-
commands.registerCommand("
|
|
2855
|
-
commands.registerCommand("
|
|
2881
|
+
commands.registerCommand("toggleSelection", toggleSelection);
|
|
2882
|
+
commands.registerCommand("zoomExtents", zoomExtents);
|
|
2883
|
+
commands.registerCommand("zoomTo", zoomTo);
|
|
2856
2884
|
commands.registerCommand("zoomToSelected", zoomToSelected);
|
|
2857
2885
|
commands.registerCommand("autoTransformAllModelsToCentralPoint", autoTransformAllModelsToCentralPoint);
|
|
2858
2886
|
commands.registerCommand("top", (viewer) => setDefaultViewPosition(viewer, "k3DViewTop"));
|
|
@@ -2868,7 +2896,8 @@ commands.registerCommand("nw", (viewer) => setDefaultViewPosition(viewer, "k3DVi
|
|
|
2868
2896
|
commands.registerCommandAlias("clearMarkup", "clearOverlay");
|
|
2869
2897
|
commands.registerCommandAlias("clearSelected", "unselect");
|
|
2870
2898
|
commands.registerCommandAlias("getSnapshot", "createPreview");
|
|
2871
|
-
commands.registerCommandAlias("
|
|
2899
|
+
commands.registerCommandAlias("zoomExtents", "zoomToExtents");
|
|
2900
|
+
commands.registerCommandAlias("zoomTo", "zoomToObjects");
|
|
2872
2901
|
commands.registerCommandAlias("top", "k3DViewTop");
|
|
2873
2902
|
commands.registerCommandAlias("bottom", "k3DViewBottom");
|
|
2874
2903
|
commands.registerCommandAlias("left", "k3DViewLeft");
|
|
@@ -3332,10 +3361,120 @@ components.registerComponent("GestureManagerComponent", (viewer) => new GestureM
|
|
|
3332
3361
|
components.registerComponent("ResetComponent", (viewer) => new ResetComponent(viewer));
|
|
3333
3362
|
|
|
3334
3363
|
class ModelImpl {
|
|
3335
|
-
constructor() {
|
|
3364
|
+
constructor(visualizeJs) {
|
|
3336
3365
|
this.id = "";
|
|
3366
|
+
this.id = "";
|
|
3367
|
+
this.visualizeJs = visualizeJs;
|
|
3337
3368
|
}
|
|
3338
3369
|
dispose() { }
|
|
3370
|
+
initialize() {
|
|
3371
|
+
}
|
|
3372
|
+
getHandlesByEntityIterator(iterator) {
|
|
3373
|
+
const handles2 = [];
|
|
3374
|
+
while (!iterator.done()) {
|
|
3375
|
+
const entityId = iterator.getEntity();
|
|
3376
|
+
const entityType = entityId.getType();
|
|
3377
|
+
let entityPtr = null;
|
|
3378
|
+
if (entityType === this.visualizeJs.OdTvEntityType.kEntity.value)
|
|
3379
|
+
entityPtr = entityId.openObject();
|
|
3380
|
+
if (entityType === this.visualizeJs.OdTvEntityType.kInsert.value)
|
|
3381
|
+
entityPtr = entityId.openObjectAsInsert();
|
|
3382
|
+
if (entityPtr) {
|
|
3383
|
+
const handle = entityPtr.getNativeDatabaseHandle();
|
|
3384
|
+
if (handle !== "-1")
|
|
3385
|
+
handles2.push(handle);
|
|
3386
|
+
entityPtr.delete();
|
|
3387
|
+
}
|
|
3388
|
+
iterator.step();
|
|
3389
|
+
}
|
|
3390
|
+
return handles2;
|
|
3391
|
+
}
|
|
3392
|
+
getHandlesBySelectionSet(selectionSet) {
|
|
3393
|
+
const iterator = selectionSet.getIterator();
|
|
3394
|
+
const handles = this.getHandlesByEntityIterator(iterator);
|
|
3395
|
+
iterator.delete();
|
|
3396
|
+
return handles;
|
|
3397
|
+
}
|
|
3398
|
+
getSelectionSetByHandles(handles) {
|
|
3399
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3400
|
+
const selectionSet = viewer.getEntitySetByOriginalHandles(handles);
|
|
3401
|
+
return selectionSet;
|
|
3402
|
+
}
|
|
3403
|
+
hide(handles) {
|
|
3404
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3405
|
+
const model = viewer.getActiveModel();
|
|
3406
|
+
const selectionSet = this.getSelectionSetByHandles(handles);
|
|
3407
|
+
model.hideBySelectionSet(selectionSet, false);
|
|
3408
|
+
selectionSet.delete();
|
|
3409
|
+
return this;
|
|
3410
|
+
}
|
|
3411
|
+
hideAll() {
|
|
3412
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3413
|
+
const model = viewer.getActiveModel();
|
|
3414
|
+
const selectionSet = new this.visualizeJs.OdTvSelectionSet();
|
|
3415
|
+
const entityItr = model.getEntitiesIterator();
|
|
3416
|
+
while (!entityItr.done()) {
|
|
3417
|
+
const entityId = entityItr.getEntity();
|
|
3418
|
+
const entityType = entityId.getType();
|
|
3419
|
+
const isEntity = entityType === this.visualizeJs.OdTvEntityType.kEntity.value;
|
|
3420
|
+
const isInsert = entityType === this.visualizeJs.OdTvEntityType.kInsert.value;
|
|
3421
|
+
if (isEntity || isInsert)
|
|
3422
|
+
selectionSet.appendEntity(entityId);
|
|
3423
|
+
entityItr.step();
|
|
3424
|
+
}
|
|
3425
|
+
entityItr.delete();
|
|
3426
|
+
model.hideBySelectionSet(selectionSet, false);
|
|
3427
|
+
selectionSet.delete();
|
|
3428
|
+
return this;
|
|
3429
|
+
}
|
|
3430
|
+
isolate(handles) {
|
|
3431
|
+
if (handles.length > 0) {
|
|
3432
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3433
|
+
const model = viewer.getActiveModel();
|
|
3434
|
+
const selectionSet = this.getSelectionSetByHandles(handles);
|
|
3435
|
+
model.isolateBySelectionSet(selectionSet, false);
|
|
3436
|
+
selectionSet.delete();
|
|
3437
|
+
}
|
|
3438
|
+
else {
|
|
3439
|
+
this.hideAll();
|
|
3440
|
+
}
|
|
3441
|
+
return this;
|
|
3442
|
+
}
|
|
3443
|
+
show(handles) {
|
|
3444
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3445
|
+
const model = viewer.getActiveModel();
|
|
3446
|
+
const selectionSet = this.getSelectionSetByHandles(handles);
|
|
3447
|
+
model.unHideBySelectionSet(selectionSet, true, false);
|
|
3448
|
+
selectionSet.delete();
|
|
3449
|
+
return this;
|
|
3450
|
+
}
|
|
3451
|
+
showAll() {
|
|
3452
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3453
|
+
const model = viewer.getActiveModel();
|
|
3454
|
+
model.unIsolate(false);
|
|
3455
|
+
return this;
|
|
3456
|
+
}
|
|
3457
|
+
highlight(handles) {
|
|
3458
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3459
|
+
const view = viewer.activeView;
|
|
3460
|
+
const selectionSet = this.getSelectionSetByHandles(handles);
|
|
3461
|
+
view.highlightAll(selectionSet, true);
|
|
3462
|
+
selectionSet.delete();
|
|
3463
|
+
return this;
|
|
3464
|
+
}
|
|
3465
|
+
unhighlight(handles) {
|
|
3466
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3467
|
+
const view = viewer.activeView;
|
|
3468
|
+
const selectionSet = this.getSelectionSetByHandles(handles);
|
|
3469
|
+
view.highlightAll(selectionSet, false);
|
|
3470
|
+
selectionSet.delete();
|
|
3471
|
+
return this;
|
|
3472
|
+
}
|
|
3473
|
+
explode(scale, coeff = 4) {
|
|
3474
|
+
const viewer = this.visualizeJs.getViewer();
|
|
3475
|
+
viewer.explode(scale);
|
|
3476
|
+
return this;
|
|
3477
|
+
}
|
|
3339
3478
|
}
|
|
3340
3479
|
|
|
3341
3480
|
class FileLoader {
|
|
@@ -3447,8 +3586,9 @@ class VSFFileLoader extends Loader {
|
|
|
3447
3586
|
console.error("VSF parse error.", error);
|
|
3448
3587
|
throw error;
|
|
3449
3588
|
}
|
|
3450
|
-
const modelImpl = new ModelImpl();
|
|
3589
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3451
3590
|
modelImpl.id = params.modelId || this.extractFileName(file);
|
|
3591
|
+
modelImpl.initialize();
|
|
3452
3592
|
this.viewer.models.push(modelImpl);
|
|
3453
3593
|
this.viewer.syncOptions();
|
|
3454
3594
|
this.viewer.syncOverlay();
|
|
@@ -3469,7 +3609,7 @@ class VSFCloudLoader extends Loader {
|
|
|
3469
3609
|
typeof file.downloadResource === "function" &&
|
|
3470
3610
|
/.data$/i.test(file.database));
|
|
3471
3611
|
}
|
|
3472
|
-
async load(model, format) {
|
|
3612
|
+
async load(model, format, params = {}) {
|
|
3473
3613
|
if (!this.viewer.visualizeJs)
|
|
3474
3614
|
return this;
|
|
3475
3615
|
const visViewer = this.viewer.visViewer();
|
|
@@ -3492,8 +3632,9 @@ class VSFCloudLoader extends Loader {
|
|
|
3492
3632
|
throw error;
|
|
3493
3633
|
}
|
|
3494
3634
|
if (i === 0) {
|
|
3495
|
-
const modelImpl = new ModelImpl();
|
|
3496
|
-
modelImpl.id = model.file.id;
|
|
3635
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3636
|
+
modelImpl.id = params.modelId || model.file.id;
|
|
3637
|
+
modelImpl.initialize();
|
|
3497
3638
|
this.viewer.models.push(modelImpl);
|
|
3498
3639
|
this.viewer.syncOptions();
|
|
3499
3640
|
this.viewer.syncOverlay();
|
|
@@ -3542,8 +3683,9 @@ class VSFXFileLoader extends Loader {
|
|
|
3542
3683
|
console.error("VSFX parse error.", error);
|
|
3543
3684
|
throw error;
|
|
3544
3685
|
}
|
|
3545
|
-
const modelImpl = new ModelImpl();
|
|
3686
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3546
3687
|
modelImpl.id = params.modelId || this.extractFileName(file);
|
|
3688
|
+
modelImpl.initialize();
|
|
3547
3689
|
this.viewer.models.push(modelImpl);
|
|
3548
3690
|
this.viewer.syncOptions();
|
|
3549
3691
|
this.viewer.syncOverlay();
|
|
@@ -3565,7 +3707,7 @@ class VSFXCloudLoader extends Loader {
|
|
|
3565
3707
|
/.vsfx$/i.test(file.database) &&
|
|
3566
3708
|
this.viewer.options.enableStreamingMode === false);
|
|
3567
3709
|
}
|
|
3568
|
-
async load(model) {
|
|
3710
|
+
async load(model, format, params = {}) {
|
|
3569
3711
|
if (!this.viewer.visualizeJs)
|
|
3570
3712
|
return Promise.resolve(this);
|
|
3571
3713
|
const visViewer = this.viewer.visViewer();
|
|
@@ -3583,8 +3725,9 @@ class VSFXCloudLoader extends Loader {
|
|
|
3583
3725
|
console.error("VSFX parse error.", error);
|
|
3584
3726
|
throw error;
|
|
3585
3727
|
}
|
|
3586
|
-
const modelImpl = new ModelImpl();
|
|
3587
|
-
modelImpl.id = model.file.id;
|
|
3728
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3729
|
+
modelImpl.id = params.modelId || model.file.id;
|
|
3730
|
+
modelImpl.initialize();
|
|
3588
3731
|
this.viewer.models.push(modelImpl);
|
|
3589
3732
|
this.viewer.syncOptions();
|
|
3590
3733
|
this.viewer.syncOverlay();
|
|
@@ -3608,7 +3751,7 @@ class VSFXCloudStreamingLoader extends Loader {
|
|
|
3608
3751
|
this.viewer.options.enablePartialMode === false &&
|
|
3609
3752
|
!/.rcs$/i.test(file.type));
|
|
3610
3753
|
}
|
|
3611
|
-
async load(model) {
|
|
3754
|
+
async load(model, format, params = {}) {
|
|
3612
3755
|
if (!this.viewer.visualizeJs)
|
|
3613
3756
|
return this;
|
|
3614
3757
|
const visLib = this.viewer.visLib();
|
|
@@ -3633,8 +3776,9 @@ class VSFXCloudStreamingLoader extends Loader {
|
|
|
3633
3776
|
isDatabaseChunk = true;
|
|
3634
3777
|
}
|
|
3635
3778
|
if (isDatabaseChunk) {
|
|
3636
|
-
const modelImpl = new ModelImpl();
|
|
3637
|
-
modelImpl.id = model.file.id;
|
|
3779
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3780
|
+
modelImpl.id = params.modelId || model.file.id;
|
|
3781
|
+
modelImpl.initialize();
|
|
3638
3782
|
this.viewer.models.push(modelImpl);
|
|
3639
3783
|
this.viewer.syncOptions();
|
|
3640
3784
|
this.viewer.syncOverlay();
|
|
@@ -3667,7 +3811,7 @@ class VSFXCloudPartialLoader extends Loader {
|
|
|
3667
3811
|
/.vsfx$/i.test(file.database) &&
|
|
3668
3812
|
(this.viewer.options.enablePartialMode === true || /.rcs$/i.test(file.type)));
|
|
3669
3813
|
}
|
|
3670
|
-
async load(model) {
|
|
3814
|
+
async load(model, format, params = {}) {
|
|
3671
3815
|
if (!this.viewer.visualizeJs)
|
|
3672
3816
|
return this;
|
|
3673
3817
|
const visViewer = this.viewer.visViewer();
|
|
@@ -3691,8 +3835,9 @@ class VSFXCloudPartialLoader extends Loader {
|
|
|
3691
3835
|
}
|
|
3692
3836
|
this.viewer.emitEvent({ type: "geometryprogress", data: progress, file: model.file, model });
|
|
3693
3837
|
if (isDatabaseChunk) {
|
|
3694
|
-
const modelImpl = new ModelImpl();
|
|
3695
|
-
modelImpl.id = model.file.id;
|
|
3838
|
+
const modelImpl = new ModelImpl(this.viewer.visualizeJs);
|
|
3839
|
+
modelImpl.id = params.modelId || model.file.id;
|
|
3840
|
+
modelImpl.initialize();
|
|
3696
3841
|
this.viewer.models.push(modelImpl);
|
|
3697
3842
|
this.viewer.syncOptions();
|
|
3698
3843
|
this.viewer.syncOverlay();
|
|
@@ -4075,9 +4220,12 @@ class Viewer extends EventEmitter2 {
|
|
|
4075
4220
|
this.info = new Info();
|
|
4076
4221
|
this.canvasEvents = CANVAS_EVENTS.slice();
|
|
4077
4222
|
this.canvaseventlistener = (event) => this.emit(event);
|
|
4223
|
+
this.selector = new Selector(this.models);
|
|
4224
|
+
this.visibilityManager = new VisibilityManager(this.models);
|
|
4225
|
+
this.explodeScale = 0;
|
|
4078
4226
|
this._visualizeTimestamp = 0;
|
|
4079
4227
|
this._activeDragger = null;
|
|
4080
|
-
this._components =
|
|
4228
|
+
this._components = new Map();
|
|
4081
4229
|
this._renderNeeded = false;
|
|
4082
4230
|
this._renderTime = 0;
|
|
4083
4231
|
this._enableAutoUpdate = (_a = params.enableAutoUpdate) !== null && _a !== void 0 ? _a : true;
|
|
@@ -4144,7 +4292,7 @@ class Viewer extends EventEmitter2 {
|
|
|
4144
4292
|
for (const name of components.getComponents().keys()) {
|
|
4145
4293
|
const component = components.createComponent(name, this);
|
|
4146
4294
|
if (component)
|
|
4147
|
-
this._components.
|
|
4295
|
+
this._components.set(name, component);
|
|
4148
4296
|
}
|
|
4149
4297
|
this.syncOptions();
|
|
4150
4298
|
this.syncOverlay();
|
|
@@ -4160,7 +4308,7 @@ class Viewer extends EventEmitter2 {
|
|
|
4160
4308
|
this.removeAllListeners();
|
|
4161
4309
|
this.setActiveDragger();
|
|
4162
4310
|
this._components.forEach((component) => component.dispose());
|
|
4163
|
-
this._components.
|
|
4311
|
+
this._components.clear();
|
|
4164
4312
|
this._markup.dispose();
|
|
4165
4313
|
if (this.canvas) {
|
|
4166
4314
|
this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));
|
|
@@ -4191,8 +4339,8 @@ class Viewer extends EventEmitter2 {
|
|
|
4191
4339
|
}
|
|
4192
4340
|
update(force = false) {
|
|
4193
4341
|
const time = performance.now();
|
|
4194
|
-
if (typeof force === "number"
|
|
4195
|
-
force =
|
|
4342
|
+
if (typeof force === "number")
|
|
4343
|
+
force = time - this._renderTime >= force;
|
|
4196
4344
|
if (this._enableAutoUpdate) {
|
|
4197
4345
|
this._renderNeeded = true;
|
|
4198
4346
|
if (force)
|
|
@@ -4481,30 +4629,66 @@ class Viewer extends EventEmitter2 {
|
|
|
4481
4629
|
this.emitEvent({ type: "clearslices" });
|
|
4482
4630
|
this.update();
|
|
4483
4631
|
}
|
|
4484
|
-
getSelected() {
|
|
4485
|
-
return this.executeCommand("getSelected");
|
|
4486
|
-
}
|
|
4487
|
-
setSelected(handles) {
|
|
4488
|
-
this.executeCommand("setSelected", handles);
|
|
4632
|
+
getSelected(multimodel) {
|
|
4633
|
+
return this.executeCommand("getSelected", multimodel);
|
|
4489
4634
|
}
|
|
4490
4635
|
getSelected2() {
|
|
4491
4636
|
return this.executeCommand("getSelected2");
|
|
4492
4637
|
}
|
|
4638
|
+
setSelected(handles) {
|
|
4639
|
+
this.executeCommand("setSelected", handles);
|
|
4640
|
+
}
|
|
4493
4641
|
setSelected2(handles) {
|
|
4494
4642
|
this.executeCommand("setSelected2", handles);
|
|
4495
4643
|
}
|
|
4644
|
+
select(handles) {
|
|
4645
|
+
this.executeCommand("select", handles);
|
|
4646
|
+
}
|
|
4647
|
+
deselect(handles) {
|
|
4648
|
+
this.executeCommand("deselect", handles);
|
|
4649
|
+
}
|
|
4650
|
+
toggleSelection(handles) {
|
|
4651
|
+
this.executeCommand("toggleSelection", handles);
|
|
4652
|
+
}
|
|
4496
4653
|
clearSelected() {
|
|
4497
4654
|
this.executeCommand("clearSelected");
|
|
4498
4655
|
}
|
|
4656
|
+
getHidden(multimodel) {
|
|
4657
|
+
return this.executeCommand("getHidden", multimodel);
|
|
4658
|
+
}
|
|
4659
|
+
getIsolated(multimodel) {
|
|
4660
|
+
return this.executeCommand("getIsolated", multimodel);
|
|
4661
|
+
}
|
|
4662
|
+
hide(handle) {
|
|
4663
|
+
this.executeCommand("hide", handle);
|
|
4664
|
+
}
|
|
4665
|
+
hideAll() {
|
|
4666
|
+
this.executeCommand("hideAll");
|
|
4667
|
+
}
|
|
4499
4668
|
hideSelected() {
|
|
4500
4669
|
this.executeCommand("hideSelected");
|
|
4501
4670
|
}
|
|
4671
|
+
isolate(handle) {
|
|
4672
|
+
this.executeCommand("isolate", handle);
|
|
4673
|
+
}
|
|
4502
4674
|
isolateSelected() {
|
|
4503
4675
|
this.executeCommand("isolateSelected");
|
|
4504
4676
|
}
|
|
4677
|
+
show(handle) {
|
|
4678
|
+
this.executeCommand("show", handle);
|
|
4679
|
+
}
|
|
4505
4680
|
showAll() {
|
|
4506
4681
|
this.executeCommand("showAll");
|
|
4507
4682
|
}
|
|
4683
|
+
zoomExtents() {
|
|
4684
|
+
this.executeCommand("zoomExtents");
|
|
4685
|
+
}
|
|
4686
|
+
zoomTo(handles) {
|
|
4687
|
+
this.executeCommand("zoomTo", handles);
|
|
4688
|
+
}
|
|
4689
|
+
zoomToSelected() {
|
|
4690
|
+
this.executeCommand("zoomToSelected");
|
|
4691
|
+
}
|
|
4508
4692
|
explode(index = 0) {
|
|
4509
4693
|
this.executeCommand("explode", index);
|
|
4510
4694
|
}
|
|
@@ -4546,10 +4730,10 @@ class Viewer extends EventEmitter2 {
|
|
|
4546
4730
|
}
|
|
4547
4731
|
}
|
|
4548
4732
|
getComponent(name) {
|
|
4549
|
-
return this._components.
|
|
4733
|
+
return this._components.get(name) || null;
|
|
4550
4734
|
}
|
|
4551
4735
|
drawViewpoint(viewpoint) {
|
|
4552
|
-
var _a, _b;
|
|
4736
|
+
var _a, _b, _c, _d;
|
|
4553
4737
|
if (!this.visualizeJs)
|
|
4554
4738
|
return;
|
|
4555
4739
|
const visViewer = this.visViewer();
|
|
@@ -4593,8 +4777,22 @@ class Viewer extends EventEmitter2 {
|
|
|
4593
4777
|
}
|
|
4594
4778
|
};
|
|
4595
4779
|
const setSelection = (selection) => {
|
|
4596
|
-
if (selection)
|
|
4597
|
-
this.setSelected(selection.map((
|
|
4780
|
+
if (selection) {
|
|
4781
|
+
this.setSelected(selection.map(({ handle }) => handle));
|
|
4782
|
+
}
|
|
4783
|
+
};
|
|
4784
|
+
const setVisibility = (visibility) => {
|
|
4785
|
+
if (visibility && visibility.exceptions)
|
|
4786
|
+
if (visibility.default_visibility) {
|
|
4787
|
+
this.hide(visibility.exceptions.map(({ handle }) => handle));
|
|
4788
|
+
}
|
|
4789
|
+
else {
|
|
4790
|
+
this.isolate(visibility.exceptions.map(({ handle }) => handle));
|
|
4791
|
+
}
|
|
4792
|
+
};
|
|
4793
|
+
const setExplodeScale = (scale) => {
|
|
4794
|
+
if (scale > 0)
|
|
4795
|
+
this.explode(scale);
|
|
4598
4796
|
};
|
|
4599
4797
|
const draggerName = (_a = this._activeDragger) === null || _a === void 0 ? void 0 : _a.name;
|
|
4600
4798
|
this.setActiveDragger();
|
|
@@ -4606,7 +4804,9 @@ class Viewer extends EventEmitter2 {
|
|
|
4606
4804
|
setOrthogonalCamera(viewpoint.orthogonal_camera);
|
|
4607
4805
|
setPerspectiveCamera(viewpoint.perspective_camera);
|
|
4608
4806
|
setClippingPlanes(viewpoint.clipping_planes);
|
|
4609
|
-
|
|
4807
|
+
setVisibility(((_b = viewpoint.custom_fields) === null || _b === void 0 ? void 0 : _b.visibility2) || viewpoint.visibility);
|
|
4808
|
+
setSelection(((_c = viewpoint.custom_fields) === null || _c === void 0 ? void 0 : _c.selection2) || viewpoint.selection);
|
|
4809
|
+
setExplodeScale((_d = viewpoint.custom_fields) === null || _d === void 0 ? void 0 : _d.explodeScale);
|
|
4610
4810
|
this._markup.setViewpoint(viewpoint);
|
|
4611
4811
|
this.syncOverlay();
|
|
4612
4812
|
this.setActiveDragger(draggerName);
|
|
@@ -4667,20 +4867,42 @@ class Viewer extends EventEmitter2 {
|
|
|
4667
4867
|
return clipping_planes;
|
|
4668
4868
|
};
|
|
4669
4869
|
const getSelection = () => {
|
|
4670
|
-
|
|
4870
|
+
const selected = Array.from(this.selector.selected);
|
|
4871
|
+
return selected.map((handle) => ({ handle }));
|
|
4671
4872
|
};
|
|
4672
4873
|
const getSelection2 = () => {
|
|
4673
|
-
|
|
4874
|
+
const selected = Array.from(this.selector.selected);
|
|
4875
|
+
const selected2 = toHandles2(this, selected);
|
|
4876
|
+
return selected2.map((handle) => ({ handle }));
|
|
4877
|
+
};
|
|
4878
|
+
const getVisibility = () => {
|
|
4879
|
+
const exceptions = Array.from(this.visibilityManager.exceptions);
|
|
4880
|
+
return {
|
|
4881
|
+
default_visibility: this.visibilityManager.defaultVisible,
|
|
4882
|
+
exceptions: exceptions.map((handle) => ({ handle })),
|
|
4883
|
+
};
|
|
4884
|
+
};
|
|
4885
|
+
const getVisibility2 = () => {
|
|
4886
|
+
const exceptions = Array.from(this.visibilityManager.exceptions);
|
|
4887
|
+
const exceptions2 = toHandles2(this, exceptions);
|
|
4888
|
+
return {
|
|
4889
|
+
default_visibility: this.visibilityManager.defaultVisible,
|
|
4890
|
+
exceptions: exceptions2.map((handle) => ({ handle })),
|
|
4891
|
+
};
|
|
4674
4892
|
};
|
|
4675
4893
|
const viewpoint = { custom_fields: {} };
|
|
4676
4894
|
viewpoint.orthogonal_camera = getOrthogonalCamera();
|
|
4677
4895
|
viewpoint.perspective_camera = getPerspectiveCamera();
|
|
4678
4896
|
viewpoint.clipping_planes = getClippingPlanes();
|
|
4679
4897
|
viewpoint.selection = getSelection();
|
|
4898
|
+
viewpoint.visibility = getVisibility();
|
|
4680
4899
|
viewpoint.description = new Date().toDateString();
|
|
4681
4900
|
viewpoint.snapshot = { data: this.getSnapshot() };
|
|
4682
|
-
this._markup.getViewpoint(viewpoint);
|
|
4683
4901
|
viewpoint.custom_fields.selection2 = getSelection2();
|
|
4902
|
+
viewpoint.custom_fields.visibility2 = getVisibility2();
|
|
4903
|
+
viewpoint.custom_fields.explodeScale = this.explodeScale;
|
|
4904
|
+
viewpoint.custom_fields.files = this.models.map((model) => model.id);
|
|
4905
|
+
this._markup.getViewpoint(viewpoint);
|
|
4684
4906
|
this.emitEvent({ type: "createviewpoint", data: viewpoint });
|
|
4685
4907
|
return viewpoint;
|
|
4686
4908
|
}
|