|
|
@ -1,14 +1,15 @@
|
|
|
|
import * as THREE from 'three';
|
|
|
|
|
|
|
|
import { Vector3 } from 'three';
|
|
|
|
import { Vector3 } from 'three';
|
|
|
|
|
|
|
|
import * as THREE from 'three';
|
|
|
|
import * as xaop from 'xaop';
|
|
|
|
import * as xaop from 'xaop';
|
|
|
|
|
|
|
|
|
|
|
|
import { app } from '../ApplicationServices/Application';
|
|
|
|
import { app } from '../ApplicationServices/Application';
|
|
|
|
import { GetPointPrompt, InputState } from '../Common/InputState';
|
|
|
|
import { GetDistendPrompt, GetPointPrompt, InputState } from '../Common/InputState';
|
|
|
|
import { KeyBoard, MouseKey } from '../Common/KeyEnum';
|
|
|
|
import { KeyBoard, MouseKey } from '../Common/KeyEnum';
|
|
|
|
import { equaln, fixAngle, Intersect, polar } from '../Geometry/GeUtils';
|
|
|
|
import { equaln, fixAngle, Intersect, midPoint, polar } from '../Geometry/GeUtils';
|
|
|
|
import { DynamicInputManage } from '../UI/DynamicPrompt/DynamicInputManage';
|
|
|
|
import { DynamicInputManage } from '../UI/DynamicPrompt/DynamicInputManage';
|
|
|
|
|
|
|
|
import { GetDistancePromptBlock } from '../UI/DynamicPrompt/GetDistancePromptBlock';
|
|
|
|
import { GetPointPromptBlock } from '../UI/DynamicPrompt/GetPointPromptBlock';
|
|
|
|
import { GetPointPromptBlock } from '../UI/DynamicPrompt/GetPointPromptBlock';
|
|
|
|
import { PromptPointResult, PromptStatus } from './PromptResult';
|
|
|
|
import { PromptDistendResult, PromptPointResult, PromptStatus } from './PromptResult';
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 为拾取点提供服务,提供一个类以供Editor引用.
|
|
|
|
* 为拾取点提供服务,提供一个类以供Editor引用.
|
|
|
@ -20,8 +21,8 @@ export class GetPointServices
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
private promisResolve: (PromptPointResult) => void;//promis回调
|
|
|
|
private promisResolve: (PromptPointResult) => void;//promis回调
|
|
|
|
private removeCalls: Function[] = []; //结束回调
|
|
|
|
protected removeCalls: Function[] = []; //结束回调
|
|
|
|
Doit(prompt?: GetPointPrompt): Promise<PromptPointResult>
|
|
|
|
Doit(prompt?: GetPointPrompt, showDyn: boolean = false): Promise<PromptPointResult>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
prompt = prompt ? prompt : {};
|
|
|
|
prompt = prompt ? prompt : {};
|
|
|
|
//程序状态
|
|
|
|
//程序状态
|
|
|
@ -33,7 +34,7 @@ export class GetPointServices
|
|
|
|
//消息显示.
|
|
|
|
//消息显示.
|
|
|
|
this.initPrompt(prompt);
|
|
|
|
this.initPrompt(prompt);
|
|
|
|
//动态输入框.
|
|
|
|
//动态输入框.
|
|
|
|
this.initDynInput(prompt);
|
|
|
|
if (showDyn) this.initDynInput(prompt);
|
|
|
|
//设置关键字
|
|
|
|
//设置关键字
|
|
|
|
this.initKeyword(prompt);
|
|
|
|
this.initKeyword(prompt);
|
|
|
|
//处理用户输入
|
|
|
|
//处理用户输入
|
|
|
@ -203,7 +204,7 @@ export class GetPointServices
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//初始化动态输入框,包括处理事件
|
|
|
|
//初始化动态输入框,包括处理事件
|
|
|
|
private initDynInput(prompt: GetPointPrompt)
|
|
|
|
protected initDynInput(prompt: GetPointPrompt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let dynPrompt = new GetPointPromptBlock(DynamicInputManage.GetManage());
|
|
|
|
let dynPrompt = new GetPointPromptBlock(DynamicInputManage.GetManage());
|
|
|
|
dynPrompt.updatePrompt(prompt.Msg);
|
|
|
|
dynPrompt.updatePrompt(prompt.Msg);
|
|
|
@ -227,7 +228,7 @@ export class GetPointServices
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//调用promis的回调.
|
|
|
|
//调用promis的回调.
|
|
|
|
private _return(v?: THREE.Vector3 | string)
|
|
|
|
protected _return(v?: THREE.Vector3 | string)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
this.restAppState();
|
|
|
|
this.restAppState();
|
|
|
|
|
|
|
|
|
|
|
@ -562,3 +563,102 @@ export class GetPointServices
|
|
|
|
return undefined;
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export class GetDistendsServices
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
private removeCalls: Function[] = [];
|
|
|
|
|
|
|
|
private promisResolve: (PromptDistendResult) => void;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Doit(prompt?: GetDistendPrompt): Promise<PromptDistendResult>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
prompt = prompt || {};
|
|
|
|
|
|
|
|
let dynInput = this.initDynInput(prompt);
|
|
|
|
|
|
|
|
return new Promise<PromptDistendResult>(async (resolve, reject) =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
this.promisResolve = resolve;
|
|
|
|
|
|
|
|
let p1 = prompt.BasePoint;
|
|
|
|
|
|
|
|
if (!p1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let ptRes = await app.m_Editor.GetPoint(
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Msg: "请输入距离或者点取距离:",
|
|
|
|
|
|
|
|
BasePoint: prompt.BasePoint,
|
|
|
|
|
|
|
|
Callback: (p) =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
dynInput.SetPostion(app.m_Editor.m_MouseCtrl.m_CurMousePointVCS);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, false);
|
|
|
|
|
|
|
|
if (ptRes.Status == PromptStatus.OK)
|
|
|
|
|
|
|
|
p1 = ptRes.Value;
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
this._return();
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let ptRes = await app.m_Editor.GetPoint({
|
|
|
|
|
|
|
|
Msg: "请输入距离或者点取距离:",
|
|
|
|
|
|
|
|
BasePoint: p1,
|
|
|
|
|
|
|
|
AllowDrawRubberBand: true,
|
|
|
|
|
|
|
|
Callback: (p) =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let midp = midPoint(p1, p);
|
|
|
|
|
|
|
|
app.m_Viewer.WorldToScreen(midp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dynInput.SetPostion(app.m_Editor.m_MouseCtrl.m_CurMousePointVCS);
|
|
|
|
|
|
|
|
dynInput.ValuePostion = midp;
|
|
|
|
|
|
|
|
dynInput.Value = p1.distanceTo(p);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (prompt.Callback)
|
|
|
|
|
|
|
|
prompt.Callback(dynInput.Value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}, false);
|
|
|
|
|
|
|
|
if (ptRes.Status == PromptStatus.OK)
|
|
|
|
|
|
|
|
this._return(p1.distanceTo(ptRes.Value));
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
this._return();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//初始化动态输入框,包括处理事件
|
|
|
|
|
|
|
|
protected initDynInput(prompt: GetDistendPrompt)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let dynManage = DynamicInputManage.GetManage();
|
|
|
|
|
|
|
|
let dynInput = new GetDistancePromptBlock(dynManage);
|
|
|
|
|
|
|
|
dynInput.Value = prompt.Default;
|
|
|
|
|
|
|
|
dynInput.updatePrompt(prompt.Msg);
|
|
|
|
|
|
|
|
this.removeCalls.push(() =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
dynInput.Destroy();
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.removeCalls.push(
|
|
|
|
|
|
|
|
xaop.end(dynManage, dynManage.HandleInputEvent, () =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let v = dynInput.Value;
|
|
|
|
|
|
|
|
if (!isNaN(v))
|
|
|
|
|
|
|
|
this._return(v);
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
return dynInput;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
protected _return(v?: number | string)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
this.removeCalls.forEach(f => f());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let res = new PromptDistendResult();
|
|
|
|
|
|
|
|
if (!v)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
res.Status = PromptStatus.Cancel;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (v instanceof Number)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
res.Status = PromptStatus.OK
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
res.Status = PromptStatus.Keyword
|
|
|
|
|
|
|
|
res.StringResult = v;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.promisResolve(res);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|