Skip to content

mxcad_2d API 文档 / 2d / MxCADSelectionSet

Class: MxCADSelectionSet ​

2d.MxCADSelectionSet

MxCADSelectionSet 是一个用于管理和遍历当前选择集中对象的集合类。

Description

该类用于执行对象选择、筛选、遍历和批量处理,适用于 CAD 图形编辑场景中的“选中对象查询”和“批量操作”。 通过它可以执行全选、点选、框选、用户交互选择,并获取选择集中的对象 ID,随后再调用 getMcDbEntity() 获取实体实例。 使用方法:

  1. new MxCADSelectionSet() 创建选择集;
  2. 调用 allSelect() / pointSelect() / userSelect() 等方法进行选择;
  3. 使用 count()、item()、forEach()、getIds() 读取或遍历结果;
  4. 对选中的对象继续执行高亮、删除、修改属性等后续操作。

Example

ts
import { MxCADResbuf, MxCADSelectionSet } from "mxcad";

const ss = new MxCADSelectionSet();
const filter = new MxCADResbuf();
filter.AddMcDbEntityTypes("LINE,CIRCLE");

ss.allSelect(filter);
console.log("已选对象数:", ss.count());

ss.forEach((id) => {
  const ent = id.getMcDbEntity();
  if (ent) console.log("实体:", ent.objectName);
});

Hierarchy ​

Table of contents ​

Constructors ​

Properties ​

Accessors ​

Methods ​

Constructors ​

constructor ​

• new MxCADSelectionSet()

构造函数

Overrides ​

McRxObject.constructor

Properties ​

imp ​

• imp: any = 0

内部实现对象。

Inherited from ​

McRxObject.imp


isSelectHighlight ​

• isSelectHighlight: boolean = true

选择是否高亮


isWhileSelect ​

• isWhileSelect: boolean = true

是否循环选择

Accessors ​

dxf0 ​

• get dxf0(): string

得到对象的DXF组码的类型名,这个和AutoCAD中的DXF组码是一样。 比如直线的类型名为:McDbLine,DXF0组码值: LINE,DXF0组码值可以用来构造集时的类型过滤。

Returns ​

string

Inherited from ​

McRxObject.dxf0


isFilterLockLayer ​

• get isFilterLockLayer(): boolean

是过滤掉锁定的图层

Returns ​

boolean

• set isFilterLockLayer(val): void

Parameters ​

NameType
valboolean

Returns ​

void


objectName ​

• get objectName(): string

获取对象名称。

Returns ​

string

返回对象名

Inherited from ​

McRxObject.objectName

Methods ​

allSelect ​

▸ allSelect(filter?): number

全选

Parameters ​

NameTypeDefault valueDescription
filternull | MxCADResbufnull筛选条件对象

Returns ​

number

Example

ts
  import { MxCADSelectionSet } from "mxcad";

  let ss = new MxCADSelectionSet();
  ss.allSelect();
  ss.forEach((id) => {
       let ent: any = id.getMcDbEntity();
       if (!ent) return;
       ent = McDbEntityToJsonObject(ent);
       console.log(JSON.stringify(ent));
   })

Example

ts
   import { MxCADSelectionSet } from "mxcad";
   let ss = new MxCADSelectionSet();
   // 得到图上,直线,圆,圆弧,多义线,在0层上的对象.
   ss.allSelect(new MxCADResbuf([DxfCode.kEntityType, "LINE,ARC,CIRCLE,LWPOLYLINE",DxfCode.kLayer,"0"]));
   console.log("得到对象数目:" + ss.count());

Example

ts
   import { MxCADSelectionSet } from "mxcad";
   let ss = new MxCADSelectionSet();
   // 得到0层上的对象.
   ss.allSelect(new MxCADResbuf([DxfCode.kLayer,"0"]));
   console.log("得到对象数目:" + ss.count());
   // 遍历对象
    ss.forEach((id) => {
   let ent = id.getMcDbEntity();
   if (!ent) return;  
   let entBox = ent.getBoundingBox();   
 })

clear ​

▸ clear(): void

清空选择集

Returns ​

void


count ​

▸ count(): number

获取当前选中的个数

Returns ​

number

当前选中实体个数


crossingSelect ​

▸ crossingSelect(dX1, dY1, dX2, dY2, filter?): number

根据两个对角点选择一个实体对象的索引

Parameters ​

NameTypeDefault valueDescription
dX1numberundefined角点1 X轴值
dY1numberundefined角点1 Y轴值
dX2numberundefined角点2 X轴值
dY2numberundefined角点2 Y轴值
filternull | MxCADResbufnull筛选条件对象

Returns ​

number

实体对象索引


currentSelect ​

▸ currentSelect(filter?): number

得到当前已经选择的对象

Parameters ​

NameTypeDefault value
filternull | MxCADResbufnull

Returns ​

number

选中id对象数组


fenceSelect ​

▸ fenceSelect(strPrompt?, filter?, init?): Promise<boolean>

按栅栏方式选择图上的对象

Parameters ​

NameTypeDefault valueDescription
strPrompt?stringundefined交互提示信息,可为空。
filternull | MxCADResbufnull筛选条件对象,用于限制可选对象类型,默认为 null。
init?(getPoint: MrxDbgUiPrPoint) => anyundefined用户选择前的初始化回调,可在这里设置提示消息和交互参数。

Returns ​

Promise<boolean>

返回一个 Promise,当用户完成栅栏选择并确认时返回 true,取消或退出时返回 false。


forEach ​

▸ forEach(call): void

遍历已选中的实体

Parameters ​

NameType
call(val: McObjectId) => void

Returns ​

void

Example

ts
  import { MxCADSelectionSet } from "mxcad";

  let ss = new MxCADSelectionSet();
  ss.allSelect();
  ss.forEach((id) => {
      let ent: any = id.getMcDbEntity();
  })

getIds ​

▸ getIds(): McObjectId[]

得到当前已选中的所有对象ID

Returns ​

McObjectId[]

选中id对象数组


getImp ​

▸ getImp(): any

获取内部实现对象。

Returns ​

any

内部实现对象。

Inherited from ​

McRxObject.getImp


getJson ​

▸ getJson(): string

获取 JSON 格式的字符串。

Returns ​

string

JSON 格式的字符串。

Inherited from ​

McRxObject.getJson


getSelectPoint ​

▸ getSelectPoint(): Object

得到选择形成的两个对角点

Returns ​

Object

pt1 角点1 | pt2 角点2

NameType
pt1McGePoint3d
pt2McGePoint3d

getSelectPoints ​

▸ getSelectPoints(): McGePoint3d[]

返回选择点数组。

Returns ​

McGePoint3d[]

选择框点数组


initTempObject ​

▸ initTempObject(imp): void

初始化临时对象。

Parameters ​

NameTypeDescription
impany内部实现对象。

Returns ​

void

Inherited from ​

McRxObject.initTempObject


isKindOf ​

▸ isKindOf(sObjectName): boolean

判断对象类型

Parameters ​

NameTypeDescription
sObjectNamestring类型名

Returns ​

boolean

返回对象是否是目标类型

Inherited from ​

McRxObject.isKindOf


isNull ​

▸ isNull(): boolean

判断选择集是否为空

Returns ​

boolean

布尔值

Overrides ​

McRxObject.isNull


item ​

▸ item(lItem): McObjectId

根据对象索引 得到对应对象ID

Parameters ​

NameTypeDescription
lItemnumber对象索引

Returns ​

McObjectId

对象id

Example

ts
 import { MxCADSelectionSet } from "mxcad";
 // 全选图纸上的代理实体
   async function TestGetProx() {
       let ss = new MxCADSelectionSet();
       let filter = new MxCADResbuf();
       filter.AddString("ACAD_PROXY_ENTITY", 5020)
       ss.allSelect(filter);
       let iCount = ss.count();
       for (let i = 0; i < iCount; i++) {
           let ent = ss.item(i).getMcDbEntity();
           if (!ent) continue;
           console.log(ent);
       }
  }

pointSelect ​

▸ pointSelect(dX, dY, filter?, dTol?): number

根据一个坐标点选择一个实体对象的索引

Parameters ​

NameTypeDefault valueDescription
dXnumberundefined坐标x
dYnumberundefined坐标y
filternull | MxCADResbufnull筛选条件对象
dTolnumber-1-

Returns ​

number

实体对象索引

Example

ts
   import { MxCADSelectionSet, MxCADResbuf } from "mxcad"

   // 通过单个点选择
   const ss = new MxCADSelectionSet();
   const filter = new MxCADResbuf();
   // 添加对象类型,选择集只选择文字类型的对象
   filter.AddMcDbEntityTypes("TEXT,MTEXT")
   const getPoint = new MxCADUiPrPoint()
   const point = await getPoint.go()
   if (!point) return;
   // 加filter过滤选择集, 这里只会选择文字对象
   const index = ss.pointSelect(point.x, point.y, filter)
   const objId = ss.item(index)
   const ent = objId.getMcDbEntity()
   console.log(ent)

setJson ​

▸ setJson(str): boolean

设置 JSON 格式的字符串。

Parameters ​

NameTypeDescription
strstringJSON 格式的字符串。

Returns ​

boolean

是否设置成功。

Inherited from ​

McRxObject.setJson


userSelect ​

▸ userSelect(strPrompt?, filter?, init?): Promise<boolean>

用户选择

Parameters ​

NameTypeDefault valueDescription
strPrompt?string | Objectundefined字符串提示
filternull | MxCADResbufnull筛选条件
init?(getPoint: MrxDbgUiPrPoint) => anyundefined用户选择前的初始化操作

Returns ​

Promise<boolean>

Example

ts
  import { MxCADResbuf, MxCADSelectionSet } from "mxcad";

  function test(){
   let filter = new MxCADResbuf();
   filter.AddMcDbEntityTypes("INSERT");
   let ss = new MxCADSelectionSet();
   if (!await ss.userSelect("选择要刷的目标块:", filter)) return;
   if (ss.count() == 0) return;
   let ids = ss.getIds();
   console.log(ids);
  }