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

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

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

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

@ -31,7 +31,7 @@ export function fixAngle(an: number, fixAngle: number, fuzz: number = 0.1)
} }
return an; 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.x += Math.cos(an) * dis;
v.y += Math.sin(an) * dis; v.y += Math.sin(an) * dis;

@ -1,5 +1,6 @@
import { KeyBoard } from "../../Common/KeyEnum"; import { KeyBoard } from "../../Common/KeyEnum";
import { IsChar, IsNumble } from "../../Common/Utils"; import { IsChar, IsNumble } from "../../Common/Utils";
import { DynamicInputManage } from "./DynamicInputManage";
/** /**
@ -22,11 +23,25 @@ export class DynamicInput
{ {
if (IsChar(e.keyCode) || IsNumble(e.keyCode)) if (IsChar(e.keyCode) || IsNumble(e.keyCode))
{ {
e.stopPropagation() e.stopPropagation();
} }
else 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); container.appendChild(this.inputEl);

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

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

Loading…
Cancel
Save