netspyboy 发表于 2010-6-21 11:27:00

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

如题直线(AcDbLine)圆弧(AcDbArc)如何转换成多义线(AcDbPolyline)?
我想给直线添加宽度,故转换为多义线(pline->setLineWeight()不是我的答案)
我想用多义线的pPolyline->setWidthsAt(i,PL_Width,PL_Width);
跪求转换方法,

rongyifei 发表于 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 (endAngleupgradeOpen()!=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)));
&nbspostToMS((AcDbEntity*)pPLine);
pPLine->close();
}

rongyifei 发表于 2010-6-21 20:42:00

以上代码仅供参考!

netspyboy 发表于 2010-6-22 16:46:00

首先感谢
http://bbs.mjtd.com/Skins/Default/ofMale.gif

无私的把代码分享出来

netspyboy 发表于 2010-6-22 16:51:00

困惑我很久以致我自己的代码不能成功转换的就是少了:endAngle+=8*atan(1.0)这句,导致dBugle不对。
非常感谢。
页: [1]
查看完整版本: 直线、圆弧如何转换成多义线