明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15579|回复: 47

几个实用的插件

[复制链接]
发表于 2015-10-5 21:28:03 | 显示全部楼层 |阅读模式
删除重覆实体
  1. acDocManager->lockDocument(acDocManager->curDocument());
  2. CDwgDatabaseUtil::setVar(_T("cmdecho"), 0); // 关闭回显
  3. acedCommand(RTSTR, _T("undo"), RTSTR, _T("be"), RTNONE);
  4. ads_name ssName;
  5. int rt = acedSSGet(_T("X"), NULL, NULL, NULL, ssName);
  6. if (rt != RTNORM)
  7. {
  8.     return;
  9. }
  10. std::vector<CString> ssentVec;
  11. long length;
  12. acedSSLength(ssName, &length);
  13. acedSetStatusBarProgressMeter(_T("◎正在删除重覆实体,等稍等!"), 0, 100);
  14. DWORD dwCount = ::GetTickCount();
  15. for (int i = 0; i < length; i++)
  16. {
  17.     // 100毫秒更新一次
  18.     if(::GetTickCount() - dwCount > 100)
  19.     {
  20.         acedSetStatusBarProgressMeterPos((int) (i * 100.0 / length));
  21.         dwCount = ::GetTickCount();
  22.     }            
  23.     ads_name ent;
  24.     acedSSName(ssName, i, ent);
  25.     struct resbuf *rbEnt; // 保存实体数据的结果缓冲区
  26.     struct resbuf *rb;    // 用于遍历rbEnt的结果缓冲区
  27.     rbEnt = acdbEntGet(ent); // 从entName获得保存实体数据的结果缓冲区
  28.     rb = rbEnt;
  29.     CString entname, typa, s10Ptx, s10Pty, s10Ptz, s11Ptx, s11Pty, s11Ptz, svNum;
  30.     std::vector<CString> entVec;
  31.     while (rb != NULL)
  32.     {
  33.         switch (rb->restype)
  34.         {
  35.         case 0:  // 对象类型
  36.             typa.Format(_T("%s"), rb->resval.rstring);
  37.             entVec.push_back(typa);
  38.             break;
  39.         case 10: // 起点(顶点)坐标
  40.             s10Ptx.Format(_T("%.2f"), rb->resval.rpoint[X]);
  41.             s10Pty.Format(_T("%.2f"), rb->resval.rpoint[Y]);
  42.             s10Ptz.Format(_T("%.2f"), rb->resval.rpoint[Z]);
  43.             entVec.push_back(s10Ptx);
  44.             entVec.push_back(s10Pty);
  45.             entVec.push_back(s10Ptz);
  46.             break;
  47.         case 11: // 终点坐标
  48.             s11Ptx.Format(_T("%.2f"), rb->resval.rpoint[X]);
  49.             s11Pty.Format(_T("%.2f"), rb->resval.rpoint[Y]);
  50.             s11Ptz.Format(_T("%.2f"), rb->resval.rpoint[Z]);
  51.             entVec.push_back(s11Ptx);
  52.             entVec.push_back(s11Pty);
  53.             entVec.push_back(s11Ptz);
  54.             break;
  55.         case 93: // 顶点数目
  56.             svNum.Format(_T("%f"), rb->resval.rreal);
  57.             entVec.push_back(svNum);
  58.             break;
  59.         default:
  60.             break;
  61.         }
  62.         rb = rb->rbnext; // 切换到下一个节点
  63.     }
  64.     if (rbEnt != NULL)
  65.     {
  66.         acutRelRb(rbEnt);
  67.     }
  68.     CString entVeclist = CStringUtil::Join(entVec, _T(","));
  69.     ssentVec.push_back(entVeclist);
  70. }
  71. acedRestoreStatusBar();
  72. CString fistNaem = ssentVec[0];    // 首个
  73. ssentVec.erase(ssentVec.begin());  // 删除第一元素
  74. int index = 0;
  75. int len = ssentVec.size();
  76. int num = 0;
  77. while (len > 0)
  78. {
  79.     for (int i = 0; i < ssentVec.size(); i++)
  80.     {
  81.         CString temp = ssentVec;
  82.         if (_tcscmp(fistNaem, temp) == 0)
  83.         {
  84.             ads_name ent;
  85.             acedSSName(ssName, num, ent);
  86.             AcDbObjectId entId;
  87.             acdbGetObjectId(entId, ent);
  88.             CEntityUtil::Erase(entId);
  89.             index++;
  90.         }
  91.     }
  92.     num = num + 1;
  93.     fistNaem = ssentVec[0];
  94.     ssentVec.erase(ssentVec.begin());
  95.     len = ssentVec.size();
  96. }
  97. acedSSFree(ssName);
  98. acutPrintf(_T("\n共删除 %d 个重覆物体"), index);
  99. acDocManager->unlockDocument(acDocManager->curDocument());

评分

参与人数 1明经币 +3 金钱 +30 收起 理由
yfy2003 + 3 + 30

查看全部评分

 楼主| 发表于 2015-10-5 21:29:49 | 显示全部楼层
本帖最后由 gzxl 于 2015-10-6 00:20 编辑

自动断面


Sorry源码不上传了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 0 反对 1

使用道具 举报

发表于 2018-6-8 22:09:57 | 显示全部楼层

请问版主   CDwgDatabaseUtil  这个类是怎么来的啊?
发表于 2019-5-6 10:29:03 | 显示全部楼层
图面检查和高程点移位楼主能不能发一个(295481682@qq.com),谢谢
 楼主| 发表于 2015-10-5 21:30:43 | 显示全部楼层
本帖最后由 gzxl 于 2015-10-5 23:47 编辑

图面检查

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
004 + 1 很给力!

查看全部评分

 楼主| 发表于 2015-10-5 21:33:46 | 显示全部楼层
文本加减乘除
  1. acDocManager->lockDocument(acDocManager->curDocument());
  2. TCHAR szKword[132];
  3. acedInitGet(NULL, _T("A B C D"));
  4. int nReturn = acedGetKword(_T("\n输入选项[加(A)/减(B)/乘(C)/除(D)]:"), szKword);
  5. if (nReturn == RTNORM || nReturn == RTKWORD)
  6. {
  7.     std::vector<AcRxClass*> descs;
  8.     descs.push_back(AcDbText::desc());
  9.     descs.push_back(AcDbMText::desc());
  10.     AcDbEntity *pEnt = NULL;
  11.     AcGePoint3d pickPoint;
  12.     if (CSelectUtil::PromptSelectEntity(_T("\n请点选首个文本数字作为开头:"), descs, pEnt, pickPoint))
  13.     {
  14.         CString strName;  
  15.         if (pEnt->isKindOf(AcDbText::desc()))
  16.         {
  17.             AcDbText *pText = AcDbText::cast(pEnt);
  18.             strName = pText->textString();
  19.             // 截取字符串中的纯数字
  20.             sscanf(strName, _T("%*[A-Z,:] %[0-9,.]"), strName);
  21.         }
  22.         else
  23.         {
  24.             AcDbMText *pMText = AcDbMText::cast(pEnt);
  25.             TCHAR *chaName;
  26.             chaName = pMText->contents();
  27.             CString strName(chaName);
  28.             int n = strName.ReverseFind(';');
  29.             strName = strName.Right(strName.GetLength() - n - 1);
  30.             sscanf(strName, _T("%*[A-Z,:] %[0-9,.]"), strName);
  31.             acutDelString(chaName);
  32.         }
  33.         double firstNum = CConvertUtil::ToDouble(strName);
  34.         AcDbObjectIdArray entIds;
  35.         if (CSelectUtil::PromptSelectEnts(_T("\n选择其它文本数字<可单选或多选>:"), descs, entIds))
  36.         {
  37.             for (int i = 0; i < entIds.length(); i++)
  38.             {
  39.                 AcDbEntity *pNEnt = NULL;
  40.                 if (acdbOpenObject(pNEnt, entIds, AcDb::kForRead) == Acad::eOk)
  41.                 {
  42.                     if (pNEnt->isKindOf(AcDbText::desc()))
  43.                     {
  44.                         AcDbText *pText = AcDbText::cast(pNEnt);
  45.                         strName = pText->textString();
  46.                         sscanf(strName, _T("%*[A-Z,:] %[0-9,.]"), strName);
  47.                     }
  48.                     else
  49.                     {
  50.                         AcDbMText *pMText = AcDbMText::cast(pNEnt);
  51.                         TCHAR *chaName;
  52.                         chaName = pMText->contents();
  53.                         CString strName(chaName);
  54.                         int n = strName.ReverseFind(';');
  55.                         strName = strName.Right(strName.GetLength() - n - 1);
  56.                         sscanf(strName, _T("%*[A-Z,:] %[0-9,.]"), strName);
  57.                         acutDelString(chaName);
  58.                     }
  59.                 }
  60.                 double secondNum = CConvertUtil::ToDouble(strName);
  61.                 if (_tcscmp(szKword, _T("A")) == 0)
  62.                 {
  63.                     firstNum = firstNum + secondNum;
  64.                 }
  65.                 else if (_tcscmp(szKword, _T("B")) == 0)
  66.                 {
  67.                     firstNum = firstNum - secondNum;
  68.                 }
  69.                 else if (_tcscmp(szKword, _T("C")) == 0)
  70.                 {
  71.                     firstNum = firstNum * secondNum;
  72.                 }
  73.                 else
  74.                 {
  75.                     firstNum = firstNum / secondNum;
  76.                 }
  77.                 pNEnt->close();
  78.             }
  79.             CString firstStr = CConvertUtil::ToString(firstNum, 3);
  80.             ads_point adsPoint;
  81.             if (acedGetPoint(NULL, _T("拾取标注点:"), adsPoint) == RTNORM)
  82.             {
  83.                 AcGePoint3d pt = asPnt3d(adsPoint);
  84.                 AcDbText *pText = new AcDbText(pt, firstStr, AcDbObjectId::kNull, 10, 0);
  85.                 pText->setColorIndex(1);
  86.                 CDwgDatabaseUtil::PostToModelSpace(pText);
  87.             }
  88.             pEnt->close();
  89.         }
  90.     }
  91. }
  92. acDocManager->unlockDocument(acDocManager->curDocument());

 楼主| 发表于 2015-10-5 21:36:32 | 显示全部楼层
修改颜色
  1. acDocManager->lockDocument(acDocManager->curDocument());
  2. ads_name ss, en;
  3. if (acedSSGet(NULL, NULL, NULL, NULL, ss) != RTNORM)
  4. {
  5.     return;
  6. }
  7. int colorindex;
  8. acedSetColorDialog(colorindex, true, 1);
  9. long len;
  10. if (RTNORM == acedSSLength(ss, &len))
  11. {
  12.     for (int i = 0; i < len; i++)
  13.     {
  14.         acedSSName(ss, i, en);
  15.         AcDbObjectId id;
  16.         acdbGetObjectId(id, en);
  17.         AcDbEntity *pEnt;
  18.         acdbOpenObject(pEnt, id, AcDb::kForWrite);
  19.         AcCmColor colors;
  20.         colors.setColorIndex(colorindex);

  21.         if (pEnt->isKindOf(AcDbBlockReference::desc()))
  22.         {
  23.             AcDbBlockReference *pBlk = AcDbBlockReference::cast(pEnt);
  24.             ChangeColor(pBlk, colors);
  25.         }
  26.         pEnt->setColor(colors);
  27.         pEnt->close();
  28.     }
  29. }
  30. acedSSFree(ss);
  31. acDocManager->unlockDocument(acDocManager->curDocument());

  32. static void ChangeColor(AcDbBlockReference *pBlk, AcCmColor col)
  33. {
  34.     AcDbObjectId blkId = pBlk->blockTableRecord();
  35.     AcDbBlockTableRecord *pBlkRcd;
  36.     acdbOpenObject(pBlkRcd, blkId, AcDb::kForWrite);
  37.     AcDbBlockTableRecordIterator *pItr;
  38.     pBlkRcd->newIterator(pItr);
  39.     for (pItr->start(); !pItr->done(); pItr->step())
  40.     {
  41.         AcDbEntity *pEnt1;
  42.         pItr->getEntity(pEnt1, AcDb::kForWrite);
  43.         pEnt1->setColor(col);
  44.         if (pEnt1->isKindOf(AcDbBlockReference::desc()))
  45.         {
  46.             AcDbBlockReference *pBlk1 = AcDbBlockReference::cast(pEnt1);
  47.             ChangeColor(pBlk1, col);
  48.         }
  49.         pEnt1->close();
  50.     }
  51.     delete pItr;
  52.     pBlkRcd->close();

  53.     AcDbObjectIterator *attIt = pBlk->attributeIterator();
  54.     for (attIt->start(); !attIt->done(); attIt->step())
  55.     {
  56.         AcDbAttribute *pAtt = NULL;
  57.         AcDbObjectId attrObjId;
  58.         attrObjId = attIt->objectId();
  59.         Acad::ErrorStatus es = acdbOpenObject(pAtt, attrObjId, AcDb::kForWrite);
  60.         if (es == Acad::eOk)
  61.         {
  62.             pAtt->setColor(col);
  63.             pAtt->close();
  64.         }
  65.     }
  66.     delete attIt;
  67.     pBlk->setColorIndex(0);
  68. }
复制代码

评分

参与人数 1明经币 +3 金钱 +30 收起 理由
yfy2003 + 3 + 30

查看全部评分

 楼主| 发表于 2015-10-5 21:49:39 | 显示全部楼层
高程点移位
  1. acDocManager->lockDocument(acDocManager->curDocument());

  2. int iosmode = 0;
  3. CDwgDatabaseUtil::GetVar(_T("osmode"), iosmode); // 获取捕捉状态值
  4. CDwgDatabaseUtil::setVar(_T("osmode"), 0);  // 设置捕获关
  5. CDwgDatabaseUtil::setVar(_T("cmdecho"), 0); // 关闭回显
  6. acedCommand(RTSTR, _T("undo"), RTSTR, _T("be"), RTNONE);

  7. bool result = true;
  8. AcGePoint3dArray ptArray;
  9. ads_name ss;
  10. // 建立缓冲区链表
  11. AcDbObjectIdArray entIds;
  12. struct resbuf *rb, *retRb;
  13. CString myXdata = _T("202101");
  14. rb = acutBuildList(RTDXF0, _T("INSERT"), 2, _T("gc200"), RTNONE);
  15. if (CCassUtil::PromptSelectEnts(_T("X"), myXdata, rb, entIds))
  16. {
  17.     long length = entIds.length();
  18.     for (int i = 0; i < length; i++)
  19.     {
  20.         AcDbEntity *pEnt = NULL;
  21.         if (acdbOpenObject(pEnt, entIds[i], AcDb::kForWrite) == Acad::eOk)
  22.         {
  23.             CString layerName = pEnt->layer(); //图层名
  24.             AcGePoint2d zxPt, ysPt; // 文本的左下角点、右上角点
  25.             AcDbBlockReference *pBlk = AcDbBlockReference::cast(pEnt);
  26.             AcGePoint3d pt3d = pBlk->position();
  27.             double ptz = pt3d.z;
  28.             AcDbObjectIterator *pAttrIter = pBlk->attributeIterator();
  29.             AcDbAttribute *pAttr = NULL;
  30.             AcDbObjectId attrObjId = NULL;

  31.             CString strHeight;
  32.             AcGePoint3d AlimPt, textPt;
  33.             attrObjId = pAttrIter->objectId();
  34.             acdbOpenObject(pAttr, attrObjId, AcDb::kForWrite);

  35.             strHeight = pAttr->textString();
  36.             double hh = pAttr->height(); // 文字高度
  37.             double ww = pAttr->widthFactor(); // 宽度比例系数

  38.             double ll = CTextUtil::getTextLength(strHeight, hh, ww); // 文字长度

  39.             AlimPt = pAttr->alignmentPoint(); // 对齐点
  40.             textPt = pAttr->position(); // 文本的位置点(左下角点)
  41.             AcGePoint3d yPt1 = CGePointUtil::PolarPoint(textPt, 0.0, ll); // 向右
  42.             AcGePoint3d yPt2 = CGePointUtil::PolarPoint(yPt1, CMathUtil::PI() * 0.5, hh); // 向上
  43.             zxPt = CConvertUtil::ToPoint2d(textPt); // 文本的位置点(左下角点)
  44.             ysPt = CConvertUtil::ToPoint2d(yPt2);   // 文本的位置点(右上角点)

  45.             CViewUtil::Set(textPt, yPt2, 3);

  46.             retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  47.             int rt = acedSSGet(_T("C"), asDblArray(zxPt), asDblArray(ysPt), retRb, ss);
  48.             if (rt != RTNORM)
  49.             {
  50.                 pAttr->close();
  51.                 delete pAttrIter;
  52.                 pBlk->close();
  53.                 pEnt->close();
  54.                 acutRelRb(retRb);
  55.                 acedSSFree(ss);
  56.                 result = false;
  57.                 continue;
  58.             }
  59.             else
  60.             {
  61.                 acutRelRb(retRb);
  62.                 acedSSFree(ss);
  63.                 result = true;
  64.             }
  65.             AcGePoint2d ydPt1, ydPt2, xdPt1, xdPt2, xdPt3, xdPt4, xdPt5, xdPt6, xdPt7, xdPt8;
  66.             if (result)
  67.             {
  68.                 // 设定向下移动限制
  69.                 double xzLen = hh;
  70.                 double yLen = 0;
  71.                 while (yLen < xzLen)
  72.                 {
  73.                     yLen = yLen + hh * 0.25;
  74.                     ydPt1 = CGePointUtil::PolarPoint(zxPt, CMathUtil::PI() * 1.5, yLen);
  75.                     ydPt2 = CGePointUtil::PolarPoint(ysPt, CMathUtil::PI() * 1.5, yLen);

  76.                     retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  77.                     int rt = acedSSGet(_T("C"), asDblArray(ydPt1), asDblArray(ydPt2), retRb, ss);
  78.                     if (rt != RTNORM)
  79.                     {
  80.                         // 文本的位置点
  81.                         AcGePoint3d setPosPt(ydPt1.x, ydPt1.y, ptz);
  82.                         AcGePoint3d setAliPt = CGePointUtil::PolarPoint(setPosPt, CMathUtil::PI() * 0.5, hh * 0.5);
  83.                         pAttr->setHorizontalMode(AcDb::kTextLeft);   // 左对齐
  84.                         pAttr->setVerticalMode(AcDb::kTextVertMid);  // 左中
  85.                         pAttr->setPosition(setPosPt);
  86.                         pAttr->setAlignmentPoint(setAliPt);
  87.                         acutRelRb(retRb);
  88.                         acedSSFree(ss);
  89.                         result = false;
  90.                         break;
  91.                     }
  92.                     else
  93.                     {
  94.                         acutRelRb(retRb);
  95.                         acedSSFree(ss);
  96.                         result = true;
  97.                     }
  98.                 }
  99.             }
  100.             if (result)
  101.             {
  102.                 // 设定向左移动限制
  103.                 double yzLen = hh * 4;
  104.                 double yLen = 0;
  105.                 while (yLen < yzLen)
  106.                 {
  107.                     yLen = yLen + hh * 0.25;
  108.                     xdPt1 = CGePointUtil::PolarPoint(ydPt1, CMathUtil::PI(), yLen);
  109.                     xdPt2 = CGePointUtil::PolarPoint(ydPt2, CMathUtil::PI(), yLen);

  110.                     retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  111.                     int rt = acedSSGet(_T("C"), asDblArray(xdPt1), asDblArray(xdPt2), retRb, ss);
  112.                     if (rt != RTNORM)
  113.                     {
  114.                         AcGePoint3d setPosPt(xdPt1.x, xdPt1.y, ptz);
  115.                         AcGePoint3d setAliPt = CGePointUtil::PolarPoint(setPosPt, CMathUtil::PI() * 0.5, hh * 0.5);
  116.                         pAttr->setHorizontalMode(AcDb::kTextLeft);   // 左对齐
  117.                         pAttr->setVerticalMode(AcDb::kTextVertMid);  // 左中
  118.                         pAttr->setPosition(setPosPt);
  119.                         pAttr->setAlignmentPoint(setAliPt);
  120.                         acutRelRb(retRb);
  121.                         acedSSFree(ss);
  122.                         result = false;
  123.                         break;
  124.                     }
  125.                     else
  126.                     {
  127.                         acutRelRb(retRb);
  128.                         acedSSFree(ss);
  129.                         result = true;
  130.                     }
  131.                 }
  132.             }
  133.             if (result)
  134.             {
  135.                 // 设定向上移动限制
  136.                 double yzLen = hh * 2;
  137.                 double yLen = 0;
  138.                 while (yLen < yzLen)
  139.                 {
  140.                     yLen = yLen + hh * 0.25;
  141.                     xdPt3 = CGePointUtil::PolarPoint(xdPt1, CMathUtil::PI() * 0.5, yLen);
  142.                     xdPt4 = CGePointUtil::PolarPoint(xdPt2, CMathUtil::PI() * 0.5, yLen);

  143.                     retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  144.                     int rt = acedSSGet(_T("C"), asDblArray(xdPt3), asDblArray(xdPt4), retRb, ss);
  145.                     if (rt != RTNORM)
  146.                     {
  147.                         AcGePoint3d setPosPt(xdPt3.x, xdPt3.y, ptz);
  148.                         AcGePoint3d setAliPt = CGePointUtil::PolarPoint(setPosPt, CMathUtil::PI() * 0.5, hh * 0.5);
  149.                         pAttr->setHorizontalMode(AcDb::kTextLeft);
  150.                         pAttr->setVerticalMode(AcDb::kTextVertMid);
  151.                         pAttr->setPosition(setPosPt);
  152.                         pAttr->setAlignmentPoint(setAliPt);
  153.                         acutRelRb(retRb);
  154.                         acedSSFree(ss);
  155.                         result = false;
  156.                         break;
  157.                     }
  158.                     else
  159.                     {
  160.                         acutRelRb(retRb);
  161.                         acedSSFree(ss);
  162.                         result = true;
  163.                     }
  164.                 }
  165.             }
  166.             if (result)
  167.             {
  168.                 // 设定向右移动限制
  169.                 double yzLen = hh * 4;
  170.                 double yLen = 0;
  171.                 while (yLen < yzLen)
  172.                 {
  173.                     yLen = yLen + hh * 0.25;
  174.                     xdPt5 = CGePointUtil::PolarPoint(xdPt3, 0.0, yLen);
  175.                     xdPt6 = CGePointUtil::PolarPoint(xdPt4, 0.0, yLen);

  176.                     retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  177.                     int rt = acedSSGet(_T("C"), asDblArray(xdPt5), asDblArray(xdPt6), retRb, ss);
  178.                     if (rt != RTNORM)
  179.                     {
  180.                         AcGePoint3d setPosPt(xdPt5.x, xdPt5.y, ptz);
  181.                         AcGePoint3d setAliPt = CGePointUtil::PolarPoint(setPosPt, CMathUtil::PI() * 0.5, hh * 0.5);
  182.                         pAttr->setHorizontalMode(AcDb::kTextLeft);
  183.                         pAttr->setVerticalMode(AcDb::kTextVertMid);
  184.                         pAttr->setPosition(setPosPt);
  185.                         pAttr->setAlignmentPoint(setAliPt);
  186.                         acutRelRb(retRb);
  187.                         acedSSFree(ss);
  188.                         result = false;
  189.                         break;
  190.                     }
  191.                     else
  192.                     {
  193.                         acutRelRb(retRb);
  194.                         acedSSFree(ss);
  195.                         result = true;
  196.                     }
  197.                 }
  198.             }
  199.             if (result)
  200.             {
  201.                 // 设定向下移动限制
  202.                 double yzLen = hh;
  203.                 double yLen = 0;
  204.                 while (yLen < yzLen)
  205.                 {
  206.                     yLen = yLen + hh * 0.25;
  207.                     xdPt7 = CGePointUtil::PolarPoint(xdPt5, CMathUtil::PI() * 1.5, yLen);
  208.                     xdPt8 = CGePointUtil::PolarPoint(xdPt6, CMathUtil::PI() * 1.5, yLen);

  209.                     retRb = acutBuildList(-4, _T("<NOT"), 2, _T("GC200"), -4, _T("NOT>"), RTNONE);
  210.                     int rt = acedSSGet(_T("C"), asDblArray(xdPt7), asDblArray(xdPt8), retRb, ss);
  211.                     if (rt != RTNORM)
  212.                     {
  213.                         AcGePoint3d setPosPt(xdPt7.x, xdPt7.y, ptz);
  214.                         AcGePoint3d setAliPt = CGePointUtil::PolarPoint(setPosPt, CMathUtil::PI() * 0.5, hh * 0.5);
  215.                         pAttr->setHorizontalMode(AcDb::kTextLeft);
  216.                         pAttr->setVerticalMode(AcDb::kTextVertMid);
  217.                         pAttr->setPosition(setPosPt);
  218.                         pAttr->setAlignmentPoint(setAliPt);
  219.                         acutRelRb(retRb);
  220.                         acedSSFree(ss);
  221.                         result = false;
  222.                         break;
  223.                     }
  224.                     else
  225.                     {
  226.                         acutRelRb(retRb);
  227.                         acedSSFree(ss);
  228.                         result = true;
  229.                     }
  230.                 }
  231.                 if (result)
  232.                 {
  233.                     ptArray.append(pt3d);
  234.                 }
  235.             }
  236.             pAttr->close();
  237.             delete pAttrIter;
  238.             pBlk->close();
  239.             pEnt->close();
  240.         }
  241.     }
  242.     acutRelRb(rb);
  243.     if (ptArray.length() > 0)
  244.     {
  245.         CLayerUtil::Add(_T("检查"), 1);
  246.         int i = 0;
  247.         for (i; i < ptArray.length(); i++)
  248.         {
  249.             AcGeVector3d vec(0, 0, 1);
  250.             AcDbCircle *pCircle = new AcDbCircle(ptArray[i], vec, 2.0);
  251.             pCircle->setLayer(_T("检查"));
  252.             CDwgDatabaseUtil::PostToModelSpace(pCircle);
  253.         }
  254.         acutPrintf(_T("\n高程点处理完毕,有: %d 个未处理。已画圆为标记请检查!"), i);
  255.     }
  256. }
  257. else
  258. {
  259.     AfxMessageBox(_T("只限定CASS的合成高程点!"));
  260.     acutRelRb(rb);
  261. }
  262. CDwgDatabaseUtil::setVar(_T("osmode"), iosmode); // 还原捕捉状态值
  263. acDocManager->unlockDocument(acDocManager->curDocument());
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +4 金钱 +30 收起 理由
004 + 1 很给力!
yfy2003 + 3 + 30

查看全部评分

发表于 2015-10-5 22:31:02 | 显示全部楼层
老大又玩啥语言了
 楼主| 发表于 2015-10-5 22:44:25 | 显示全部楼层
钟情ObjectARX的速度
发表于 2015-10-5 23:32:01 | 显示全部楼层
图面检查怎么没有了?郁闷可否给一份!253406939@qq.com谢谢了!期待!!!!!
发表于 2015-10-6 08:04:22 | 显示全部楼层
一级棒,测绘同仁的骄傲,能分享插件最好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-6 07:29 , Processed in 0.178282 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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