@turbox3d/design-engine
Version:
Large-scale design application engine library
58 lines (49 loc) • 1.73 kB
text/typescript
import { Domain, mutation, reactor } from '@turbox3d/reactivity';
import { batchRemove } from '@turbox3d/shared';
import EntityObject from '../entity-object';
import { ESelectMode } from './command';
export class Selection extends Domain {
() selectedEntities: EntityObject[] = [];
/** 选择层级深度,多选时取最大值 */
() layerDepth = 1;
() selectMode = ESelectMode.OVERALL;
() selectEntityTypes?: symbol[];
() isMultiSelectMode = false;
setMultiSelect(isMultiple: boolean) {
this.isMultiSelectMode = isMultiple;
}
()
switchSelectMode(selectMode: ESelectMode) {
this.selectMode = selectMode;
}
setLayerDepth(layerDepth: number) {
this.layerDepth = layerDepth;
}
()
select(models: EntityObject[], onSelectHandler?: (models: EntityObject[]) => void) {
if (models.length === 0) {
return;
}
this.selectedEntities.push(...models);
const layerDepths = models.map((m) => m.getParentPathChain().indexOf(m) + 1);
this.setLayerDepth(Math.max(...layerDepths));
onSelectHandler && onSelectHandler(models);
}
()
unselect(models: EntityObject[], onUnselectHandler?: (models: EntityObject[]) => void) {
batchRemove(this.selectedEntities, models);
onUnselectHandler && onUnselectHandler(models);
}
()
clearAllSelected(onUnselectHandler?: (models: EntityObject[]) => void) {
const selected = this.selectedEntities.slice();
batchRemove(this.selectedEntities, selected);
onUnselectHandler && onUnselectHandler(selected);
}
()
setSelectEntityTypes(types?: symbol[]) {
this.selectEntityTypes = types;
}
}