明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3199|回复: 4

直线、圆弧如何转换成多义线

[复制链接]
发表于 2010-6-21 11:27:00 | 显示全部楼层 |阅读模式

如题直线(AcDbLine圆弧AcDbArc)如何转换成多义线(AcDbPolyline)?

我想给直线添加宽度,故转换为多义线(pline->setLineWeight()不是我的答案

我想用多义线的pPolyline->setWidthsAt(i,PL_Width,PL_Width);

跪求转换方法,

发表于 2010-6-21 20:41:00 | 显示全部楼层

AcDbObjectId PostToMS(AcDbEntity *pEnt)
{
 AcDbBlockTable *pBlkTbl;
 acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,
  AcDb::kForRead);
 AcDbBlockTableRecord *pMS;
 pBlkTbl->getAt(ACDB_MODEL_SPACE,pMS,AcDb::kForWrite);
 pBlkTbl->close();
 AcDbObjectId EntID;
 pMS->appendAcDbEntity(EntID,pEnt);
 pMS->close();
 return EntID;
}

 

static void ROYMyTest_test1(void)
 {
  // Add your code for command ROYMyTest._test1 here
  ads_point pt;
  ads_name ename;
  AcDbObjectId EntID;
  AcDbEntity *pEnt=NULL;
  if (acedEntSel(_T("\nSelect a line or arc:"),ename,pt)!=RTNORM
   || acdbGetObjectId(EntID,ename)!=Acad::eOk
   || acdbOpenAcDbEntity(pEnt,EntID,AcDb::kForRead)!=Acad::eOk)
   return;
  if (!(pEnt->isKindOf(AcDbLine::desc()) || pEnt->isKindOf(AcDbArc::desc())))
  {
   pEnt->close();
   return;
  }
  AcDbLine *pLine;
  AcDbArc *pArc;
  AcGePoint3d ptStart,ptEnd;
  double dBugle,startAngle,endAngle,dAngle;
  if (pEnt->isKindOf(AcDbLine::desc()))
  {
   pLine=AcDbLine::cast(pEnt);
   if (pLine!=NULL)
   {
    ptStart=pLine->startPoint();
    ptEnd=pLine->endPoint();
    dBugle=0;
   }
  }
  else
  {
   pArc=AcDbArc::cast(pEnt);
   if (pArc!=NULL)
   {
    pArc->getStartPoint(ptStart);
    pArc->getEndPoint(ptEnd);
    startAngle=pArc->startAngle();
    endAngle=pArc->endAngle();
    if (endAngle<startAngle)
     endAngle+=8*atan(1.0);
    dAngle=endAngle-startAngle;
    dBugle=tan(dAngle/4);
   }
  }
  if (pEnt->upgradeOpen()!=Acad::eOk)
  {
   pEnt->close();
   return;
  }
  pEnt->erase();
  pEnt->close();

  AcDbPolyline *pPLine;
  pPLine=new AcDbPolyline(2);
  pPLine->addVertexAt(0,asPnt2d(asDblArray(ptStart)),dBugle);
  pPLine->addVertexAt(1,asPnt2d(asDblArray(ptEnd)));
  ostToMS((AcDbEntity*)pPLine);
  pPLine->close();
 }

发表于 2010-6-21 20:42:00 | 显示全部楼层

以上代码仅供参考!

 楼主| 发表于 2010-6-22 16:46:00 | 显示全部楼层

首先感谢

帅哥哟,离线,有人找我吗?
rongyifei

无私的把代码分享出来
 楼主| 发表于 2010-6-22 16:51:00 | 显示全部楼层

困惑我很久以致我自己的代码不能成功转换的就是少了:endAngle+=8*atan(1.0)这句,导致dBugle不对。

非常感谢。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:42 , Processed in 0.165160 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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