- #include "Conversion.h"
- // LINE
- Acad::ErrorStatus AcDbCurveToAcGeCurve(AcGeCurve3d * &pGe,const AcDbLine * pLine)
- {
- pGe = new AcGeLineSeg3d(pLine->startPoint(), pLine->endPoint());
- return Acad::eOk;
- }
- Acad::ErrorStatus AcGeCurveToAcDbCurve(AcDbCurve * &pDb,const AcGeLineSeg3d * pGe)
- {
- pDb= new AcDbLine(pGe->startPoint(),pGe->endPoint());
- return Acad::eOk;
- }
- // ARC
- Acad::ErrorStatus AcDbCurveToAcGeCurve(AcGeCurve3d * &pGe,const AcDbArc * pDbArc)
- {
- pGe = new AcGeCircArc3d(
- pDbArc->center(),
- pDbArc->normal(),
- pDbArc->normal().perpVector(),
- pDbArc->radius(),
- pDbArc->startAngle(),
- pDbArc->endAngle());
- return Acad::eOk;
- }
- Acad::ErrorStatus AcGeCurveToAcDbCurve(AcDbCurve * &pDb,const AcGeCircArc3d * pGe)
- {
- if (pGe->isClosed())
- {
- pDb = new AcDbCircle(pGe->center(),pGe->normal(),pGe->radius());
- }
- else
- {
- pDb = new AcDbArc(pGe->center(),pGe->normal(),pGe->radius(),pGe->startAng(),pGe->endAng());
- }
- return Acad::eOk;
- }
- // CIRCLE
- Acad::ErrorStatus AcDbCurveToAcGeCurve(AcGeCurve3d * &pGe,const AcDbCircle * pDbCircle)
- {
- pGe = new AcGeCircArc3d(pDbCircle->center(),pDbCircle->normal(),pDbCircle->radius());
- return Acad::eOk;
- }
- // ELLIPSE
- Acad::ErrorStatus AcDbCurveToAcGeCurve(AcGeCurve3d * &pGe,const AcDbEllipse * pDb)
- {
- pGe = new AcGeEllipArc3d(
- pDb->center(),
- pDb->majorAxis(),
- pDb->minorAxis(),
- pDb->majorAxis().length(),
- pDb->minorAxis().length(),
- pDb->startAngle(),
- pDb->endAngle());
- return Acad::eOk;
- }
- Acad::ErrorStatus AcGeCurveToAcDbCurve(AcDbCurve * &pDb,const AcGeEllipArc3d * pGe)
- {
- pDb = new AcDbEllipse(
- pGe->center(),
- pGe->normal(),
- pGe->majorAxis()*pGe->majorRadius(),
- pGe->minorRadius()/pGe->majorRadius(),
- pGe->startAng(),
- pGe->endAng());
- return Acad::eOk;
- }
- // SPLINE
- Acad::ErrorStatus AcDbCurveToAcGeCurve(AcGeCurve3d * &pGe,const AcDbSpline * pSpline,bool isFit)
- {
- Acad::ErrorStatus es;
- int degree;
- double fitTolerance,controlPtTol,knotTol;
- Adesk::Boolean tangentsExist,tangentStartDef,tangentEndDef,bIsRational,bIsPeriodic,bIsClosed;
- AcGeVector3d startTangent,endTangent;
- AcGePoint3dArray controlPoints,fitPoints;
- AcGeDoubleArray knots,weights;
- bIsClosed = pSpline->isClosed();
- AcGeNurbCurve3d *pNurb = NULL;
- if (pSpline->hasFitData() && isFit)
- {
- AcGeTol tol;
- es = pSpline->getFitData(fitPoints,degree,fitTolerance,tangentsExist,startTangent,endTangent);
- if (es == Acad::eOk)
- {
- tangentStartDef = tangentsExist;
- tangentEndDef = tangentsExist;
- AcGeTol fitTol;
- pSpline->fitTolerance();
- fitTol.setEqualPoint(fitTolerance);
- if (tangentsExist)
- {
- pNurb = new AcGeNurbCurve3d(fitPoints,startTangent,endTangent,tangentStartDef,tangentEndDef,fitTol);
- }
- else
- {
- pNurb = new AcGeNurbCurve3d(fitPoints,fitTol);
- }
- }
- else
- {
- return Acad::eNotImplementedYet;
- }
- }
- else
- {
- es = pSpline->getNurbsData(degree,bIsRational,bIsClosed,bIsPeriodic,controlPoints,knots,weights,controlPtTol,knotTol);
- if (es == Acad::eOk)
- {
- if (bIsRational)
- {
- pNurb = new AcGeNurbCurve3d(degree,knots,controlPoints,weights,bIsPeriodic);
- }
- else
- {
- pNurb = new AcGeNurbCurve3d(degree,knots,controlPoints,bIsPeriodic);
- }
- }