Skip to content

mxcad_2d API 文档 / 2d / MxCADUiPrDist

Class: MxCADUiPrDist ​

2d.MxCADUiPrDist

交互式距离输入类,用于在两点之间获取距离值。

Description

MxCADUiPrDist 是基于 MxCADUiPrBase 的交互控件,用于提示用户通过两点输入来确定一个距离值。 它支持设置提示信息、动态拖动基点、动态绘制回调以及获取最终距离值和详细退出原因。 常用于标注、测量或需要用户确定长度的交互场景。 使用方法:

  1. 创建 MxCADUiPrDist 实例并通过 setMessage 设置提示信息;
  2. (可选)使用 setBasePt / setUserDraw 设置动态拖动基点或动态绘制效果以增强用户体验;
  3. 调用 go() 等待用户输入,随后通过 value() 获取距离结果并通过 getDetailedResult() 判断退出原因。

Example

ts
import { MxCADUiPrDist } from 'mxcad';

async function measure() {
  const getDist = new MxCADUiPrDist();
  getDist.setMessage('\n指定第一点和第二点以确定距离:');
  // 可选:设置动态绘制
  getDist.setUserDraw((pt, worldDraw) => {
    worldDraw.setColor(0x00ff00);
    // 这里假设绘制一个临时标记
  });

  const val = await getDist.go();
  if (val == null) return; // 用户取消或其他原因
  const dist = getDist.value();
  console.log('测得距离:', dist);
}

Hierarchy ​

Table of contents ​

Constructors ​

Methods ​

Constructors ​

constructor ​

• new MxCADUiPrDist()

构造函数

Overrides ​

MxCADUiPrBase.constructor

Methods ​

abort ​

▸ abort(cause?): void

停止当前动态拖动

Parameters ​

NameTypeDefault value
causeDetailedResultDetailedResult.kCodeAbort

Returns ​

void

void

Inherited from ​

MxCADUiPrBase.abort


basePt ​

▸ basePt(): McGePoint3d

得到动态拖动的基点

Returns ​

McGePoint3d

基点 McGePoint3d


clearLastInputPoint ​

▸ clearLastInputPoint(): void

清除上一次的输入点数据。

Returns ​

void

Inherited from ​

MxCADUiPrBase.clearLastInputPoint


disableAllTrace ​

▸ disableAllTrace(isDisable?): void

禁用所有跟踪

Parameters ​

NameTypeDefault valueDescription
isDisablebooleantrue是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.disableAllTrace


drawReserve ​

▸ drawReserve(callAddEntity?): void

把动态绘制的对象,保留到图上。

Parameters ​

NameTypeDescription
callAddEntity?(ent: Object3D) => void回调参数ent 类型:THREE.THREE.Object3D

Returns ​

void

Example

ts
//以 MxCADUiPrPoint 类示例
 import { MxCADUiPrPoint } from 'mxcad';

 async function test(){
   const getPoint = new MxCADUiPrPoint();
   const basePt = new McGePoint3d(0, 0, 0);
   getPoint.setBasePt(basePt);
   getPoint.setUserDraw((pt,pw)=>{
   const line = new McDbLine(basePt, pt);
   pw.drawMcDbEntity(line)
   })
   const val = await getPoint.go();
   if (!val) return;
   getPoint.drawReserve()
 }

Inherited from ​

MxCADUiPrBase.drawReserve


getCursorType ​

▸ getCursorType(): MxCursorType

返回光标类型

Returns ​

MxCursorType

Inherited from ​

MxCADUiPrBase.getCursorType


getDetailedResult ​

▸ getDetailedResult(): DetailedResult

返回交互操作退出的详细原因

Returns ​

DetailedResult

当前交互操作返回值类型

Example

ts
//以 MxCADUiPrDist 类示例
  import { MxCADUiPrDist } from 'mxcad';
  import { DetailedResult } from "mxdraw";

  async function test(){
    const getDist = new MxCADUiPrDist();
    const val = await getDist.go();
    if (!val) return;
    if (getDist.getDetailedResult() === DetailedResult.kCoordIn) {
        console.log('提示输入', val)
    }
  }

Inherited from ​

MxCADUiPrBase.getDetailedResult


getDynamicInputType ​

▸ getDynamicInputType(): DynamicInputType

返回动态输入类型

Returns ​

DynamicInputType

动态输入显示类型

Inherited from ​

MxCADUiPrBase.getDynamicInputType


getInputToucheType ​

▸ getInputToucheType(): number

返回需要的Touche输入类型

Returns ​

number

Touche输入类型

Inherited from ​

MxCADUiPrBase.getInputToucheType


getLastInputPoint ​

▸ getLastInputPoint(): undefined | McGePoint3d

返回上一次的输入点。

Returns ​

undefined | McGePoint3d

选择的关键字

Inherited from ​

MxCADUiPrBase.getLastInputPoint


getResultPointOsnapMode ​

▸ getResultPointOsnapMode(): AcquirePointOsnapMode

返回交互取点操作得到的点的捕捉类型

Returns ​

AcquirePointOsnapMode

Inherited from ​

MxCADUiPrBase.getResultPointOsnapMode


getResultPointType ​

▸ getResultPointType(): AcquirePointType

返回交互取点操作得到的点类型

Returns ​

AcquirePointType

Inherited from ​

MxCADUiPrBase.getResultPointType


getStatus ​

▸ getStatus(): MrxDbgUiPrBaseReturn

获取操作状态

Returns ​

MrxDbgUiPrBaseReturn

操作状态值

Example

ts
//以 MxCADUiPrDist 类示例
 import { MxCADUiPrDist } from 'mxcad';
 import { MrxDbgUiPrBaseReturn } from "mxdraw";

 const getDist = new MxCADUiPrDist();
 const val = await getDist.go();
 if (!val) return;
 if(getPoint.getStatus() === MrxDbgUiPrBaseReturn.kNone) {
   // 空输入
 }

Inherited from ​

MxCADUiPrBase.getStatus


go ​

▸ go(): Promise<null | number>

开始动态拖动

Returns ​

Promise<null | number>

返回一个promise对象,包含了用户设置的距离


isDisableDynInput ​

▸ isDisableDynInput(): boolean

是否禁用动态输入框

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisableDynInput


isDisableDynamicTrace ​

▸ isDisableDynamicTrace(): boolean

是否禁用动态跟踪

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisableDynamicTrace


isDisableGridTrace ​

▸ isDisableGridTrace(): boolean

是否禁用格网追踪

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisableGridTrace


isDisableOrthoTrace ​

▸ isDisableOrthoTrace(): boolean

是否禁用正射追踪

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisableOrthoTrace


isDisableOsnap ​

▸ isDisableOsnap(): boolean

是否禁用捕捉

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisableOsnap


isDisablePolarAxisTrace ​

▸ isDisablePolarAxisTrace(): boolean

是否禁用极轴跟踪

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isDisablePolarAxisTrace


isKeyWordPicked ​

▸ isKeyWordPicked(matchKeyWord): boolean

测试某一个关键字是否被用户选择

Parameters ​

NameTypeDescription
matchKeyWordstring要检测的关键字

Returns ​

boolean

true为真

Example

ts
  //以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint } from 'mxcad';

 async function test(){
   const getPoint = new MxCADUiPrPoint();
   getPoint.setKeyWords("[选项1(A)/选项2(B)]");
   const pt = await getPoint.go();
   if(getPoint.isKeyWordPicked('A')){
       console.log('选项1')
   }else if(getPoint.isKeyWordPicked('B')){
       console.log('选项2')
   }
 }

Inherited from ​

MxCADUiPrBase.isKeyWordPicked


isOffsetInputPostion ​

▸ isOffsetInputPostion(): boolean

输入点是否偏移显示/处理

Returns ​

boolean

Inherited from ​

MxCADUiPrBase.isOffsetInputPostion


keyWordPicked ​

▸ keyWordPicked(): string

返回用户选择的关键字

Returns ​

string

选择的关键字

Example

ts
  //以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint } from 'mxcad';

  async function test(){
   const getPoint = new MxCADUiPrPoint();
   getPoint.setKeyWords("[选项1(A)/选项2(B)]");
   const pt = await getPoint.go();
   const key = getPoint.keyWordPicked();
   console.log(key)
  }

Inherited from ​

MxCADUiPrBase.keyWordPicked


keyWords ​

▸ keyWords(): string

返回关键字列表

Returns ​

string

关键词列表

Example

ts
//以 MxCADUiPrPoint 类示例,其他MxCADUiPr* 系列的类同理
  import { MxCADUiPrPoint } from 'mxcad'
  const getPoint = new MxCADUiPrPoint();
  getPoint.setKeyWords("[选项1(A)/选项2(B)]");
  const keyList = getPoint.keyWords();
  console.log("关键词列表", keyList)// 关键词列表 [选项1(A)/选项2(B)]

Inherited from ​

MxCADUiPrBase.keyWords


message ​

▸ message(): string

提示字符串

Returns ​

string

提示消息

Inherited from ​

MxCADUiPrBase.message


setBasePt ​

▸ setBasePt(basePt): void

设置动态拖动的基点

Parameters ​

NameTypeDescription
basePtMcGePoint3d基点 McGePoint3d

Returns ​

void


setCursorType ​

▸ setCursorType(type): void

设置光标类型

Parameters ​

NameTypeDescription
typeMxCursorType鼠标样式类型

Returns ​

void

Example

ts
//以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint } from 'mxcad';
  import { MxCursorType } from "mxdraw";

  async function test(){
   const getPoint = new MxCADUiPrPoint()
   getPoint.setMessage("指定文字起点:")
   getPoint.setCursorType(MxCursorType.kCross);
   const pt = await getPoint.go();
  }

Inherited from ​

MxCADUiPrBase.setCursorType


setDisableDynInput ​

▸ setDisableDynInput(isDisable): void

设置是否禁用动态输入框

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisableDynInput


setDisableDynamicTrace ​

▸ setDisableDynamicTrace(isDisable): void

设置是否禁用动态跟踪

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisableDynamicTrace


setDisableGridTrace ​

▸ setDisableGridTrace(isDisable): void

设置是否禁用格网追踪

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisableGridTrace


setDisableOrthoTrace ​

▸ setDisableOrthoTrace(isDisable): void

设置是否禁用正射追踪

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisableOrthoTrace


setDisableOsnap ​

▸ setDisableOsnap(isDisable): void

设置是否禁用捕捉

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisableOsnap


setDisablePolarAxisTrace ​

▸ setDisablePolarAxisTrace(isDisable): void

设置是否禁用极轴跟踪

Parameters ​

NameTypeDescription
isDisableboolean是否禁用

Returns ​

void

Inherited from ​

MxCADUiPrBase.setDisablePolarAxisTrace


setDynamicInputType ​

▸ setDynamicInputType(type): void

设置动态输入类型

Parameters ​

NameTypeDescription
typeDynamicInputType动态输入显示类型

Returns ​

void

Example

ts
//以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint } from 'mxcad';
  import { DynamicInputType } from "mxdraw";

  async function Mx_WindowZoom() {
    let getPoint = new MxCADUiPrPointTransform(MxInsidePublicFuns.getMxCADViewSpinMatrix(MxCpp.getCurrentMxCAD()));
    getPoint.disableAllTrace();
    getPoint.setMessage("\n点取缩放区域");
    getPoint.setDynamicInputType(DynamicInputType.kDynTip);
    let pt1 = await getPoint.go();
    if (pt1 == null) return;
    let mxcad = MxCpp.getCurrentMxCAD();
    getPoint.setUserDraw((p1, worldDraw) => {
        worldDraw.drawRect(MxCoordConvert.cad2doc1((pt1 as any)), MxCoordConvert.cad2doc1((p1 as any)));
    });

    let pt2 = await getPoint.go();
    if (pt2 == null) return;

    pt1.transformBy(getPoint.rmat);
    pt2.transformBy(getPoint.rmat);
    mxcad.zoomW(pt1, pt2);
 }

Inherited from ​

MxCADUiPrBase.setDynamicInputType


setInputToucheType ​

▸ setInputToucheType(toucheType): void

设置需要的Touche输入类型,默认值是 MxType.InputToucheType.kGetBegan

Parameters ​

NameTypeDescription
toucheTypenumbertoucheType类型

Returns ​

void

Example

ts
//以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint, MxCpp } from "mxcad";
  import { MxType } from "mxdraw";

   // 手机触模屏画直线
   async function Mx_Test_Touch_DrawLine() {
       const getPoint = new MxCADUiPrPoint();
       getPoint.setOffsetInputPostion(true);
       getPoint.setMessage("\n指定第一点:");
       // 接收 kGetBegan,触摸屏手指按下.
       getPoint.setInputToucheType(MxType.InputToucheType.kGetEnd);
       let pt1 = await getPoint.go();
       if (!pt1) return;
       getPoint.setMessage("\n指定第二点:");
       getPoint.setBasePt(pt1);

       console.log(getPoint.getResultPointOsnapMode());
       console.log(getPoint.getResultPointType());

       // 接收kGetEnd,触摸屏手指放开.
       getPoint.setInputToucheType(MxType.InputToucheType.kGetEnd);
       let pt2 = await getPoint.go();
       if (!pt2) return;
       let mxcad = MxCpp.getCurrentMxCAD();
       let ent = mxcad.drawLine(pt1.x, pt1.y, pt2.x, pt2.y).getMcDbEntity();
       if (ent) {
           ent.lineweight = 20;
       }
   }

Inherited from ​

MxCADUiPrBase.setInputToucheType


setKeyWords ​

▸ setKeyWords(keyWordList): void

设置关键字列表

Parameters ​

NameTypeDescription
keyWordListstring关键词列表

Returns ​

void

void

Example

ts
  //以 MxCADUiPrPoint 类示例, 其他MxCADUiPr* 系列的类同理
  import { MxCADUiPrPoint } from 'mxcad'
  const getPoint = new MxCADUiPrPoint();
  getPoint.setKeyWords("[选项1(A)/选项2(B)]")

Inherited from ​

MxCADUiPrBase.setKeyWords


setLastInputPoint ​

▸ setLastInputPoint(pt): void

设置上一次的输入点。

Parameters ​

NameTypeDescription
ptundefined | McGePoint3d点对象

Returns ​

void

Inherited from ​

MxCADUiPrBase.setLastInputPoint


setMessage ​

▸ setMessage(message): void

设置提示字符串

Parameters ​

NameTypeDescription
messagestring提示消息

Returns ​

void

提示消息

Inherited from ​

MxCADUiPrBase.setMessage


setOffsetInputPostion ​

▸ setOffsetInputPostion(isOffset): void

设置输入点遍移,常用于移动端取点

Parameters ​

NameType
isOffsetboolean

Returns ​

void

Example

ts
import { MxCADUiPrPoint } from "mxcad";
import { MxFun } from "mxdraw";

// 移动端 绘制临时标注圆
async function test(){
   const getPoint = new MxCADUiPrPoint();
   getPoint.setMessage("\n指定一点:");
   getPoint.setOffsetInputPostion(true);
   getPoint.clearLastInputPoint();
   let pt1 = (await getPoint.go());
   if (!pt1) return;

   let mxdraw = MxFun.getCurrentDraw();

   mxdraw.getTempMarkDraw().drawCircleMark(pt1.toVector3(), mxdraw.viewCoordLong2Cad(50), 0xFF0000);
   mxdraw.updateDisplay();
}

Inherited from ​

MxCADUiPrBase.setOffsetInputPostion


setOsModeExParam ​

▸ setOsModeExParam(lVal): void

设置捕捉时的扩展捕捉参数。

Parameters ​

NameTypeDescription
lValOsModeExParam扩展对象捕捉参数

Returns ​

void

Example

ts
import { MxCADUiPrPoint } from "mxcad";
import { OsModeExParam } from "mxdraw";

    async function Mx_Test_Rect2() {
        const getPoint = new MxCADUiPrPoint();
        getPoint.clearLastInputPoint();
        getPoint.setMessage("请选择第一个点");
        const pt1 = await getPoint.go();
        if (!pt1) return;

        const getNextPt = new MxCADUiPrPoint();
        getNextPt.setMessage("请选择第二个角点");
        getNextPt.setOsModeExParam(OsModeExParam.kCircleTangentOsmode);
        getNextPt.setUserDraw((pt2, pWorldDraw) => {
            let pl = new McDbPolyline();
            pl.addVertexAt(pt1);
            pl.addVertexAt(new McGePoint3d(pt1.x, pt2.y, pt1.z));
            pl.addVertexAt(pt2);
            pl.addVertexAt(new McGePoint3d(pt2.x, pt1.y, pt1.z));
            pl.isClosed = true;
            pWorldDraw.drawMcDbEntity(pl);
        });

        if (!await getNextPt.go()) return;

        getNextPt.drawReserve();
    }

Inherited from ​

MxCADUiPrBase.setOsModeExParam


setUseBasePt ​

▸ setUseBasePt(useIt): void

设置使用动态拖动的基点

Parameters ​

NameTypeDescription
useItboolean是否启用基点进行动态跟随/动态绘制 默认为false

Returns ​

void

void


setUserDraw ​

▸ setUserDraw(pDraw): void

设置交互过程的动态绘制调用对象

Parameters ​

NameTypeDescription
pDraw(currentPoint: McGePoint3d, pWorldDraw: McEdGetPointWorldDrawObject) => voidMcEdGetPointWorldDrawObject | 动态绘制调用对象

Returns ​

void

void

Example

ts
//以 MxCADUiPrPoint 类示例
  import { MxCADUiPrPoint } from 'mxcad';

  async function test(){
   const getPoint = new MxCADUiPrPoint();
   getPoint.setUserDraw((pt,pw)=>{
       pw.setColor(0xff00ff);
       pw.drawCircle(new HTREE.Vector3(pt.x,pt.y,pt.z), 10)
   })
   const pt = await getPoint.go();
   console.log("point", pt)
  }

Inherited from ​

MxCADUiPrBase.setUserDraw


setUserInputControls ​

▸ setUserInputControls(contros): void

设置输入控制设置

Parameters ​

NameType
controsnumber

Returns ​

void

Example

ts
// 以 MxCADUiPrInt 类示例
  import { MxCADUiPrInt } from 'mxcad';
  import { UserInputControls } from "mxdraw"

  let getInt = new MxCADUiPrInt();
  getInt.setMessage("输入整数:");
  getInt.setUserInputControls(UserInputControls.kNoZeroResponseAccepted);
  let iRowNum = await getInt.go();
  if (iRowNum == null) return;

Inherited from ​

MxCADUiPrBase.setUserInputControls


userInputControls ​

▸ userInputControls(): number

返回输入控制设置

Returns ​

number

Inherited from ​

MxCADUiPrBase.userInputControls


value ​

▸ value(): number

得以获取的距离

Returns ​

number

返回距离值

Example

ts
import { MxCADUiPrDist } from 'mxcad'

const getDist = new MxCADUiPrDist();
const val = await getDist.go();
if(!val) return;
const dist = getDist.value();
console.log(dist)