Merge remote-tracking branch 'remotes/origin/master' into command_line_compont

pull/7/head
zoe 7 years ago
parent 3a36348d60
commit 1a0ec38a21

@ -0,0 +1,11 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`相交测试 1`] = `
Vector3 {
"x": 0.5,
"y": 0,
"z": 0,
}
`;
exports[`相交测试 2`] = `undefined`;

@ -0,0 +1,32 @@
import * as THREE from 'three';
import { Intersect } from '../../src/Geometry/GeUtils';
test('相交测试', () =>
{
let p1 = new THREE.Vector3(0, 0, 0);
let p2 = new THREE.Vector3(1, 0, 0);
let p3 = new THREE.Vector3(0.5, 0.5, 0);
let p4 = new THREE.Vector3(0.5, 1, 0);
let p5 = new THREE.Vector3(3, 0, 0);
let p6 = new THREE.Vector3(6, 0, 0);
let res = Intersect(p1, p2, p3, p4);/*?*/
expect(res).toMatchSnapshot();
res = Intersect(p1, p2, p5, p6);/*?*/
expect(res).toMatchSnapshot();
let ins = Intersect(
new THREE.Vector3(0, 5),
new THREE.Vector3(5, 5),
new THREE.Vector3(0.5, 1),
new THREE.Vector3(0.5, 8));
expect(ins).toMatchSnapshot();
}
)

@ -1,6 +1,15 @@
import * as THREE from 'three';
test('should behave...', () =>
{
let p1 = new THREE.Vector3(0, 0, 0);
let p2 = new THREE.Vector3(1, 0, 0);
let p3 = new THREE.Vector3(0.5, 0.5, 0);
let p4 = new THREE.Vector3(0.5, 1, 0);
});

@ -5,7 +5,7 @@ import { app } from '../ApplicationServices/Application';
import { CreateBoardUtil } from '../ApplicationServices/mesh/createBoard';
import { MaterialNeedUpdateKey } from '../DatabaseServices/MaterialDictionary';
import { Command } from '../Editor/CommandMachine';
import { GeUtils } from '../Geometry/GeUtils';
import { Move } from '../Geometry/GeUtils';
export class Command_DrawBoard implements Command
{
@ -37,7 +37,7 @@ export class Command_DrawBoard implements Command
// let scale = new THREE.Matrix4();
// scale.scale(new THREE.Vector3(0.001, 0.001, 0.001));
let move = GeUtils.Move(new THREE.Vector3(-1, 2.5, 0));
let move = Move(new THREE.Vector3(-1, 2.5, 0));
// let mat = move.multiply(scale);
@ -55,7 +55,7 @@ export class Command_DrawBoard implements Command
br.receiveShadow = true;
app.m_Viewer.m_Scene.add(board);
let move2 = GeUtils.Move(new THREE.Vector3(i * 1, 0, 0));
let move2 = Move(new THREE.Vector3(i * 1, 0, 0));
br.applyMatrix(move2);
}
}

@ -1,10 +1,10 @@
import * as path from 'path';
import * as THREE from 'three';
import { Scene } from 'three';
import { app } from '../ApplicationServices/Application';
import { Solid3d } from '../DatabaseServices/Entity';
import { Command } from '../Editor/CommandMachine';
import { GeUtils } from '../Geometry/GeUtils';
import { Move } from '../Geometry/GeUtils';
import { RenderType } from '../GraphicsSystem/Enum';
export class DrawFloor implements Command
@ -202,7 +202,7 @@ export class DrawFloor implements Command
let objRight = obj.clone();
obj.applyMatrix(GeUtils.Move(new THREE.Vector3(-2.1, 4, 0)));
obj.applyMatrix(Move(new THREE.Vector3(-2.1, 4, 0)));
let roMatLeft = new THREE.Matrix4();
roMatLeft.makeRotationZ(Math.PI / 2);
@ -212,8 +212,8 @@ export class DrawFloor implements Command
roMatRight.makeRotationZ(Math.PI / 2);
objRight.applyMatrix(roMatRight);
objLeft.applyMatrix(GeUtils.Move(new THREE.Vector3(-2, 0, 0)))
objRight.applyMatrix(GeUtils.Move(new THREE.Vector3(2, 0, 0)))
objLeft.applyMatrix(Move(new THREE.Vector3(-2, 0, 0)))
objRight.applyMatrix(Move(new THREE.Vector3(2, 0, 0)))
this.scene.add(obj);
@ -232,7 +232,7 @@ export class DrawFloor implements Command
let skyObj = skyWall.Draw(RenderType.Wireframe) as THREE.Mesh;
skyObj.material = skyMaterail;
skyObj.applyMatrix(GeUtils.Move(new THREE.Vector3(-2.12, 0, 2.8)));
skyObj.applyMatrix(Move(new THREE.Vector3(-2.12, 0, 2.8)));
this.scene.add(skyObj);
}

@ -1,12 +1,9 @@
import { Command } from '../Editor/CommandMachine';
import { app } from '../ApplicationServices/Application';
import * as THREE from 'three';
import { app } from '../ApplicationServices/Application';
import { Circle, Line, Solid3d } from '../DatabaseServices/Entity';
import * as _ from 'lodash';
import { UndoData } from '../DatabaseServices/UndoData';
import { PromptResult, PromptStatus } from '../Editor/PromptResult';
import * as ReactDOM from 'react-dom';
import { GeUtils } from "../Geometry/GeUtils";
import { Command } from '../Editor/CommandMachine';
import { PromptStatus } from '../Editor/PromptResult';
import { RenderType } from '../GraphicsSystem/Enum';
export class DrawLine implements Command
@ -128,10 +125,10 @@ export class DrawRect implements Command
app.m_Database.appendEntity(l3);
app.m_Database.appendEntity(l4);
app.m_Editor.noSnapList.add(l1.Draw(RenderType.Wireframe));
app.m_Editor.noSnapList.add(l2.Draw(RenderType.Wireframe));
app.m_Editor.noSnapList.add(l3.Draw(RenderType.Wireframe));
app.m_Editor.noSnapList.add(l4.Draw(RenderType.Wireframe));
app.m_Editor.AddNoSnapEntity(l1.Draw(RenderType.Wireframe));
app.m_Editor.AddNoSnapEntity(l2.Draw(RenderType.Wireframe));
app.m_Editor.AddNoSnapEntity(l3.Draw(RenderType.Wireframe));
app.m_Editor.AddNoSnapEntity(l4.Draw(RenderType.Wireframe));
let updateRect = (p1, p2) =>
@ -185,6 +182,9 @@ export class DrawCircle implements Command
return;
}
app.m_Database.appendEntity(cir);
app.m_Editor.AddNoSnapEntity(cir.Draw(RenderType.Wireframe));
ptRes = await app.m_Editor.GetPoint(
{
BasePoint: ptRes.Value,

@ -1,13 +1,14 @@
import { Command } from '../Editor/CommandMachine';
import * as THREE from 'three';
import { app } from '../ApplicationServices/Application';
import { Command } from '../Editor/CommandMachine';
import { PromptStatus } from '../Editor/PromptResult';
import * as THREE from 'three';
export class Command_Move implements Command
{
async exec()
{
app.m_Editor.m_SelectCtrl.cancel();
app.m_Editor.m_SelectCtrl.Cancel();
if (app.m_Viewer.m_OutlinePass.selectedObjects.length === 0)
{
app.m_Editor.m_CommandStore.Prompt("未选择对象:");
@ -21,7 +22,7 @@ export class Command_Move implements Command
for (let obj of app.m_Viewer.m_OutlinePass.selectedObjects)
{
app.m_Editor.noSnapList.add(obj);
app.m_Editor.AddNoSnapEntity(obj);
}
let pt1 = ptRes.Value;
@ -41,7 +42,8 @@ export class Command_Move implements Command
pt1 = p.clone();
},
BasePoint: pt1
BasePoint: pt1,
AllowDrawRubberBand: true
});
if (ptRes.Status != PromptStatus.OK) return;

@ -49,7 +49,8 @@ export class Command_Rotate implements Command
an = newan;
},
BasePoint: pt1
BasePoint: pt1,
AllowDrawRubberBand: true
});
if (ptRes.Status != PromptStatus.OK) return;

@ -1,3 +1,4 @@
import { Callback } from 'awesome-typescript-loader/dist/paths-plugin';
import * as THREE from 'three';
import { app } from '../ApplicationServices/Application';
@ -6,8 +7,7 @@ import { PromptStatus } from '../Editor/PromptResult';
import { SelectBox } from '../Editor/SelectBox';
import { SelectPick } from '../Editor/SelectPick';
import { SelectSet, SelectType } from '../Editor/SelectSet';
import { GeUtils } from '../Geometry/GeUtils';
import { Move } from '../Geometry/GeUtils';
export class Stretch implements Command
{
@ -115,7 +115,7 @@ export class Stretch implements Command
}
s(d: { str: Map<THREE.Object3D, Array<number>>, move: Array<THREE.Object3D> }, vec: THREE.Vector3)
{
let moveMat = GeUtils.Move(vec);
let moveMat = Move(vec);
for (let obj of d.move)
{
obj.applyMatrix(moveMat);
@ -152,7 +152,7 @@ export class Stretch implements Command
}
stretch(ss: SelectSet, vec: THREE.Vector3)
{
let moveMat = GeUtils.Move(vec);
let moveMat = Move(vec);
for (let set of ss.SelectSetList)
{

@ -73,7 +73,7 @@ export class ApplicationService
this.m_Viewer.m_bNeedUpdate = true;
})
}
xaop.end(this.m_Editor.m_SelectCtrl, this.m_Editor.m_SelectCtrl.cancel, () =>
xaop.end(this.m_Editor.m_SelectCtrl, this.m_Editor.m_SelectCtrl.Cancel, () =>
{
regGripEvent();
this.m_Viewer.m_GripScene.Clear();

@ -3,16 +3,12 @@ import * as mst from 'mobx-state-tree';
import * as THREE from 'three';
import { Vector3 } from 'three';
import { GeUtils } from '../Geometry/GeUtils';
import { Move } from '../Geometry/GeUtils';
import { OBB } from '../Geometry/OBB/obb';
import { RenderType } from '../GraphicsSystem/Enum';
import { Database } from './Database';
import { EntityData, IEntityData, ILineData, iSnapshotEntityData, LineData } from './EntityData';
var baseColor = 0x333333;
var foundColor = 0x12C0E3;
var intersectColor = 0x00D66B;
export class Entity
{
/**
@ -247,6 +243,7 @@ export class Circle extends Curve
this.m_Radius = r;
this.m_DrawEntity.forEach(obj =>
{
(<THREE.Line>obj).geometry.dispose();
let curve = new THREE.EllipseCurve(
this.m_Center.x, this.m_Center.y, // ax, aY
this.m_Radius, this.m_Radius, // xRadius, yRadius
@ -254,7 +251,7 @@ export class Circle extends Curve
false, // aClockwise
0 // aRotation
);
let geometry = new THREE.Geometry().setFromPoints(curve.getPoints(8));
let geometry = new THREE.Geometry().setFromPoints(curve.getPoints(60));
(<THREE.Line>obj).geometry = geometry;
})
}
@ -272,7 +269,7 @@ export class Circle extends Curve
false, // aClockwise
0 // aRotation
);
let geometry = new THREE.Geometry().setFromPoints(curve.getPoints(8));
let geometry = new THREE.Geometry().setFromPoints(curve.getPoints(60));
var material = new THREE.LineBasicMaterial({ color: 0xff0000 });
var ellipse = new THREE.Line(geometry, material);
this.m_DrawEntity.set(renderType, ellipse);
@ -301,7 +298,7 @@ export class Solid3d extends Entity
let geometry = new THREE.BoxGeometry(this.Size.x, this.Size.y, this.Size.z);
let mesh = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial);
mesh.applyMatrix(GeUtils.Move(this.Size.clone().multiplyScalar(0.5)));
mesh.applyMatrix(Move(this.Size.clone().multiplyScalar(0.5)));
this.m_DrawEntity.set(renderType, mesh);
return mesh;
}

@ -13,6 +13,7 @@ export class CommandMachine
private m_CommandNameList = new Set<string>();
async ExecCommand(cmdName: string)
{
app.m_Editor.m_SelectCtrl.EndSelect();
if (this.m_CommandList.has(cmdName))
{
let ss = app.m_Editor.m_SelectCtrl.SelectSet;

@ -1,18 +1,16 @@
//用户交互编辑工具
import * as THREE from 'three';
import { Vector3 } from 'three';
import * as THREE from 'three';
import * as xaop from 'xaop';
import { app, ApplicationService } from '../ApplicationServices/Application';
import { GetPointPrompt, InputState } from '../Common/InputState';
import { MouseKey } from '../Common/KeyEnum';
import { Entity, Line } from '../DatabaseServices/Entity';
import { GeUtils } from '../Geometry/GeUtils';
import { RenderType } from '../GraphicsSystem/Enum';
import { Entity } from '../DatabaseServices/Entity';
import { CommandStore } from '../UI/Store/CommandStore';
import { GetPointServices } from './GetPointServices';
import { KeyBoardControls } from './KeyBoardControls';
import { MouseControls } from './MouseControls';
import { PromptPointResult, PromptStatus } from './PromptResult';
import { PromptPointResult } from './PromptResult';
import { SelectControls } from './SelectControls';
//TODO: 增加鼠标状态. 鼠标位置.
@ -24,7 +22,8 @@ export class Editor
m_App: ApplicationService;
m_InputState: InputState = InputState.None;
m_CommandStore: CommandStore;
private m_SelectList: Array<Entity> = [];
private m_GetpointServices: GetPointServices;
constructor(app: ApplicationService)
{
@ -33,6 +32,7 @@ export class Editor
this.m_KeyCtrl = new KeyBoardControls();
this.m_SelectCtrl = new SelectControls(app.m_Viewer, this)
this.m_CommandStore = new CommandStore(this);
this.m_GetpointServices = new GetPointServices();
xaop.end(this.m_MouseCtrl, this.m_MouseCtrl.onMouseMove, () =>
{
@ -41,233 +41,15 @@ export class Editor
}
GetPoint(prompt?: GetPointPrompt): Promise<PromptPointResult>
{
prompt = prompt ? prompt : {};
this.m_App.m_Viewer.m_PreViewer.ToGetpoint();
this.m_InputState = InputState.GetPoint;
let retValue = new PromptPointResult();
let removeCalls = []; //删除回调列表
removeCalls.push(this.Snap());
return new Promise<PromptPointResult>((resolve, reject) =>
{
//如果有基点,那么绘制直线
if (prompt.BasePoint && prompt.AllowDrawRubberBand)
{
let preView = this.m_App.m_Viewer.m_PreViewer;
let startP = prompt.BasePoint.clone();
this.m_App.m_Viewer.WorldToScreen(startP);
preView.ScreenPointToViewerPoint(startP);
let line = preView.DrawLine(startP, startP, preView.m_DashMaterial);
let geo = line.geometry as THREE.Geometry;
geo.computeLineDistances();
preView.Scene.add(line);
removeCalls.push(
() =>
{
preView.Scene.remove(line);
},
xaop.end(this.m_MouseCtrl, this.m_MouseCtrl.onMouseMove, () =>
{
let endP = this.GetNowPoint(prompt.BasePoint);
this.m_App.m_Viewer.WorldToScreen(endP);
preView.ScreenPointToViewerPoint(endP);
geo.vertices[1] = endP;
geo.computeLineDistances();
geo.lineDistancesNeedUpdate = true;
geo.verticesNeedUpdate = true;
preView.render();
this.UpdateScreen();
})
);
}
//调用回调
if (prompt.Callback)
{
removeCalls.push(
xaop.end(this.m_MouseCtrl, this.m_MouseCtrl.onMouseMove, () =>
{
let p = this.GetNowPoint(prompt.BasePoint);
prompt.Callback(p);
this.UpdateScreen();
})
);
}
//鼠标按下
removeCalls.push(
xaop.end(this.m_MouseCtrl, this.m_MouseCtrl.onMouseDown, (e: MouseEvent) =>
{
if (e.button == MouseKey.Left)
{
retValue.Status = PromptStatus.OK;
retValue.Value = this.GetNowPoint(prompt.BasePoint);
_return();
}
})
);
//键盘按下
removeCalls.push(
xaop.begin(this.m_KeyCtrl, this.m_KeyCtrl.OnKeyDown, (e: KeyboardEvent) =>
{
if (e.keyCode == 27)
{
retValue.Status = PromptStatus.Cancel;
_return();
}
else if (e.keyCode == 32)
{
retValue.Status = PromptStatus.None;
_return();
}
})
);
//返回
let _return = () =>
{
this.m_InputState = InputState.None;
this.noSnapList.clear();
//清理所有的注入函数.
for (let destroyFunc of removeCalls)
{
destroyFunc();
}
this.m_App.m_Viewer.m_PreViewer.ToSelect();
resolve(retValue);
this.UpdateScreen();
}
});
}
/**
*
* , ,
*
* @private
* @param {THREE.Vector3} [basePoint]
* @returns {THREE.Vector3}
* @memberof Editor
*/
private GetNowPoint(basePoint?: THREE.Vector3): THREE.Vector3
{
if (this.m_App.m_Viewer.m_PreViewer.m_LastSnapPoint)
{
let retP = app.m_Viewer.m_PreViewer.ptWcs;
app.m_Viewer.ScreenToWorld(retP);
return retP;
}
if (basePoint)
{
let newP = this.AxisSnap(basePoint);
if (newP)
{
return newP;
}
}
return this.m_MouseCtrl.m_CurMousePointWCS.clone();
return this.m_GetpointServices.Doit(prompt);
}
noSnapList = new Set<THREE.Object3D>();
/**
* .
*
* @returns
* @memberof Editor
*/
Snap()
AddNoSnapEntity(e)
{
let testSnap = () =>
{
for (let obj of app.m_Viewer.m_Scene.children)
{
if (this.noSnapList.has(obj))
{
continue;
}
let geo = obj["geometry"];
let g: THREE.Geometry
if (geo instanceof THREE.Geometry)
{
g = geo;
}
else if (geo instanceof THREE.BufferGeometry)
{
g = new THREE.Geometry().fromBufferGeometry(geo);
}
if (g)
{
for (let i = 0; i < g.vertices.length; i++)
{
let ptC = g.vertices[i].clone();
ptC.applyMatrix4(obj.matrix);
app.m_Viewer.WorldToScreen(ptC);
if (ptC.distanceToSquared(this.m_MouseCtrl.m_CurMousePointVCS) < 100)
{
app.m_Viewer.m_PreViewer.m_LastSnapPoint = ptC;
app.m_Viewer.m_PreViewer.m_LastEntity = obj;
app.m_Viewer.m_PreViewer.m_LastIndex = i;
app.m_Viewer.m_PreViewer.SerCursorPostion(ptC);
app.m_Viewer.m_PreViewer.render();
return;
}
}
}
}
}
testSnap();
return xaop.end(this.m_MouseCtrl, this.m_MouseCtrl.onMouseMove, testSnap);
this.m_GetpointServices.noSnapList.add(e);
}
/**
*
*
* @param {any} basePoint
* @returns {THREE.Vector3}
* @memberof Editor
*/
AxisSnap(basePoint): THREE.Vector3
RemoveNoSnapEntity(e)
{
let wcs = this.m_MouseCtrl.m_CurMousePointWCS.clone();
//相差向量
let subVec = wcs.clone().sub(basePoint);
let an = Math.atan2(subVec.y, subVec.x);
if (an < 0) an += Math.PI * 2;
let newan = GeUtils.fixAngle(an, Math.PI * 0.25);
if (!GeUtils.equaln(newan, an, 0.001))
{
//dis.
let v0 = new THREE.Vector3(0, 0, 0);
GeUtils.angle(v0, newan, 1);
let dis = v0.dot(wcs.sub(basePoint));
let retP = basePoint.clone();
GeUtils.angle(retP, newan, dis);
return retP;
}
return undefined;
this.m_GetpointServices.noSnapList.delete(e);
}
PointToScreen(pt: THREE.Vector3): THREE.Vector2
@ -285,66 +67,6 @@ export class Editor
}
SelectWindow(p1: THREE.Vector3, p2: THREE.Vector3): Array<Entity>
{
// let sel = new SelectBox();
// let camera = this.m_App.m_Viewer.m_Camera.m_CurCamera;
// camera.updateMatrixWorld(false);
// sel.m_ViewNormal = this.m_App.m_Viewer.m_Direction;//理论上这个...
// sel.m_ViewMat = camera.matrix;//缓存视图矩阵
// p1.applyMatrix4(camera.matrixWorldInverse);
// p2.applyMatrix4(camera.matrixWorldInverse);
// sel.setRectSelect(p1, p2);
//test .
// let p3 = new THREE.Vector3(p1.x, p2.y);
// let p4 = new THREE.Vector3(p2.x, p1.y);
// p1.applyMatrix4(camera.matrix);
// p2.applyMatrix4(camera.matrix);
// p3.applyMatrix4(camera.matrix);
// p4.applyMatrix4(camera.matrix);
// let l1 = new Line(p1, p3);
// let l2 = new Line(p3, p2);
// let l3 = new Line(p4, p2);
// let l4 = new Line(p4, p1);
// this.m_App.m_Database.appendEntity(l1);
// this.m_App.m_Database.appendEntity(l2);
// this.m_App.m_Database.appendEntity(l3);
// this.m_App.m_Database.appendEntity(l4);
// this.RemoveAllSelect()
// let cs = new CoordinateSystem()
// cs.copyForm(app.m_Viewer.m_Camera.m_CurCamera.matrix)
// cs.m_Postion.copy(p1)
// cs.m_Postion.sub(app.m_Viewer.m_Direction.clone().multiplyScalar(1e8));
// let sc = app.m_Viewer.m_ViewHeight / app.m_Viewer.m_HtmlElement.scrollHeight;
// let obb = new OBB(cs, new THREE.Vector3(this.m_SelectCss.width * sc, this.m_SelectCss.height * sc, 1e10))
// db.m_EntityCollection.forEach(o =>
// {
// let obb2 = o.getOBB()
// var xx = obb.intersectsOBB(obb2)
// if (xx.intersects)
// {
// o.setIsSelct(true)
// this.m_SelectList.push(o)
// }
// })
// this.UpdateScreen()
return [];
}
SelectAll(): Array<Entity>
@ -354,26 +76,6 @@ export class Editor
RemoveSelect(ent: Entity)
{
}
RemoveAllSelect()
{
this.m_SelectList.forEach(o =>
{
o.setIsSelct(false)
})
this.m_SelectList = []
}
SetCurSelect(entArr: Array<Entity>)
{
this.m_SelectList.forEach(o =>
{
this.RemoveSelect(o)
});
this.m_SelectList = []
entArr.forEach(o =>
{
this.m_SelectList.push(o);
})
}
UpdateScreen()
{
this.m_App.m_Viewer.m_bNeedUpdate = true;

@ -0,0 +1,397 @@
import * as THREE from 'three';
import * as xaop from 'xaop';
import { app } from '../ApplicationServices/Application';
import { GetPointPrompt, InputState } from '../Common/InputState';
import { MouseKey } from '../Common/KeyEnum';
import { Line } from '../DatabaseServices/Entity';
import { angle, equaln, fixAngle, Intersect } from '../Geometry/GeUtils';
import { PromptPointResult, PromptStatus } from './PromptResult';
/**
* ,Editor.
*
* @export
* @class GetPointServices
*/
export class GetPointServices
{
Doit(prompt?: GetPointPrompt): Promise<PromptPointResult>
{
app.m_Editor.m_InputState = InputState.GetPoint;
prompt = prompt ? prompt : {};
app.m_Viewer.m_PreViewer.ToGetpoint();
let retValue = new PromptPointResult();
let removeCalls = []; //删除回调列表
removeCalls.push(this.Snap());
removeCalls.push(() => { this.DestroySnapLine() });
return new Promise<PromptPointResult>((resolve, reject) =>
{
//如果有基点,那么绘制直线
if (prompt.BasePoint && prompt.AllowDrawRubberBand)
{
this.m_SnapPtList = [prompt.BasePoint];
if (prompt.AllowDrawRubberBand)
{
let preView = app.m_Viewer.m_PreViewer;
let startP = prompt.BasePoint.clone();
app.m_Viewer.WorldToScreen(startP);
preView.ScreenPointToViewerPoint(startP);
let line = preView.DrawLine(startP, startP, preView.m_DashMaterial);
let geo = line.geometry as THREE.Geometry;
geo.computeLineDistances();
preView.Scene.add(line);
removeCalls.push(
() =>
{
preView.Scene.remove(line);
},
xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, () =>
{
let endP = this.GetNowPoint();
app.m_Viewer.WorldToScreen(endP);
preView.ScreenPointToViewerPoint(endP);
geo.vertices[1] = endP;
geo.computeLineDistances();
geo.lineDistancesNeedUpdate = true;
geo.verticesNeedUpdate = true;
preView.render();
app.m_Editor.UpdateScreen();
})
);
}
}
//调用回调
if (prompt.Callback)
{
removeCalls.push(
xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, () =>
{
let p = this.GetNowPoint();
prompt.Callback(p);
app.m_Editor.UpdateScreen();
})
);
}
//鼠标按下
removeCalls.push(
xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseDown, (e: MouseEvent) =>
{
if (e.button == MouseKey.Left)
{
retValue.Status = PromptStatus.OK;
retValue.Value = this.GetNowPoint();
_return();
}
})
);
//键盘按下
removeCalls.push(
xaop.begin(app.m_Editor.m_KeyCtrl, app.m_Editor.m_KeyCtrl.OnKeyDown, (e: KeyboardEvent) =>
{
if (e.keyCode == 27)
{
retValue.Status = PromptStatus.Cancel;
_return();
}
else if (e.keyCode == 32)
{
retValue.Status = PromptStatus.None;
_return();
}
})
);
//返回
let _return = () =>
{
app.m_Editor.m_InputState = InputState.None;
this.noSnapList.clear();
//清理所有的注入函数.
for (let destroyFunc of removeCalls)
{
destroyFunc();
}
app.m_Viewer.m_PreViewer.ToSelect();
resolve(retValue);
app.m_Editor.UpdateScreen();
}
});
}
//极轴捕捉的线列表
m_SnapAxisBlueLine: THREE.Line[] = [];
private DestroySnapLine()
{
for (let l of this.m_SnapAxisBlueLine)
{
app.m_Viewer.m_PreViewer.Scene.remove(l);
l.geometry.dispose();
}
this.m_SnapAxisBlueLine = [];
}
/**
*
* , ,
*
* @private
* @returns {THREE.Vector3}
* @memberof Editor
*/
private GetNowPoint(): THREE.Vector3
{
//清理原先画的辅助线
this.DestroySnapLine();
let preView = app.m_Viewer.m_PreViewer;
//绘制捕捉光标列表
for (let snapP of this.m_SnapPtList)
{
let lines = preView.DrawCross(5, preView.m_BlueDashMaterial);
let p = snapP.clone();
app.m_Viewer.WorldToScreen(p);
preView.ScreenPointToViewerPoint(p);
let move = new THREE.Matrix4();
move.setPosition(p);
for (let l of lines)
{
l.applyMatrix(move);
this.m_SnapAxisBlueLine.push(l);
preView.Scene.add(l);
}
}
//如果存在捕捉
if (app.m_Viewer.m_PreViewer.m_LastSnapPoint)
{
let retP = app.m_Viewer.m_PreViewer.ptWcs;
app.m_Viewer.ScreenToWorld(retP);
return retP;
}
//捕捉轴线列表
let snapAxisList: { basePt: THREE.Vector3, snapPt: THREE.Vector3 }[] = [];
for (let i = 0; i < this.m_SnapPtList.length; i++)
{
let baseP = this.m_SnapPtList[i];
let snapPt = this.AxisSnap(baseP, Math.PI * 0.5);
if (snapPt)
{
snapAxisList.push({ basePt: baseP, snapPt: snapPt });
}
}
let wcs = app.m_Editor.m_MouseCtrl.m_CurMousePointWCS;
if (snapAxisList.length > 0)
{
//轴线交点列表
let axisIntersectList: {
ins: THREE.Vector3,
i1: { basePt: THREE.Vector3, snapPt: THREE.Vector3 },
i2: { basePt: THREE.Vector3, snapPt: THREE.Vector3 }
}[] = [];
//检测交点
for (let i = 0; i < snapAxisList.length; i++)
{
let d1 = snapAxisList[i];
for (let j = i + 1; j < snapAxisList.length; j++)
{
let d2 = snapAxisList[j];
let insP = Intersect(d1.basePt, d1.snapPt, d2.basePt, d2.snapPt);
if (insP)
{
axisIntersectList.push({ ins: insP, i1: d1, i2: d2 })
}
}
}
if (axisIntersectList.length > 0)
{
axisIntersectList.sort((d1, d2) =>
{
let dis1 = d1.ins.distanceTo(wcs);
let dis2 = d2.ins.distanceTo(wcs);
if (dis1 == dis2)
return 0;
else
return dis1 < dis2 ? -1 : 1
});
let insD = axisIntersectList[0];
if (insD.ins.distanceToSquared(wcs) < 100)
{
this.DrawLine(insD.i1.basePt, insD.ins, preView.m_BlueDashMaterial);
this.DrawLine(insD.i2.basePt, insD.ins, preView.m_BlueDashMaterial);
return insD.ins.clone();
}
}
else
{
snapAxisList.sort((d1, d2) =>
{
return d1.snapPt.distanceTo(wcs) < d2.snapPt.distanceTo(wcs) ? -1 : 1
})
this.DrawLine(snapAxisList[0].basePt, snapAxisList[0].snapPt, preView.m_BlueDashMaterial);
return snapAxisList[0].snapPt;
}
}
return wcs.clone();
}
/**
* preView 线
*
* @param {THREE.Vector3} p1
* @param {THREE.Vector3} p2
* @param {(THREE.LineBasicMaterial | THREE.LineDashedMaterial)} [material]
* @memberof GetPointServices
*/
DrawLine(p1: THREE.Vector3, p2: THREE.Vector3, material?: THREE.LineBasicMaterial | THREE.LineDashedMaterial)
{
let preView = app.m_Viewer.m_PreViewer;
if (p1.distanceToSquared(this.m_SnapPtList[0]) > 0.001)
{
let l = preView.DrawLineFromWcs(p1.clone(), p2.clone(), material);
this.m_SnapAxisBlueLine.push(l);
preView.Scene.add(l);
}
}
noSnapList = new Set<THREE.Object3D>();
m_SnapPtList: THREE.Vector3[] = [];
/**
* .
*
* @returns
* @memberof Editor
*/
Snap()
{
this.m_SnapPtList.length = 0;
let testSnap = () =>
{
for (let obj of app.m_Viewer.m_Scene.children)
{
if (this.noSnapList.has(obj))
{
continue;
}
let geo = obj["geometry"];
let g: THREE.Geometry
if (geo instanceof THREE.Geometry)
{
g = geo;
}
else if (geo instanceof THREE.BufferGeometry)
{
g = new THREE.Geometry().fromBufferGeometry(geo);
}
if (g)
{
for (let i = 0; i < g.vertices.length; i++)
{
let ptC = g.vertices[i].clone();
ptC.applyMatrix4(obj.matrix);
let ptWcs = ptC.clone();
app.m_Viewer.WorldToScreen(ptC);
if (ptC.distanceToSquared(app.m_Editor.m_MouseCtrl.m_CurMousePointVCS) < 100)
{
app.m_Viewer.m_PreViewer.m_LastSnapPoint = ptC;
app.m_Viewer.m_PreViewer.m_LastEntity = obj;
app.m_Viewer.m_PreViewer.m_LastIndex = i;
app.m_Viewer.m_PreViewer.SerCursorPostion(ptC);
app.m_Viewer.m_PreViewer.render();
for (let p of this.m_SnapPtList)
{
if (p.distanceToSquared(ptWcs) < 0.01)
{
return;
}
}
this.m_SnapPtList.push(ptWcs);
if (this.m_SnapPtList.length > 7)
{
this.m_SnapPtList.shift();
}
return;
}
}
}
}
}
testSnap();
return xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, testSnap);
}
/**
*
*
* @param {any} basePoint
* @returns {THREE.Vector3}
* @memberof Editor
*/
AxisSnap(basePoint, fixAn: number): THREE.Vector3
{
let wcs = app.m_Editor.m_MouseCtrl.m_CurMousePointWCS.clone();
//相差向量
let subVec = wcs.clone().sub(basePoint);
let an = Math.atan2(subVec.y, subVec.x);
if (an < 0) an += Math.PI * 2;
let newan = fixAngle(an, fixAn);
if (!equaln(newan, an, 0.001))
{
//dis.
let v0 = new THREE.Vector3(0, 0, 0);
angle(v0, newan, 1);
let dis = v0.dot(wcs.sub(basePoint));
let retP = basePoint.clone();
angle(retP, newan, dis);
return retP;
}
return undefined;
}
}

@ -6,11 +6,11 @@ import { KeyBoard, MouseKey } from '../Common/KeyEnum';
import { GripScene } from '../GraphicsSystem/GripScene';
import { Viewer } from '../GraphicsSystem/Viewer';
import { SelectMarquee } from '../UI/JsPlugin/SelectMarquee';
import { commandMachine } from './CommandMachine';
import { Editor } from './Editor';
import { SelectBox } from './SelectBox';
import { SelectPick } from './SelectPick';
import { SelectSet, SelectType } from './SelectSet';
import { commandMachine } from './CommandMachine';
export class SelectControls
{
@ -135,7 +135,7 @@ export class SelectControls
let en = app.m_Viewer.m_PreViewer.m_LastEntity as THREE.Mesh;
app.m_Editor.noSnapList.add(en);
app.m_Editor.AddNoSnapEntity(en);
let geo = en.geometry as THREE.Geometry;
let movePoint = geo.vertices[app.m_Viewer.m_PreViewer.m_LastIndex];
@ -159,7 +159,7 @@ export class SelectControls
}
})
app.m_Editor.noSnapList.delete(en);
app.m_Editor.RemoveNoSnapEntity(en);
app.m_Viewer.m_GripScene.Update(en);
@ -242,19 +242,19 @@ export class SelectControls
{
if (e.keyCode == KeyBoard.Escape)
{
this.cancel();
this.Cancel();
}
}
cancel()
EndSelect()
{
app.m_Viewer.m_PreViewer.ToSelect();
this.m_SelectSet = new SelectSet();
this.m_SelectCss.Hide();
app.m_Viewer.m_PreViewer.ToSelect();
this.m_SelectIng = false;
app.m_Viewer.m_PreViewer.ShowCursor();
this.removeSnap();
}
Cancel()
{
this.EndSelect();
this.m_SelectSet = new SelectSet();
}
}

@ -1,13 +1,8 @@
import { Vector3, Matrix4 } from 'three';
import { Entity } from '../DatabaseServices/Entity';
import { Matrix4, Vector3 } from 'three';
import * as THREE from 'three';
import { PlaneExt } from '../Geometry/Plane';
import { GeUtils } from '../Geometry/GeUtils';
import { Box2, Frustum, Geometry, OrthographicCamera } from 'three';
import * as verb from "verb-nurbs-web"
import { Viewer } from '../GraphicsSystem/Viewer';
import { ArrayRemove } from '../Common/Utils';
import { Viewer } from '../GraphicsSystem/Viewer';
//

@ -1,149 +1,176 @@
import { Vector3, Matrix4 } from 'three';
import * as THREE from 'three';
export namespace GeUtils
{
export const cZeroVec = new THREE.Vector3();
export const cXAxis = new THREE.Vector3(1, 0, 0);
export const cYAxis = new THREE.Vector3(0, 1, 0);
export const cZAxis = new THREE.Vector3(0, 0, 1);
export const cZeroVec = new THREE.Vector3();
export const cXAxis = new THREE.Vector3(1, 0, 0);
export const cYAxis = new THREE.Vector3(0, 1, 0);
export const cZAxis = new THREE.Vector3(0, 0, 1);
export function equaln(v1: number, v2: number, fuzz = 1e-3)
export function equaln(v1: number, v2: number, fuzz = 1e-3)
{
return Math.abs(v1 - v2) < fuzz;
}
export function equal(v1: THREE.Vector3, v2: THREE.Vector3)
{
return v1.manhattanDistanceTo(v2) < 1e-8;
}
export function fixAngle(an: number, fixAngle: number, fuzz: number = 0.1)
{
if (an < 0)
an += Math.PI * 2;
an += fuzz;
let rem = an % fixAngle;
if (rem < fuzz * 2)
{
return Math.abs(v1 - v2) < fuzz;
an -= rem;
}
export function equal(v1: THREE.Vector3, v2: THREE.Vector3)
else
{
return v1.manhattanDistanceTo(v2) < 1e-8;
an -= fuzz;
}
return an;
}
export function angle(v: THREE.Vector3, an: number, dis: number)
{
v.x += Math.cos(an) * dis;
v.y += Math.sin(an) * dis;
}
export function fixAngle(an: number, fixAngle: number, fuzz: number = 0.1)
export function getLoocAtUpVec(dir: THREE.Vector3): THREE.Vector3
{
if (dir.equals(cZeroVec))
{
if (an < 0)
an += Math.PI * 2;
an += fuzz;
let rem = an % fixAngle;
if (rem < fuzz * 2)
{
an -= rem;
}
else
{
an -= fuzz;
}
return an;
throw ("zero vector")
}
export function angle(v: THREE.Vector3, an: number, dis: number)
let norm = dir.clone().normalize();
if (norm.equals(cZAxis))
{
v.x += Math.cos(an) * dis;
v.y += Math.sin(an) * dis;
return new THREE.Vector3(0, 1, 0);
}
export function getLoocAtUpVec(dir: THREE.Vector3): THREE.Vector3
else if (norm.equals(cZAxis.clone().multiplyScalar(-1)))
{
if (dir.equals(cZeroVec))
{
throw ("zero vector")
}
let norm = dir.clone().normalize();
if (norm.equals(cZAxis))
{
return new THREE.Vector3(0, 1, 0);
}
else if (norm.equals(cZAxis.clone().multiplyScalar(-1)))
{
return new THREE.Vector3(0, -1, 0);
}
else
{
let xv: THREE.Vector3 = new THREE.Vector3();
xv.crossVectors(cZAxis, norm);
return new THREE.Vector3(0, -1, 0);
}
else
{
let xv: THREE.Vector3 = new THREE.Vector3();
xv.crossVectors(cZAxis, norm);
let up = new THREE.Vector3();
up.crossVectors(norm, xv);
return up;
}
let up = new THREE.Vector3();
up.crossVectors(norm, xv);
return up;
}
}
export function createLookAtMat4(dir: THREE.Vector3): THREE.Matrix4
{
let up = getLoocAtUpVec(dir);
let mat = new THREE.Matrix4();
mat.lookAt(cZeroVec, dir, up);
return mat;
}
export function createLookAtMat4(dir: THREE.Vector3): THREE.Matrix4
export function isParallelTo(v1: THREE.Vector3, v2: THREE.Vector3)
{
return v1.clone().cross(v2).lengthSq() < 1e-9;
}
export function ptToString(v: THREE.Vector3, fractionDigits: number = 3): string
{
return v.toArray().map(o =>
{
let up = getLoocAtUpVec(dir);
let mat = new THREE.Matrix4();
mat.lookAt(cZeroVec, dir, up);
return mat;
}
return o.toFixed(fractionDigits)
}).join(",")
}
export function midPoint(v1: THREE.Vector3, v2: THREE.Vector3): THREE.Vector3
{
return v1.clone().add(v2).multiplyScalar(0.5);
}
export function isParallelTo(v1: THREE.Vector3, v2: THREE.Vector3)
export function GetBox(obj: THREE.Object3D, updateMatrix?: boolean): THREE.Box3
{
if (updateMatrix) obj.updateMatrixWorld(false);
if (obj.hasOwnProperty("geometry"))
{
return v1.clone().cross(v2).lengthSq() < 1e-9;
let geo = obj["geometry"];
if (geo instanceof THREE.Geometry || geo instanceof THREE.BufferGeometry)
{
if (!geo.boundingBox)
geo.computeBoundingBox();
return geo.boundingBox.clone().applyMatrix4(obj.matrixWorld);
}
}
export function ptToString(v: THREE.Vector3, fractionDigits: number = 3): string
else if (obj.children.length > 0)
{
return v.toArray().map(o =>
let box = obj.children.reduce((sumBox, itemObj) =>
{
return o.toFixed(fractionDigits)
}).join(",")
let itemBox = GetBox(itemObj);
if (itemBox)
sumBox.union(itemBox);
return sumBox;
}, new THREE.Box3())
if (box) box.applyMatrix4(obj.matrixWorld);
return box;
}
else
return null;
}
export function midPoint(v1: THREE.Vector3, v2: THREE.Vector3): THREE.Vector3
export function GetBoxArr(arr: Array<THREE.Object3D>): THREE.Box3
{
if (arr.length == 0)
{
return v1.clone().add(v2).multiplyScalar(0.5);
return null;
}
return arr.map(o =>
{
return GetBox(o);
}).filter(o =>
{
return o;
}).reduce((sumBox: THREE.Box3, objBox: THREE.Box3) =>
{
return sumBox.union(objBox)
}, new THREE.Box3());
}
export function Move(v: THREE.Vector3): THREE.Matrix4
{
let mat = new THREE.Matrix4();
mat.makeTranslation(v.x, v.y, v.z);
return mat;
}
export function Intersect(p1: THREE.Vector3, p2: THREE.Vector3, p3: THREE.Vector3, p4: THREE.Vector3): THREE.Vector3
{
let dx1 = p1.x - p2.x;
let dx2 = p3.x - p4.x;
let dx3 = p4.x - p2.x;
let dy1 = p1.y - p2.y;
let dy2 = p3.y - p4.y;
let dy3 = p4.y - p2.y;
export function GetBox(obj: THREE.Object3D, updateMatrix?: boolean): THREE.Box3
let det = (dx2 * dy1) - (dy2 * dx1);
let pt = new THREE.Vector3(0, 0, 0);
if (equaln(det, 0.0, 1e-5))
{
if (updateMatrix) obj.updateMatrixWorld(false);
if (obj.hasOwnProperty("geometry"))
if (equaln(dx2 * dy3, dy2 * dx3, 1e-5))
{
let geo = obj["geometry"];
if (geo instanceof THREE.Geometry || geo instanceof THREE.BufferGeometry)
if (p3.distanceTo(p2) < 1e-3)
{
if (!geo.boundingBox)
geo.computeBoundingBox();
return geo.boundingBox.clone().applyMatrix4(obj.matrixWorld);
return p2;
}
}
else if (obj.children.length > 0)
{
let box = obj.children.reduce((sumBox, itemObj) =>
{
let itemBox = GetBox(itemObj);
if (itemBox)
sumBox.union(itemBox);
return sumBox;
}, new THREE.Box3())
if (box) box.applyMatrix4(obj.matrixWorld);
return box;
}
else
return null;
return;
}
export function GetBoxArr(arr: Array<THREE.Object3D>): THREE.Box3
{
if (arr.length == 0)
{
return null;
}
return arr.map(o =>
{
return GetBox(o);
}).filter(o =>
{
return o;
}).reduce((sumBox: THREE.Box3, objBox: THREE.Box3) =>
{
return sumBox.union(objBox)
}, new THREE.Box3());
}
let ratio = ((dx1 * dy3) - (dy1 * dx3)) / det;
pt.x = (ratio * dx2) + p4.x;
pt.y = (ratio * dy2) + p4.y;
export function Move(v: THREE.Vector3): THREE.Matrix4
{
let mat = new THREE.Matrix4();
mat.makeTranslation(v.x, v.y, v.z);
return mat;
}
return pt;
}

@ -1,5 +1,6 @@
import * as THREE from 'three';
import { app } from '../ApplicationServices/Application';
import { CameraControl } from './CameraControl';
export class PreViewer
@ -13,11 +14,19 @@ export class PreViewer
//线材质
private m_LineMaterial: THREE.LineBasicMaterial = new THREE.LineBasicMaterial({ color: 0xffffff });
private m_SnapMaterial: THREE.LineBasicMaterial = new THREE.LineBasicMaterial({ color: 0x008B00 });
//点划线 黄色
m_DashMaterial = new THREE.LineDashedMaterial({
color: 0x008B00,
dashSize: 30,
gapSize: 15,
color: 0xF0B41E,
dashSize: 20,
gapSize: 8,
});
//点划线 绿色 极轴捕捉
m_BlueDashMaterial = new THREE.LineDashedMaterial({
color: 0x008B00,
dashSize: 5,
gapSize: 5
})
//光标对象
private m_CursorObject: THREE.Group;
@ -160,8 +169,32 @@ export class PreViewer
material = material ? material : this.m_LineMaterial;
let geometry = new THREE.Geometry();
geometry.vertices.push(p1, p2);
geometry.computeLineDistances();
return new THREE.Line(geometry, material);
}
//绘制×光标
DrawCross(size: number, material?: THREE.LineBasicMaterial | THREE.LineDashedMaterial): THREE.Line[]
{
return [
this.DrawLine(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, -size, 0), material),
this.DrawLine(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, size, 0), material),
this.DrawLine(new THREE.Vector3(0, 0, 0), new THREE.Vector3(size, 0, 0), material),
this.DrawLine(new THREE.Vector3(0, 0, 0), new THREE.Vector3(-size, 0, 0), material)
]
}
DrawLineFromWcs(p1: THREE.Vector3, p2: THREE.Vector3, material?: THREE.LineBasicMaterial | THREE.LineDashedMaterial): THREE.Line
{
material = material ? material : this.m_LineMaterial;
app.m_Viewer.WorldToScreen(p1);
this.ScreenPointToViewerPoint(p1);
app.m_Viewer.WorldToScreen(p2);
this.ScreenPointToViewerPoint(p2);
return this.DrawLine(p1, p2, material);
}
SerCursorPostion(pt: THREE.Vector3)
{
let p = this.m_CursorObject.position;
@ -212,15 +245,4 @@ export class PreViewer
this.m_Render.setSize(this.m_Width, this.m_Height);
}
HideCursor()
{
this.m_CursorObject.visible = false;
}
ShowCursor()
{
this.m_CursorObject.visible = true;
}
}

@ -1,9 +1,10 @@
import * as THREE from 'three';
import * as xaop from 'xaop';
import { db } from '../ApplicationServices/Application';
import { Database } from '../DatabaseServices/Database';
import { Entity } from '../DatabaseServices/Entity';
import { GeUtils } from '../Geometry/GeUtils';
import { cZeroVec, GetBox, GetBoxArr } from '../Geometry/GeUtils';
import { PlaneExt } from '../Geometry/Plane';
import { CameraControl } from './CameraControl';
import { RenderType } from './Enum';
@ -193,11 +194,11 @@ export class Viewer
UpdateLockTarget()
{
let renderList = this.m_Render.renderLists.get(this.m_Scene, this.m_Camera.Camera);
let box = GeUtils.GetBoxArr(renderList.opaque.map(o => o.object));
let box = GetBoxArr(renderList.opaque.map(o => o.object));
if (box)
this.m_LookTarget = box.getCenter();
else
this.m_LookTarget = GeUtils.cZeroVec;
this.m_LookTarget = cZeroVec;
}
Rotate(mouseMove: THREE.Vector3)
{
@ -216,7 +217,7 @@ export class Viewer
}
ZoomAll()
{
this.m_Camera.ZoomExtensBox3(GeUtils.GetBox(this.m_Scene, true));
this.m_Camera.ZoomExtensBox3(GetBox(this.m_Scene, true));
this.m_bNeedUpdate = true;
}

@ -1,13 +1,10 @@
import { InputHint } from './commandLineInput/InputHint';
import { inject, observer } from 'mobx-react';
import * as React from 'react';
import { observer, inject, Provider } from 'mobx-react';
import { CommandStore } from '../Store/CommandStore';
import { autorun } from 'mobx';
import * as ReactDOM from 'react-dom';
import { CSSProperties } from 'react';
import DevTools from 'mobx-react-devtools';
import { CommandLineContainer } from "./CommandLineContainer";
import { CommandLineInput } from './CommandLineInput';
import { CommandStore } from '../Store/CommandStore';
import { CommandLineContainer } from './CommandLineContainer';
import { InputHint } from './commandLineInput/InputHint';
@inject("commandStore") @observer
export class CommandComponent extends React.Component<{ commandStore?: CommandStore }, null>

@ -10,18 +10,22 @@ export class CommandLineContainer extends React.Component<{ commandStore?: Comma
//输出信息列表的容器
m_OutputContainer: HTMLElement;
m_CommandListContainer: HTMLElement;
componentDidUpdate()
{
this.m_OutputContainer.scrollTop = this.m_OutputContainer.offsetHeight;
this.m_OutputContainer.scrollTop = this.m_CommandListContainer.offsetHeight;
}
render()
{
const store = this.props.commandStore;
return (
<div className='terminal-output-area scroll'>
<div
className='terminal-output-area scroll'
ref={el => { this.m_OutputContainer = el }}
>
<div className='terminal-pusher'></div>
<div className='terminal-output'
ref={el => { this.m_OutputContainer = el }}
ref={el => { this.m_CommandListContainer = el }}
>
{this.props.commandStore.promptList.map(cmd => <CommandLine key={cmd.key} msg={cmd} />)}
</div>

@ -133,7 +133,7 @@ export class CommandStore
this.commandPrompt = '';
if (!commandMachine.m_CommandIng)
{
app.m_Editor.m_SelectCtrl.cancel();
app.m_Editor.m_SelectCtrl.Cancel();
app.m_Editor.m_SelectCtrl.UpdateView();
}
default:

@ -1,15 +1,14 @@
import { Line, Solid3d } from './DatabaseServices/Entity';
import { WebCADView } from './WebCADView/WebCADView';
import './UI/Css/style.less';
import * as THREE from 'three';
import { RenderType } from './GraphicsSystem/Enum';
import { app } from './ApplicationServices/Application';
import { GetColorIndex } from './Common/ColorPalette';
import { Viewer } from './GraphicsSystem/Viewer';
import { GeUtils } from './Geometry/GeUtils';
import { guiMaterial, guiMeshBasicMaterial, guiScene } from './Common/Material';
import { Solid3d } from './DatabaseServices/Entity';
import { CameraControlState } from './Editor/CameraControls';
import { DatGUI } from './Editor/DebugDatUi';
import { guiMeshBasicMaterial, guiScene, guiMaterial } from './Common/Material';
import { RenderType } from './GraphicsSystem/Enum';
import { WebCADView } from './WebCADView/WebCADView';
function createRootElement()
{
let root = document.createElement('div');

Loading…
Cancel
Save