Files
envi-code/SourceCode/Code2026/tg_shs/shs_geLib/TDbCurveEntity.cpp
T
2026-09-28 15:28:50 +08:00

1172 lines
25 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TDbCurveEntity.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 上华曲线对象基类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TDbCurveEntity.h"
#include "TConfigBase.h"
#include "TchGlobalFunc.h"
#include "TchPrivateGlobalFunc.h"
ACRX_NO_CONS_DEFINE_MEMBERS(ATSCurveEntity, AcDbCurve);
TCH_IMPLEMENT_MEMBERS(TDbCurveEntity, AcDbCurve);
TDbCurveEntity::TDbCurveEntity()
{
}
Acad::ErrorStatus TDbCurveEntity::SetBaseCurve(AcDbCurve*)
{
return Acad::eNotImplementedYet;
}
AcDbCurve* TDbCurveEntity::GetBaseCurve()const
{
return NULL; //临时对象,外部析构
}
void TDbCurveEntity::UnionScale(double nScale)
{
assertWriteEnabled();
AcGeMatrix3d mat;
mat.setToScaling(nScale);
subTransformBy(mat);
}
Adesk::UInt32 TDbCurveEntity::subViewportDrawLogicalFlags(AcGiViewportDraw * vd)
{
Adesk::UInt32 nRet = AcDbEntity::subViewportDrawLogicalFlags(vd);
nRet = TEntityBase::ViewportDrawLogicalFlags(vd, nRet);
return nRet;
}
Adesk::UInt32 TDbCurveEntity::subSetAttributes(AcGiDrawableTraits * traits)
{
Adesk::UInt32 nRet = AcDbEntity::subSetAttributes(traits);
nRet = TEntityBase::SetAttributes(traits, nRet);
return nRet;
}
//AcGeCurve3d 验证[lfy 2011-8-29]
Adesk::Boolean TDbCurveEntity::isOn(AcDbCurve* pCurve,const AcGePoint3d& pnt,const AcGeTol& tol) const
{
if ( pCurve != NULL)
{
AcDbLine* pLine = AcDbLine::cast(pCurve);
if (pLine != NULL)
{
AcGeLine3d line3d(pLine->startPoint(),pLine->endPoint());
if (line3d.isOn(pnt,tol))
{
return Adesk::kTrue;
}
}
AcDbArc* pArc = AcDbArc::cast(pCurve);
if (pArc != NULL)
{
AcGePoint3d ptSta,ptMid,ptEnd;
pArc->getStartPoint(ptSta);
pArc->getEndPoint(ptEnd);
double dSta = 0.0,dEnd = 0.0;
pArc->getStartParam(dSta);
pArc->getEndParam(dEnd);
pArc->getPointAtParam( (dSta + dEnd) / 2.0,ptMid);
AcGeCircArc3d arc(ptSta,ptMid,ptEnd);
if (arc.isOn(pnt,tol))
{
return Adesk::kTrue;
}
}
//...
}
return Adesk::kFalse;
}
Adesk::Boolean TDbCurveEntity::isOn(AcDbCurve* pCurve,double param,const AcGeTol& tol) const
{
if ( pCurve != NULL)
{
AcDbLine* pLine = AcDbLine::cast(pCurve);
if (pLine != NULL)
{
AcGeLine3d line3d(pLine->startPoint(),pLine->endPoint());
if (line3d.isOn(param,tol))
{
return Adesk::kTrue;
}
}
AcDbArc* pArc = AcDbArc::cast(pCurve);
if (pArc != NULL)
{
AcGePoint3d ptSta,ptMid,ptEnd;
pArc->getStartPoint(ptSta);
pArc->getEndPoint(ptEnd);
double dSta = 0.0,dEnd = 0.0;
pArc->getStartParam(dSta);
pArc->getEndParam(dEnd);
pArc->getPointAtParam( (dSta + dEnd) / 2.0,ptMid);
AcGeCircArc3d arc(ptSta,ptMid,ptEnd);
if (arc.isOn(param,tol))
{
return Adesk::kTrue;
}
}
}
return Adesk::kFalse;
}
Adesk::Boolean TDbCurveEntity::isClosed() const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Adesk::Boolean bRet = pCurve->isClosed();
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::isClosed();
}
}
Adesk::Boolean TDbCurveEntity::isPeriodic() const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Adesk::Boolean bRet = pCurve->isPeriodic();
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::isPeriodic();
}
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::getPointAtParam(double pa, AcGePoint3d&pt) const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Acad::ErrorStatus bRet = pCurve->getPointAtParam(pa,pt);
//lfy 2011-8-29 再确认验证一次
if (bRet != Acad::eOk)
{
if (isOn(pCurve, pa))
{
bRet = Acad::eOk;
}
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getPointAtParam(pa,pt);
}
}
Acad::ErrorStatus TDbCurveEntity::getParamAtPoint(const AcGePoint3d& pt, double&pa)const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Acad::ErrorStatus bRet = pCurve->getParamAtPoint(pt,pa);
//lfy 2011-8-29 再确认验证一次
if (bRet != Acad::eOk)
{
if (isOn(pCurve, pa))
{
bRet = Acad::eOk;
}
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getParamAtPoint(pt,pa);
}
}
Acad::ErrorStatus TDbCurveEntity::getDistAtParam (double param, double& dist) const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Acad::ErrorStatus bRet = pCurve->getDistAtParam(param,dist);
//lfy 2011-8-29 再确认验证一次
if (bRet != Acad::eOk)
{
if (isOn(pCurve, param))
{
bRet = Acad::eOk;
}
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getDistAtParam(param,dist);
}
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::getDistAtPoint (const AcGePoint3d& pt, double& dist)const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Acad::ErrorStatus bRet = pCurve->getDistAtPoint(pt,dist);
//lfy 2011-8-29 再确认验证一次
if (bRet != Acad::eOk)
{
if (isOn(pCurve, dist))
{
bRet = Acad::eOk;
}
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getDistAtPoint(pt,dist);
}
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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)
{
TDbCurveEntity* pCurveEnt = (TDbCurveEntity*)clone();
bRet = pCurveEnt->SetBaseCurve(pCurve1);
projCrv = pCurveEnt;
delete pCurve1;
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getOrthoProjectedCurve(plane,projCrv);
}
}
Acad::ErrorStatus TDbCurveEntity::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)
{
TDbCurveEntity* pCurveEnt = (TDbCurveEntity*)clone();
bRet = pCurveEnt->SetBaseCurve(pCurve1);
projCrv = pCurveEnt;
delete pCurve1;
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getProjectedCurve(plane,projDir,projCrv);
}
}
Acad::ErrorStatus TDbCurveEntity::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++)
{
TDbCurveEntity*pCurveEnt = (TDbCurveEntity*)clone();
pCurveEnt->SetBaseCurve((AcDbCurve*)offsetCurves0[i]);
offsetCurves.append(pCurveEnt);
}
ReleaseEntSet(offsetCurves0);
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getOffsetCurves(offsetDist,offsetCurves);
}
}
Acad::ErrorStatus TDbCurveEntity::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++)
{
TDbCurveEntity*pCurveEnt = (TDbCurveEntity*)clone();
pCurveEnt->SetBaseCurve((AcDbCurve*)offsetCurves0[i]);
offsetCurves.append(pCurveEnt);
}
ReleaseEntSet(offsetCurves0);
}
delete pCurve;
return bRet;
}
else
return AcDbCurve::getOffsetCurvesGivenPlaneNormal(normal,offsetDist,offsetCurves);
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::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++)
{
TDbCurveEntity*pCurveEnt = (TDbCurveEntity*)clone();
pCurveEnt->SetBaseCurve((AcDbCurve*)curveSegments0[i]);
curveSegments.append(pCurveEnt);
}
ReleaseEntSet(curveSegments0);
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getSplitCurves(params,curveSegments);
}
}
Acad::ErrorStatus TDbCurveEntity::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++)
{
TDbCurveEntity*pCurveEnt = (TDbCurveEntity*)clone();
pCurveEnt->SetBaseCurve((AcDbCurve*)curveSegments0[i]);
curveSegments.append(pCurveEnt);
}
ReleaseEntSet(curveSegments0);
}
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::getSplitCurves(points,curveSegments);
}
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::isPlanar() const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Adesk::Boolean bRet = pCurve->isPlanar();
delete pCurve;
return bRet;
}
else
{
return AcDbCurve::isPlanar();
}
}
Acad::ErrorStatus TDbCurveEntity::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 TDbCurveEntity::getEcs(AcGeMatrix3d& retVal) const
{
assertReadEnabled();
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
pCurve->getEcs(retVal);
delete pCurve;
}
else
{
AcDbCurve::getEcs(retVal);
}
}
Acad::ErrorStatus TDbCurveEntity::GetOsnapPoints(
AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const
{
assertReadEnabled();
if (TchGeLib::g_bSnapCurveBase)
{
AcDbCurve* pCurve = GetBaseCurve();
if (pCurve != NULL)
{
Acad::ErrorStatus bRet = pCurve->getOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
lastPoint,viewXform,snapPoints,geomIds);
delete pCurve;
// add by xlc on 100818 墙体捕捉时允许捕捉墙线和保温线
if (_tcsicmp(isA()->name(),_T("TDbWall")) != 0)
{
return bRet;
}
}
}
return TEntityBase::GetOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
lastPoint,viewXform,snapPoints,geomIds);
}
Acad::ErrorStatus TDbCurveEntity::GetOsnapPoints(
AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds,
const AcGeMatrix3d& insertionMat) const
{
#if ADS<16
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 xlc on 100818 墙体捕捉时允许捕捉墙线和保温线
if (_tcsicmp(isA()->name(),_T("TDbWall")) != 0)
{
return bRet;
}
}
}
return TEntityBase::GetOsnapPoints(osnapMode,gsSelectionMark, pickPoint,
lastPoint,viewXform,snapPoints,geomIds,insertionMat);
#endif
}
#if (ADS > 15 && ADS < 18)
Acad::ErrorStatus TDbCurveEntity::subGetOsnapPoints(
AcDb::OsnapMode osnapMode,
int 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 TDbCurveEntity::subGetOsnapPoints(
AcDb::OsnapMode osnapMode,
int 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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::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 TDbCurveEntity::TransformBy(const AcGeMatrix3d& xform)
{
assertWriteEnabled();
TDbCurveEntity::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 ADS > 15
void TDbCurveEntity::subGripStatus(const AcDb::GripStat status)
{
assertReadEnabled();
TEntityBase::GripStatus(status);
}
Acad::ErrorStatus TDbCurveEntity::subGetGripPoints(AcDbGripDataPtrArray& grips,
const double curViewUnitSize,
const int gripSize,
const AcGeVector3d& curViewDir,
const int bitflags) const
{
assertReadEnabled();
return TEntityBase::GetGripPoints(grips,curViewUnitSize,gripSize,curViewDir,bitflags);
}
Acad::ErrorStatus TDbCurveEntity::subMoveGripPointsAt(const AcDbVoidPtrArray& appData,
const AcGeVector3d& offset,
const int bitflags)
{
assertWriteEnabled();
return TEntityBase::MoveGripPointsAt(appData,offset,bitflags);
}
#endif
AcDbObjectId TDbCurveEntity::InitLayer(LPCTSTR pszLayer, BOOL bApplyChange )
{
AcDbObjectId idLay;
TConfigBase* pBase = GetGlobalConfigBase();
if (pBase != NULL)
{
idLay = pBase->InitLayer(pszLayer,bApplyChange);
}
return idLay;
}
//t20
TDbXDataMap* TDbCurveEntity::GetSpecialtyData()
{
if (isWriteEnabled())
{
assertWriteEnabled();
}
else
{
assertReadEnabled();
}
return &m_XDataMap;
}
TDbXDataMap* TDbCurveEntity::GetSpecialtyDataReadOnly() const
{
assertReadEnabled();
return (TDbXDataMap*)&m_XDataMap;
}
BOOL TDbCurveEntity::SetAt(LPCTSTR pszKey,TXData& XData)
{
assertWriteEnabled();
TDbXDataMap* pXMap = GetSpecialtyData();
if (pXMap != NULL)
{
pXMap->SetAt(pszKey,XData);
return TRUE;
}
return FALSE;
}
BOOL TDbCurveEntity::GetAt(LPCTSTR pszKey,TXData& XData) const
{
assertReadEnabled();
TDbXDataMap* pXMap = GetSpecialtyDataReadOnly();
if (pXMap != NULL)
{
return pXMap->GetAt(pszKey,XData);
}
return FALSE;
}