#pragma once #include "GeArc.h" #include "PickEntSet.h" #include "DListStack.h" #include "acedinputpointmonitorex.h" #include "AcGiViewDraw.h" #include "SymbDialog.h" #include "AecDbDimension.h" #include "AecDbSymbNorthThumb.h" #include "aecDbSymbSymmetry.h" #include "aecDbSymbSection.h" #include "AecDbSymbModi.h" #include "AecDbSymbCoord.h" #include "AecDbSymbElevation.h" #include "AecDbDrawingName.h" #include "AecDbSymbDrawingIndex.h" #include "AecDbSymbIndexPointer.h" #include "AecDbSymbComposing.h" class DimensionEdJig : public AcEdJig { public: DimensionEdJig(AecDbDimension *pDim, const TCHAR *pszPrompt, const TCHAR *pszKeyword = NULL); ~DimensionEdJig(); int doIt(); virtual DragStatus sampler(); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; void Swap(); int GetRetCode(int *kwordId = NULL) const; int m_nRetCode; //返回码 const TCHAR *m_pszPrompt; //提示信息 const TCHAR *m_pszKeyword; //关键字 AecDbDimension *m_pDrawEnt; //临时实体, AecDbDimension *m_pTemp; //临时实体, 用于m_nFlag==3 GeArc m_ObjarDim;// 被标注对象 BOOL m_bKeyword;//是否按下关键字,玄长标注用 ADSGePoint3d m_ptDim; int m_nFlag; //0--尺寸方向, 1--尺寸线位置, 2--第二个标注点, 3--其它标注点 //add by whl on 03/08/08 DListStack ptStack;//标注点栈 void Step();//当前点入栈 void Undo();//撤消 ADSGePoint3d GetLastPoint(); bool CanUndo();//是否可撤消 //add by lgy 20120315 设置弧长标注标记 void SetIsArcDim(); BOOL m_bInView; //add by lgy 20120503 保存标注是否是在视口中绘制 int m_nPortNum; //视口编号 PickEntSet m_entSet;//add by lgy 20120507 保存所有视口对象 AcDbObjectId m_idDimNew;//新标注样式ID AcDbObjectId m_idDimOld;//老标注样式ID BOOL m_bSaveStyle; //保存是不是设置新样式 protected: void FindAndRemoveSeg(ADSGePoint3d pt);//由一标注点找出对应段并且正确去除之 private: //add by lxb on 2011/11/22 AcEdInputPointMonitorEx m_cMonitor;//监视器 bool m_bIsArcDim; //add by lgy 20120315 弧长标注标记 }; typedef struct CptData { AcGePoint2d ptCenter; AcGePoint2d ptTem; }PTDATA, *pPTDATA; class DimAngleJig :public AcEdJig { public: DimAngleJig(AecDbDimension *pDim, AcGeLine2d &line1, AcGeLine2d &line2, ADSGePoint3d &pt, TCHAR *pszPrompt, TCHAR *pszKeyword = NULL); ~DimAngleJig(); AcEdJig::DragStatus doIt(); protected: virtual AcEdJig::DragStatus sampler(); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; static int QsortFun(const void *p1, const void *p2);//交点排序函数 private: AecDbDimension *m_pDim;//标注 TCHAR *m_pszPrompt; //提示语 TCHAR *m_pszKeyword; //关键字 AcGePoint3d m_ptLast; //记录鼠标上次位置 AcGePoint3d m_ptCur; //记录鼠标当前位置 AcGeLine2d m_line1; //成角直线1 AcGeLine2d m_line2; //成角直线2 ADSGePoint3d m_ptCen; //成角顶点 }; class TMulDimEntity : public AcDbEntity { public: TMulDimEntity() {} virtual ~TMulDimEntity() {} AecDbDimension *m_pDrawEnt; //临时实体, AecDbDimension *m_pDrawEntAll; //临时实体, int m_iFlag; virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw* mode) { assertReadEnabled(); AcGiViewDraw dc(mode, NULL); m_pDrawEnt->Draw2d(dc); if (m_iFlag == 2 && m_pDrawEntAll != NULL) { m_pDrawEntAll->Draw2d(dc); } return Adesk::kTrue; } }; class QuickDimensionJig : public AcEdJig { public: QuickDimensionJig(); virtual ~QuickDimensionJig(); int doIt(); virtual DragStatus sampler(); virtual Adesk::Boolean update(); virtual AcDbEntity *entity() const; const TCHAR *m_pszKeyword; //关键字 // AecDbDimension *m_pDrawEnt; //临时实体, // AecDbDimension *m_pDrawEntALL; AecDbDimension *m_pDrawEntX; //临时实体, AecDbDimension *m_pDrawEntY; //临时实体, double m_dFactor; int m_iFlag; ADSGePoint3d m_ptDim; ADSGePoint3d m_lowPt, m_upPt; void SetKeyword(const TCHAR *pszKeyword); void SetExtents(ADSGePoint3d lowPt, ADSGePoint3d upPt); void SetMidPoints(AcGePoint3dArray &dimPoints); void SetDimType(int iFlag); void AddToDataBase(); TMulDimEntity m_dimbEntity; }; class SymbEdJig : public AcEdJig { protected: int GetRetCode(int nRetCode, int *kewyIdx = NULL) const; protected: //输入 XString m_sPrompt; //提示信息 XString m_sKeyword; XPoint m_ptResult; public: SymbEdJig() {} virtual int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); virtual BOOL IsPosChanged(XPoint ptNew) const; virtual DragStatus sampler(); public: void SetPrompt(const TCHAR *s) { m_sPrompt = s; } void SetKeyword(const TCHAR *k) { m_sKeyword = k; } XPoint GetPickPoint() const { return m_ptResult; } }; class NorthThumbEdJig : public SymbEdJig { public: enum TNorthOper { kNone = 0, kCenter = 1, kDirection = 2, }; protected: TNorthOper m_nOperCode; // I/O AecXDbSymbNorthThumb *m_pDrawEnt; public: NorthThumbEdJig(AecXDbSymbNorthThumb *); virtual int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); virtual BOOL IsPosChanged(XPoint ptNew) const; virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: void SetOperCode(NorthThumbEdJig::TNorthOper opCode) { m_nOperCode = opCode; } }; class SymmetryEdJig : public SymbEdJig { protected: // I/O AecXDbSymbSymmetry *m_pDrawEnt; public: SymmetryEdJig(AecXDbSymbSymmetry *); virtual DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; }; class SectionEdJig : public SymbEdJig { public: enum TSectionOper { kNone = 0, kSectPoint = 1, kSectPointOther = 2, kViewDirection = 3 }; protected: int GetRetCode(int nRetCode, int *kewyIdx = NULL) const; protected: TSectionOper m_nOperCode; int m_iFlag2; //add by lgy 20120320 添加改变量控制那种方式jig剖面符号 int m_nMode; CSectionDlg *m_pDlg; // I/O AecXDbSymbSection *m_pDrawEnt; AecXDbSymbSection m_drawEnt; public: SectionEdJig(AecXDbSymbSection *); int DoIt(int *pKeyIndex = NULL); //add by lgy 20120320 设置剖面符号绘制的方式 void SetJigMode(int nMode); void SetJigDlg(CSectionDlg *pDlg); //设置与jig交互的对话框 protected: virtual AcEdJig::DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: void SetOperCode(SectionEdJig::TSectionOper opCode) { m_nOperCode = opCode; } int GetiFlag2(); }; class CloudLineJig : public SymbEdJig { public: CloudLineJig(AecXDbSymbModi *pModi, XPoint ptFirst, double dMax, double dMin); ~CloudLineJig(); public: virtual int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); protected: virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; private: XPoint m_ptFirst; double m_dMax; double m_dMin; XPoly2D m_pline; AecXDbSymbModi *m_pModi; }; class SymbCutJig : public AcEdJig { public: SymbCutJig(const XPoint&); int DoIt(); virtual DragStatus sampler(); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: //TDbSymbCut* m_pSymbCut; protected: int GetRetCode(int nRetCode, int *kwordId = NULL) const; public: XPoint pt0; XPoint pt1; XPoint pt2; XPoint pt3; XPoint pt4; int m_nRupNum; //XDcClip::ClipType m_ClipType; int mPromptCounter; // add by lgy 20120511,是否是双折断线 BOOL m_bIsTwo; }; class ArrowEdJig : public SymbEdJig { public: enum TArrowOper { kNone = 0, kLinePoint = 1, kArcPoint = 2, kArcMidPoint = 3, kArcRadius = 4 }; protected: TArrowOper m_nOperCode; AecXDbSymbArrow *m_pDrawEnt; BOOL m_bFirst; public: ArrowEdJig(AecXDbSymbArrow *); virtual int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); protected: virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: void SetOperCode(ArrowEdJig::TArrowOper opCode) { m_nOperCode = opCode; } TArrowOper GetOperCode() { return m_nOperCode; } }; static CString dAngle; // 保存角度 static XPoint savePoint; // 保存第一点的坐标 class CoordEdJig : public SymbEdJig { protected: // I/O AecXDbSymbCoord *m_pDrawEnt; public: CoordEdJig(AecXDbSymbCoord *); virtual int DoIt(); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: // [10/19/2007 nsh] double m_dFixAngle; // 得到固定的角度值 BOOL m_bFixAngle; // 判断时候选定了固定角度的选项 // --end-- XPoint m_saveFirstPt; // sg add 120618,记忆第1点坐标,主要为了接收外面传过来的值,给savePoint赋值 }; class ElevEdJig : public SymbEdJig { public: enum TElevOper { kNone = 0, kDirection = 1, kBaseLine = 2, kLeader = 3, kMove = 4 }; double m_dPointX; AcGePoint3d m_ptBase; double m_fBaseElev; // M protected: // 输入 ElevEdJig::TElevOper m_nOperCode; // I/O AecXDbSymbElevation *m_pDrawEnt; public: ElevEdJig(AecXDbSymbElevation *); virtual int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; XPoint GetDragPoint() const; XPoint GetBasePoint() const; public: void SetOperCode(ElevEdJig::TElevOper nCode) { m_nOperCode = nCode; } }; static double sAngle; extern CString g_sLeadFixAngle; extern BOOL g_bLeadFixAngle; class LeaderEdJig : public SymbEdJig { public: enum TLeaderOper { kNone = 0, kLeader = 1, kTextLine = 2, kVertex = 3, }; // add by cwk double m_dFixAngle; BOOL m_bFixAngle; protected: // 输入 LeaderEdJig::TLeaderOper m_nOperCode; // I/O AecXDbSymbMultiLeader *m_pDrawEnt; public: LeaderEdJig(AecXDbSymbMultiLeader *); int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; XPoint GetDragPoint() const; XPoint GetBasePoint() const; //add by lgy 20120206 引出标注角度固定角度不起作用 void SetDlg(CLeaderDlg *pLeadDlg); CLeaderDlg *m_pDlg; public: void SetOperCode(LeaderEdJig::TLeaderOper nCode) { m_nOperCode = nCode; } }; // sg add 090330,引出标注,添加其他点时使用 class LeaderAddOtherPtJig : public SymbEdJig { public: AcGePoint3d m_ptLeader; AcGePoint3d m_ptFirstVertexes; AcDbLine m_line; BOOL m_bUpdateDlg; // 兼顾对象编辑和绘制对话框,标志是否时时获取对话框上的“多点共线” CLeaderDlg *m_pDlg; BOOL m_bAllOnLine; double m_nLayoutRotation;//引线平行 add by lxb on 111229 BOOL m_bLeaderParall; //对象编辑时,对象是否带有引线平行属性 public: LeaderAddOtherPtJig(CLeaderDlg *pDlg, XPoint ptStart, XPoint ptBase, double dLayoutRotation); // 绘制函数调用 LeaderAddOtherPtJig(BOOL bAllPtsOnLine, XPoint ptStart, XPoint ptBase, double dLayoutRotation, BOOL b); // 对象编辑调用 int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; }; class DrawingNameJig : public AcEdJig { public: DrawingNameJig(AecXDbDrawingName *pEnt); int start(int *pKeyIndex = NULL); AcDbEntity* entity() const; DragStatus sampler(); Adesk::Boolean update(); void SetPrompt(const TCHAR *pszPrompt); void SetKeyword(const TCHAR *pszKeyword); private: const TCHAR *m_pszPrompt; //提示信息 const TCHAR *m_pszKeyword; //关键字 AecXDbDrawingName *m_pDrawEnt; //临时实体 AcGePoint3d m_ptIns; }; class DrawingIndexEdJig :public AcEdJig { public: DrawingIndexEdJig(AecXDbSymbDrawingIndex *pEnt, TCHAR *pszPormat, TCHAR *pszKeyWord); ~DrawingIndexEdJig(); virtual AcEdJig::DragStatus sampler(); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; AcEdJig::DragStatus doIt(); private: AecXDbSymbDrawingIndex *m_pEnt; AcGePoint3d m_ptCur; //鼠标当前坐标 AcGePoint3d m_ptLast; TCHAR *m_pszPormat; //提示语 TCHAR *m_pszKeyWord; }; class IndexPointerEdJig : public SymbEdJig { public: enum TIndexOper { kNone = 0, kSourceExtent = 1, kTurnPoint = 2, kTextBasePoint = 3, kViewDirection = 4, kAddedTurn = 5, // 剖切线中多出来的那个点 kMoreCuts = 6, // 其他剖切点 }; double m_dFixAngle; // add by cwk on 060706,固定角度值 bool m_bFixAngle; protected: TIndexOper m_nOperCode; AecXDbSymbIndexPointer *m_pDrawEnt; // I/O AcDbCircle m_drawEnt; CArray m_arCutAdded; XLine m_cutCurrDrag; CIndexDimDlg *m_pDlg; // public: IndexPointerEdJig(AecXDbSymbIndexPointer *); int DoIt(int *pKeyIndex = NULL); void AttachDlg(CIndexDimDlg* pDlg) { m_pDlg = pDlg; } // 根据索引初始化索引线 void InitCutLine(); protected: virtual AcEdJig::DragStatus GetPoint(XPoint &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: void SetOperCode(IndexPointerEdJig::TIndexOper opCode) { m_nOperCode = opCode; } }; class ComposingEdJig : public SymbEdJig { public: enum TComposingOper { kNone = 0, kTextLine = 1, kTurnPoint = 2, }; protected: TComposingOper m_nOperCode; // I/O AecXDbSymbComposing *m_pDrawEnt; public: ComposingEdJig(AecXDbSymbComposing *); virtual int DoIt(int *pKeyIndex = NULL); DragStatus GetPoint(XPoint &pt); protected: virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; public: void SetOperCode(ComposingEdJig::TComposingOper opCode) { m_nOperCode = opCode; } }; class ComposingAddOtherPtJig : public SymbEdJig { public: ComposingAddOtherPtJig(XPoint ptStart, XPoint ptBase); public: AcGePoint3d m_ptLeader; // 引线的拐点 AcGePoint3d m_ptFirstVertexes; // 引线的端点 AcDbLine m_line; // 引线 public: int DoIt(int *pKeyIndex = NULL); virtual DragStatus GetPoint(AcGePoint3d &pt); virtual Adesk::Boolean update(); virtual AcDbEntity* entity() const; };