重构清理代码. (动态输入)

pull/2/head
ChenX 7 years ago
parent 377f6c0549
commit 9d21568c45

@ -52,6 +52,7 @@ export enum KeyBoard
*
*/
Comma = 188,
CommaChrome = 229,
/**
*
*/
@ -110,6 +111,7 @@ export enum KeyBoard
ContextMenu = 93,
Enter = 13,
Space = 32,
Backspace = 8,
Tab = 9,
Delete = 46,
End = 35,

@ -4,7 +4,7 @@ import * as xaop from 'xaop';
import { app } from '../ApplicationServices/Application';
import { GetPointPrompt, InputState } from '../Common/InputState';
import { MouseKey, KeyBoard } from '../Common/KeyEnum';
import { angle, equaln, fixAngle, Intersect } from '../Geometry/GeUtils';
import { polar, equaln, fixAngle, Intersect } from '../Geometry/GeUtils';
import { PromptPointResult, PromptStatus } from './PromptResult';
import { GetPointPromptBlock } from '../UI/DynamicPrompt/GetPointPromptBlock';
import { DynamicInputManage } from '../UI/DynamicPrompt/DynamicInputManage';
@ -17,40 +17,34 @@ import { DynamicInputManage } from '../UI/DynamicPrompt/DynamicInputManage';
*/
export class GetPointServices
{
private promisResolve: (PromptPointResult) => void;//promis回调
private removeCalls: Function[] = []; //结束回调
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() });
this.initAppState();
this.initPtSnap();
return new Promise<PromptPointResult>((resolve, reject) =>
{
this.promisResolve = resolve;
//消息显示.
if (prompt.Msg)
{
app.m_Editor.m_CommandStore.commandPrompt = prompt.Msg;
removeCalls.push(() =>
this.removeCalls.push(() =>
{
app.m_Editor.m_CommandStore.commandPrompt = "";
})
}
//动态输入框.
let dynPrompt = new GetPointPromptBlock(DynamicInputManage.GetManage());
removeCalls.push(() =>
this.removeCalls.push(() =>
{
dynPrompt.Destroy();
})
removeCalls.push(xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, () =>
this.removeCalls.push(xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, () =>
{
dynPrompt.SetPostion(app.m_Editor.m_MouseCtrl.m_CurMousePointVCS);
dynPrompt.Value = this.GetNowPoint();
@ -62,14 +56,14 @@ export class GetPointServices
app.m_Editor.m_CommandStore.keyWordList.length = 0;
app.m_Editor.m_CommandStore.keyWordList.push(...prompt.KeyWordList);
removeCalls.push(() =>
this.removeCalls.push(() =>
{
app.m_Editor.m_CommandStore.keyWordList.length = 0;
})
}
//处理用户输入
removeCalls.push(
this.removeCalls.push(
xaop.begin(app.m_Editor.m_CommandStore, app.m_Editor.m_CommandStore.HandleInput, (inputData: string) =>
{
inputData = inputData.toUpperCase();
@ -79,9 +73,7 @@ export class GetPointServices
{
if (keyword.key == inputData)
{
retValue.Status = PromptStatus.Keyword;
retValue.StringResult = inputData.toUpperCase();
_return();
this._return(inputData.toUpperCase());
return;
}
}
@ -105,13 +97,20 @@ export class GetPointServices
let p = new THREE.Vector3();
p.fromArray(vlist);
retValue.Status = PromptStatus.OK;
retValue.Value = p;
_return();
this._return(p);
}
}
})
)
//处理动态输入
let dynManage = DynamicInputManage.GetManage();
this.removeCalls.push(
xaop.end(dynManage, dynManage.HandleInputEvent, () =>
{
let p = dynPrompt.Value;
if (p) this._return(p);
})
)
//如果有基点,那么绘制直线
if (prompt.BasePoint && prompt.AllowDrawRubberBand)
@ -129,7 +128,7 @@ export class GetPointServices
let geo = line.geometry as THREE.Geometry;
preView.Scene.add(line);
removeCalls.push(
this.removeCalls.push(
() =>
{
preView.Scene.remove(line);
@ -156,10 +155,10 @@ export class GetPointServices
);
}
}
//调用回调
//鼠标移动
if (prompt.Callback)
{
removeCalls.push(
this.removeCalls.push(
xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, () =>
{
let p = this.GetNowPoint();
@ -169,48 +168,68 @@ export class GetPointServices
);
}
//鼠标按下
removeCalls.push(
this.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();
this._return(this.GetNowPoint());
}
})
);
//键盘按下
removeCalls.push(
this.removeCalls.push(
xaop.begin(app.m_Editor.m_KeyCtrl, app.m_Editor.m_KeyCtrl.OnKeyDown, (e: KeyboardEvent) =>
{
if (e.keyCode == KeyBoard.Escape)
{
retValue.Status = PromptStatus.Cancel;
_return();
}
this._return()
})
);
});
}
//返回
let _return = () =>
{
app.m_Editor.m_InputState = InputState.None;
this.noSnapList.clear();
//调用promis的回调.
private _return(v?: THREE.Vector3 | string)
{
this.restAppState();
//清理所有的注入函数.
for (let destroyFunc of removeCalls)
{
destroyFunc();
}
app.m_Viewer.m_PreViewer.ToSelect();
let retValue = new PromptPointResult();
if (!v)
{
retValue.Status = PromptStatus.Cancel;
}
else if (v instanceof THREE.Vector3)
{
retValue.Status = PromptStatus.OK;
retValue.Value = v;
}
else
{
retValue.Status = PromptStatus.Keyword;
retValue.StringResult = v;
}
this.promisResolve(retValue);
}
resolve(retValue);
app.m_Editor.UpdateScreen();
}
});
//初始化设置 程序的状态
private initAppState()
{
app.m_Editor.m_InputState = InputState.GetPoint;
app.m_Viewer.m_PreViewer.ToGetpoint();
}
//还原状态
private restAppState()
{
app.m_Editor.m_InputState = InputState.None;
app.m_Viewer.m_PreViewer.ToSelect();
app.m_Editor.UpdateScreen();
this.removeCalls.forEach(f => f());
this.removeCalls.length = 0;
this.noSnapList.clear();
}
//极轴捕捉的线列表
m_SnapAxisBlueLine: THREE.Line[] = [];
@ -222,7 +241,7 @@ export class GetPointServices
l.parent.remove(l);
l.geometry.dispose();
}
this.m_SnapAxisBlueLine = [];
this.m_SnapAxisBlueLine.length = 0;
}
/**
*
@ -400,7 +419,7 @@ export class GetPointServices
* @returns
* @memberof Editor
*/
Snap()
initPtSnap()
{
this.m_SnapPtList.length = 0;
let testSnap = () =>
@ -463,15 +482,21 @@ export class GetPointServices
}
}
testSnap();
return xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, testSnap);
let removeCall = xaop.end(app.m_Editor.m_MouseCtrl, app.m_Editor.m_MouseCtrl.onMouseMove, testSnap);
this.removeCalls.push(() =>
{
removeCall();
this.DestroySnapLine();
})
}
/**
*
*
*
* @param {any} basePoint
* @param {number} fixAn
* @returns {THREE.Vector3}
* @memberof Editor
* @memberof GetPointServices
*/
AxisSnap(basePoint, fixAn: number): THREE.Vector3
{
@ -488,12 +513,12 @@ export class GetPointServices
{
//dis.
let v0 = new THREE.Vector3(0, 0, 0);
angle(v0, newan, 1);
polar(v0, newan, 1);
let dis = v0.dot(wcs.sub(basePoint));
let retP = basePoint.clone();
angle(retP, newan, dis);
polar(retP, newan, dis);
return retP;
}

@ -31,7 +31,7 @@ export function fixAngle(an: number, fixAngle: number, fuzz: number = 0.1)
}
return an;
}
export function angle(v: THREE.Vector3, an: number, dis: number)
export function polar(v: THREE.Vector3, an: number, dis: number)
{
v.x += Math.cos(an) * dis;
v.y += Math.sin(an) * dis;

@ -1,5 +1,6 @@
import { KeyBoard } from "../../Common/KeyEnum";
import { IsChar, IsNumble } from "../../Common/Utils";
import { DynamicInputManage } from "./DynamicInputManage";
/**
@ -22,11 +23,25 @@ export class DynamicInput
{
if (IsChar(e.keyCode) || IsNumble(e.keyCode))
{
e.stopPropagation()
e.stopPropagation();
}
else
{
e.preventDefault();
switch (e.keyCode)
{
case KeyBoard.Enter:
DynamicInputManage.GetManage().HandleInputEvent("");
e.stopPropagation();
break;
case KeyBoard.CommaChrome://TODO:逗号时切换..失败.
e.preventDefault();
break;
case KeyBoard.Backspace:
break;
default://阻止其他的事件
e.preventDefault();
break;
}
}
};
container.appendChild(this.inputEl);

@ -80,13 +80,18 @@ export class DynamicInputManage
case KeyBoard.Enter:
case KeyBoard.Space:
let enableInputValue = this.inputCollection[this.focusIndex].Value;
this.HandleInput(enableInputValue);
this.HandleInputEvent(enableInputValue);
break;
default:
break;
}
}
public HandleInput(cmd: any)
public SendInput()
{
}
//
public HandleInputEvent(cmd: any)
{
return cmd;
}

@ -40,6 +40,8 @@ export class GetPointPromptBlock extends PromptBlock
}
get Value()
{
return new Vector3().fromArray(this.pointValueDynInput.map(o => o.Value));
let arr = this.pointValueDynInput.map(o => o.Value);
if (!arr.some(n => isNaN(n)))
return new Vector3().fromArray(arr);
}
}

@ -12,7 +12,7 @@ export class RealDynamicInput extends DynamicInput
}
set Value(v: number)
{
super.Value = v;
super.Value = v.toFixed(4);
this.OnInput();
}
//返回一个计算完成的实数结果.
@ -20,8 +20,7 @@ export class RealDynamicInput extends DynamicInput
{
try
{
console.log('super.Value: ', super.Value);
return this.parse.evaluate(super.Value)
return this.parse.evaluate(super.Value);
} catch (error)
{
return NaN;

Loading…
Cancel
Save