C++ CAD 高亮显示要素

void CTransUtil::ZoomWindow(AcDbDatabase* pDb, AcDbExtents& ext)
{
	assert(pDb);
	
	//AcDbViewportTable* pViewportTable = NULL;
	//if (pDb->getViewportTable(pViewportTable, AcDb::kForRead) == Acad::eOk)
	{
		//AcDbViewportTableRecord* pRecord = NULL;
		//if (pViewportTable->getAt(TEXT("*ACTIVE"), pRecord, AcDb::kForWrite) == Acad::eOk)
		{
			AcGePoint3d center = CGeometryOper::GetMiddlePoint(ext.minPoint(), ext.maxPoint());
			double height = ext.maxPoint().y - ext.minPoint().y;
			double width = ext.maxPoint().x - ext.minPoint().x;
			/*pRecord->setCenterPoint(CGeometryOper::Pt3dTo2d(center));

			pRecord->setHeight(height * 1.01);
			pRecord->setWidth(width * 2.0);
			pRecord->close();*/

			AcDbViewTableRecord pVwRec;
			pVwRec.setCenterPoint(CGeometryOper::Pt3dTo2d(center));
			pVwRec.setWidth(width * 1.01);
			pVwRec.setHeight(height * 2.0);
			acedSetCurrentView(&pVwRec, NULL);
		}
		

		//pViewportTable->close(); 
	}	
}
ACHAR layerName[100];
if (acedGetString(Adesk::kFalse, _T("\n输入句柄:\n"), layerName) != RTNORM)
{
	return;
}
CString nstr = layerName;
AcApDocument* pDoc = acDocManager->curDocument();
CString filePath = pDoc->fileName();
int nPos = filePath.ReverseFind(_T('\\'));
if (nPos == -1)
{
	return;
}
acDocManager->lockDocument(pDoc, AcAp::kWrite, NULL, NULL, true);
AcTransaction* pTrans = actrTransactionManager->startTransaction();
if (!pTrans)
{
	acDocManager->unlockDocument(pDoc);
	return;
}
HRESULT hr;
AutoCAD::IAcadApplication* pAcad = nullptr;
hr = NOERROR;

LPDISPATCH pAcadDisp = acedGetIDispatch(TRUE);
hr = pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication, (void**)&pAcad);
if (SUCCEEDED(hr)) {
	//pAcad->ZoomAll();
	pAcad->ZoomExtents();
	pAcadDisp->Release();
	pAcad->Release();
	acdbHostApplicationServices()->workingDatabase()->updateExt(TRUE);
}
// 选择JZD图层上的所有多线段
struct resbuf* rb; // 结果缓冲区链表 
ads_name jzdssname; //选择集名称
rb = acutBuildList(RTDXF0, TEXT("POLYLINE"), 8, _T("JZD"), AcDb::kDxfRegAppName, _T("SOUTH"), RTNONE);//LWPOLYLINE POLYLINE

acedSSGet(_T("A"), NULL, NULL, rb, jzdssname);
acutRelRb(rb);
long jzdlen;
if (RTNORM != acedSSLength(jzdssname, &jzdlen))
{
	acedSSFree(jzdssname);
	acDocManager->unlockDocument(acDocManager->curDocument());
	return;
}
//修改鼠标等待样式
CWaitCursor WaitCursor;
ads_name  sset_temp;
//遍历选择集
for (int i = 0; i < jzdlen; i++)
{
	ads_name jzdent;
	if (RTNORM != acedSSName(jzdssname, i, jzdent))
	{
		continue;
	}
	AcDbObjectId jzdId;
	if (Acad::eOk != acdbGetObjectId(jzdId, jzdent))
	{
		acedSSFree(jzdent);
		continue;
	}		
	//句柄
			
	ACHAR handbuf[7] = { 0 };
	AcDbHandle handle = jzdId.handle();
	handle.getIntoAsciiBuffer(handbuf);
	CString str = handbuf;
	if (str == nstr)
	{
		AcDbObjectPointer<AcDbEntity> jzdEnt(jzdId, AcDb::kForRead);
		if (Acad::eOk != jzdEnt.openStatus())
		{
			continue;
		}
		AcDbExtents ext;
		if (jzdEnt->getGeomExtents(ext) == Acad::eOk) //输出实体的ext
		{
			CTransUtil::ZoomWindow(pDoc->database(), ext);
			//acutPrintf(_T("\n找到!\n"));
		}
		//jzdEnt->highlight();
		//acedUpdateDisplay();	
		acedSSAdd(jzdent, NULL, sset_temp); //初始化一个选择
		break;
	}
	acedSSFree(jzdent);
}
acedSSFree(jzdssname);

WaitCursor.Restore();
actrTransactionManager->endTransaction();
acDocManager->unlockDocument(pDoc);
acedSSSetFirst(sset_temp, NULL);
acedSSFree(sset_temp);
acutPrintf(_T("\n完成!\n"));

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值