mxcad_2d API 文档 / 2d / MxCADUtilityClass
Class: MxCADUtilityClass
2d.MxCADUtilityClass
MxCADUtilityClass 是 MxCAD 的通用工具类,提供对象选择、图形查询、删除和高亮等常用操作。
Description
该类用于封装和简化 CAD 视图中的常用交互与查询能力,例如:按点查找实体、选择对象、获取当前选中项、删除对象、设置对象高亮等。 它是 CAD 二次开发中最常用的工具入口之一,适合实现交互式编辑、对象识别和图形操作。 使用方法:
- 通过 MxCADUtility 直接调用 selectEnt / findEntAtPoint / getCurrentSelect 等方法;
- 传入规则容器 MxCADResbuf 来限制查询范围;
- 获取到 McObjectId 后,可以继续调用 getMcDbEntity() 读取实体对象;
- 通过 highlightEntity()、eraseObject() 等方法完成对象操作。
Example
import { MxCADUtility, MxCADUiPrPoint } from "mxcad";
async function test() {
const getPoint = new MxCADUiPrPoint();
getPoint.setMessage("请选择图上对象");
const point = await getPoint.go();
if (!point) return;
// 查找指定点附近的图形对象
const objId = MxCADUtility.findEntAtPoint(point.x, point.y, point.z, -1, null);
if (objId.isValid()) {
// 高亮显示命中的对象
MxCADUtility.highlightEntity(objId.id, true);
console.log("命中对象:", objId);
}
}Table of contents
Constructors
Methods
- builderHatchFromPoint
- calcBulge
- eraseObject
- findEntAtPoint
- getCorner
- getCurrentSelect
- getCurrentSelectPoints
- getMcDbEntitysBoundingBox
- getTextBox
- getTextEntityBox
- highlightEntity
- init
- pointInPolygon
- selectEnt
- userSelect
Constructors
constructor
• new MxCADUtilityClass()
Methods
builderHatchFromPoint
▸ builderHatchFromPoint(pt): null | McDbHatch
通过一个点坐标填充对应位置实体的填充
Parameters
| Name | Type | Description |
|---|---|---|
pt | McGePoint3d | 点对象 |
Returns
null | McDbHatch
返回一个填充对象
Example
import { MxCADUiPrPoint, MxCADUtility } from 'mxcad'
async function test(){
const getPoint = new MxCADUiPrPoint();
getPoint.setMessage("\n指定填充区域内部一点:");
getPoint.disableAllTrace(true);
getPoint.setDisableOsnap(true);
let pt = (await getPoint.go()) as McGePoint3d;
if (!pt) return;
let hatch = MxCADUtility.builderHatchFromPoint(pt);
MxCpp.mxcad.drawEntity(hatch);
}calcBulge
▸ calcBulge(pt1, pt2, pt3): Object
计算凸度
Parameters
| Name | Type | Description |
|---|---|---|
pt1 | McGePoint3d | 开始点 |
pt2 | McGePoint3d | 中点 |
pt3 | McGePoint3d | 结束点 |
Returns
Object
计算凸度结果
| Name | Type |
|---|---|
ret | boolean |
val | number |
Example
import { McGePoint3d, MxCADUtility } from "mxcad"
const pt1 = new McGePoint3d(0,0,0);
const pt2 = new McGePoint3d(20,10,0);
const pt3 = new McGePoint3d(40,0,0);
const Bulge = MxCADUtility.calcBulge(pt1, pt2, pt3);
console.log(Bulge)eraseObject
▸ eraseObject(lId, isErase?): boolean
eraseObject 方法用于删除指定的图形对象
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
lId | number | undefined | 需要删除的图形对象的 ID |
isErase | boolean | true | 是否需要删除,默认为 true |
Returns
boolean
返回一个布尔值,表示是否删除成功
Example
import { MxCpp, McGePoint3d, McDbLine, MxCADUtility } from "mxcad";
const line = new McDbLine(new McGePoint3d(0,0,0), new McGePoint3d(20,1,0));
const lineId = MxCpp.getCurrentMxCAD().drawEntity(line);
const res = MxCADUtility.eraseObject(lineId.id)
console.log("删除结果:", res);findEntAtPoint
▸ findEntAtPoint(dX, dY, dZ, dSearhRange?, filter?): McObjectId
findEntAtPoint 方法用于在指定坐标点附近查找图形对象
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
dX | number | undefined | 坐标点的 X 坐标值 |
dY | number | undefined | 坐标点的 Y 坐标值 |
dZ | number | undefined | 坐标点的 Z 坐标值 |
dSearhRange | number | -1 | 设置选取范围,默认为 -1 表示自适应,或者输入对应的CAD坐标长度 |
filter | null | MxCADResbuf | null | 筛选条件对象,用于限定查找到的图形对象范围,默认为 null(表示不做限制) |
Returns
返回查找到的图形对象的 ID
Example
import { MxCADUiPrPoint, MxCADUtility, MxCpp } from "mxcad"
async function test(){
const mxcad = MxCpp.getCurrentCAD();
const getPoint = new MxCADUiPrPoint();
getPoint.setMessage('请选择对象\n');
const point = await getPoint.go();
if (!point) break;
const filter = new MxCADResbuf([DxfCode.kEntityType, "LINE,ARC,CIRCLE,LWPOLYLINE"]));
let objId = MxCADUtility.findEntAtPoint(point.x, point.y, point.z, -1, filter);
mxcad.addCurrentSelect(objId);
}getCorner
▸ getCorner(strPrompt?, pt1?, detailedResult?, drawSelectCroner?, isDisableAllTrace?, init?): Promise<null | { pt1: McGePoint3d ; pt2: McGePoint3d ; pt3: McGePoint3d ; pt4: McGePoint3d }>
获取角点(鼠标点击的两个点)
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
strPrompt? | string | undefined | 字符串提示 |
pt1? | McGePoint3d | undefined | 第一个点 (已知一个角点的情况) |
detailedResult? | (retcode: DetailedResult) => any | undefined | DetailedResult 交互结果讲台的回调 |
drawSelectCroner | boolean | false | 绘制选择对象的选框(true有背景false无背景) |
isDisableAllTrace | boolean | false | 是否禁用所有跟踪 |
init? | (getPoint: MxCADUiPrPoint) => any | undefined | - |
Returns
Promise<null | { pt1: McGePoint3d ; pt2: McGePoint3d ; pt3: McGePoint3d ; pt4: McGePoint3d }>
返回一个 Promise,其中包含两个角点对象
Example
import { MxCADUtility } from "mxcad";
const ret = await MxCADUtility.getCorner("测试");
if (!ret) return;
console.log(ret.pt1, ret.pt2)
pt4----pt2
| |
pt1----pt3getCurrentSelect
▸ getCurrentSelect(filter?, returnMxCADObject?, returnMxDrawObject?, whenEmptyReturnPrvSelect?, isFilterLockLayer?): McObjectId[]
得到当前选中的对象。
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
filter | null | Object | MxCADResbuf | null | 筛选条件对象 |
returnMxCADObject | boolean | true | - |
returnMxDrawObject | boolean | true | - |
whenEmptyReturnPrvSelect | boolean | true | - |
isFilterLockLayer | boolean | false | - |
Returns
getCurrentSelectPoints
▸ getCurrentSelectPoints(): Object
得到图上当前选择对象时,选择范围点。
Returns
Object
point1 角点1 | point2 角点2 | isvalid 是否有效
| Name | Type |
|---|---|
isvalid | boolean |
point1 | McGePoint3d |
point2 | McGePoint3d |
getMcDbEntitysBoundingBox
▸ getMcDbEntitysBoundingBox(aryId): undefined | { maxPt: McGePoint3d ; minPt: McGePoint3d }
获取多个实体形成的包围盒
Parameters
| Name | Type | Description |
|---|---|---|
aryId | McObjectId[] | 实体对象ID数组 |
Returns
undefined | { maxPt: McGePoint3d ; minPt: McGePoint3d }
minPt 最小点 | maxPt 最大点
Example
import { MxCADUtility } from "mxcad";
async function test(){
let aryId = await MxCADUtility.userSelect("选择目标对象");
let ext = MxCADUtility.getMcDbEntitysBoundingBox(aryId);
if (!ext) return;
console.log("最小点",ext.minPt)
console.log("最大点", ext.maxPt)
}getTextBox
▸ getTextBox(str, dTextHeight, dWidthFactor, idTextStyleRecord): Object
计算文字的外包框
Parameters
| Name | Type |
|---|---|
str | string |
dTextHeight | number |
dWidthFactor | number |
idTextStyleRecord | McObjectId |
Returns
Object
| Name | Type |
|---|---|
maxPt | McGePoint3d |
minPt | McGePoint3d |
ret | boolean |
Example
import { MxCADUtility, MxCpp } from "mxcad"
// 获取当前字体样式下文字空格符号的大小
const { minPt.maxPt, ret} = MxCADUtility.getTextBox(" ", 100, 1.0, MxCpp.getCurrentDatabase().getCurrentlyTextStyleId());
if(ret){
console.log("最小点", minPt)
console.log("最大点", maxPt)
}getTextEntityBox
▸ getTextEntityBox(text, isTrimLastSpace?): Object
计算文字对象的外包框
Parameters
| Name | Type | Default value |
|---|---|---|
text | McDbEntity | undefined |
isTrimLastSpace | boolean | true |
Returns
Object
| Name | Type |
|---|---|
maxPt | McGePoint3d |
minPt | McGePoint3d |
ret | boolean |
Example
import { MxCpp, MxCADUtility, } from "mxcad";
async function test(){
let mxcad = MxCpp.getCurrentMxCAD();
let retIds = await MxCADUtility.selectEnt("选择");
if (retIds.length == 0) {
return;
}
let id = retIds[0];
let ent = id.getMcDbEntity();
if (ent) {
let box = MxCADUtility.getTextEntityBox(ent, false);
if (box.ret) {
mxcad.drawLine(box.maxPt.x, box.maxPt.y, box.minPt.x, box.minPt.y);
}
}
}highlightEntity
▸ highlightEntity(lId, isHighlight?): any
highlightEntity 方法用于高亮指定的图形对象
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
lId | number | undefined | 需要高亮的图形对象的 ID |
isHighlight | boolean | true | 是否需要高亮,默认为 true |
Returns
any
init
▸ init(): void
初始化
Returns
void
pointInPolygon
▸ pointInPolygon(aryPoint, x, y): boolean
判断一个点是否在闭合区域内
Parameters
| Name | Type |
|---|---|
aryPoint | McGePoint3dArray |
x | number |
y | Number |
Returns
boolean
selectEnt
▸ selectEnt(strPrompt?, filter?, isSelectMxDraw?, init?, callbackGetPoint?): Promise<McObjectId[]>
selectEnt 方法用于在指定位置选择图形对象
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
strPrompt? | string | undefined | 选择时的提示信息,默认为 null(表示不显示提示信息) |
filter | null | MxCADResbuf | null | 筛选条件对象,用于限定选择到的图形对象范围,默认为 null(表示不做限制) |
isSelectMxDraw | boolean | true | 是否选择批注图形 默认true |
init? | (getPoint: MrxDbgUiPrPoint) => any | undefined | 选择图形前初始化函数( 会在实例化mxdraw取点类时触发,得到取点实例) |
callbackGetPoint? | (point: McGePoint3d) => void | undefined | 回调函数 获取选中图形时的坐标点 |
Returns
返回一个 Promise,其中包含选择到的图形对象的 ID 数组
Example
import { MxCADUtility, MxCADResbuf } from "mxcad";
async function selectTargetEntity() {
// 限定只允许选择直线、圆、圆弧和多段线
const filter = new MxCADResbuf();
filter.AddMcDbEntityTypes("LINE,CIRCLE,ARC,LWPOLYLINE");
// 通过交互式方式让用户在图纸上选择对象
const ids = await MxCADUtility.selectEnt(
"请选择目标对象",
filter,
true,
(getPoint) => {
getPoint.setMessage("请点击图上的目标对象");
getPoint.setDisableOsnap(true);
},
(pt) => {
console.log("点击位置:", pt.x, pt.y, pt.z);
}
);
if (ids.length === 0) {
console.log("未选中任何对象");
return;
}
console.log("已选择对象 ID:", ids);
for (const id of ids) {
const ent = id.getMcDbEntity();
if (ent) {
console.log("对象类型:", ent.objectName);
}
}
}userSelect
▸ userSelect(strPrompt?, filter?, init?, isRetCurrentSelect?, isFilterLockLayer?): Promise<McObjectId[]>
用户选择
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
strPrompt? | string | Object | undefined | 字符串提示 |
filter | null | MxCADResbuf | null | 筛选条件对象 |
init? | (ss: MxCADSelectionSet, getPoint: MrxDbgUiPrPoint) => any | undefined | - |
isRetCurrentSelect | boolean | true | - |
isFilterLockLayer | boolean | false | - |
Returns
返回一个 Promise,其中包含得到选择的对象ID
Example
import { MxCADResbuf, MxCADUtility } from 'mxcad';
let filter = new MxCADResbuf();
filter.AddMcDbEntityTypes("CIRCLE,ARC,LINE,LWPOLYLINE,ELLIPSE");
let aryId = await MxCADUtility.userSelect("选择目标曲线", filter);
console.log(aryId);