143 lines
5.0 KiB
C++
143 lines
5.0 KiB
C++
#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<AecInterface> m_arHistoryIntfs; //记录历史的接口
|
|
public:
|
|
AecInterface m_intf0; //临时
|
|
AecInterface m_intf1; //
|
|
AecDbObjXDataMap m_xInitDataMap;
|
|
AcDbObjectId m_idTemp; //临时
|
|
};
|