#pragma once #include "AecDbCurveBase.h" #include "AecDbObjXDataMap.h" #include "EarThwormDef.h" class AecAngleWatch; class AecDbDuctJig; class AECStatusRecord; class AecDbHvacDuct; class AecDbHvacFitting; class AecDbDuctLine : public AecDbCurveBase { public: AecDbDuctLine(AecDbDuctJig* pJig); virtual ~AecDbDuctLine(void); protected: virtual Acad::ErrorStatus Draw2d(AcGiDraw &mode) const; virtual const AecDbObjXDataMap* GetSpecialtyData() const { assertReadEnabled(); return NULL; } virtual AecDbObjXDataMap* GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite) { return NULL; } public: //管线基本参数 void SetPipeParam(AecHvac::DuctParam* pPipePar); AecHvac::DuctParam* GetPipeParam(); double GetEndElevation() const; BOOL AddPipeNode(AECStatusRecord* pCurStaRec , WPipe::PipeDraw ePipe ); BOOL AddReducer(AECStatusRecord* pCurStaRec,AecHvac::DuctParam* pParam); AcDbObjectId CreateElbow(AcGeVector3d vtMaj ,AcGePoint3d ptMid ,AcGeVector3d vtMin ,AecHvac::DuctParam* pparamM ,AecHvac::DuctParam* pparamB ,BOOL bInsertBeforLast = FALSE); BOOL ChangeEl(AECStatusRecord* pRec,double dNewEl,BOOL bCheckRec,double dRedElPos,AecHvac::DuctParam* pParamred); BOOL ChangeEl2(AECStatusRecord* pRec,AECStatusRecord* pRecLast,double dNewEl,BOOL bCheckRec,double dRedElPos,AecHvac::DuctParam* pParamred); BOOL ChangeEl3(AECStatusRecord* pRec,AcGePoint3d& ptThis); void SetAngleWath(AcGePoint3d& ptCen,const AcGePoint3d& ptGeTo,const AcGeVector3d& vtDir = AcGeVector3d::kXAxis); void MoveAngWatchPosition(); void SwitchAutoSnapOrF8(); void AngWatchTo(const AcGePoint3d& ptGeTo); //画管线停止 BOOL PipeFinished(); void PopUpInterface(int nGroupID); void PushPipeParam(); void PushInterface(AecInterface& intf,BOOL bStartDragFromIt = FALSE); AecInterface* GetLastInterface(); int GetLastInfCount() const; BOOL CreateWPipe(AECStatusRecord* pRec,BOOL bMaybeAddTee = FALSE); BOOL CreatePipe(const AcGePoint3d& ptSta,const AcGePoint3d& ptEnd,AecHvac::DuctParam* pPipeParam,double dSectRot = 0.0); BOOL ExtendLastWPipe(AECStatusRecord* pRec); BOOL CreateElbowAndPipe(AECStatusRecord* pRec, const EFittingType &type = eElbow); BOOL MaybeAddTeeConnectToThis(AcGePoint3d& ptGe,AcGeVector3d& vtDir,AcDbObjectId id,int nPos); BOOL MaybeAddCrossConnectToThis(AcGePoint3d ptFr,AcGePoint3d ptTo,AcDbObjectId id); BOOL SplitWPipe(AcGePoint3d& ptMid,double dL,AecDbHvacDuct* pWPipe,BOOL bEraseWhiletooShort = TRUE); BOOL ModifyWPipe(AcGePoint3d& ptGe,AcDbObjectId id,int nPos); BOOL AddTee(AecDbHvacDuct* pWPipe,double dL,AcGePoint3d ptMid,double dB,AcGeVector3d& vtMin,AecHvac::HvacTeeType eTeeType = AecHvac::eArcuateBranch); BOOL AddCross(AcDbObjectId id1,AcGePoint3d& ptInt,AcDbObjectId idThis,AecHvac::HvacCrossType eCrossType = AecHvac::eArcuateCross); BOOL AddElbow(AcDbObjectId id1,AcGePoint3d& ptGe,AcDbObjectId idThis); BOOL ChangeElbowToTree(AecDbHvacFitting* pDbFit,AcGeVector3d vtMaj,AcGePoint3d ptGeM,AcGeVector3d vtMin,double dDn,AECStatusRecord* pCurRec); BOOL ChangeTeeToCross(AecDbHvacFitting* pDbFit,AcGeVector3d& vtMaj,AcGeVector3d& vtMin,AECStatusRecord* pCurRec); void ModifyPipeOfElbow(AcDbObjectId id,AcGePoint3d ptOld,AcGePoint3d ptNew); double PixelToWcs(int nPixel); void AddUserData(AcDbObjectId id,AecDbObjXDataMap* pXDataMap,int nType); static void RemoveHolePipe(AecDbHvacDuct* pWPipe); static void SetFittingLayer(AecDbHvacFitting* pFitting, LPCTSTR pszSys); static void SetPipeLayer(AecDbHvacDuct* pPipe, LPCTSTR pszSys); private: void *operator new[](size_t nSize) { return 0; } void operator delete[](void *p) {}; void *operator new[](size_t nSize, const char *file, int line) { return 0; } AecDbHvacDuct* ImpNewDuct(AecHvac::DuctParam* pparam,const AcGePoint3d& ptSta,const AcGePoint3d& ptEnd); AecDbHvacFitting* ImpNewElbow( AcGeVector3d& vtMaj,AcGePoint3d& ptMid,AcGeVector3d& vtMin, AecHvac::DuctParam* pparamM,AecHvac::DuctParam* pparamB); AecDbHvacFitting* ImpNewTee(double dL,AcGePoint3d& ptMid,double dB,AcGeVector3d& vtMaj,AcGeVector3d& vtMin, AecHvac::DuctParam* pMainParam, AecHvac::HvacTeeType eTeeType = AecHvac::eArcuateBranch); AecDbHvacFitting* ImpNewCross(AecDbHvacFitting* pFitMod,AcGePoint3d& ptInt,AcGeVector3d& vtStart,AcGePoint3d& ptStart, AcGeVector3d& vtEnd,AcGePoint3d& ptEnd,AcGeVector3d& vtBra1, AcGePoint3d& ptBra1,AcGeVector3d& vtBr2,AcGePoint3d& ptBra2, AecHvac::DuctParam* pParamM, AecHvac::DuctParam* pParamB, AecHvac::HvacCrossType eCrossType = AecHvac::eArcuateCross); protected: BOOL m_bStopCommand; AecAngleWatch* m_pAngleWatch; //导向罗盘 AecDbCurveBase* m_pCurPipeLine[2]; //当前的管子 AecDbDuctJig* m_pPipeJig; //当前拖动 AecHvac::DuctParam* m_pPipeParam; //管子参数 CPtrList m_lstLastPipeParam; //管子参数历史记录 AcDbObjectId m_idStartDragFrom; CArray m_arHistoryIntfs; //记录历史的接口 public: AecInterface m_intf0; //临时 AecInterface m_intf1; // AecDbObjXDataMap m_xInitDataMap; AcDbObjectId m_idTemp; //临时 };