Files

783 lines
18 KiB
C++
Raw Permalink Normal View History

2026-10-04 00:04:20 +08:00
#include "stdafx.h"
2026-09-28 15:28:50 +08:00
#include "encryption.h"
#include "mfcdbdwgfiler.h"
#include "AecDbParamEquipment.h"
#include "paramequimpl.h"
#include "AcGiViewDraw.h"
#include "AecDbXDrawPointer.h"
#ifndef BIM_REC_LEN
#define BIM_REC_LEN _T("_`!@#$^&*BIM_REC_LEN*&^$#@!`_")
#endif
extern void DLLIMPEXP OrthoProjected3DSolid(AcDb3dSolid* pSolidClone,const AcGePlane& plan,AcGeMatrix3d& xformPlanToWorld,AcDbVoidPtrArray& arEntPtrs);
extern void DLLIMPEXP OrthoProjected3DSubMesh(AcDbSubDMesh* pSubMesh,const AcGePlane& plan,AcGeMatrix3d& xformPlanToWorld,AcDbVoidPtrArray& arEntPtrs);
extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt,AcDbDatabase* pDb = NULL,bool bClose = true);
extern void ProjectToPlane(AcDbVoidPtrArray& arEntPtrs,const AcGePlane& plan,AcDbVoidPtrArray& arNewPtrs);
namespace
{
void setType(AecDbObjXDataMap *pXData, int nType)
{
if (pXData)
pXData->SetAt(KEY_TYPE, nType);
}
}
ACRX_DXF_DEFINE_MEMBERS (AecDbParamEquipment, AecDbEntityBase,
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
AcDbProxyEntity::kNoOperation | AcDbProxyEntity::kDisableProxyWarning,
AEC_DBPARAEQUI,
"AecDbParamEquipment"
"|Product Desc: shanghua earthworm app obj"
"|Company: shanghua inc"
"|WEB Address: www.shanghuasoft.com")
Adesk::UInt32 AecDbParamEquipment::kCurrentVersionNumber = 1;
AecDbParamEquipment::AecDbParamEquipment(const int &type): m_pImpl(NULL)
{
m_pImpl = AecDbParamEquipment::createParamEquImpl(type, &m_XDataMap);
}
AecDbParamEquipment::~AecDbParamEquipment(void)
{
DELETE_PTR(m_pImpl);
}
void AecDbParamEquipment::SetType(int nType)
{
assertWriteEnabled();
setType(&m_XDataMap, nType);
}
int AecDbParamEquipment::GetType() const
{
assertReadEnabled();
int nType = 0;
m_XDataMap.GetAt(KEY_TYPE, nType);
return nType;
}
Acad::ErrorStatus AecDbParamEquipment::dwgInFields(AcDbDwgFiler* pFiler)
{
AssertWriteEnabled();
//----- Read parent class information first.
Acad::ErrorStatus es = Acad::eOk;
if ( !pFiler->isKindOf(CMFCDbDwgFiler::desc()))
{
es = AecDbEntityBase::dwgInFields (pFiler) ;
if ( es != Acad::eOk )
return (es) ;
}
//----- Object version number needs to be read first
Adesk::UInt32 version =0 ;
if ( (es = pFiler->readUInt32 (&version)) != Acad::eOk )
return (es) ;
if ( version > AecDbParamEquipment::kCurrentVersionNumber )
return (Acad::eMakeMeProxy);
m_XDataMap.dwgInFields(pFiler);
DELETE_PTR(m_pImpl);
int type = GetType();
m_pImpl = AecDbParamEquipment::createParamEquImpl(type, &m_XDataMap);
return pFiler->filerStatus();
}
Acad::ErrorStatus AecDbParamEquipment::dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
//----- Save parent class information first.
Acad::ErrorStatus es = Acad::eOk;
if ( !pFiler->isKindOf(CMFCDbDwgFiler::desc()))
{
es = AecDbEntityBase::dwgOutFields (pFiler) ;
if ( es != Acad::eOk )
return (es) ;
}
//----- Object version number needs to be saved first
if ( (es =pFiler->writeUInt32 (AecDbParamEquipment::kCurrentVersionNumber)) != Acad::eOk )
return (es) ;
m_XDataMap.dwgOutFields(pFiler);
return pFiler->filerStatus();
}
Acad::ErrorStatus AecDbParamEquipment::dxfInFields(AcDbDxfFiler* pFiler)
{
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::dxfOutFields(AcDbDxfFiler* pFiler) const
{
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subExplode(AcDbVoidPtrArray& entitySet) const
{
return Acad::eOk;
}
void AecDbParamEquipment::subList() const
{
assertReadEnabled();
AecDbEntityBase::subList();
m_XDataMap.List();
}
bool AecDbParamEquipment::GetBimInfoTip(CString& sInfoTip) const
{
assertReadEnabled();
CString sField,sFmt,sVal,sKey;
GetSpecialtyData()->GetAt(KEY_NAME, sVal);
2026-10-04 00:04:20 +08:00
MAKEFIELD(_T("名称"),_T("%s"),sVal,sInfoTip);
2026-09-28 15:28:50 +08:00
int nCount = 0;
GetSpecialtyData()->GetAt(BIM_REC_LEN, nCount);
for (int i = 0;i < nCount;i++)
{
sKey.Format(_T("user%d"), i);
if ( !GetSpecialtyData()->GetAt(sKey,sVal))
break;
MAKEFIELDUSER(_T(""),_T("%s"),sVal,sInfoTip);
}
return true;
}
Acad::ErrorStatus AecDbParamEquipment::copyFrom(const AcRxObject* pSrc)
{
AssertWriteEnabled();
AecDbParamEquipment *pSrcEqu = AecDbParamEquipment::cast(pSrc);
if (!pSrcEqu) return Acad::eInvalidInput;
m_XDataMap.CopyFrom(pSrcEqu->GetSpecialtyData());
2026-10-04 00:04:20 +08:00
//发送提资需要相同的ID
2026-09-28 15:28:50 +08:00
extern CString IDCreate();
Adesk::Int16 nVal = acdbCurDwg()->useri4();
if (nVal != KEY_NOPROTECT)
{
int nVt = 0;
CString sID = IDCreate();
if (m_XDataMap.HasKey(KEY_NO, nVt))
m_XDataMap.SetAt(KEY_NO, sID);
}
m_pImpl = pSrcEqu->cloneImpl(&m_XDataMap);
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subTransformBy(const AcGeMatrix3d& xform)
{
AssertWriteEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
AcGePoint3d pt;
m_pImpl->transformBy(xform);
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subGetGripPoints(AcDbGripDataPtrArray & grips
, const double curViewUnitSize
, const int gripSize
, const AcGeVector3d & curViewDir
, const int bitflags) const
{
return Acad::eNotImplementedYet;
}
Acad::ErrorStatus AecDbParamEquipment::subGetGripPoints(AcGePoint3dArray &gripPoints, AcDbIntArray &osnapModes, AcDbIntArray &geomIds) const
{
assertReadEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
gripPoints.append(m_pImpl->getPos());
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subMoveGripPointsAt(const AcDbIntArray & indices, const AcGeVector3d & offset)
{
AssertWriteEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
AcGeMatrix3d mat;
mat.setToTranslation(offset);
return subTransformBy(mat);
}
Acad::ErrorStatus AecDbParamEquipment::subMoveGripPointsAt(const AcDbVoidPtrArray &appData, const AcGeVector3d &offset, const int bitflags)
{
return Acad::eInetNotImplemented;
}
Acad::ErrorStatus AecDbParamEquipment::subGetStretchPoints(AcGePoint3dArray& stretchPoints) const
{
assertReadEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
stretchPoints.append(m_pImpl->getPos());
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset)
{
AssertWriteEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
AcGeMatrix3d mat;
mat.setToTranslation(offset);
return subTransformBy(mat);
}
Acad::ErrorStatus AecDbParamEquipment::subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const
{
assertReadEnabled();
if (!m_pImpl) return Acad::eInvalidInput;
AcGePoint3d pt(m_pImpl->getPos());
AcDbPoint pos(pt);
return pos.getOsnapPoints(osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds);
}
Acad::ErrorStatus AecDbParamEquipment::subGetGeomExtents(AcDbExtents& extents) const
{
assertReadEnabled();
if (!Has3DBuffer())
{
AcGiViewDraw dc;
Draw3d(dc);
}
AcDbExtents ext;
const AcDbVoidPtrArray &ar = Get3DBuffer();
for (int i = 0; i < ar.length(); ++i)
{
AcDbEntity *pEnt = (AcDbEntity*)ar[i];
pEnt->getGeomExtents(ext);
extents.addExt(ext);
}
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subIntersectWith( const AcDbEntity* pEnt,
AcDb::Intersect intType,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const
{
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::subIntersectWith( const AcDbEntity* pEnt,
AcDb::Intersect intType,
const AcGePlane& projPlane,
AcGePoint3dArray& points,
INT_PTR thisGsMarker,
INT_PTR otherGsMarker) const
{
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::Draw2d(AcGiDraw &dc) const
{
assertReadEnabled();
if (g_BALock::instance().Draw() != BIT_SUCCESS)
return Acad::eOk;
int clr(256);
m_XDataMap.GetAt(_T("COLOR"), clr);
int oldClr = dc.GetColor();
dc.SetColor(clr);
if (Has2DBuffer())
{
Draw2DBuffers(dc);
dc.SetColor(oldClr);
return Acad::eOk;
}
CString sRxDraw;
if ( m_XDataMap.GetAt(KEY_DRAW2D,sRxDraw) )
{
AecDbXDrawPointer aecDbXDraw(this,sRxDraw);
aecDbXDraw.Draw2d(dc);
AcDbVoidPtrArray arEntPtrs;
dc.Get2dBuffer(arEntPtrs);
Add2DBuffer(arEntPtrs);
dc.SetColor(oldClr);
return Acad::eOk;
}
if (m_pImpl)
{
AcDbVoidPtrArray ar2d;
m_pImpl->draw2d(ar2d);
for (int i = 0; i < ar2d.length(); ++i)
{
AcDbEntity *p((AcDbEntity*)ar2d[i]);
if (p)
{
dc.DrawEntity(*p);
Add2DBuffer(p);
}
}
dc.SetColor(oldClr);
}
return Acad::eOk;
}
Acad::ErrorStatus AecDbParamEquipment::Draw3d(AcGiDraw &dc) const
{
assertReadEnabled();
if (g_BALock::instance().Draw() != BIT_SUCCESS)
return Acad::eOk;
int clr(256);
m_XDataMap.GetAt(_T("COLOR"), clr);
int oldClr = dc.GetColor();
dc.SetColor(clr);
if (Has3DBuffer())
{
Draw3DBuffers(dc);
dc.SetColor(oldClr);
return Acad::eOk;
}
if (m_pImpl)
{
AcDbVoidPtrArray ar3d;
m_pImpl->draw3d(ar3d);
for (int i = 0; i < ar3d.length(); ++i)
{
AcDbEntity *p((AcDbEntity*)ar3d[i]);
if (p)
{
p->setTransparency(transparency());
dc.DrawEntity(*p);
Add3DBuffer(p);
}
}
dc.SetColor(oldClr);
}
return Acad::eOk;
}
2026-10-04 00:04:20 +08:00
//获取三维显示图形
2026-09-28 15:28:50 +08:00
int AecDbParamEquipment::GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo/* = false*/) const
{
assertReadEnabled();
AcDbEntity* pEnt = NULL,*pEntClone = NULL;
const AcDbVoidPtrArray &ar3D = Get3DBuffer();
for (int i = 0;i < ar3D.length();i++)
{
pEnt = (AcDbEntity*)ar3D.at(i);
pEntClone = (AcDbEntity*)pEnt->clone();
if (bWriteBimInfo)
{
m_XDataMap.Write(pEntClone,_T("BIMDATA"));
}
pEntClone->setLayer(layerId());
arEntPtrs.append(pEntClone);
}
2026-10-04 00:04:20 +08:00
//扩展数据
2026-09-28 15:28:50 +08:00
AcDbPoint* pPt = new AcDbPoint;
AcGePoint3d ptIns;
AcGeVector3d vtDir;
GetInsert(ptIns,vtDir);
pPt->setPosition(ptIns);
pPt->setLayer(layerId());
pPt->setNormal(AcGeVector3d::kZAxis);
m_XDataMap.Write(pPt,BIMDATA_APP);
arEntPtrs.append(pPt);
return arEntPtrs.length();
}
int AecDbParamEquipment::GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const
{
assertReadEnabled();
AcDbObjectId id = objectId();
AcDbEntity* pEnt = NULL;
const AcDbVoidPtrArray &ar2D = Get2DBuffer();
if (ar2D.isEmpty())
{
AcGePlane plan = AcGePlane::kXYPlane;
AcGeMatrix3d xform;
xform.setToPlaneToWorld(plan);
xform.invert();
AcDbVoidPtrArray arSubEntPtrs;
AcDb3dSolid* pSolid = NULL;
AcDbSubDMesh* pSubMesh = NULL;
const AcDbVoidPtrArray &ar3D = Get3DBuffer();
for (int i = 0;i < ar3D.length();i++)
{
pEnt = (AcDbEntity*)ar3D.at(i);
pSolid = AcDb3dSolid::cast(pEnt);
if (pSolid != NULL)
{
2026-10-04 00:04:20 +08:00
//投影法
2026-09-28 15:28:50 +08:00
OrthoProjected3DSolid(pSolid,plan,xform,arSubEntPtrs);
}
pSubMesh = AcDbSubDMesh::cast(pEnt);
if (pSubMesh != NULL)
{
OrthoProjected3DSubMesh(pSubMesh,plan,xform,arSubEntPtrs);
}
}
AcDbObjectId idLayer = layerId();
for (int i = 0;i < arSubEntPtrs.length();i++)
{
pEnt = (AcDbEntity*)arSubEntPtrs.at(i);
pEnt->setLayer(idLayer);
if (GetSpecialtyData() != NULL)
{
GetSpecialtyData()->Write(pEnt,BIMDATA_APP);
}
arEntPtrs.append(pEnt);
}
2026-10-04 00:04:20 +08:00
//扩展数据
2026-09-28 15:28:50 +08:00
AcDbPoint* pPt = new AcDbPoint;
AcGePoint3d ptIns,ptIns2;
AcGeVector3d vtDir;
GetInsert(ptIns,vtDir);
ptIns2 = ptIns.orthoProject(AcGePlane::kXYPlane);
pPt->setPosition(ptIns2);
pPt->setLayer(layerId());
pPt->setNormal(plan.normal());
pPt->transformBy(xform);
m_XDataMap.Write(pPt,BIMDATA_APP);
arEntPtrs.append(pPt);
}
else
{
AcGePlane plan = AcGePlane::kXYPlane;
AcGeMatrix3d xform;
xform.setToPlaneToWorld(plan);
xform.invert();
AcDbVoidPtrArray arSubEntPtrs;
AcDb3dSolid* pSolid = NULL;
AcDbSubDMesh* pSubMesh = NULL;
AcDbEntity* pClnEnt = NULL;
AcDbObjectId idLayer = layerId();
for (int i = 0;i < ar2D.length();i++)
{
pEnt = (AcDbEntity*)ar2D.at(i);
pClnEnt = (AcDbEntity*)pEnt->clone();
pClnEnt->setLayer(idLayer);
pSolid = AcDb3dSolid::cast(pClnEnt);
if (pSolid != NULL)
{
2026-10-04 00:04:20 +08:00
//投影法
2026-09-28 15:28:50 +08:00
OrthoProjected3DSolid(pSolid,plan,xform,arSubEntPtrs);
continue;
}
pSubMesh = AcDbSubDMesh::cast(pClnEnt);
if (pSubMesh != NULL)
{
OrthoProjected3DSubMesh(pSubMesh,plan,xform,arSubEntPtrs);
continue;
}
arSubEntPtrs.append(pClnEnt);
}
for (int i = 0;i < arSubEntPtrs.length();i++)
{
pEnt = (AcDbEntity*)arSubEntPtrs.at(i);
pEnt->setLayer(idLayer);
if (GetSpecialtyData() != NULL)
{
GetSpecialtyData()->Write(pEnt,BIMDATA_APP);
}
arEntPtrs.append(pEnt);
}
2026-10-04 00:04:20 +08:00
//扩展数据
2026-09-28 15:28:50 +08:00
AcDbPoint* pPt = new AcDbPoint;
AcGePoint3d ptIns,ptIns2;
AcGeVector3d vtDir;
GetInsert(ptIns,vtDir);
ptIns2 = ptIns.orthoProject(AcGePlane::kXYPlane);
pPt->setPosition(ptIns2);
pPt->setLayer(layerId());
pPt->setNormal(AcGeVector3d::kZAxis);
m_XDataMap.Write(pPt,BIMDATA_APP);
arEntPtrs.append(pPt);
}
return arEntPtrs.length();
}
const AecDbObjXDataMap* AecDbParamEquipment::GetSpecialtyData() const
{
return &m_XDataMap;
}
AecDbObjXDataMap* AecDbParamEquipment::GetSpecialtyData(AcDb::OpenMode bMode)
{
if (bMode == AcDb::kForRead)
assertReadEnabled();
else if (bMode == AcDb::kForWrite)
{
if (!isWriteEnabled())
{
upgradeOpen();
}
AssertWriteEnabled();
}
else
return NULL;
return &m_XDataMap;
}
bool AecDbParamEquipment::GetInterface(AcArray<AecInterface>& arInfs) const
{
return false;
}
bool AecDbParamEquipment::GetInterface(int nIndex,AecInterface& inf) const
{
return false;
}
int AecDbParamEquipment::GetInterfaceCount() const
{
return 0;
}
int AecDbParamEquipment::GetActiveInf() const
{
return 0;
}
void AecDbParamEquipment::SetActiveInf(int nIndex)
{
}
void AecDbParamEquipment::LockInf(int nInf)
{
}
bool AecDbParamEquipment::TransformAssocInf(int nInf,const AcGeMatrix3d& xform)
{
return false;
}
void AecDbParamEquipment::SetPosAndDir(const AcGePoint3d & pt, const AcGeVector3d & dir)
{
AssertWriteEnabled();
m_XDataMap.SetAt(_T("Pos"), pt);
m_XDataMap.SetAt(_T("Dir"), dir);
}
void AecDbParamEquipment::GetInsert(AcGePoint3d& ptIns,AcGeVector3d& vtDir) const
{
assertReadEnabled();
m_XDataMap.GetAt(_T("Pos"), ptIns);
m_XDataMap.GetAt(_T("Dir"), vtDir);
}
void AecDbParamEquipment::SetElev(const double & dElev)
{
AssertWriteEnabled();
if (m_pImpl)
m_pImpl->setElev(dElev);
}
CParamEquImplBase* AecDbParamEquipment::cloneImpl(AecDbObjXDataMap *pXData)
{
if (m_pImpl)
return m_pImpl->makeSelf(pXData);
return NULL;
}
double AecDbParamEquipment::GetElev()
{
if (m_pImpl)
return m_pImpl->getPos().z;
return 0.0;
}
#define _CREATE_(region,type1,func)\
case region::type1:\
setType(pXData, type);\
pImp = new ::region::func(pXData);\
break
CParamEquImplBase* AecDbParamEquipment::createParamEquImpl(const int & type, AecDbObjXDataMap *pXData)
{
CParamEquImplBase *pImp(NULL);
switch (type)
{
_CREATE_(GESHAN,XHG_I,XHG);
_CREATE_(GESHAN,XHG_II,XHG);
_CREATE_(GESHAN,SG,SG);
_CREATE_(GESHAN,BLQ,SG);
_CREATE_(GESHAN,ZG_I,ZG);
_CREATE_(GESHAN,ZG_II,ZG);
_CREATE_(BAOQIQI,PAN_SI,BaoQiQi);
_CREATE_(BAOQIQI,GUAN_SI,BaoQiQi);
_CREATE_(SHASHUIFENLI,XCS,XCS);
_CREATE_(SHASHUIFENLI,HXS,HXS);
_CREATE_(SHASHUIFENLI,LCS,LCS);
_CREATE_(LUOXUANBENG,LXB,LXB);
_CREATE_(QIBIJI,QS_I_P,QS_I_P);
_CREATE_(QIBIJI,QS_I_Y,QS_I_Y);
_CREATE_(QIBIJI,QS_I_L,QS_I_L);
_CREATE_(QIBIJI,QS_II_Y,QS_II_Y);
_CREATE_(QIBIJI,QS_II_L,QS_II_L);
_CREATE_(ZHAMEN,RECT_ZHAMEN,RectZhaMen);
_CREATE_(ZHAMEN,CIRCLE_ZHAMEN,CircleZhaMen);
_CREATE_(ZHAMEN,SHENG_NI_FA,ShengNiFa);
_CREATE_(GUANIJI,XZG,XZG);
_CREATE_(GUANIJI,CZG,CZG);
_CREATE_(GUANIJI,ZG,ZG);
_CREATE_(GUANIJI,QG,QG);
_CREATE_(GUANIJI,PJ,PJ);
_CREATE_(GUANIJI,SX,SX);
_CREATE_(GUANIJI,SB,SB);
_CREATE_(GUANIJI,LIANTIAO,LIANTIAO);
_CREATE_(NONGSUOJI,NC,NC);
_CREATE_(NONGSUOJI,NB,NB);
_CREATE_(BAOQIJI,YHG,YHG);
_CREATE_(BAOQIJI,AD,AD);
_CREATE_(JIAYAOHUNHE,GJ,GJ);
_CREATE_(JIAYAOHUNHE,PJ,PJ);
_CREATE_(JIAYAOHUNHE,TJ,TJ);
_CREATE_(JIAYAOHUNHE,LJF,LJF);
_CREATE_(LVBUJI,ZHUANPAN,ZHUANPAN);
default:
return NULL;
}
return pImp;
}
bool AecDbParamEquipment::GetSrcString(CString &src)
{
assertReadEnabled();
return m_XDataMap.GetAt(_T("_SRC_STRING_"), src) == 0 ? false : true;
}
void AecDbParamEquipment::SetSrcString(LPCTSTR src)
{
assertWriteEnabled();
if (src && !CString(src).IsEmpty())
m_XDataMap.SetAt(_T("_SRC_STRING_"), src);
}
int AecDbParamEquipment::GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegPtrs) const
{
AcGeVector3d vtLn = ptTo - ptFr;
AcGeVector3d vtNorm = vtLn.crossProduct(vtViewDir);
AcGePlane plan;
plan.set(ptFr,vtNorm);
AcGeMatrix3d xform;
xform.setToPlaneToWorld(plan);
xform.invert();
if (Get3DBuffer().length() == 0)
{
AcGiViewDraw dc(NULL,NULL);
Draw3d(dc);
}
AcDbEntity* pEnt = NULL;
AcDb3dSolid* pSolid = NULL;
AcDbSubDMesh* pSubMesh = NULL;
AcDbVoidPtrArray arRegPtrsT;
const AcDbVoidPtrArray &ar3D = Get3DBuffer();
for (int i = 0;i < ar3D.length();i++)
{
pEnt = (AcDbEntity*)ar3D.at(i);
pSolid = AcDb3dSolid::cast(pEnt);
if (pSolid != NULL)
{
2026-10-04 00:04:20 +08:00
//投影法
2026-09-28 15:28:50 +08:00
OrthoProjected3DSolid(pSolid,plan,xform,arRegPtrsT);
}
pSubMesh = AcDbSubDMesh::cast(pEnt);
if (pSubMesh != NULL)
{
OrthoProjected3DSubMesh(pSubMesh,plan,xform,arRegPtrsT);
}
}
2026-10-04 00:04:20 +08:00
//扩展数据
2026-09-28 15:28:50 +08:00
AcDbPoint* pPt = new AcDbPoint;
AcGePoint3d ptIns,ptIns2;
AcGeVector3d vtDir;
GetInsert(ptIns,vtDir);
pPt->setPosition(ptIns);
pPt->setLayer(layerId());
pPt->setNormal(plan.normal());
pPt->transformBy(xform);
m_XDataMap.Write(pPt,BIMDATA_APP);
arRegPtrsT.append(pPt);
for (int i = 0;i < arRegPtrsT.length();i++)
{
pEnt = (AcDbEntity*)arRegPtrsT.at(i);
pEnt->setLayer(layerId());
arRegPtrs.append(pEnt);
}
return arRegPtrs.length();
}
SHJson::WValue& AecDbParamEquipment::ToJson(bool bExprotGeo) const
{
using namespace SHJson;
return AecDbEntityBase::ToJson(bExprotGeo);
}
bool AecDbParamEquipment::ByJson(const SHJson::WValue &v)
{
AssertWriteEnabled();
return AecDbEntityBase::ByJson(v);
}