mxcad_2d API 文档 / 2d / MxCADSelectionSet
Class: MxCADSelectionSet
2d.MxCADSelectionSet
MxCADSelectionSet 是一个用于管理和遍历当前选择集中对象的集合类。
Description
该类用于执行对象选择、筛选、遍历和批量处理,适用于 CAD 图形编辑场景中的“选中对象查询”和“批量操作”。 通过它可以执行全选、点选、框选、用户交互选择,并获取选择集中的对象 ID,随后再调用 getMcDbEntity() 获取实体实例。 使用方法:
- new MxCADSelectionSet() 创建选择集;
- 调用 allSelect() / pointSelect() / userSelect() 等方法进行选择;
- 使用 count()、item()、forEach()、getIds() 读取或遍历结果;
- 对选中的对象继续执行高亮、删除、修改属性等后续操作。
Example
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
↳
MxCADSelectionSet
Table of contents
Constructors
Properties
Accessors
Methods
- allSelect
- clear
- count
- crossingSelect
- currentSelect
- fenceSelect
- forEach
- getIds
- getImp
- getJson
- getSelectPoint
- getSelectPoints
- initTempObject
- isKindOf
- isNull
- item
- pointSelect
- setJson
- userSelect
Constructors
constructor
• new MxCADSelectionSet()
构造函数
Overrides
Properties
imp
• imp: any = 0
内部实现对象。
Inherited from
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
| Name | Type |
|---|---|
val | boolean |
Returns
void
objectName
• get objectName(): string
获取对象名称。
Returns
string
返回对象名
Inherited from
McRxObject.objectName
Methods
allSelect
▸ allSelect(filter?): number
全选
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
filter | null | MxCADResbuf | null | 筛选条件对象 |
Returns
number
Example
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
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
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
| Name | Type | Default value | Description |
|---|---|---|---|
dX1 | number | undefined | 角点1 X轴值 |
dY1 | number | undefined | 角点1 Y轴值 |
dX2 | number | undefined | 角点2 X轴值 |
dY2 | number | undefined | 角点2 Y轴值 |
filter | null | MxCADResbuf | null | 筛选条件对象 |
Returns
number
实体对象索引
currentSelect
▸ currentSelect(filter?): number
得到当前已经选择的对象
Parameters
| Name | Type | Default value |
|---|---|---|
filter | null | MxCADResbuf | null |
Returns
number
选中id对象数组
fenceSelect
▸ fenceSelect(strPrompt?, filter?, init?): Promise<boolean>
按栅栏方式选择图上的对象
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
strPrompt? | string | undefined | 交互提示信息,可为空。 |
filter | null | MxCADResbuf | null | 筛选条件对象,用于限制可选对象类型,默认为 null。 |
init? | (getPoint: MrxDbgUiPrPoint) => any | undefined | 用户选择前的初始化回调,可在这里设置提示消息和交互参数。 |
Returns
Promise<boolean>
返回一个 Promise,当用户完成栅栏选择并确认时返回 true,取消或退出时返回 false。
forEach
▸ forEach(call): void
遍历已选中的实体
Parameters
| Name | Type |
|---|---|
call | (val: McObjectId) => void |
Returns
void
Example
import { MxCADSelectionSet } from "mxcad";
let ss = new MxCADSelectionSet();
ss.allSelect();
ss.forEach((id) => {
let ent: any = id.getMcDbEntity();
})getIds
▸ getIds(): McObjectId[]
得到当前已选中的所有对象ID
Returns
选中id对象数组
getImp
▸ getImp(): any
获取内部实现对象。
Returns
any
内部实现对象。
Inherited from
getJson
▸ getJson(): string
获取 JSON 格式的字符串。
Returns
string
JSON 格式的字符串。
Inherited from
getSelectPoint
▸ getSelectPoint(): Object
得到选择形成的两个对角点
Returns
Object
pt1 角点1 | pt2 角点2
| Name | Type |
|---|---|
pt1 | McGePoint3d |
pt2 | McGePoint3d |
getSelectPoints
▸ getSelectPoints(): McGePoint3d[]
返回选择点数组。
Returns
选择框点数组
initTempObject
▸ initTempObject(imp): void
初始化临时对象。
Parameters
| Name | Type | Description |
|---|---|---|
imp | any | 内部实现对象。 |
Returns
void
Inherited from
isKindOf
▸ isKindOf(sObjectName): boolean
判断对象类型
Parameters
| Name | Type | Description |
|---|---|---|
sObjectName | string | 类型名 |
Returns
boolean
返回对象是否是目标类型
Inherited from
isNull
▸ isNull(): boolean
判断选择集是否为空
Returns
boolean
布尔值
Overrides
item
▸ item(lItem): McObjectId
根据对象索引 得到对应对象ID
Parameters
| Name | Type | Description |
|---|---|---|
lItem | number | 对象索引 |
Returns
对象id
Example
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
| Name | Type | Default value | Description |
|---|---|---|---|
dX | number | undefined | 坐标x |
dY | number | undefined | 坐标y |
filter | null | MxCADResbuf | null | 筛选条件对象 |
dTol | number | -1 | - |
Returns
number
实体对象索引
Example
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
| Name | Type | Description |
|---|---|---|
str | string | JSON 格式的字符串。 |
Returns
boolean
是否设置成功。
Inherited from
userSelect
▸ userSelect(strPrompt?, filter?, init?): Promise<boolean>
用户选择
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
strPrompt? | string | Object | undefined | 字符串提示 |
filter | null | MxCADResbuf | null | 筛选条件 |
init? | (getPoint: MrxDbgUiPrPoint) => any | undefined | 用户选择前的初始化操作 |
Returns
Promise<boolean>
Example
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);
}