#pragma once #include "dbjig.h" #include "AecDbCurveBase.h" #include "EarThwormDef.h" #include "AecDbObjXDataMap.h" typedef struct ISODrawCfg { TCHAR m_sODSn[17]; TCHAR m_sMaterial[256]; TCHAR m_sCurrSys[256]; TCHAR m_sScale[17]; TCHAR m_szShtNo[17]; TCHAR m_sStd[256]; double m_dDn; double m_dOD; double m_dThk; double m_dRadio; double m_dDotWD; int m_nRadioOn; int m_nView;//西南... int m_nAngle;//30 45 double m_dPipeW; BOOL m_bVlvISOV; BOOL m_bElbowLine; }ISODRAWCFG; class AecISOCrdWatch; class AECStatusRecord; class AecDb3dRoadAxisLine; class AcISOPolyline : public AecDbCurveBase { public: AcISOPolyline( ); virtual ~AcISOPolyline(void); virtual Acad::ErrorStatus Draw2d(AcGiDraw &mode) const; virtual const AecDbObjXDataMap *GetSpecialtyData() const; virtual AecDbObjXDataMap *GetSpecialtyData(AcDb::OpenMode bMode = AcDb::kForWrite); void SetDoubleLineDraw(bool bDblLine, double dW, double dLW,EAlign eAlign = kMid) { m_bDblLine = bDblLine; m_dW = dW;m_dLW = dLW, m_eAlign = eAlign; } void GetISOCrd(AcGeVector3d &vtX, AcGeVector3d &vtY, AcGeVector3d &vtZ); static BOOL WriteISOXData(AcDbEntity *pEnt, ISODrawCfg &isodrcfg); static BOOL ReadISOXData(AcDbEntity *pEnt, ISODrawCfg &isodrcfg); EAlign m_eAlign; double m_dW; double m_dLW; bool m_bDblLine; bool m_bAngleWatchDraw; AcDbCurve* m_pCurve; //当前线段 mutable AcDbCurve* m_pCurve1; //当前线段 mutable AcDbCurve* m_pCurve2; //当前线段 AecISOCrdWatch* m_pISOCrdWatch; //仪表盘 AecDbObjXDataMap m_mapSpecXData; }; class AcISOPolylineJig : public AcEdJig { public: AcISOPolylineJig(void); ~AcISOPolylineJig(void); public: void SetDb(CUIISQLiteServer *pDb, WPipe::PipeParam *pParam) {m_pDb = pDb; m_pPipeParam = pParam;} bool DoItISO(int nAngMode, int nAngle, ISODrawCfg& soDrwCfg); AcDbObjectId GetRoadAxisLineId() const; public: //ISO void InitStatusRecsFor2DISOLineSegs(); void SetAngleWatchDraw(bool bAngleWatchDraw = false); protected: virtual AcEdJig::DragStatus sampler(); virtual AcDbEntity* entity() const; virtual Adesk::Boolean update(); protected: void FreeBuffer(); BOOL AddRoadNode(WPipe::PipeDraw ePipe); BOOL AddRoadNode(double dAngle,double dR); BOOL AddArcRoadNode(WPipe::PipeDraw ePipe); public: bool GetLastStatusAquire(AcGePoint3d& ptGe); BOOL Commit(BOOL bElbowFit); private: void PushBackStatusRec(AECStatusRecord* pRec); void PopUpStatusRec(); BOOL MakeLine(); BOOL MakeArc(); void SetUndoGroupBegin(); void SetUndoGroupEnd(); AECStatusRecord* GetTailStatusRec() const; void MoveAngWatchPosition(); AcGeVector3d GetLastInterface() const; void CalReferencePoint(); BOOL AddReducer(WPipe::PipeParam ¶m); void GetISOCrd(AcGePoint3d &ptPos, AcGeVector3d &vtX, AcGeVector3d &vtY, AcGeVector3d &vtZ); protected: CPtrArray m_arStaPtrs; //状态集 CPtrList m_lstStaPtrsBack; //上次状态 AECStatusRecord* m_pCurStaRec; //当前请求状态 CUIISQLiteServer *m_pDb; AcDbLine* m_pLine; //当前的直线段 AcDbArc* m_pArc; //当前的圆弧段 AcDbCurve* m_pCurve; //当前线段 AecISOCrdWatch* m_pISOCrdWatch; //导向罗盘 AecDb3dRoadAxisLine* m_pRoadAxisLine; //总线段 ISODrawCfg m_IsoDrwCfg; AcDbObjectId m_idRoadLine; //路线 int m_nUndoGoupid; //undo标记id WPipe::PipeParam *m_pPipeParam; //pipe protected: AcISOPolyline * m_pPolylineProxy; //绘制代理 };