合并各种情况的圆弧

static void zffObjectARX_MyCommand18(void)
{
ads_name ss;
acedSSGet(NULL,NULL,NULL,NULL,ss);
long len;
acedSSLength(ss,&len);
double startAng,endAng;
double radius;
AcGePoint3d center;

for (int i=0;i<len;)
{
AcDbArc* pArc=NULL;
AcDbObjectId entId;
ads_name name,name1;
acedSSName(ss,i,name);
acdbGetObjectId(entId,name);
acdbOpenObject(pArc,entId,AcDb::kForWrite);
double arcStartAng=pArc->startAngle();
double arcEndAng=pArc->endAngle();
if (arcEndAng==0)
{
arcEndAng+=2*pi();
}
AcGePoint3d arcCenter=pArc->center();
double arcRadius=pArc->radius();
radius=arcRadius;
center=arcCenter;
startAng=arcStartAng;
endAng=arcEndAng;

for (int j=i+1;j<len;)
{
AcDbArc* pArc1=NULL;
acedSSName(ss,j,name1);
acdbGetObjectId(entId,name1);
acdbOpenObject(pArc1,entId,AcDb::kForWrite);
double arc1StartAng=pArc1->startAngle();
double arc1EndAng=pArc1->endAngle();
if (arc1EndAng==0)
{
arc1EndAng+=2*pi();
}
AcGePoint3d arc1Center=pArc1->center();
double arc1Radius=pArc1->radius();
if (arcCenter==arc1Center && arcRadius==arc1Radius)
{
if (arc1StartAng<startAng)
{
startAng=arc1StartAng;
}
if (arc1EndAng>endAng)
{
endAng=arc1EndAng;
}
acedSSDel(name1,ss);
pArc1->erase();
acedSSLength(ss,&len);
}
else
{
j++;
}
pArc1->close();
}
acedSSDel(name,ss);
pArc->erase();
pArc->close();
acedSSLength(ss,&len);
AcDbArc* pArcRe=new AcDbArc(center,radius,startAng,endAng);
AddToModelSpace(pArcRe);
}
}

转载于:https://www.cnblogs.com/NewAutoMan/p/6482998.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值