|
|
@ -7,7 +7,7 @@ import { MouseKey } from '../Common/KeyEnum';
|
|
|
|
import { GetEntity } from '../Common/Utils';
|
|
|
|
import { GetEntity } from '../Common/Utils';
|
|
|
|
import { Entity } from '../DatabaseServices/Entity';
|
|
|
|
import { Entity } from '../DatabaseServices/Entity';
|
|
|
|
import { Line } from '../DatabaseServices/Line';
|
|
|
|
import { Line } from '../DatabaseServices/Line';
|
|
|
|
import { SnapPoint } from '../Geometry/GeUtils';
|
|
|
|
import { isParallelTo, isPerpendicularityTo, SnapPoint } from '../Geometry/GeUtils';
|
|
|
|
import { DrawMode } from '../GraphicsSystem/PreViewer';
|
|
|
|
import { DrawMode } from '../GraphicsSystem/PreViewer';
|
|
|
|
import { commandMachine } from './CommandMachine';
|
|
|
|
import { commandMachine } from './CommandMachine';
|
|
|
|
import { Editor, EditorService } from './Editor';
|
|
|
|
import { Editor, EditorService } from './Editor';
|
|
|
@ -54,6 +54,9 @@ export class GripDragServices implements EditorService
|
|
|
|
app.m_Editor.Prompt("拽拖开始:");
|
|
|
|
app.m_Editor.Prompt("拽拖开始:");
|
|
|
|
commandMachine.CommandStart("drag");
|
|
|
|
commandMachine.CommandStart("drag");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let oldEnable = app.m_Editor.transCtrl.Enable;
|
|
|
|
|
|
|
|
app.m_Editor.transCtrl.Enable = false;
|
|
|
|
|
|
|
|
|
|
|
|
let oldSelect = app.m_Viewer.m_OutlinePass.selectedObjects;
|
|
|
|
let oldSelect = app.m_Viewer.m_OutlinePass.selectedObjects;
|
|
|
|
app.m_Viewer.m_OutlinePass.selectedObjects = [];
|
|
|
|
app.m_Viewer.m_OutlinePass.selectedObjects = [];
|
|
|
|
app.m_Viewer.Render();
|
|
|
|
app.m_Viewer.Render();
|
|
|
@ -93,6 +96,16 @@ export class GripDragServices implements EditorService
|
|
|
|
for (let data of snapIndexMap)
|
|
|
|
for (let data of snapIndexMap)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let entDrawP = data.ent.GetGripPoints()[data.indexArr[0]];
|
|
|
|
let entDrawP = data.ent.GetGripPoints()[data.indexArr[0]];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let viewDir = app.m_Viewer.m_CameraCtrl.Direction;
|
|
|
|
|
|
|
|
let z = new Vector3();
|
|
|
|
|
|
|
|
if (isParallelTo(viewDir, z.setFromMatrixColumn(app.m_Editor.UCSMatrix, 2)))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
entDrawP.applyMatrix4(app.m_Editor.UCSMatrixInv)
|
|
|
|
|
|
|
|
.setZ(0)
|
|
|
|
|
|
|
|
.applyMatrix4(app.m_Editor.UCSMatrix);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let vec = p.clone().sub(entDrawP);
|
|
|
|
let vec = p.clone().sub(entDrawP);
|
|
|
|
data.ent.MoveGripPoints(data.indexArr, vec);
|
|
|
|
data.ent.MoveGripPoints(data.indexArr, vec);
|
|
|
|
data.ent.DeferUpdate();
|
|
|
|
data.ent.DeferUpdate();
|
|
|
@ -111,20 +124,38 @@ export class GripDragServices implements EditorService
|
|
|
|
baseP = snapIndexMap[0].ent.StartPoint;
|
|
|
|
baseP = snapIndexMap[0].ent.StartPoint;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//修改UCS
|
|
|
|
let oldUcs = app.m_Editor.UCSMatrix;
|
|
|
|
let oldUcs = app.m_Editor.UCSMatrix;
|
|
|
|
if (snapIndexMap[0] && !(snapIndexMap[0].ent instanceof Line))
|
|
|
|
if (snapIndexMap[0] && !(snapIndexMap[0].ent instanceof Line))
|
|
|
|
app.m_Editor.UCSMatrix = snapIndexMap[0].ent.OCS;
|
|
|
|
{
|
|
|
|
|
|
|
|
let ocs = snapIndexMap[0].ent.OCS;
|
|
|
|
|
|
|
|
let viewDir = app.m_Viewer.m_CameraCtrl.Direction;
|
|
|
|
|
|
|
|
let z = new Vector3();
|
|
|
|
|
|
|
|
//如果对象坐标系和视图坐标系垂直,则修正坐标系
|
|
|
|
|
|
|
|
if (isPerpendicularityTo(z.setFromMatrixColumn(ocs, 2),
|
|
|
|
|
|
|
|
viewDir))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let xv = z;
|
|
|
|
|
|
|
|
let yv = viewDir.clone().cross(xv);
|
|
|
|
|
|
|
|
let p = new Vector3().setFromMatrixPosition(ocs);
|
|
|
|
|
|
|
|
ocs.makeBasis(xv, yv, viewDir).setPosition(p);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
app.m_Editor.UCSMatrix = ocs;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let ptRes = await app.m_Editor.GetPoint({
|
|
|
|
let ptRes = await app.m_Editor.GetPoint({
|
|
|
|
Msg: "指定下一个点:",
|
|
|
|
Msg: "指定下一个点:",
|
|
|
|
BasePoint: baseP,
|
|
|
|
BasePoint: baseP,
|
|
|
|
AllowDrawRubberBand: true,
|
|
|
|
AllowDrawRubberBand: true,
|
|
|
|
Callback: (p) => { DragTo(p, snapIndexMapClone, true) }
|
|
|
|
Callback: (p) => { DragTo(p, snapIndexMapClone, true) }
|
|
|
|
});
|
|
|
|
});
|
|
|
|
app.m_Editor.UCSMatrix = oldUcs;
|
|
|
|
|
|
|
|
if (ptRes.Status === PromptStatus.OK)
|
|
|
|
if (ptRes.Status === PromptStatus.OK)
|
|
|
|
DragTo(ptRes.Point, snapIndexMap);
|
|
|
|
DragTo(ptRes.Point, snapIndexMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.m_Editor.UCSMatrix = oldUcs;
|
|
|
|
app.m_Viewer.m_OutlinePass.selectedObjects = oldSelect;
|
|
|
|
app.m_Viewer.m_OutlinePass.selectedObjects = oldSelect;
|
|
|
|
|
|
|
|
app.m_Editor.transCtrl.Enable = oldEnable;
|
|
|
|
this.UpdateSnapPoint();
|
|
|
|
this.UpdateSnapPoint();
|
|
|
|
this.UpdateSnapDraw();
|
|
|
|
this.UpdateSnapDraw();
|
|
|
|
|
|
|
|
|
|
|
|