天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 29|回复: 0

C++ CAD 高亮显示要素

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-9-26 10:27:49 | 显示全部楼层 |阅读模式
    1. void CTransUtil::ZoomWindow(AcDbDatabase* pDb, AcDbExtents& ext)
    2. {
    3.         assert(pDb);
    4.        
    5.         //AcDbViewportTable* pViewportTable = NULL;
    6.         //if (pDb->getViewportTable(pViewportTable, AcDb::kForRead) == Acad::eOk)
    7.         {
    8.                 //AcDbViewportTableRecord* pRecord = NULL;
    9.                 //if (pViewportTable->getAt(TEXT("*ACTIVE"), pRecord, AcDb::kForWrite) == Acad::eOk)
    10.                 {
    11.                         AcGePoint3d center = CGeometryOper::GetMiddlePoint(ext.minPoint(), ext.maxPoint());
    12.                         double height = ext.maxPoint().y - ext.minPoint().y;
    13.                         double width = ext.maxPoint().x - ext.minPoint().x;
    14.                         /*pRecord->setCenterPoint(CGeometryOper::Pt3dTo2d(center));
    15.                         pRecord->setHeight(height * 1.01);
    16.                         pRecord->setWidth(width * 2.0);
    17.                         pRecord->close();*/

    18.                         AcDbViewTableRecord pVwRec;
    19.                         pVwRec.setCenterPoint(CGeometryOper::Pt3dTo2d(center));
    20.                         pVwRec.setWidth(width * 1.01);
    21.                         pVwRec.setHeight(height * 2.0);
    22.                         acedSetCurrentView(&pVwRec, NULL);
    23.                 }
    24.                

    25.                 //pViewportTable->close();
    26.         }       
    27. }
    复制代码





    1. ACHAR layerName[100];
    2. if (acedGetString(Adesk::kFalse, _T("\n输入句柄:\n"), layerName) != RTNORM)
    3. {
    4.         return;
    5. }
    6. CString nstr = layerName;
    7. AcApDocument* pDoc = acDocManager->curDocument();
    8. CString filePath = pDoc->fileName();
    9. int nPos = filePath.ReverseFind(_T('\\'));
    10. if (nPos == -1)
    11. {
    12.         return;
    13. }
    14. acDocManager->lockDocument(pDoc, AcAp::kWrite, NULL, NULL, true);
    15. AcTransaction* pTrans = actrTransactionManager->startTransaction();
    16. if (!pTrans)
    17. {
    18.         acDocManager->unlockDocument(pDoc);
    19.         return;
    20. }
    21. HRESULT hr;
    22. AutoCAD::IAcadApplication* pAcad = nullptr;
    23. hr = NOERROR;

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

    37. acedSSGet(_T("A"), NULL, NULL, rb, jzdssname);
    38. acutRelRb(rb);
    39. long jzdlen;
    40. if (RTNORM != acedSSLength(jzdssname, &jzdlen))
    41. {
    42.         acedSSFree(jzdssname);
    43.         acDocManager->unlockDocument(acDocManager->curDocument());
    44.         return;
    45. }
    46. //修改鼠标等待样式
    47. CWaitCursor WaitCursor;
    48. ads_name  sset_temp;
    49. //遍历选择集
    50. for (int i = 0; i < jzdlen; i++)
    51. {
    52.         ads_name jzdent;
    53.         if (RTNORM != acedSSName(jzdssname, i, jzdent))
    54.         {
    55.                 continue;
    56.         }
    57.         AcDbObjectId jzdId;
    58.         if (Acad::eOk != acdbGetObjectId(jzdId, jzdent))
    59.         {
    60.                 acedSSFree(jzdent);
    61.                 continue;
    62.         }               
    63.         //句柄
    64.                        
    65.         ACHAR handbuf[7] = { 0 };
    66.         AcDbHandle handle = jzdId.handle();
    67.         handle.getIntoAsciiBuffer(handbuf);
    68.         CString str = handbuf;
    69.         if (str == nstr)
    70.         {
    71.                 AcDbObjectPointer<AcDbEntity> jzdEnt(jzdId, AcDb::kForRead);
    72.                 if (Acad::eOk != jzdEnt.openStatus())
    73.                 {
    74.                         continue;
    75.                 }
    76.                 AcDbExtents ext;
    77.                 if (jzdEnt->getGeomExtents(ext) == Acad::eOk) //输出实体的ext
    78.                 {
    79.                         CTransUtil::ZoomWindow(pDoc->database(), ext);
    80.                         //acutPrintf(_T("\n找到!\n"));
    81.                 }
    82.                 //jzdEnt->highlight();
    83.                 //acedUpdateDisplay();       
    84.                 acedSSAdd(jzdent, NULL, sset_temp); //初始化一个选择
    85.                 break;
    86.         }
    87.         acedSSFree(jzdent);
    88. }
    89. acedSSFree(jzdssname);

    90. WaitCursor.Restore();
    91. actrTransactionManager->endTransaction();
    92. acDocManager->unlockDocument(pDoc);
    93. acedSSSetFirst(sset_temp, NULL);
    94. acedSSFree(sset_temp);
    95. acutPrintf(_T("\n完成!\n"));
    复制代码

     

     

     

     

    C++ CAD 高亮显示要素
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:31 , Processed in 0.129219 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表