ARX获取当前界面所有的图层名并存入数组

该代码示例展示了如何使用objectARX和C++从AutoCAD图形中获取所有图层的名称并存储到数组,以及如何获取当前图形的所有实体Id并存入另一个数组。首先,它通过数据库获取图层表,然后遍历图层表记录,将图层名添加到数组。接着,获取块表,遍历块表记录以获取每个实体的Id并添加到Id数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

objectARX,c++实现将界面中的所有图层获取并存入数组

代码如下:
	CStringArray layerNames;  //数组保存图层名
	AcDbLayerTable* pLayerTbl = NULL;
	if (acdbHostApplicationServices()->workingDatabase()->getLayerTable(pLayerTbl, AcDb::kForRead) != Acad::eOk)
	{
		return;
	}

	AcDbLayerTableIterator* pLayerIter = NULL;
	if (pLayerTbl->newIterator(pLayerIter) != Acad::eOk)
	{
		return;
	}

	int i = 0;

	for (; !pLayerIter->done(); pLayerIter->step())
	{
		AcDbLayerTableRecord* pLayerTblRcd = NULL;
		if (pLayerIter->getRecord(pLayerTblRcd, AcDb::kForRead) != Acad::eOk)
		{
			return;
		}

		ACHAR *pLayerName;
		if (pLayerTblRcd->getName(pLayerName) != Acad::eOk)
		{
			return;
		}

		//将图层名添加到下拉框中
		//m_ComboBoxLayerCtrl.InsertString(i, pLayerName);

		// 将图层名保存到 数组中
		layerNames.Add(pLayerName);

		pLayerTblRcd->close();

		i++;
	}
	delete pLayerIter;

	pLayerTbl->close();
类似,我们可以获取当前图形的所有实体的Id,并存放到id数组中
	//新建可以存放objectId的数组
	AcDbObjectIdArray m_EntIds;
//获得块表
	AcDbBlockTable *pBlkTbl = NULL;
	if (acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlkTbl, AcDb::kForRead) != Acad::eOk)
	{
		return;
	}
	
	//块表记录
	AcDbBlockTableRecord *pBlkTblRcd = NULL;
	if (pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead) != Acad::eOk)
	{
		return;
	}
	pBlkTbl->close();

	//创建遍历器,访问每个实体
	AcDbBlockTableRecordIterator *iter = NULL;
	pBlkTblRcd->newIterator(iter);

	for(; !iter->done; iter->step())
	{
		AcDbEntity *pEnt = NULL;
		Acad::ErrorStatus es = iter->getEntity(pEnt, AcDb::kForRead);
		
		if (es != Acad::eOk)
		{
			return;
		}

		m_EntIds.append(pEnt->objectId());
		pEnt->close();//关闭实体指针
	}

	delete iter;  //删除堆区指针,防止内存泄漏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值