autocad.net 画多段线_2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571改变多段线区直

代码:

#include "StdAfx.h"

#include "StdArx.h"

#include

#include "..\..\Common\Others\ConvertUtil.h"

#include

#include "..\..\Common\Entity\ArcUtil.h"

#include "..\..\Common\Document\DwgDatabaseUtil.h"

#include

#include

void ZffMyProjectchangeline()

{

ads_name polyLinename;

ads_point pnt;

if (acedEntSel("\n请选择多段线的条直线段!",polyLinename,pnt)!=RTNORM)

{

return;

}

AcDbObjectId polyLineId;

acdbGetObjectId(polyLineId,polyLinename);

AcDbEntity *pEnt=NULL;

acdbOpenObject(pEnt,polyLineId,AcDb::kForWrite);

if (pEnt->isKindOf(AcDbPolyline::desc()))

{

AcDbPolyline *pPolyline=AcDbPolyline::cast(pEnt);

pEnt->close();

int vtnum=pPolyline->numVerts();

AcGePoint3dArray pts;

AcGePoint3d pt;

for(int i=0; i

{

pPolyline->getPointAt(i, pt);

pts.append(pt);

}

AcDbVoidPtrArray curves;

pPolyline->getSplitCurves(pts,curves);

bool nRb=true;

for (i=0;i

{

AcDbCurve *pCurve=static_cast(curves[i]);

if (nRb)

{

AcGeLine2d geLine;

AcGePoint3d pt1,pt2;

pCurve->getStartPoint(pt1);

pCurve->getEndPoint(pt2);

AcGePoint2d pt12d,pt22d,pnt2d,pt2d;

ads_point pt;

AcGePoint3d ptOnArc;

pt12d=CConvertUtil::ToPoint2d(pt1);

pt22d=CConvertUtil::ToPoint2d(pt2);

pnt2d=CConvertUtil::ToPoint2d(asPnt3d(pnt));

geLine.set(pt12d,pt22d);

double tol =1;

if (geLine.distanceTo(pnt2d)

{

nRb=false;

delete pCurve;

pCurve->close();

acedGetPoint(NULL,"\n输入一个点:",pt);

pt2d=CConvertUtil::ToPoint2d(asPnt3d(pt));

AcGeCircArc2d geArc(pt12d, pt2d, pt22d);

AcGePoint2d ptCenter = geArc.center();

double radius = geArc.radius();

AcGeVector2d vecStart(pt12d.x - ptCenter.x, pt12d.y - ptCenter.y);

AcGeVector2d vecEnd(pt22d.x - ptCenter.x, pt22d.y - ptCenter.y);

double startAngle = vecStart.angle();

double endAngle = vecEnd.angle();

AcDbArc *pArc=new AcDbArc(CConvertUtil::ToPoint3d(ptCenter), radius, startAngle, endAngle);

pArc->getClosestPointTo(asPnt3d(pt),ptOnArc);

if (CConvertUtil::ToPoint2d(ptOnArc).distanceTo(pt2d)

{

CDwgDatabaseUtil::PostToModelSpace(pArc);

}

else

{

AcDbArc *pArc2=new AcDbArc(CConvertUtil::ToPoint3d(ptCenter),radius,endAngle,startAngle);

CDwgDatabaseUtil::PostToModelSpace(pArc2);

delete pArc;

}

continue;

}

}

CDwgDatabaseUtil::PostToModelSpace(pCurve);

pCurve->close();

}

acdbOpenObject(pPolyline,polyLineId,AcDb::kForWrite);

pPolyline->erase();

pPolyline->close();

}

pEnt->close();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值