#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 static void _writeMem(byte * &p, const T & t) { ::memcpy(p, &t, sizeof(T)); p += sizeof(T); } template static T _readMem(byte *&p) { T t; ::memcpy(&t, p, sizeof(T)); p += sizeof(T); return t; } template 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 m_regs; public: NewLoft(): NewSolidBase(AecEqui::kNewLoft, true) {} NewLoft(bool bSolid, const AcArray &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 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& 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& 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 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 &ar) const; virtual void ProcessHlrResult(const AcArray &ar , const std::map> &preAr , AcArray &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; //临时变量,用于计算整体范围 };