请问龙龙仔,如何得到实体质心?
用VLISP如何得到一个封闭Pline线的质心?谢谢! 查看
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=2277 /*********************************************************************
**
**getCurveProp: 求闭合曲线的质心
**
******************************************/
struct Curve_Prop {
AcGePoint3dorigin;
AcGeVector3d xAxis;
AcGeVector3d yAxis;
double perimeter;
double area;
AcGePoint2dcentroid;
double momInertia;
double prodInertia;
double prinMoments;
AcGeVector2d prinAxes;
double radiiGyration;
AcGePoint2dextentsLow;
AcGePoint2dextentsHigh;
};
Acad::ErrorStatus getCurveProp(AcDbEntity * pEnt,Curve_Prop & mCurveInfo)
{ AcDbCurve *pCurve;
AcDbRegion *pRegion;
AcDbVoidPtrArray curves,regions;
AcDbLine *mLine=NULL;
AcGePoint3d spt,ept;
Acad::ErrorStatus es;
AcDbPolyline *pLwpoly=NULL;
int type=0,type1=0;
if (pEnt->isKindOf(AcDbLine::desc())){
return Acad::eNotImplementedYet;
}
if (pCurve=AcDbCurve::cast(pEnt)){
if (pEnt->isKindOf(AcDb2dPolyline::desc())){
if (Poly2dToLWPoly(pEnt,pLwpoly)!=Acad::eOk){
return Acad::eNotImplementedYet;
}
pCurve=(AcDbCurve *)pLwpoly;
}
curves.append((void *)pCurve);
if ((pCurve->isClosed())!=Adesk::kTrue){
pCurve->getStartPoint(spt);
pCurve->getEndPoint(ept);
mLine=new AcDbLine(spt,ept);
curves.append((void *)mLine);
}
es=AcDbRegion::createFromCurves(curves,regions);
if (es!=Acad::eOk) return Acad::eNotImplementedYet;
if (regions.length()<=0) return Acad::eNotImplementedYet;
pRegion=(AcDbRegion *)regions.at(0);
type=1;
}
else if (pRegion=AcDbRegion::cast(pEnt)){
}
else{
return Acad::eNotImplementedYet;
}
mCurveInfo.origin.set(0,0,0);
resbuf ucs;
acedGetVar(_T("UCSXDIR"),&ucs);
mCurveInfo.xAxis=asPnt3d(ucs.resval.rpoint).asVector();
acedGetVar(_T("UCSYDIR"),&ucs);
mCurveInfo.yAxis=asPnt3d(ucs.resval.rpoint).asVector();
pRegion->getAreaProp(mCurveInfo.origin,mCurveInfo.xAxis,mCurveInfo.yAxis,mCurveInfo.perimeter,
mCurveInfo.area,mCurveInfo.centroid,mCurveInfo.momInertia,
mCurveInfo.prodInertia,mCurveInfo.prinMoments,mCurveInfo.prinAxes,
mCurveInfo.radiiGyration,mCurveInfo.extentsLow,mCurveInfo.extentsHigh);
if (type){
delete pRegion;
if (mLine!=NULL){
double len;
AcGePoint3d pt;
len=mLine->startPoint().distanceTo(mLine->endPoint());
mCurveInfo.perimeter-=len;
delete mLine;
}
if (pLwpoly!=NULL)
delete pLwpoly;
}
return Acad::eOk;
}
页:
[1]