154 lines
3.1 KiB
C++
154 lines
3.1 KiB
C++
#pragma once
|
|
#include "dbjig.h"
|
|
#include "AecDbCurveBase.h"
|
|
#include "EarThwormDef.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
|
|
#ifdef EARTHWORM_EXPORT
|
|
#define DLLIMPEXP __declspec(dllexport)
|
|
#else
|
|
#define DLLIMPEXP __declspec(dllimport)
|
|
#endif
|
|
|
|
class AecAngleWatch;
|
|
class AECStatusRecord;
|
|
class AecDb3dRoadAxisLine;
|
|
|
|
class AcPolyline : public AecDbCurveBase
|
|
{
|
|
public:
|
|
AcPolyline( );
|
|
virtual ~AcPolyline(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; }
|
|
|
|
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; //当前线段
|
|
AecAngleWatch* m_pAngleWatch; //仪表盘
|
|
AecDbObjXDataMap m_mapSpecXData;
|
|
};
|
|
|
|
class DLLIMPEXP AcPolylineJig : public AcEdJig
|
|
{
|
|
public:
|
|
AcPolylineJig(void);
|
|
~AcPolylineJig(void);
|
|
|
|
public:
|
|
|
|
void SetElevation(double dStEl);
|
|
|
|
bool DoIt( );
|
|
|
|
bool DoArcIt();
|
|
|
|
bool DoItISO(int nAngMode, int nAngle);
|
|
|
|
AcDbObjectId GetRoadAxisLineId() const;
|
|
|
|
public:
|
|
//Jig 提示和交互设置
|
|
//2D pline线
|
|
void InitStatusRecsForPolyline();
|
|
|
|
//标准墙
|
|
void InitStatusRecsForWall(double dWallW, double dLW,EAlign eAlign = kMid);
|
|
|
|
//弧墙
|
|
void InitStatusRecsForArcWall(double dWallW, double dLW,EAlign eAlign = kMid);
|
|
|
|
//一段线
|
|
void InitStatusRecsForOnLine();
|
|
|
|
//空间 3D系列线段 带坡度
|
|
void InitStatusRecsForLineSegs();
|
|
|
|
//2D系列线段
|
|
void InitStatusRecsFor2DLineSegs();
|
|
|
|
//ISO
|
|
void InitStatusRecsFor2DISOLineSegs();
|
|
|
|
//空间 3dRoad 带弧 带坡度
|
|
void InitStatusRecsFor3dRoadAxisLine();
|
|
|
|
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);
|
|
|
|
private:
|
|
|
|
void PushBackStatusRec(AECStatusRecord* pRec);
|
|
|
|
void PopUpStatusRec();
|
|
|
|
double GetEndElevation() const;
|
|
|
|
BOOL MakeLine();
|
|
|
|
BOOL MakeArc();
|
|
|
|
void SetDispPromptWithEleTip(CString& sPrompt);
|
|
|
|
void SetUndoGroupBegin();
|
|
|
|
void SetUndoGroupEnd();
|
|
|
|
AECStatusRecord* GetTailStatusRec() const;
|
|
|
|
void MoveAngWatchPosition();
|
|
|
|
AcGeVector3d GetLastInterface() const;
|
|
|
|
void CalReferencePoint();
|
|
|
|
protected:
|
|
|
|
CPtrArray m_arStaPtrs; //状态集
|
|
CPtrList m_lstStaPtrsBack; //上次状态
|
|
AECStatusRecord* m_pCurStaRec; //当前请求状态
|
|
|
|
AcDbLine* m_pLine; //当前的直线段
|
|
AcDbArc* m_pArc; //当前的圆弧段
|
|
AcDbCurve* m_pCurve; //当前线段
|
|
AecAngleWatch* m_pAngleWatch; //导向罗盘
|
|
AecDb3dRoadAxisLine* m_pRoadAxisLine; //总线段
|
|
|
|
AcDbObjectId m_idRoadLine; //路线
|
|
int m_nUndoGoupid; //undo标记id
|
|
|
|
protected:
|
|
|
|
AcPolyline* m_pPolylineProxy; //绘制代理
|
|
};
|