From 18894834ab12d36f2d0b66b64e0c1c7d5d3e9203 Mon Sep 17 00:00:00 2001 From: ChenX Date: Wed, 2 Aug 2023 16:14:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E6=A1=86=E9=80=89=E6=97=B6,?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E9=80=89=E6=8B=A9=E6=A1=86=E7=9A=84=E9=95=BF?= =?UTF-8?q?=E6=88=96=E5=AE=BD=E7=AD=89=E4=BA=8E0,=E9=82=A3=E4=B9=88?= =?UTF-8?q?=E9=80=80=E5=8C=96=E6=88=90=E7=BA=BF=E9=80=89=E6=8B=A9,?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=80=89=E6=8B=A9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Editor/SelectControls.ts | 11 +++++++++++ src/Editor/SelectLine.ts | 20 ++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Editor/SelectControls.ts b/src/Editor/SelectControls.ts index 08c7be4b2..f118ef776 100644 --- a/src/Editor/SelectControls.ts +++ b/src/Editor/SelectControls.ts @@ -15,6 +15,7 @@ import { PointPickOneObject } from './PointPick'; import { SelectSetBase } from './SelectBase'; import { SelectBox, SelectType } from './SelectBox'; import { Filter } from './SelectFilter'; +import { SelectLine } from './SelectLine'; import { SelectPick } from './SelectPick'; import { SelectSet } from './SelectSet'; @@ -185,7 +186,17 @@ export class SelectControls implements EditorService SelectByCss() { + let isLineSelect = this._SelectCss.start.x === this._SelectCss.end.x || this._SelectCss.start.y === this._SelectCss.end.y; + let iViewer: IViewer = this._Viewer.GetIViewer([this._SelectCss.start, this._SelectCss.end]); + + if (isLineSelect) + { + let selectLine = new SelectLine(iViewer, this._SelectCss.start, this._SelectCss.end); + selectLine.Select(undefined, this.Filter); + return selectLine; + } + let selectBox = new SelectBox(iViewer, this._SelectCss.start, this._SelectCss.end); if (this._SelectType !== SelectType.None) selectBox._SelectType = this._SelectType; diff --git a/src/Editor/SelectLine.ts b/src/Editor/SelectLine.ts index 7bf737529..3e836340e 100644 --- a/src/Editor/SelectLine.ts +++ b/src/Editor/SelectLine.ts @@ -1,20 +1,16 @@ -import { Frustum, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three'; -import { PreViewer } from '../GraphicsSystem/PreViewer'; -import { Viewer } from '../GraphicsSystem/Viewer'; -import { SelectSetBase } from './SelectBase'; +import { Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three'; import { doIntersect } from "../Geometry/DoIntersect"; +import { IViewer } from '../GraphicsSystem/IView'; +import { SelectSetBase } from './SelectBase'; export class SelectLine extends SelectSetBase { - private m_StartPt: Vector2; - private m_EndPt: Vector2; - _Frustum: Frustum = new Frustum(); - - constructor(view: Viewer | PreViewer, startP: Vector2, endP: Vector2) + constructor(view: IViewer, + private _StartPt: Vector2, + private _EndPt: Vector2, + ) { super(view); - this.m_StartPt = startP; - this.m_EndPt = endP; this._bIsPerCamera = view.Camera instanceof PerspectiveCamera; let camera = this._Viewer.Camera; @@ -29,7 +25,7 @@ export class SelectLine extends SelectSetBase IntersectLine(p1: Vector3, p2: Vector3): boolean { - return doIntersect(p1, p2, this.m_StartPt, this.m_EndPt); + return doIntersect(p1, p2, this._StartPt, this._EndPt); } CheckSelect(obj: Object3D): boolean