Skip to content

Commit 389a0fe

Browse files
authored
Control active model/category in display-test-app (#3323)
1 parent 5afc645 commit 389a0fe

File tree

5 files changed

+43
-24
lines changed

5 files changed

+43
-24
lines changed

common/api/core-frontend.api.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -11651,7 +11651,7 @@ export class ToolAdmin {
1165111651
// @public (undocumented)
1165211652
export namespace ToolAdmin {
1165311653
// @alpha
11654-
export class ActiveSettings {
11654+
export interface ActiveSettings {
1165511655
category?: Id64String;
1165611656
model?: Id64String;
1165711657
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"changes": [
3+
{
4+
"packageName": "@itwin/core-frontend",
5+
"comment": "",
6+
"type": "none"
7+
}
8+
],
9+
"packageName": "@itwin/core-frontend"
10+
}

core/frontend/src/tools/ToolAdmin.ts

+7-11
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ export class ToolAdmin {
319319
* The active settings that placement tools will use.
320320
* @alpha
321321
*/
322-
public readonly activeSettings = new ToolAdmin.ActiveSettings();
322+
public readonly activeSettings: ToolAdmin.ActiveSettings = { };
323323

324324
/** The name of the [[PrimitiveTool]] to use as the default tool. Defaults to "Select", referring to [[SelectionTool]].
325325
* @see [[startDefaultTool]] to activate the default tool.
@@ -1895,18 +1895,14 @@ export class WheelEventProcessor {
18951895
* @public
18961896
*/
18971897
export namespace ToolAdmin { // eslint-disable-line no-redeclare
1898-
1899-
/**
1900-
* Active settings that placement tools will use.
1898+
/** Active settings that placement tools will use.
19011899
* @alpha
19021900
*/
1903-
export class ActiveSettings {
1901+
export interface ActiveSettings {
1902+
/** The category to which newly created elements will be assigned. */
1903+
category?: Id64String;
19041904

1905-
/** The active category */
1906-
public category?: Id64String;
1907-
1908-
/** The target model */
1909-
public model?: Id64String;
1905+
/** The model that will contain newly created elements. */
1906+
model?: Id64String;
19101907
}
1911-
19121908
}

test-apps/display-test-app/src/frontend/IdPicker.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55
import { assert, compareStringsOrUndefined, Id64, Id64Arg } from "@itwin/core-bentley";
66
import { GeometricModel3dProps, QueryBinder, QueryRowFormat } from "@itwin/core-common";
7-
import { GeometricModel3dState, ScreenViewport, SpatialViewState, ViewManip } from "@itwin/core-frontend";
7+
import { GeometricModel3dState, IModelApp, ScreenViewport, SpatialViewState, ViewManip } from "@itwin/core-frontend";
88
import { CheckBox, ComboBoxEntry, createButton, createCheckBox, createComboBox, createTextBox } from "@itwin/frontend-devtools";
99
import { ToolBarDropDown } from "./ToolBar";
1010

@@ -18,6 +18,7 @@ export abstract class IdPicker extends ToolBarDropDown {
1818
protected readonly _availableIds = new Set<string>();
1919

2020
protected abstract get _elementType(): "Model" | "Category";
21+
protected get _settingsType(): "model" | "category" { return this._elementType.toLowerCase() as "model" | "category"; }
2122
protected get _showIn2d(): boolean { return true; }
2223
protected abstract get _enabledIds(): Set<string>;
2324
protected abstract changeDisplay(ids: Id64Arg, enabled: boolean): void;
@@ -46,6 +47,8 @@ export abstract class IdPicker extends ToolBarDropDown {
4647
{ name: "Hide Selected", value: "Hide" },
4748
{ name: "Hilite Enabled", value: "Hilite" },
4849
{ name: "Un-hilite Enabled", value: "Dehilite" },
50+
// Set ToolAdmin.activeSettings.model/category to first enabled entry.
51+
{ name: "Set First Active", value: "SetFirstActive" },
4952
];
5053
}
5154

@@ -157,6 +160,10 @@ export abstract class IdPicker extends ToolBarDropDown {
157160
case "Dehilite":
158161
this.hiliteEnabled("Hilite" === which);
159162
return;
163+
case "SetFirstActive":
164+
const first = Array.from(this._enabledIds)[0];
165+
IModelApp.toolAdmin.activeSettings[this._settingsType] = first;
166+
return;
160167
case "":
161168
return;
162169
}

test-apps/display-test-app/src/frontend/Viewer.ts

+17-11
Original file line numberDiff line numberDiff line change
@@ -348,20 +348,26 @@ export class Viewer extends Window {
348348
private updateActiveSettings(): void {
349349
// NOTE: First category/model is fine for testing purposes...
350350
const view = this.viewport.view;
351+
const settings = IModelApp.toolAdmin.activeSettings;
351352

352-
IModelApp.toolAdmin.activeSettings.category = undefined;
353-
for (const catId of view.categorySelector.categories) {
354-
IModelApp.toolAdmin.activeSettings.category = catId;
355-
break;
353+
if (undefined === settings.category || !view.viewsCategory(settings.category)) {
354+
settings.category = undefined;
355+
for (const catId of view.categorySelector.categories) {
356+
settings.category = catId;
357+
break;
358+
}
356359
}
357360

358-
if (view.is2d()) {
359-
IModelApp.toolAdmin.activeSettings.model = view.baseModelId;
360-
} else if (view.isSpatialView()) {
361-
IModelApp.toolAdmin.activeSettings.model = undefined;
362-
for (const modId of view.modelSelector.models) {
363-
IModelApp.toolAdmin.activeSettings.model = modId;
364-
break;
361+
if (undefined === settings.model || !view.viewsModel(settings.model)) {
362+
settings.model = undefined;
363+
if (view.is2d()) {
364+
settings.model = view.baseModelId;
365+
} else if (view.isSpatialView()) {
366+
settings.model = undefined;
367+
for (const modId of view.modelSelector.models) {
368+
settings.model = modId;
369+
break;
370+
}
365371
}
366372
}
367373
}

0 commit comments

Comments
 (0)