明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1645|回复: 5

多段线换方向

[复制链接]
发表于 2015-8-23 07:44 | 显示全部楼层 |阅读模式
昨天看了有人用LISP写了一个多段线换向的程序,现在我也写了一个,时间仓促,请大家多多指教。第一次发帖
  1. void PostToModelSpace(AcDbEntity *pEnt)
  2. {
  3.   AcDbBlockTable *pBlkTbl;
  4.   acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForRead);
  5.   AcDbBlockTableRecord *pBlkTblRcd;
  6.   pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForWrite);
  7.   pBlkTbl->close();
  8.   AcDbObjectId entId;
  9.   pBlkTblRcd->appendAcDbEntity(entId,pEnt);
  10.   pEnt->close();
  11.   pBlkTblRcd->close();
  12. }


  1. static void XsdkArxProject3HUAN(void)
  2.   {
  3.     // Add your code for command XsdkArxProject3.HUAN here
  4.     ads_name ss,s1;
  5.     struct resbuf *rb = acutBuildList(RTDXF0,L"LWPOLYLINE",RTNONE);
  6.     if (acedSSGet(NULL,NULL,NULL,rb,ss)!=RTNORM)
  7.     {
  8.       return;
  9.     }
  10.         long len;
  11.     if (RTNORM==acedSSLength(ss,&len))
  12.     {
  13.       for (int i = 0; i < len; i++)
  14.       {
  15.         acedSSName(ss,i,s1);
  16.         AcDbObjectId id;
  17.         acdbGetObjectId(id,s1);
  18.         AcDbPolyline *pPline ;
  19.         acdbOpenObject(pPline,id,AcDb::kForWrite);
  20.                 AcGePoint2dArray  ptArray;
  21.         for (int j = 0; j < pPline->numVerts(); j++)
  22.         {
  23.           AcGePoint2d p2d; pPline->getPointAt(j,p2d);
  24.           ptArray.append(p2d);
  25.         }
  26.         ptArray = ptArray.reverse();
  27.         AcDbPolyline *pNewPoly = new AcDbPolyline(ptArray.length());
  28.         for (int k = 0; k < ptArray.length(); k++)
  29.         {
  30.           AcGePoint2d p2d1 = ptArray.at(k);
  31.           pNewPoly->addVertexAt(k,p2d1);
  32.         }
  33.         pNewPoly->setPropertiesFrom(pPline);
  34.         pNewPoly->setXData(pPline->xData());
  35.                 PostToModelSpace(pNewPoly);
  36.                 pPline->erase();
  37.         pPline->close();
  38.       }
  39.     }
  40.     acedSSFree(ss);
  41.     acutRelRb(rb);
  42.   }

发表于 2015-8-23 12:47 | 显示全部楼层
兄弟 你帖子发错地方了 这里是ObjectARX板块
发表于 2015-8-29 21:28 | 显示全部楼层
我记得AcdbPolyline中有一个函数是可以直接获得线上所有点的,还有可以不新建一个多线,可以先获得多线段所有的点,然后把点集顺序颠倒,然后可以在原线上用setPointAt(int,Acgepoint2d)直接反向,这样是不是能更优化点呢?
发表于 2016-1-8 18:59 来自手机 | 显示全部楼层
Curve::reverse();
发表于 2016-11-1 16:41 | 显示全部楼层
不错的程序,谢楼主分享啊。
发表于 2023-1-21 20:10 | 显示全部楼层
如果有弧这个程序不对的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 22:40 , Processed in 0.167788 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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