Files
envi-code/SourceCode/Code2026/inc/AcPolylineJig.h
T
2026-09-28 15:28:50 +08:00

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; //绘制代理
};