Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipebase/TDbImpPartBase.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

592 lines
14 KiB
C++

#include "stdafx.h"
#include "TDbImpPartBase.h"
#include "acgs.h"
#include "gs.h"
#include "TImpSpecPart.h"
#include "TDbFittingCreatorService.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
TDbImpPartBase::TDbImpPartBase(TDbPartBase* pEnt)
: m_XDataMap(*pEnt->GetSpecialtyData())
{
m_pSpecPart = NULL;
m_pOwnerEnt = pEnt;
m_nDwgVersion = 1;
}
TDbImpPartBase::~TDbImpPartBase()
{
if (m_pSpecPart != NULL)
{
m_pSpecPart->Destroy();
}
}
void TDbImpPartBase::SetVersion(int nVersion)
{
m_nDwgVersion = nVersion;
}
BOOL TDbImpPartBase::GetInterface(int nIndex,TInterface& pipeInterface) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->GetInterface(nIndex,pipeInterface);
}
return FALSE;
}
BOOL TDbImpPartBase::GetInterface(const AcGePoint3d& ptCon,TInterface& pipeInterface) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->GetInterface(ptCon,pipeInterface);
}
return FALSE;
}
BOOL TDbImpPartBase::HasInterface(const AcGePoint3d& ptCon,const AcGeVector3d& vtDir)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->HasInterface(ptCon,vtDir);
}
return FALSE;
}
int TDbImpPartBase::GetInterfaceCount() const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->GetInterfaceCount();
}
return 0;
}
BOOL TDbImpPartBase::SetInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->SetInterfaceRelation(ptConnect,idConnect);
}
return 0;
}
BOOL TDbImpPartBase::RemoveInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->RemoveInterfaceRelation(ptConnect,idConnect);
}
return 0;
}
BOOL TDbImpPartBase::NotifyInterfaceToModify(const TInterfaceModifyMsg& iModiMsg,TInterfaceModifyMsgs& iModiMsgs)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->NotifyInterfaceToModify(iModiMsg,iModiMsgs);
}
return FALSE;
}
TDbXDataMap* TDbImpPartBase::GetSpecialtyData()
{
return &m_XDataMap;
}
BOOL TDbImpPartBase::AddCoverEdge(AcDbObjectId& id,TComplexCurve& curEdge)
{
return FALSE;
}
BOOL TDbImpPartBase::RemoveCoverEdge(AcDbObjectId& id)
{
return FALSE;
}
BOOL TDbImpPartBase::GetGeomExtentsEdge(TComplexCurve& crLoop)
{
return FALSE;
}
void TDbImpPartBase::GetKindName(CString& sName)
{
sName = _T("TCH_DBFITTING");
if (m_pSpecPart != NULL)
{
m_pSpecPart->GetKindName(sName);
}
}
BOOL TDbImpPartBase::ReCreateByXDataMap()
{
CString sService;
m_XDataMap.GetAt(KEY_FITSRV,sService);
TDbFittingCreatorService* pFitCreatorService = NULL;
pFitCreatorService = (TDbFittingCreatorService*)acrxServiceDictionary->at(sService);
if (pFitCreatorService != NULL)
{
TImpSpecPart* pNewFitting = NULL;
pNewFitting = pFitCreatorService->CreateSpecialPart(&m_XDataMap,m_pOwnerEnt);
if (pNewFitting != NULL)
{
if (m_pSpecPart != NULL)
m_pSpecPart->Destroy();
m_pSpecPart = pNewFitting;
return TRUE;
}
}
return FALSE;
}
Acad::ErrorStatus TDbImpPartBase::setNormal(const AcGeVector3d& vtNorm)
{
m_XDataMap.SetAt(KEY_NORMAL,vtNorm);
return Acad::eOk;
}
AcGeVector3d TDbImpPartBase::normal() const
{
AcGeVector3d vt = AcGeVector3d::kZAxis;
m_XDataMap.GetAt(KEY_NORMAL,vt);
return vt;
}
Acad::ErrorStatus TDbImpPartBase::copyFrom(const TDbImpPartBase* pSrc)
{
if (pSrc != NULL)
{
m_XDataMap.CopyFrom(&pSrc->m_XDataMap);
ReCreateByXDataMap();
return Acad::eOk;
}
return Acad::eInvalidInput;
}
void TDbImpPartBase::list() const
{
if (m_pSpecPart != NULL)
{
m_pSpecPart->list();
}
}
Acad::ErrorStatus TDbImpPartBase::dwgInFields(AcDbDwgFiler* pFiler)
{
// change by hh 2013-9-2 版本小于2时 才读取XDataMap
// m_XDataMap.dwgInFields(pFiler);
if(2 > m_nDwgVersion)
{
m_XDataMap.dwgInFields(pFiler);
}
ReCreateByXDataMap();
return Acad::eOk;
}
Acad::ErrorStatus TDbImpPartBase::dwgOutFields(AcDbDwgFiler* pFiler) const
{
// Write version number.
// change by hh 2013-9-2 TXDataMap改在底层中进行读写
// m_XDataMap.dwgOutFields(pFiler);
if (g_nSaveTArchVer <= 9)
{
m_XDataMap.dwgOutFields(pFiler);
}
return Acad::eOk;
}
Acad::ErrorStatus TDbImpPartBase::dxfInFields(AcDbDxfFiler* pFiler)
{
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::explode(AcDbVoidPtrArray& entitySet) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->explode(entitySet);
}
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::extend(Adesk::Boolean extendStart,
const AcGePoint3d& toPoint)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->extend(extendStart,toPoint);
}
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::extend(double newParam)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->extend(newParam);
}
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::getClassID(CLSID* pClsid) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getClassID(pClsid);
}
return Acad::eOutOfMemory;
}
Acad::ErrorStatus TDbImpPartBase::getClosestPointTo(const AcGePoint3d& givenPnt,
AcGePoint3d& pointOnCurve,
Adesk::Boolean extend) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getClosestPointTo(givenPnt,pointOnCurve,extend);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getClosestPointTo(const AcGePoint3d& givenPnt,
const AcGeVector3d& direction,
AcGePoint3d& pointOnCurve,
Adesk::Boolean extend) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getClosestPointTo(givenPnt,direction,pointOnCurve,extend);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getDistAtParam(double param,
double& dist) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getDistAtParam(param,dist);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getDistAtPoint(const AcGePoint3d& x0,
double& x1)const
{
if (m_pSpecPart != NULL)
{
m_pSpecPart->getDistAtPoint(x0,x1);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getEndParam(double& x0) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getEndParam(x0);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getEndPoint(AcGePoint3d& x0) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getEndPoint(x0);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getFirstDeriv(const AcGePoint3d& x0,
AcGeVector3d& firstDeriv) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getFirstDeriv(x0,firstDeriv);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getFirstDeriv(double param,
AcGeVector3d& firstDeriv) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getFirstDeriv(param,firstDeriv);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getGeomExtents(AcDbExtents& extents) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getGeomExtents(extents);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getGripPoints(gripPoints,osnapModes,geomIds);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getOffsetCurves(double offsetDist,
AcDbVoidPtrArray& offsetCurves) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getOffsetCurves(offsetDist,offsetCurves);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getOsnapPoints(osnapMode,gsSelectionMark,
pickPoint,lastPoint,
viewXform,snapPoints,
geomIds);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getParamAtDist(double dist,
double& param) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getParamAtDist(dist,param);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getParamAtPoint(const AcGePoint3d& x0,
double& x1)const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getParamAtPoint(x0,x1);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getPointAtDist(double x0,
AcGePoint3d& x1) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getPointAtDist(x0,x1);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getPointAtParam(double x0,
AcGePoint3d& x1) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getPointAtParam(x0,x1);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getSplitCurves(const AcGeDoubleArray& params,
AcDbVoidPtrArray& curveSegments) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getSplitCurves(params,curveSegments);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getSplitCurves(const AcGePoint3dArray& points,
AcDbVoidPtrArray& curveSegments) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getSplitCurves(points,curveSegments);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getStartParam(double& x0) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getStartParam(x0);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getStartPoint(AcGePoint3d& x0) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getStartPoint(x0);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::getStretchPoints(AcGePoint3dArray& stretchPoints) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->getStretchPoints(stretchPoints);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::intersectWith(const AcDbEntity* pEnt,
AcDb::Intersect intType,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->intersectWith(pEnt,intType,points,thisGsMarker,otherGsMarker);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::intersectWith(const AcDbEntity* pEnt,
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->intersectWith(pEnt,intType,projPlane,points,thisGsMarker,otherGsMarker);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::moveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->moveGripPointsAt(indices,offset);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::moveStretchPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->moveStretchPointsAt(indices,offset);
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus TDbImpPartBase::transformBy(const AcGeMatrix3d& xform)
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->transformBy(xform);
}
return Acad::eNotApplicable;
}
Acad::ErrorStatus TDbImpPartBase::ExplodeOrDraw2d(XExplodeDraw &mode) const
{
if (m_pSpecPart != NULL)
{
AcGeVector3d viewDir(0,0,1);
GetActiveViewPortInfo(viewDir);
if (viewDir.isParallelTo(AcGeVector3d::kZAxis))
{
if (m_pOwnerEnt->cloneMeForDragging())
{
m_pSpecPart->ExplodeOrDraw2d(mode);
}
else
{
//同时处理遮挡显示...
m_pSpecPart->ExplodeOrDraw2d(mode);
}
}
else
{
acedUpdateDisplay();
return Acad::eNotImplementedYet;
}
}
return Acad::eOk;
}
Acad::ErrorStatus TDbImpPartBase::ExplodeOrDraw3d(XExplodeDraw &mode) const
{
if (m_pSpecPart != NULL)
{
m_pSpecPart->ExplodeOrDraw3d(mode);
return Acad::eOk;
}
return Acad::eNotImplementedYet;
}
BOOL TDbImpPartBase::GetActiveViewPortInfo(AcGeVector3d& viewDir) const
{
viewDir = AcGeVector3d::kZAxis;
struct resbuf rb;
memset (&rb, 0, sizeof (struct resbuf));
acedGetVar (_T("VIEWDIR"), &rb);
viewDir.set(rb.resval.rpoint[X], rb.resval.rpoint[Y], rb.resval.rpoint[Z]);
viewDir.normalize();
return TRUE;
}
BOOL TDbImpPartBase::MakeCurves(TComplexCurve& cplCurve) const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->MakeCurves(cplCurve);
}
return FALSE;
}
AcDbPolyline* TDbImpPartBase::MakePolyCurve() const
{
if (m_pSpecPart != NULL)
{
return m_pSpecPart->MakePolyCurve();
}
return NULL;
}