王咣生 发表于 2003-9-8 15:38:00

请问龙龙仔,如何得到实体质心?

用VLISP如何得到一个封闭Pline线的质心?
谢谢!

龙龙仔 发表于 2003-9-8 16:45:00

查看
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=2277

刘仁钊 发表于 2017-10-17 16:20:13

/*********************************************************************
**
**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]
查看完整版本: 请问龙龙仔,如何得到实体质心?