楼主的代码都抄的错误百出。
这里给出修改后的。以后说不定也可以用的着。
-
- Acad::ErrorStatus GetSSExtents(ads_name ss, ads_point &maxpt, ads_point &minpt)
- {
- long len;
- int ret=ads_sslength(ss,&len);
- if(ret!=RTNORM || len<1)
- return Acad::eInvalidInput;
- maxpt[X]= LDBL_MAX;
- //maxpt[Y]= LDBL_MAX;
- //maxpt[Z]= LDBL_MAX;
- //minpt[X]= LDBL_MIN;
- //minpt[Y]= LDBL_MIN;
- //maxpt[Z]= LDBL_MIN;
- AcDbObjectId objId;
- ads_name ename;
- AcDbEntity *pEnt=NULL;
- AcDbExtents extent;
- AcGePoint3d pt1,pt2;
- for (long i = 0;i < len;i++)
- {
- if (acedSSName(ss, i, ename) != RTNORM || \
- acdbGetObjectId(objId,ename) !=Acad::eOk || \
- acdbOpenObject(pEnt,objId,AcDb::kForRead) !=Acad::eOk || \
- pEnt->getGeomExtents(extent) !=Acad::eOk)
- {
- continue;
- }
-
- pt1=extent.maxPoint();
- pt2=extent.minPoint();
- pEnt->close();
- if (maxpt[X]==LDBL_MAX)
- {
- maxpt[X]=pt1.x;
- maxpt[Y]=pt1.y;
- maxpt[Z]=pt1.z;
- minpt[X]=pt2.x;
- minpt[Y]=pt2.y;
- minpt[Z]=pt2.z;
- }
- //下面的段应该写成函数的,太啰嗦了。
- if (pt1.x > maxpt[X]) maxpt[X]=pt1.x;
- if (pt1.y > maxpt[Y]) maxpt[Y]=pt1.y;
- if (pt1.z > maxpt[Z]) maxpt[Z]=pt1.z;
- if (pt2.x < minpt[X]) minpt[X]=pt2.x;
- if (pt2.y < minpt[Y]) minpt[Y]=pt2.y;
- if (pt2.z < minpt[Z]) minpt[Z]=pt2.z;
- }
- return Acad::eOk;
- }
|