1031 lines
22 KiB
C++
1031 lines
22 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2007, SH Software Co. Ltd.
|
|
// = FileName : AecCurveEntity.cpp
|
|
// = Version : ver2.0
|
|
// = Author : zjq
|
|
// = CreateDate : 2002-09-09
|
|
// = Description: $曲线对象基类的定义
|
|
// = Maintainers:
|
|
//
|
|
//-----------------------------------------------------------------------------+
|
|
#include "StdAfx.h"
|
|
#include "AecCurveEntity.h"
|
|
#include "XConfigBase.h"
|
|
#include "XGlobalFunc.h"
|
|
#include "XPrivateGlobalFunc.h"
|
|
|
|
ACRX_NO_CONS_DEFINE_MEMBERS(AecCurveEntity, AcDbCurve);
|
|
AEC_IMPLEMENT_MEMBERS(AecCurveEntity, AcDbCurve);
|
|
|
|
AecCurveEntity::AecCurveEntity()
|
|
{
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::SetBaseCurve(AcDbCurve*)
|
|
{
|
|
return Acad::eNotImplementedYet;
|
|
}
|
|
|
|
AcDbCurve* AecCurveEntity::GetBaseCurve()const
|
|
{
|
|
return NULL; //临时对象,外部析构
|
|
}
|
|
|
|
void AecCurveEntity::UnionScale(double nScale)
|
|
{
|
|
assertWriteEnabled();
|
|
AcGeMatrix3d mat;
|
|
mat.setToScaling(nScale);
|
|
subTransformBy(mat);
|
|
}
|
|
|
|
Adesk::UInt32 AecCurveEntity::subViewportDrawLogicalFlags(AcGiViewportDraw * vd)
|
|
{
|
|
Adesk::UInt32 nRet = AcDbEntity::subViewportDrawLogicalFlags(vd);
|
|
nRet = AEntityBase::ViewportDrawLogicalFlags(vd, nRet);
|
|
|
|
return nRet;
|
|
}
|
|
|
|
Adesk::UInt32 AecCurveEntity::subSetAttributes(AcGiDrawableTraits * traits)
|
|
{
|
|
Adesk::UInt32 nRet = AcDbEntity::subSetAttributes(traits);
|
|
nRet = AEntityBase::SetAttributes(traits, nRet);
|
|
|
|
return nRet;
|
|
}
|
|
|
|
Adesk::Boolean AecCurveEntity::isClosed() const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Adesk::Boolean bRet = pCurve->isClosed();
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::isClosed();
|
|
}
|
|
}
|
|
|
|
Adesk::Boolean AecCurveEntity::isPeriodic() const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Adesk::Boolean bRet = pCurve->isPeriodic();
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::isPeriodic();
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getStartParam(double&pa) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getStartParam(pa);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getStartParam(pa);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getEndParam (double&pa) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getEndParam(pa);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getEndParam(pa);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getStartPoint(AcGePoint3d&pt) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getStartPoint(pt);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getStartPoint(pt);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getEndPoint (AcGePoint3d&pt) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getEndPoint(pt);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getEndPoint(pt);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getPointAtParam(double pa, AcGePoint3d&pt) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getPointAtParam(pa,pt);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getPointAtParam(pa,pt);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getParamAtPoint(const AcGePoint3d& pt, double&pa)const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getParamAtPoint(pt,pa);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getParamAtPoint(pt,pa);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getDistAtParam (double param, double& dist) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getDistAtParam(param,dist);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getDistAtParam(param,dist);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getParamAtDist (double dist, double& param) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getParamAtDist(dist,param);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getParamAtDist(dist,param);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getDistAtPoint (const AcGePoint3d&pt, double&dist)const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getDistAtPoint(pt,dist);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getDistAtPoint(pt,dist);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getPointAtDist (double dist, AcGePoint3d&pt) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getPointAtDist(dist,pt);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getPointAtDist(dist,pt);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getFirstDeriv (double param,AcGeVector3d& firstDeriv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getFirstDeriv(param,firstDeriv);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getFirstDeriv(param,firstDeriv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getFirstDeriv (const AcGePoint3d&pt,AcGeVector3d& firstDeriv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getFirstDeriv(pt,firstDeriv);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getFirstDeriv(pt,firstDeriv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getSecondDeriv (double param,AcGeVector3d& secDeriv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getSecondDeriv(param,secDeriv);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getSecondDeriv(param,secDeriv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getSecondDeriv (const AcGePoint3d&pt,AcGeVector3d& secDeriv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getSecondDeriv(pt,secDeriv);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getSecondDeriv(pt,secDeriv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getClosestPointTo(const AcGePoint3d& givenPnt,
|
|
AcGePoint3d& pointOnCurve,
|
|
Adesk::Boolean extend) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getClosestPointTo(givenPnt,pointOnCurve,extend);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getClosestPointTo(givenPnt,pointOnCurve,extend);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getClosestPointTo(const AcGePoint3d& givenPnt,
|
|
const AcGeVector3d& direction,
|
|
AcGePoint3d& pointOnCurve,
|
|
Adesk::Boolean extend) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getClosestPointTo(givenPnt,direction,pointOnCurve,extend);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getClosestPointTo(givenPnt,direction,pointOnCurve,extend);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getOrthoProjectedCurve(const AcGePlane& plane,
|
|
AcDbCurve*& projCrv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbCurve* pCurve1 = NULL;
|
|
Acad::ErrorStatus bRet = pCurve->getOrthoProjectedCurve(plane,pCurve1);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
AecCurveEntity* pCurveEnt = (AecCurveEntity*)clone();
|
|
bRet = pCurveEnt->SetBaseCurve(pCurve1);
|
|
projCrv = pCurveEnt;
|
|
|
|
delete pCurve1;
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getOrthoProjectedCurve(plane,projCrv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getProjectedCurve(const AcGePlane& plane,
|
|
const AcGeVector3d& projDir,
|
|
AcDbCurve*& projCrv) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbCurve* pCurve1 = NULL;
|
|
Acad::ErrorStatus bRet = pCurve->getProjectedCurve(plane,projDir,pCurve1);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
AecCurveEntity* pCurveEnt = (AecCurveEntity*)clone();
|
|
bRet = pCurveEnt->SetBaseCurve(pCurve1);
|
|
projCrv = pCurveEnt;
|
|
|
|
delete pCurve1;
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getProjectedCurve(plane,projDir,projCrv);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getOffsetCurves(double offsetDist,
|
|
AcDbVoidPtrArray& offsetCurves) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbVoidPtrArray offsetCurves0;
|
|
Acad::ErrorStatus bRet = pCurve->getOffsetCurves(offsetDist,offsetCurves0);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
for (long i = 0; i < offsetCurves0.length(); i++)
|
|
{
|
|
AecCurveEntity*pCurveEnt = (AecCurveEntity*)clone();
|
|
pCurveEnt->SetBaseCurve((AcDbCurve*)offsetCurves0[i]);
|
|
offsetCurves.append(pCurveEnt);
|
|
}
|
|
|
|
ReleaseEntSet(offsetCurves0);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getOffsetCurves(offsetDist,offsetCurves);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getOffsetCurvesGivenPlaneNormal(
|
|
const AcGeVector3d& normal,
|
|
double offsetDist,
|
|
AcDbVoidPtrArray& offsetCurves) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbVoidPtrArray offsetCurves0;
|
|
Acad::ErrorStatus bRet = pCurve->getOffsetCurvesGivenPlaneNormal(normal,offsetDist,offsetCurves0);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
for (long i = 0; i < offsetCurves0.length(); i++)
|
|
{
|
|
AecCurveEntity*pCurveEnt = (AecCurveEntity*)clone();
|
|
pCurveEnt->SetBaseCurve((AcDbCurve*)offsetCurves0[i]);
|
|
offsetCurves.append(pCurveEnt);
|
|
}
|
|
|
|
ReleaseEntSet(offsetCurves0);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
return AcDbCurve::getOffsetCurvesGivenPlaneNormal(normal,offsetDist,offsetCurves);
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getSpline(AcDbSpline*& spline) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getSpline(spline);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getSpline(spline);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getSplitCurves (const AcGeDoubleArray& params,
|
|
AcDbVoidPtrArray& curveSegments) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbVoidPtrArray curveSegments0;
|
|
Acad::ErrorStatus bRet = pCurve->getSplitCurves(params,curveSegments0);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
for (long i = 0; i < curveSegments0.length(); i++)
|
|
{
|
|
AecCurveEntity*pCurveEnt = (AecCurveEntity*)clone();
|
|
pCurveEnt->SetBaseCurve((AcDbCurve*)curveSegments0[i]);
|
|
curveSegments.append(pCurveEnt);
|
|
}
|
|
|
|
ReleaseEntSet(curveSegments0);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getSplitCurves(params,curveSegments);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getSplitCurves (const AcGePoint3dArray& points,
|
|
AcDbVoidPtrArray& curveSegments) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
AcDbVoidPtrArray curveSegments0;
|
|
Acad::ErrorStatus bRet = pCurve->getSplitCurves(points,curveSegments0);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
for (long i = 0; i < curveSegments0.length(); i++)
|
|
{
|
|
AecCurveEntity*pCurveEnt = (AecCurveEntity*)clone();
|
|
pCurveEnt->SetBaseCurve((AcDbCurve*)curveSegments0[i]);
|
|
curveSegments.append(pCurveEnt);
|
|
}
|
|
|
|
ReleaseEntSet(curveSegments0);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getSplitCurves(points,curveSegments);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::extend(double newParam)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->extend(newParam);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
bRet = SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::extend(newParam);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::extend(Adesk::Boolean extendStart,
|
|
const AcGePoint3d& toPoint)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->extend(extendStart,toPoint);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
bRet = SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::extend(extendStart,toPoint);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getArea(double&area) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getArea(area);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getArea(area);
|
|
}
|
|
}
|
|
|
|
Adesk::Boolean AecCurveEntity::isPlanar() const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Adesk::Boolean bRet = pCurve->isPlanar();
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::isPlanar();
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::getPlane(AcGePlane&plane, AcDb::Planarity&pr) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getPlane(plane,pr);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::getPlane(plane,pr);
|
|
}
|
|
}
|
|
|
|
void AecCurveEntity::getEcs(AcGeMatrix3d& retVal) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
pCurve->getEcs(retVal);
|
|
delete pCurve;
|
|
}
|
|
else
|
|
{
|
|
AcDbCurve::getEcs(retVal);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::GetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
int gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
if (XGeLib::g_bSnapCurveBase)
|
|
{
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds);
|
|
delete pCurve;
|
|
|
|
// add by zjq on 100818 墙体捕捉时允许捕捉墙线和保温线
|
|
if (_tcsicmp(isA()->name(),_T("AecDbWall")) != 0)
|
|
|
|
{
|
|
return bRet;
|
|
}
|
|
}
|
|
}
|
|
|
|
return AEntityBase::GetOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds);
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::GetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
int gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds,
|
|
const AcGeMatrix3d& insertionMat) const
|
|
{
|
|
#if ARX<17
|
|
return Acad::eNotImplemented;
|
|
#else
|
|
assertReadEnabled();
|
|
|
|
if (g_bSnapCurveBase)
|
|
{
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getOsnapPoints(osnapMode,gsSelectionMark,pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds,insertionMat);
|
|
|
|
delete pCurve;
|
|
|
|
// add by zjq on 100818 墙体捕捉时允许捕捉墙线和保温线
|
|
if (_tcsicmp(isA()->name(),_T("AecDbWall")) != 0)
|
|
|
|
{
|
|
return bRet;
|
|
}
|
|
}
|
|
}
|
|
|
|
return AEntityBase::GetOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds,insertionMat);
|
|
#endif
|
|
}
|
|
|
|
#if (ARX > 15 && ARX < 18)
|
|
Acad::ErrorStatus AecCurveEntity::subGetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeFastTransform& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getOsnapPoints(osnapMode,gsSelectionMark,
|
|
pickPoint,lastPoint,viewXform,snapPoints,geomIds);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subGetOsnapPoints(osnapMode,gsSelectionMark,
|
|
pickPoint,lastPoint,viewXform,snapPoints,geomIds);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subGetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeFastTransform& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds,
|
|
const AcGeMatrix3d& insertionMat) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds,insertionMat);
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subGetOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
|
|
lastPoint,viewXform,snapPoints,geomIds,insertionMat);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subTransformBy(const AcGeFastTransform& xform)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->transformBy(xform);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subTransformBy(xform);
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subGetGripPoints(AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds)const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getGripPoints(gripPoints,osnapModes,geomIds);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subGetGripPoints(gripPoints,osnapModes,geomIds);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subMoveGripPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->moveGripPointsAt(indices,offset);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subMoveGripPointsAt(indices,offset);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subGetStretchPoints(
|
|
AcGePoint3dArray& stretchPoints) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->getStretchPoints(stretchPoints);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subGetStretchPoints(stretchPoints);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subMoveStretchPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->moveStretchPointsAt(indices,offset);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subMoveStretchPointsAt(indices,offset);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::IntersectWith(const AcDbEntity* pEnt,
|
|
AcDb::Intersect intType,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker ,
|
|
INT_PTR otherGsMarker ) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->intersectWith(pEnt,intType,points,thisGsMarker,otherGsMarker);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subIntersectWith(pEnt,intType,points,thisGsMarker,otherGsMarker);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::IntersectWith(const AcDbEntity* pEnt,
|
|
AcDb::Intersect intType,
|
|
const AcGePlane& projPlane,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker,
|
|
INT_PTR otherGsMarker) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->intersectWith(pEnt,intType,projPlane,points,thisGsMarker,otherGsMarker);
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subIntersectWith(pEnt,intType,projPlane,points,thisGsMarker,otherGsMarker);
|
|
}
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::TransformBy(const AcGeMatrix3d& xform)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AecCurveEntity::subTransformBy(xform);
|
|
|
|
AcDbCurve* pCurve = GetBaseCurve();
|
|
if (pCurve != NULL)
|
|
{
|
|
Acad::ErrorStatus bRet = pCurve->transformBy(xform);
|
|
if (bRet == Acad::eOk)
|
|
{
|
|
SetBaseCurve(pCurve);
|
|
}
|
|
|
|
delete pCurve;
|
|
return bRet;
|
|
}
|
|
else
|
|
{
|
|
return AcDbCurve::subTransformBy(xform);
|
|
}
|
|
}
|
|
|
|
#if ARX> 17
|
|
|
|
void AecCurveEntity::subGripStatus(const AcDb::GripStat status)
|
|
{
|
|
assertReadEnabled();
|
|
AEntityBase::GripStatus(status);
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subGetGripPoints(AcDbGripDataPtrArray& grips,
|
|
const double curViewUnitSize,
|
|
const int gripSize,
|
|
const AcGeVector3d& curViewDir,
|
|
const int bitflags) const
|
|
{
|
|
assertReadEnabled();
|
|
return AEntityBase::GetGripPoints(grips,curViewUnitSize,gripSize,curViewDir,bitflags);
|
|
}
|
|
|
|
Acad::ErrorStatus AecCurveEntity::subMoveGripPointsAt(const AcDbVoidPtrArray& appData,
|
|
const AcGeVector3d& offset,
|
|
const int bitflags)
|
|
{
|
|
assertWriteEnabled();
|
|
return AEntityBase::MoveGripPointsAt(appData,offset,bitflags);
|
|
}
|
|
|
|
#endif
|
|
|
|
AcDbObjectId AecCurveEntity::InitLayer(LPCTSTR pszLayer, BOOL bApplyChange )
|
|
{
|
|
AcDbObjectId idLay;
|
|
XConfigBase* pBase = GetGlobalConfigBase();
|
|
|
|
if (pBase != NULL)
|
|
{
|
|
idLay = pBase->InitLayer(pszLayer,bApplyChange);
|
|
}
|
|
|
|
return idLay;
|
|
}
|
|
|
|
void InitCurveEntity(BOOL bTrue)
|
|
{
|
|
if (bTrue)
|
|
{
|
|
AecCurveEntity::rxInit();
|
|
}
|
|
else
|
|
{
|
|
deleteAcRxClass(AecCurveEntity::desc());
|
|
}
|
|
} |