579 lines
21 KiB
C++
579 lines
21 KiB
C++
#pragma once
|
||
|
||
/*----------------------------------------------------------------------------------
|
||
//AecDbEwEquipment : 阀门,设备 等通用类
|
||
//
|
||
//通过 AecDbX3dPart 进行基本体的拼接
|
||
//---------------------------------------------------------------------------------*/
|
||
|
||
|
||
#include "AecDbEntityBase.h"
|
||
#include "AecDbObjXDataMap.h"
|
||
#include "earthwormdef.h"
|
||
#include "AecComplexCurveDraw.h"
|
||
#include "AecMInterfaces.h"
|
||
#include "define_class_xdata_key.h"
|
||
|
||
#ifdef EARTHWORM_EXPORT
|
||
#define DLLIMPEXP __declspec(dllexport)
|
||
#else
|
||
#define DLLIMPEXP __declspec(dllimport)
|
||
#endif
|
||
|
||
#pragma region new solid
|
||
namespace NewSolid
|
||
{
|
||
template <class T>
|
||
static void _writeMem(byte * &p, const T & t)
|
||
{
|
||
::memcpy(p, &t, sizeof(T));
|
||
p += sizeof(T);
|
||
}
|
||
|
||
template <class T>
|
||
static T _readMem(byte *&p)
|
||
{
|
||
T t;
|
||
::memcpy(&t, p, sizeof(T));
|
||
p += sizeof(T);
|
||
return t;
|
||
}
|
||
|
||
template <class T>
|
||
static AcDb3dSolid * makeSolid(byte * pData, const int &n)
|
||
{
|
||
AcDb3dSolid *p(NULL);
|
||
T t;
|
||
if (t.fromData(pData, n))
|
||
p = t.makeSolid();
|
||
|
||
return p;
|
||
}
|
||
|
||
static void _writeMem(byte *&p, const void *pSrc, const ULONGLONG &n)
|
||
{
|
||
::memcpy(p, pSrc, n);
|
||
p += n;
|
||
}
|
||
|
||
static void _readMem(byte *&p, void *pDst, const ULONGLONG &n)
|
||
{
|
||
::memcpy(pDst, p, n);
|
||
p += n;
|
||
}
|
||
}
|
||
|
||
class DLLIMPEXP NewSolidBase
|
||
{
|
||
public:
|
||
static int m_gVersion;
|
||
int m_CurrentVersion;
|
||
AecEqui::Primitive m_type;
|
||
bool m_bSolid;
|
||
|
||
public:
|
||
NewSolidBase(AecEqui::Primitive type, bool bSolid);
|
||
virtual AcDb3dSolid* makeSolid() = 0;
|
||
virtual AecEqui::Primitive getType() = 0;
|
||
virtual void toData(void *&p, int &n) = 0;
|
||
virtual bool fromData(byte *p, const int &len) = 0;
|
||
virtual int getBufferLen();
|
||
static AecEqui::XPrimData* makeXPrimData(NewSolidBase *pBase, int id = 0);
|
||
static void copyFrom(NewSolidBase *pDesc, NewSolidBase *pSrc);
|
||
|
||
protected:
|
||
void toData(byte *&p);
|
||
bool fromData(byte *&p);
|
||
};
|
||
|
||
class DLLIMPEXP NewNozzle: public NewSolidBase
|
||
{
|
||
public:
|
||
AecEqui::XNozz m_nozz;
|
||
AcGePoint3d m_ptOrg;
|
||
AcGeVector3d m_vtDir;
|
||
public:
|
||
NewNozzle(): NewSolidBase(AecEqui::kNozz, true) { ::memset(&m_nozz, 0, sizeof(AecEqui::XNozz)); }
|
||
virtual AcDb3dSolid* makeSolid() { return NULL; }
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kNozz; }
|
||
virtual void toData(void *&p, int &n){}
|
||
virtual bool fromData(byte *p, const int &len) { return false; }
|
||
};
|
||
|
||
class DLLIMPEXP NewExtrude: public NewSolidBase
|
||
{
|
||
public:
|
||
CString m_sRegion; // 截面
|
||
double m_dH; // 拉伸高度
|
||
|
||
public:
|
||
NewExtrude(): NewSolidBase(AecEqui::kNewExtrude, true) {}
|
||
NewExtrude(bool bSolid, AcDbRegion *pReg, const double &h);
|
||
virtual AcDb3dSolid* makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kNewExtrude; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
};
|
||
|
||
class DLLIMPEXP NewRevolve: public NewSolidBase
|
||
{
|
||
public:
|
||
CString m_sRegion; // 截面
|
||
AcGePoint3d m_ptOrg; // 旋转轴原点
|
||
AcGeVector3d m_vtDir; // 旋转轴方向
|
||
double m_dStartAngle; // 旋转起始角
|
||
double m_dSweepAngle; // 旋转角度
|
||
|
||
public:
|
||
NewRevolve(): NewSolidBase(AecEqui::kNewRevolve, true){}
|
||
NewRevolve(bool bSolid
|
||
, AcDbRegion *pReg
|
||
, const AcGePoint3d &ptOrg
|
||
, const AcGeVector3d &vtAxis
|
||
, double dSweepAngle
|
||
, double dStartAngle);
|
||
virtual AcDb3dSolid* makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kNewRevolve; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
};
|
||
|
||
class DLLIMPEXP NewLoft: public NewSolidBase
|
||
{
|
||
public:
|
||
CString m_sPath;
|
||
std::vector<CString> m_regs;
|
||
|
||
public:
|
||
NewLoft(): NewSolidBase(AecEqui::kNewLoft, true) {}
|
||
NewLoft(bool bSolid, const AcArray<AcDbRegion*> &ar, AcDbPolyline *pPoly);
|
||
virtual AcDb3dSolid* makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kNewLoft; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
};
|
||
|
||
class DLLIMPEXP NewSweepR: public NewSolidBase
|
||
{
|
||
public:
|
||
CString m_sRegion;
|
||
CString m_sPath;
|
||
|
||
public:
|
||
NewSweepR(): NewSolidBase(AecEqui::kRevitSweep, true){}
|
||
NewSweepR(bool bSolid, AcDbRegion *pReg, AcDbPolyline *pPoly);
|
||
virtual AcDb3dSolid* makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kRevitSweep; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
};
|
||
|
||
class DLLIMPEXP NewSweep: public NewSolidBase
|
||
{
|
||
public:
|
||
CString m_sRegion;
|
||
CString m_sPath;
|
||
|
||
public:
|
||
NewSweep(): NewSolidBase(AecEqui::kNewSweep, true) {}
|
||
NewSweep(bool bSolid, AcDbRegion *pReg, AcDbPolyline *pPoly);
|
||
virtual AcDb3dSolid *makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kNewSweep; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
};
|
||
|
||
class DLLIMPEXP RevitCombination: public NewSolidBase
|
||
{
|
||
public:
|
||
std::vector<NewSolidBase*> m_solids;
|
||
public:
|
||
RevitCombination();
|
||
~RevitCombination();
|
||
virtual AcDb3dSolid *makeSolid();
|
||
virtual AecEqui::Primitive getType() { return AecEqui::kRevitCombination; }
|
||
virtual void toData(void *&p, int &n);
|
||
virtual bool fromData(byte *p, const int &len);
|
||
virtual int getBufferLen();
|
||
|
||
// 是否按顺序绘制实体
|
||
// 如果是,则按照 m_solids 的顺序来绘制
|
||
// 如果否,则先把所有solid合成一个实体,再将所有的void做减
|
||
bool m_bOrderDraw;
|
||
};
|
||
#pragma endregion
|
||
|
||
class Aec3dFaceplan;
|
||
|
||
class DLLIMPEXP AecDbEwEquipment : public AecDbEntityBase,
|
||
public AecMInterfaces
|
||
{
|
||
public:
|
||
ACRX_DECLARE_MEMBERS(AecDbEwEquipment);
|
||
|
||
protected:
|
||
static Adesk::UInt32 kCurrentVersionNumber;
|
||
|
||
public:
|
||
enum ESection
|
||
{
|
||
eTopBottom = 0, // 上下
|
||
eLeftRight, // 左右
|
||
eFrontBack, // 前后
|
||
eENWS, // 东北 西南
|
||
eESWN, // 东南 西北
|
||
eNone
|
||
};
|
||
|
||
public:
|
||
AecDbEwEquipment(void);
|
||
virtual ~AecDbEwEquipment(void);
|
||
|
||
virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
|
||
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
|
||
virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
|
||
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
|
||
virtual void subList() const;
|
||
|
||
virtual Acad::ErrorStatus copyFrom(const AcRxObject* pSrc);
|
||
|
||
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
|
||
Acad::ErrorStatus TransformBy(const AcGeMatrix3d xform);
|
||
|
||
virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips,
|
||
const double curViewUnitSize,
|
||
const int gripSize,
|
||
const AcGeVector3d& curViewDir,
|
||
const int bitflags) const;
|
||
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;
|
||
|
||
|
||
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& offset, const int bitflags);
|
||
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
|
||
|
||
virtual void GetGripText(int nPos, CString& sText) const;
|
||
|
||
virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
|
||
INT_PTR gsSelectionMark,
|
||
const AcGePoint3d& pickPoint,
|
||
const AcGePoint3d& lastPoint,
|
||
const AcGeMatrix3d& viewXform,
|
||
AcGePoint3dArray& snapPoints,
|
||
AcDbIntArray& geomIds) const;
|
||
|
||
virtual Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const;
|
||
|
||
virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* pEnt,
|
||
AcDb::Intersect intType,
|
||
AcGePoint3dArray& points,
|
||
INT_PTR thisGsMarker,
|
||
INT_PTR otherGsMarker) const;
|
||
|
||
virtual Acad::ErrorStatus subIntersectWith( const AcDbEntity* pEnt,
|
||
AcDb::Intersect intType,
|
||
const AcGePlane& projPlane,
|
||
AcGePoint3dArray& points,
|
||
INT_PTR thisGsMarker,
|
||
INT_PTR otherGsMarker) const;
|
||
|
||
virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing);
|
||
|
||
Acad::ErrorStatus ImpGetGripPoints(AcGePoint3dArray& gripPoints) const;
|
||
|
||
EPosition ExplainGripIndex(int nIndex) const;
|
||
|
||
//virtual Acad::ErrorStatus subErase(Adesk::Boolean erasing);
|
||
|
||
//AEC 派生
|
||
virtual Acad::ErrorStatus Draw2d(AcGiDraw &dc) const;
|
||
virtual Acad::ErrorStatus Draw3d(AcGiDraw &dc) const;
|
||
|
||
Acad::ErrorStatus DrawHandFlg(AcGiDraw &dc) const;
|
||
|
||
virtual int ComparedTo(AecDbEntityBase* pCurOther) const;
|
||
|
||
//获取二维视图显示的图形
|
||
virtual int GetDraw2dables(Adesk::UInt16 nDrawStyle, AcDbVoidPtrArray& arEntPtrs) const;
|
||
|
||
//获取三维显示图形
|
||
virtual int GetDraw3dables(AcDbVoidPtrArray& arEntPtrs,bool bWriteBimInfo = false) const;
|
||
|
||
//获取唯一性标识
|
||
virtual LPCTSTR GetGUID() const;
|
||
|
||
Acad::ErrorStatus DrawInfArrow(AcGiDraw &dc) const;
|
||
virtual void SetActive(bool bActive);
|
||
virtual bool IsActive() const;
|
||
virtual void NewGUID();
|
||
|
||
LPCTSTR GetGripCmd(int nType = 0) const;
|
||
bool GetAdjustVectorBy2Infs(AcGeVector3d& vtAdjust) const;
|
||
|
||
//接口重载
|
||
virtual bool GetInterface(AcArray<AecInterface>& arInfs) const;
|
||
virtual bool GetInterface(int nIndex,AecInterface& inf) const;
|
||
virtual int GetInterfaceCount() const;
|
||
virtual int GetActiveInf() const;
|
||
virtual void SetActiveInf(int nIndex);
|
||
virtual void LockInf(int nInf);
|
||
virtual bool TransformAssocInf(int nInf,const AcGeMatrix3d& xform);
|
||
|
||
protected:
|
||
void Draw3dSolid(AcGiDraw* pMode, const int iClr = 255) const;
|
||
void DrawActiveInfArrow(AecEqui::XPrimData* p3dSolid, AcGiDraw &dc) const;
|
||
void DrawActiveXYZArrow(AecEqui::XPrimData* p3dSolid, AcGiDraw &dc) const;
|
||
void DrawCylinder(AcGiDraw &dc, AcGePoint3d& ptGeFr, AcGePoint3d& ptGeTo, double dr) const;
|
||
void DrawArrow(AcGiDraw &dc, AcGePoint3d& ptGeFr, AcGePoint3d& ptGeTo, double dr) const;
|
||
void AddSegmentArcPoints( AcGePoint3dArray& arVerts,
|
||
AcGePoint3d& pt,
|
||
AcGePoint3d& ptNext,
|
||
double dBulge) const;
|
||
|
||
void GetLayerCirclePoints(AcGePoint3dArray& arPts, AcGePoint3d& pttT, AcDbLine& ln) const;
|
||
void GetTransformbyXform(const AecEqui::XPrimData* p3dSolid, AcGeVector3d& vtDir) const;
|
||
void GetTransformbyXform(const AecEqui::XPrimData* p3dSolid, AcGePoint3d& ptPos) const;
|
||
void GetTransformbyXform(const AecEqui::XPrimData* p3dSolid, AcDbEntity* pEnt) const;
|
||
void MakeTriangulateFace(AcGePoint3dArray& arVerts, AcArray<AecEqui::XTriag>& arXTriags) const;
|
||
void MakeTriangulateFace(Aec3dFaceplan* pPlan, AcGePoint3dArray& arVerts) const;
|
||
void MakeSureElementInFace(AecEqui::AecCurveElement& el, Aec3dFaceplan* pFaceplan) const;
|
||
public:
|
||
short GetInfFaceCount(const AecEqui::XPrimData* p3dSolid) const;
|
||
AcDb3dSolid* Draw3dSolid(AecEqui::XPrimData *p3dSolid
|
||
, const AcGePoint3d &ptIns
|
||
, const AcGeVector3d &vtDir) const;
|
||
|
||
//获取体的范围方块
|
||
int GetBodyBox(AcDbExtents& ext) const;
|
||
virtual const AecDbObjXDataMap* GetSpecialtyData() const;
|
||
virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite);
|
||
virtual SHJson::WValue& ToJson(bool bExprotGeo = true) const;
|
||
virtual bool ByJson(const SHJson::WValue &v);
|
||
|
||
virtual bool GetBimInfoTip(CString& sInfoTip) const;
|
||
|
||
public:
|
||
void AddSubPrimObj(AecEqui::XPrimData* p);
|
||
void RemoveSubPrimObj(int nIndex);
|
||
void RemoveSubPrimObjByID(int nSubID);
|
||
|
||
void AddTransform(const AcGeMatrix3d& xform);
|
||
void AddTransform(const AcGeVector3d& vtMove);
|
||
|
||
void RemoveLastTransform();
|
||
void RemoveAllTransform();
|
||
BOOL GetLastTransform(AcGeMatrix3d& xform) const;
|
||
typedef AcArray<AcGeMatrix3d> AcGeMatrix3dArray;
|
||
BOOL GetAllAddTransforms(AcGeMatrix3dArray& arMatrix) const;
|
||
|
||
void GetInfFaceInf(const AecEqui::XPrimData* p3dSolid
|
||
, AcGeVector3d& vtDir
|
||
, AcGePoint3d& ptGe
|
||
, int nUserindex = -1) const;
|
||
|
||
int GetSubPrimObjCount() const;
|
||
void SetActiveSubPrimObj(int nindex);
|
||
void ActiveInterface(int nInf, BOOL bActive);
|
||
|
||
AecEqui::XPrimData* GetSubPrimObj(int nIndex) const;
|
||
AecEqui::XPrimData* GetSUbPrimObjByID(int nID) const;
|
||
|
||
void ModifyPrimData(long lID, const AecEqui::XPrimData& data, int nVarIndex, BOOL bReset = FALSE);
|
||
BOOL DrawValveForISO(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false);//绘制二维阀门,准备为ISO
|
||
|
||
BOOL ReadFromFile(LPCTSTR pszEquFile);
|
||
BOOL WriteToFile(LPCTSTR pszEquFile);
|
||
|
||
void SetInsert(const AcGePoint3d& ptGe);
|
||
void SetInsert(const AcGePoint3d& ptGe, const AcGeVector3d& vtDir);
|
||
void GetInsert(AcGePoint3d& ptGe, AcGeVector3d& vtDir) const;
|
||
|
||
void SetDashLayer(const AcDbObjectId &id);
|
||
void GetDashLayer(AcDbObjectId &id) const;
|
||
|
||
void SetCenterLayer(const AcDbObjectId &id);
|
||
void GetCenterLayer(AcDbObjectId &id) const;
|
||
|
||
void SetVert(bool bVert);
|
||
bool IsVert() const;
|
||
|
||
AcDbObjectId getSectionID(const ESection &es);
|
||
void setSectionID(const ESection &es, AcDbObjectId &id);
|
||
|
||
virtual bool GetSectionDraw(AcGePlane& plan,const AcGeVector3d& vtTo,AcDbVoidPtrArray& arRegionPtrs) const;
|
||
virtual int GetSectionDraw(const AcGePoint3d& ptFr,const AcGePoint3d& ptTo,const AcGeVector3d& vtViewDir,const AcGeVector3d& vtTo, AcDbVoidPtrArray& arRegionPtrs) const;
|
||
bool OldGetSectionDraw(AcGePlane &plan, const AcGeVector3d &vtTo, AcDbVoidPtrArray &arRegionPtrs) const;
|
||
|
||
static void subDMesh2NewSolid(AecEqui::XPrimData *pSubDMesh , CPtrArray &ar);
|
||
void subDMesh2NewSolid();
|
||
void clearGeoBuffer();
|
||
|
||
virtual bool GetPositionGrip(int nIndex, AecGripData *&pGrip) const;
|
||
|
||
// 将实体 p 按照料 设备的插入点、插入方向以及pData内部的转换 进行变换
|
||
static void TransformEntity(AcDbEntity *p
|
||
, const AcGePoint3d &ptIns
|
||
, const AcGeVector3d &vtDir
|
||
, const AecEqui::XPrimData *pData
|
||
, bool bVert);
|
||
|
||
// 上一个函数的还原
|
||
static void UnTransformEntity(AcDbEntity *p
|
||
, const AcGePoint3d &ptIns
|
||
, const AcGeVector3d &vtDir
|
||
, AecEqui::XPrimData *pData
|
||
, bool bVert);
|
||
|
||
static AecEqui::XPrimData* copyFromXPrimData(AecEqui::XPrimData *pSrc);
|
||
|
||
bool IsHvacValve() const;
|
||
bool IsDrawBlockFor2d() const;
|
||
|
||
// 得到两个管嘴的距离
|
||
double getDistanceByInterface(const int &idx1, const int &idx2);
|
||
|
||
virtual void PreprocessForHlr(const AcGePoint3d &ptPlnO
|
||
, const AcGeVector3d &vtPlnN
|
||
, AcArray<AcDbEntity *> &ar) const;
|
||
|
||
virtual void ProcessHlrResult(const AcArray<AcDbEntity *> &ar
|
||
, const std::map<AcDbEntity *, AcArray<AcDbEntity *>> &preAr
|
||
, AcArray<AcDbEntity *> &output) const;
|
||
|
||
virtual bool GetProperties(SimpleProperty::PropertySetByIndex &porpertys) const;
|
||
virtual bool SetProperties(SimpleProperty::PropertySetByName &porpertys);
|
||
|
||
bool GetClosestPointToSUbPrim(DWORD dwSubiD, AcGePoint3d &ptNear,AcGeVector3d &vtNorm) const;
|
||
void MakeFlange2d(AecComplexCurve &cplCurve, double dOff, bool bForISO = false, bool bis45 = false) const;
|
||
|
||
protected:
|
||
void Draw2dBlock(AcGiDraw *pMode) const;
|
||
void DrawHvacValve(AcGiDraw *pMode) const;
|
||
BOOL DrawGateVlv2d(AecComplexCurve& cplCurve, bool bForISO = false, bool bis45 = false) const;
|
||
BOOL DrawGlobeVlv2d(AecComplexCurve& cplCurve, bool bForISO = false, bool bis45 = false) const;
|
||
BOOL DrawSphereVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawCheckVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawButterflyVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawAngleVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawSafetyVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawTeeVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawCrossVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawAdjustingVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawDrainVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawPlugVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawDiaphragmVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawReducingVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawEleMagVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawRubberJnt2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawVentVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawDrainMudVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawDrainJYFVlv2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawGate2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawPressMeter2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawTemprMeter2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawSSJt2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawCLJt2d(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
BOOL DrawGDBjc(AecComplexCurve& cplCurve, bool bForISO = false,bool bis45 = false) const;
|
||
|
||
void DrawInf(AecComplexCurve& cplCurve, AcGePoint3d& ptMid, AecInterface& inf0, AcGeVector3d& vtNorm) const;
|
||
void MakeFlange2d(AecInterface& inf0,double nD,double nC,AecComplexCurve& cplCurve,BOOL bForISO, bool bis45) const;
|
||
protected:
|
||
void PrimPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView view, const AcGeVector3d& vtNor, BOOL bMakeCenterLine = FALSE) const;
|
||
|
||
void PrimBoxPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimCylnPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimSpherePorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimDishPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimConePorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE, int nFaceIndex = 0) const;
|
||
|
||
void PrimNozzPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimPyramidPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE, int nFaceIndex = 0) const;
|
||
|
||
void PrimTydfPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE, int nFaceIndex = 0) const;
|
||
|
||
void PrimCirTorusPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimRectTorusPorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimExtrudePorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
void PrimRevolvePorjectToPlan(AecComplexCurve& cplCurve, AecEqui::XView eview, const AcGeVector3d& vtNor, AecEqui::XPrimData* p3dSolid, Aec3dFaceplan* pPlan, BOOL bMakeCenterLine = FALSE, BOOL bOnlyGetFace = FALSE) const;
|
||
|
||
BOOL MakeCurves(AecComplexCurve& cplCurve) const;
|
||
|
||
void SortAecComplexCurves(CPtrArray& arPrimCplPtrs) const;
|
||
|
||
void CoverBooleanOperZ(CPtrArray& arPrimCplPtrs, CMapPtrToPtr& mapCpl2Plan) const;
|
||
|
||
void SplitCrvOnIntersect(AecComplexCurve* pCrvDn, AecComplexCurve* pCrvUp) const;
|
||
|
||
AcDbCurve* CurveElement2DbCurve(AecEqui::AecCurveElement el) const;
|
||
|
||
void AppendSegment(AecEqui::AecCurveElement& elFrom, AecComplexCurve& cplexDn, AcDbVoidPtrArray& arSegPtrs, double dZ) const;
|
||
|
||
BOOL GetCurvesInSide(AecComplexCurve& compCurve) const;
|
||
|
||
Acad::ErrorStatus BoolUnit3DBuffer(double dScale) const;
|
||
|
||
BOOL NozzhasFlage(int &nType) const;
|
||
|
||
protected:
|
||
|
||
//专业数据
|
||
Adesk::Int16 m_nInfActive;
|
||
CString m_sGUID;
|
||
bool m_bActive;
|
||
|
||
//专业数据
|
||
AecDbObjXDataMap m_mapSpecXData;
|
||
|
||
AcGeVector3d m_vtDir; //方向
|
||
AcGePoint3d m_ptInsert; //插入点
|
||
CPtrArray m_arSubPrimPtrs; //几何单元
|
||
|
||
// 两个图层
|
||
AcDbSoftPointerId m_idDash;
|
||
AcDbSoftPointerId m_idCenter;
|
||
|
||
bool m_bVert; // 阀专用, 是否是垂直放置
|
||
|
||
private: // key
|
||
// 俯/仰 视
|
||
DEF_XDATA_KEY(_TOP_BOTTOM_);
|
||
// 左/右 视
|
||
DEF_XDATA_KEY(_LEFT_RIGHT_);
|
||
// 前/后 视
|
||
DEF_XDATA_KEY(_FRONT_BACK_);
|
||
// 东北/西南 视
|
||
DEF_XDATA_KEY(_EN_WS_);
|
||
// 东南/西北 视
|
||
DEF_XDATA_KEY(_ES_WN_);
|
||
|
||
public:
|
||
// 同意支持一下用图块作为2D显示
|
||
|
||
// 俯视图用图块名称 dwg路径:块名称
|
||
DEF_XDATA_KEY(_DRAW_2D_BY_BLK_PATH_);
|
||
// 俯视图用图块 X 比例
|
||
DEF_XDATA_KEY(_DRAW_2D_BY_BLK_LENGTH_);
|
||
// 俯视图用图块 Y 比例
|
||
DEF_XDATA_KEY(_DRAW_2D_BY_BLK_WIDTH_);
|
||
//统一出图比例
|
||
DEF_XDATA_KEY(_DRAW_2D_BY_DOCSCALE_);
|
||
|
||
public:
|
||
AecGripData* m_pGripAppData; //夹点
|
||
|
||
//不序列化
|
||
//mutable AcGePoint3dArray m_arMeshPoints; //临时变量,用于计算整体范围
|
||
};
|