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

579 lines
22 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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; //临时变量,用于计算整体范围
};