!457 重构SelectEvent注入方式

pull/457/MERGE
ChenX 5 years ago
parent c2bad122b6
commit d324d0be84

@ -76,7 +76,7 @@ export class BoardFindModify implements Command
{
let selectData = new SelectSetBase(app.Viewer);
selectData.m_SelectList.push(...brs.map(e => e.DrawObject));
app.Editor.SelectCtrl.SelectSet.AddSelect(selectData);
app.Editor.SelectCtrl.AddSelect(selectData);
app.Editor.SelectCtrl.UpdateView();
}
private async FindBrs(option: IBoardFindOption)

@ -34,16 +34,14 @@ export class Command_TestBox implements Command
AllowDrawRubberBand: true,
Callback: (v) =>
{
let sss = new SelectSet();
let ss = new SelectSet();
let pt = v.clone();
app.Viewer.WorldToScreen(pt);
let sl = new SelectLine(app.Viewer, AsVector2(pt1), AsVector2(pt.clone()))
sl.Select();
sss.AddSelect(sl);
console.log(sss.SelectEntityList);
ss.AddSelect(sl);
console.log(ss.SelectEntityList);
}
})
});
}
}

@ -59,31 +59,20 @@ export class ApplicationService
let gt = new Gesture(this.Editor);
RegisterGesture(gt);
let regGripEvent = () =>
let selectCtrl = this.Editor.SelectCtrl;
end(selectCtrl, selectCtrl.AddSelect, (ss: SelectSetBase) =>
{
let selectSet = this.Editor.SelectCtrl.SelectSet;
end(selectSet, selectSet.AddSelect, (ss: SelectSetBase) =>
{
for (let obj of ss.m_SelectList)
this.Viewer.GripScene.Append(obj);
this.Viewer.UpdateRender();
});
end(selectSet, selectSet.RemoveSelect, (ss: SelectSetBase) =>
{
for (let obj of ss.m_SelectList)
{
this.Viewer.GripScene.Remove(obj);
}
this.Viewer.UpdateRender();
});
}
end(this.Editor.SelectCtrl, this.Editor.SelectCtrl.Cancel, () =>
for (let obj of ss.m_SelectList)
this.Viewer.GripScene.Append(obj);
this.Viewer.UpdateRender();
});
end(selectCtrl, selectCtrl.RemoveSelect, (ss: SelectSetBase) =>
{
regGripEvent();
this.Viewer.GripScene.Clear();
for (let obj of ss.m_SelectList)
this.Viewer.GripScene.Remove(obj);
this.Viewer.UpdateRender();
});
regGripEvent();
begin(commandMachine, commandMachine.CommandStart, () =>
{

@ -98,9 +98,9 @@ export class SsgetServiecs
ssEnt.m_SelectList.push(enRes.Object);
if (this.m_Editor.KeyCtrl.KeyIsDown(KeyCode.ShiftLeft))
this.m_Editor.SelectCtrl.SelectSet.RemoveSelect(ssEnt);
this.m_Editor.SelectCtrl.RemoveSelect(ssEnt);
else
this.m_Editor.SelectCtrl.SelectSet.AddSelect(ssEnt);
this.m_Editor.SelectCtrl.AddSelect(ssEnt);
if (prompt.Once && (prompt.AllowNone || this.HasSelection(set)))
{
@ -115,14 +115,14 @@ export class SsgetServiecs
}
case PromptStatus.None:
{
this.m_Editor.SelectCtrl.m_Filter = prompt.Filter;
this.m_Editor.SelectCtrl.Filter = prompt.Filter;
this.m_Editor.SelectCtrl.LeftClick(false);
if (prompt.Callback)
{
this.m_AwaitRemoveCalls.push(
end(this.m_Editor.SelectCtrl,
this.m_Editor.SelectCtrl.onMouseMove,
this.m_Editor.SelectCtrl.OnMouseMove,
() =>
{
let set = new SelectSet();
@ -184,7 +184,7 @@ export class SsgetServiecs
this.promisResolve(res);
this.m_Editor.InputState &= ~InputState.Select;
this.m_Editor.SelectCtrl.Cancel();
this.m_Editor.SelectCtrl.m_Filter = undefined;
this.m_Editor.SelectCtrl.Filter = undefined;
this.m_Editor.SelectCtrl.SelectType = SelectType.None;
}

@ -11,6 +11,7 @@ import { Viewer } from '../GraphicsSystem/Viewer';
import { SelectMarquee } from '../UI/JsPlugin/SelectMarquee';
import { Editor, EditorService } from './Editor';
import { PointPick } from './PointPick';
import { SelectSetBase } from './SelectBase';
import { SelectBox, SelectType } from './SelectBox';
import { Filter } from './SelectFilter';
import { SelectPick } from './SelectPick';
@ -19,61 +20,81 @@ import { TransMode } from './TranstrolControl/TransformServices';
export class SelectControls implements EditorService
{
get IsReady()
private _SelectCss: SelectMarquee;
private _Editor: Editor;
private _Viewer: Viewer;
private _SelectSet: SelectSet = new SelectSet(true);
Filter: Filter;
private _SelectType: SelectType = SelectType.None;
private _FirstPickPoint: Vector3;
constructor(view: Viewer, ed: Editor)
{
return this.m_Editor.InputState <= InputState.Select;
this._Editor = ed;
this._Viewer = view;
this._SelectCss = new SelectMarquee(this._Viewer);
this.RegisterEvent();
}
async Doit(e: MouseEvent)
get IsReady()
{
return this.onMouseDown(e);
return this._Editor.InputState <= InputState.Select;
}
private m_SelectCss: SelectMarquee;
private m_Editor: Editor;
private m_Viewer: Viewer;
private m_SelectSet: SelectSet = new SelectSet(true);
m_Filter: Filter;
private m_SelectType: SelectType = SelectType.None;
private m_FirstPickPoint: Vector3;
constructor(view: Viewer, ed: Editor)
async Doit(e: MouseEvent)
{
this.m_Editor = ed;
this.m_Viewer = view;
this.m_SelectCss = new SelectMarquee(this.m_Viewer);
this.RegisterEvent();
if ((this._Editor.InputState & InputState.SelectIng) && e.button === MouseKey.Right)
{
this.RestState();
return true;
}
//左键 并且准备好时.
if (e.button !== MouseKey.Left || !this.IsReady)
return false;
this.LeftClick();
return true;
}
get SelectSet()
/**
* ,SelectSet
* ,AddSelect,使`app.Editor.SelectCtrl.AddSelect`;
*/
get SelectSet(): SelectSet
{
return this.m_SelectSet;
return this._SelectSet;
}
set SelectType(type: SelectType)
{
this.m_SelectType = type;
this.m_SelectCss.selectType = type;
this._SelectType = type;
this._SelectCss.selectType = type;
}
RegisterEvent()
{
let ed = this.m_Editor;
end(ed.MouseCtrl, ed.MouseCtrl.updateWordPoint, () => { this.onMouseMove() });
end(ed.KeyCtrl, ed.KeyCtrl.OnKeyDown, (e) => { this.onKeyDown(e) });
let ed = this._Editor;
end(ed.MouseCtrl, ed.MouseCtrl.updateWordPoint, () => { this.OnMouseMove() });
end(ed.KeyCtrl, ed.KeyCtrl.OnKeyDown, (e: KeyboardEvent) => { this.OnKeyDown(e) });
end(app.Viewer.CameraCtrl, app.Viewer.CameraCtrl.Update, () =>
{
if (this.m_FirstPickPoint)
if (this._FirstPickPoint)
{
let vp = app.Viewer.WorldToScreen(this.m_FirstPickPoint.clone());
this.m_SelectCss.SetStart(vp.x, vp.y);
this.m_SelectCss.Update();
let vp = app.Viewer.WorldToScreen(this._FirstPickPoint.clone());
this._SelectCss.SetStart(vp.x, vp.y);
this._SelectCss.Update();
}
});
}
UpdateView()
{
this.m_Viewer.OutlinePass.selectedObjects = this.m_SelectSet.SelectObjectList;
this.m_Viewer.UpdateRender();
this._Viewer.OutlinePass.selectedObjects = this._SelectSet.SelectObjectList;
this._Viewer.UpdateRender();
if (this.m_Viewer.OutlinePass.selectedObjects.length > 0)
if (this._Viewer.OutlinePass.selectedObjects.length > 0)
{
let obj = this.m_Viewer.OutlinePass.selectedObjects[0];
let obj = this._Viewer.OutlinePass.selectedObjects[0];
let ocs: Matrix4;
let ent = GetEntity(obj);
@ -89,37 +110,16 @@ export class SelectControls implements EditorService
else
ocs = obj.matrixWorld.clone();
this.m_Editor.transCtrl.m_Ents = this.SelectSet.SelectEntityList;
this.m_Editor.transCtrl.Matrix = ocs;
this.m_Editor.transCtrl.Mode = TransMode.Move;
this.m_Editor.transCtrl.Enable = true;
this._Editor.transCtrl.m_Ents = this.SelectSet.SelectEntityList;
this._Editor.transCtrl.Matrix = ocs;
this._Editor.transCtrl.Mode = TransMode.Move;
this._Editor.transCtrl.Enable = true;
}
else
{
this.m_Editor.transCtrl.Enable = false;
this._Editor.transCtrl.Enable = false;
}
}
removeSnapCall;
removeSnap()
{
if (this.removeSnapCall)
this.removeSnapCall();
}
onMouseDown(e: MouseEvent)
{
if ((this.m_Editor.InputState & InputState.SelectIng) && e.button === MouseKey.Right)
{
this.RestState();
return true;
}
//左键 并且准备好时.
if (e.button !== MouseKey.Left || !this.IsReady)
return false;
this.LeftClick();
return true;
}
/**
* .
@ -127,34 +127,34 @@ export class SelectControls implements EditorService
*/
LeftClick(checkPick = true)
{
let pt = this.m_Editor.MouseCtrl.m_CurMousePointVCS;
let pt = this._Editor.MouseCtrl.m_CurMousePointVCS;
let isRemove = app.Editor.KeyCtrl.KeyIsDown(KeyCode.ShiftLeft);
//如果还没选择 那么
if ((this.m_Editor.InputState & InputState.SelectIng) === InputState.None)
if ((this._Editor.InputState & InputState.SelectIng) === InputState.None)
{
if (checkPick)
{
let selectObj = PointPick(pt, this.m_Viewer);
let selectObj = PointPick(pt, this._Viewer);
if (selectObj.length > 0)
{
let selectData = new SelectPick(this.m_Viewer, pt.clone());
let selectData = new SelectPick(this._Viewer, pt.clone());
selectData.m_SelectList.push(selectObj[0]);
if (isRemove)
this.m_SelectSet.RemoveSelect(selectData);
this.RemoveSelect(selectData);
else
this.m_SelectSet.AddSelect(selectData);
this.AddSelect(selectData);
this.UpdateView();
return;
}
}
this.m_FirstPickPoint = app.Editor.MouseCtrl.m_CurMousePointWCS.clone();
this._FirstPickPoint = app.Editor.MouseCtrl.m_CurMousePointWCS.clone();
this.m_Editor.InputState = InputState.SelectIng;
this._Editor.InputState = InputState.SelectIng;
app.Viewer.PreViewer.Cursor.Mode = CursorMode.GetPoint;
this.m_SelectCss.SetStart(pt.x, pt.y);
this.m_SelectCss.SetEnd(pt.x, pt.y);
this.m_SelectCss.Show();
this._SelectCss.SetStart(pt.x, pt.y);
this._SelectCss.SetEnd(pt.x, pt.y);
this._SelectCss.Show();
}
else
{
@ -162,9 +162,9 @@ export class SelectControls implements EditorService
if (selectBox.m_SelectList.length > 0)
{
if (isRemove)
this.m_SelectSet.RemoveSelect(selectBox);
this.RemoveSelect(selectBox);
else
this.m_SelectSet.AddSelect(selectBox);
this.AddSelect(selectBox);
this.UpdateView();
}
this.RestState();
@ -175,52 +175,71 @@ export class SelectControls implements EditorService
SelectByCss()
{
let selectBox = new SelectBox(this.m_Viewer, this.m_SelectCss.start, this.m_SelectCss.end);
if (this.m_SelectType !== SelectType.None)
selectBox.m_SelectType = this.m_SelectType;
let selectBox = new SelectBox(this._Viewer, this._SelectCss.start, this._SelectCss.end);
if (this._SelectType !== SelectType.None)
selectBox.m_SelectType = this._SelectType;
else
selectBox.m_SelectType = this.m_SelectCss.end.x > this.m_SelectCss.start.x ? SelectType.W : SelectType.C;
selectBox.Select(undefined, this.m_Filter);
selectBox.m_SelectType = this._SelectCss.end.x > this._SelectCss.start.x ? SelectType.W : SelectType.C;
selectBox.Select(undefined, this.Filter);
return selectBox;
}
onMouseMove()
OnMouseMove()
{
if (this.m_Editor.InputState === InputState.SelectIng)
if (this._Editor.InputState === InputState.SelectIng)
{
let pt = this.m_Editor.MouseCtrl.m_CurMousePointVCS;
this.m_SelectCss.SetEnd(pt.x, pt.y)
let pt = this._Editor.MouseCtrl.m_CurMousePointVCS;
this._SelectCss.SetEnd(pt.x, pt.y);
}
}
onKeyDown(e: KeyboardEvent)
OnKeyDown(e: KeyboardEvent)
{
if (e.keyCode == KeyBoard.Escape)
{
this.Cancel();
}
}
RestState()
{
this.m_FirstPickPoint = undefined;
this.m_SelectCss.Hide();
this._FirstPickPoint = undefined;
this._SelectCss.Hide();
app.Viewer.PreViewer.Cursor.Mode = CursorMode.None;
this.m_Editor.InputState &= ~InputState.SelectIng;
this._Editor.InputState &= ~InputState.SelectIng;
}
Cancel()
{
this.RestState();
this.m_SelectSet = new SelectSet(true);
this._SelectSet = new SelectSet(true);
this.UpdateView();
this.CanenEvent();
}
AddSelect(selectData: SelectSetBase)
{
this._SelectSet.AddSelect(selectData);
this.UpdateSelectEvent();
}
RemoveSelect(selectData: SelectSetBase)
{
this._SelectSet.RemoveSelect(selectData);
this.UpdateSelectEvent();
}
UpdateSelectEvent()
{
}
EndSelectEvent()
{
}
CanenEvent()
{

@ -1,9 +1,10 @@
import { Object3D } from 'three';
import { arrayRemoveOnce } from '../Common/ArrayExt';
import { GetEntity, IsEntity, log } from '../Common/Utils';
import { Entity } from '../DatabaseServices/Entity/Entity';
import { GroupRecord } from '../DatabaseServices/GroupTableRecord';
import { SelectSetBase } from './SelectBase';
import { CheckFilter, Filter } from './SelectFilter';
import { GroupRecord } from '../DatabaseServices/GroupTableRecord';
//选择集.
export class SelectSet
@ -64,6 +65,7 @@ export class SelectSet
}
}
RemoveSelect(selectData: SelectSetBase)
{
log(`取消选择${selectData.m_SelectList.length}个.`);
@ -87,9 +89,9 @@ export class SelectSet
{
return this.m_SelectSetList;
}
get SelectObjectList(): Array<THREE.Object3D>
get SelectObjectList(): Array<Object3D>
{
let arr: Array<THREE.Object3D> = [];
let arr: Array<Object3D> = [];
for (let set of this.SelectSetList)
arr.push(...set.m_SelectList);
return arr;

@ -26,28 +26,20 @@ export class LookOverBoardInfosModal extends React.Component<{ store?: LookOverB
//查看选中板件
checkOutChosenBr = () =>
{
this.clearSelect();
app.Editor.SelectCtrl.Cancel();
let selectData = new SelectSetBase(app.Viewer);
selectData.m_SelectList.push(this.props.store.selectedBr.DrawObject);
app.Editor.SelectCtrl.SelectSet.AddSelect(selectData);
app.Editor.SelectCtrl.AddSelect(selectData);
app.Editor.SelectCtrl.UpdateView();
}
//查看同类型板件
checkOutSameTypeBr = () =>
{
this.clearSelect();
app.Editor.SelectCtrl.Cancel();
let selectData = new SelectSetBase(app.Viewer);
let brs = this.filterBr();
selectData.m_SelectList.push(...brs.map((b) => { return b.DrawObject }))
app.Editor.SelectCtrl.SelectSet.AddSelect(selectData);
app.Editor.SelectCtrl.UpdateView();
}
//清楚当前选中
clearSelect = () =>
{
app.Editor.SelectCtrl.SelectSet.Clear();
app.Viewer.GripScene.Clear();
app.Editor.SelectCtrl.AddSelect(selectData);
app.Editor.SelectCtrl.UpdateView();
}
//筛选同类型板件

@ -1,17 +1,17 @@
import * as THREE from 'three';
import { Viewer } from '../../GraphicsSystem/Viewer';
import { SelectType } from '../../Editor/SelectBox';
import { ZINDEX } from '../../Common/ZIndex';
import { Vector2 } from "three";
import { ZINDEX } from "../../Common/ZIndex";
import { SelectType } from "../../Editor/SelectBox";
import { Viewer } from "../../GraphicsSystem/Viewer";
//矩形选框
export class SelectMarquee
{
rightColor = "rgba(0, 100, 255, 0.2)"
leftColor = "rgba(39, 255, 0, 0.2)"
rightBorder = "1px dashed rgb(154, 154, 154)"
leftBorder = "1px solid rgb(154, 154, 154)"
start: THREE.Vector2 = new THREE.Vector2;
end: THREE.Vector2 = new THREE.Vector2;
rightColor = "rgba(0, 100, 255, 0.2)";
leftColor = "rgba(39, 255, 0, 0.2)";
rightBorder = "1px dashed rgb(154, 154, 154)";
leftBorder = "1px solid rgb(154, 154, 154)";
start: Vector2 = new Vector2();
end: Vector2 = new Vector2();
dom: HTMLElement;
width: number;
height: number;
@ -26,37 +26,38 @@ export class SelectMarquee
this.viewer.Renderer.domElement.parentElement.appendChild(this.dom);
let st = this.dom.style;
st.position = "absolute"
st.position = "absolute";
st.zIndex = ZINDEX.SelectMarquee;
st.background = "rgba(0, 63, 255, 0.2)";
st.margin = "0"
st.pointerEvents = "none"
st.top = "460px"
st.left = "100px"
st.width = "100px"
st.height = "200px"
st.display = "none"
st.border = this.leftBorder
st.margin = "0";
st.pointerEvents = "none";
st.top = "460px";
st.left = "100px";
st.width = "100px";
st.height = "200px";
st.display = "none";
st.border = this.leftBorder;
}
Show()
{
this.dom.style.display = "block"
this.dom.style.display = "block";
}
Hide()
{
this.dom.style.display = "none"
this.dom.style.display = "none";
}
Update()
{
this.dom.style.top = Math.min(this.start.y, this.end.y) + "px"
this.dom.style.left = Math.min(this.start.x, this.end.x) + "px"
this.dom.style.top = Math.min(this.start.y, this.end.y) + "px";
this.dom.style.left = Math.min(this.start.x, this.end.x) + "px";
this.width = Math.abs(this.start.x - this.end.x)
this.height = Math.abs(this.start.y - this.end.y)
this.dom.style.width = this.width + "px"
this.dom.style.height = this.height + "px"
this.width = Math.abs(this.start.x - this.end.x);
this.height = Math.abs(this.start.y - this.end.y);
this.dom.style.width = this.width + "px";
this.dom.style.height = this.height + "px";
let type = this.selectType;
if (this.selectType === SelectType.None)
@ -76,16 +77,18 @@ export class SelectMarquee
{
this.dom.style.background = this.rightColor;
this.dom.style.border = this.rightBorder;
}
}
SetStart(x: number, y: number)
{
this.start.set(x, y)
this.start.set(x, y);
}
SetEnd(x: number, y: number)
{
this.end.set(x, y)
this.Update()
this.end.set(x, y);
this.Update();
}
}

@ -1,7 +1,10 @@
import { TabId } from "@blueprintjs/core";
import { observable, toJS } from "mobx";
import { begin } from "xaop";
import { app } from "../../../ApplicationServices/Application";
import { Modify } from "../../../Common/TypeOperator";
import { IModeling, Board } from "../../../DatabaseServices/Entity/Board";
import { Board, IModeling } from "../../../DatabaseServices/Entity/Board";
import { SelectSetBase } from "../../../Editor/SelectBase";
import { IConfigOption } from "../../Components/Board/UserConfig";
import { IModelingItem } from "../../Components/RightPanel/ModelingComponent";
import { RightTabId } from "../../Components/RightPanel/RightPanel";
@ -10,10 +13,6 @@ import { IConfigStore } from "../BoardStore";
import { DrillingStore } from "./DrillingStore";
import { LightStore } from "./LightStore";
import { SealingStore } from "./SealingStore";
import { end, begin } from "xaop";
import { app } from "../../../ApplicationServices/Application";
import { SelectSetBase } from "../../../Editor/SelectBase";
import { Entity } from "../../../DatabaseServices/Entity/Entity";
type IUIModeiling = Modify<IModelingItem, {
color: string;
@ -37,20 +36,11 @@ export class RightPanelStore implements IConfigStore
this.InitModelingItems();
let selectCtrl = app.Editor.SelectCtrl;
let register = () =>
{
begin(selectCtrl.SelectSet, selectCtrl.SelectSet.AddSelect, (ss: SelectSetBase) =>
{
let br = ss.SelectEntityList[0];
if (br && br instanceof Board)
this.currentBoard = br;
});
};
register();
end(selectCtrl, selectCtrl.Cancel, () =>
begin(selectCtrl.SelectSet, selectCtrl.SelectSet.AddSelect, (ss: SelectSetBase) =>
{
register();
let br = ss.SelectEntityList[0];
if (br && br instanceof Board)
this.currentBoard = br;
});
}

Loading…
Cancel
Save