ObjectARX进行矩形信息提取

来源:互联网 发布:欧陆高中 美国网络 编辑:程序博客网 时间:2024/05/08 05:14

//矩形信息提取程序

ads_point pt;

ads_name en;

AcDbObjectId eId=0;

acedEntSel("/n请您选择对象:",en,pt);

acdbGetObjectId(eId,en);//获得实体地址

AcDbEntity *pEnt;

acdbOpenObject(pEnt,eId,AcDb::kForRead);//获得实体指针

float Xmax,Xmin,Ymax,Ymin,length,width;

AcGePoint2d cen;

if(pEnt->isKindOf(AcDbPolyline::desc()))//判断图元为矩形

{

AcGePoint2d *p= new AcGePoint2d[4];

AcDbPolyline *pPline=(AcDbPolyline *&)pEnt;

for(int i=0;i<pPline->numVerts();i++)

{

AcGePoint2d pt;

pPline->getPointAt(i,pt);;

p[i]=pt;

}

if(p[0].y==p[1].y)

{

Xmax=((p[0].x-p[1].x)>0)?p[0].x:p[1].x;

Xmin=((p[0].x-p[1].x)<0)?p[0].x:p[1].x;

Ymax=((p[1].y-p[2].y)>0)?p[1].y:p[2].y;

Ymin=((p[1].y-p[2].y)<0)?p[1].y:p[2].y;

}

if(p[0].y!=p[1].y)

{

Xmax=((p[1].x-p[2].x)>0)?p[1].x:p[2].x;

Xmin=((p[1].x-p[2].x)<0)?p[1].x:p[2].x;

Ymax=((p[0].y-p[1].y)>0)?p[2].y:p[1].y;

Ymin=((p[0].y-p[1].y)<0)?p[2].y:p[1].y;

}

cen.x=(Xmax+Xmin)/2;

cen.y=(Ymax+Ymin)/2;

length=((Xmax-Xmin)>(Ymax-Ymin))? (Xmax-Xmin):(Ymax-Ymin);

width=((Xmax-Xmin)<(Ymax-Ymin))? (Xmax-Xmin):(Ymax-Ymin);

}

acutPrintf("/n Type=%s/n Xmax=%f/n Xmin=%f/n Ymax=%f/n Ymin=%f/n cen.x=%f/n cen.y=%f/n length=%f/n width=%f/n",

"矩形",Xmax,Xmin,Ymax,Ymin,cen.x,cen.y,length,width);//矩形信息

pEnt->close();