//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : XAcGiViewDraw 类 // = Version : ver2.0 // = Author : zjq // = CreateDate : 2002-09-09 // = Description: XAcGiViewDraw 声明 // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _XAcGiViewDraw_H_ #define _XAcGiViewDraw_H_ #ifndef _XEXPLODESTREAMBASE_H_ #include "XExplodeStreamBase.h" #endif #ifndef _XLINE_H_ #include "XLine.h" #endif #ifndef _XARC_H_ #include "XArc.h" #endif #ifndef _XCIRCLE_H_ #include "XCircle.h" #endif #ifndef _XPOLY2D_H_ #include "XPoly2D.h" #endif #ifndef _X3DFACE_H_ #include "X3DFace.h" #endif #ifndef _XGLOBALFUNC_H_ #include "XGlobalFunc.h" #endif //扩展AutoCAD的显示类 class GEOAPI XAcGiViewDraw : public XExplodeDraw { public: XAcGiViewDraw(AcGiWorldDraw *pWd, AcGiViewportDraw *pVd = NULL); virtual ~XAcGiViewDraw(); AcGiCommonDraw * GetCommonDraw(); virtual BOOL IsFullExplode() const; virtual void SetPropertiesFrom(const AcDbEntity *pEnt); virtual void DrawEntity(const AcDbEntity &ent); virtual void SetSelectionMarker(int nMark); virtual BOOL IsPlotGeneration() const; virtual void PushClip(const XPoly2D& poly,int flag = 0); virtual void PopClip(); virtual void DrawText(const TCHAR *pszContent = NULL); virtual void DrawTextFit(const TCHAR *pszText, XPoint pt1, XPoint pt2, double nTextHeight); virtual void Polyline(AcDbPolyline &pline); virtual void DrawLine(const XLine &ln, double nThickness = 0.0); virtual void DrawArc(const XArc &ar, double nThickness = 0.0); virtual void DrawCircle(const XCircle &cir, double nThickness = 0.0); //对指定的封闭区域填充 virtual void DrawSolid(const XPoly2D &polyOutline); virtual void DrawHatch(const XPoly2D &polyOutline, const TCHAR *pszPattern, double nScale); virtual void DrawHatchEx(const XPoly2D &polyOutline, const TCHAR *pszPattern, double nScale,double rotation); // 根据给定的边界和凸起方向, 绘制三维外壳 virtual void DrawMesh(const XPoly2D &polyOut, const XVector3D &vtOffset); // 显示分别连接两个区域的边缘构成的侧面 virtual void DrawMesh(const XPoly2D &polyRegion1, const XPoly2D &polyRegion2); virtual void DrawMesh( const Adesk::UInt32 rows, const Adesk::UInt32 columns,const AcGePoint3d* pVertexList, const AcGiEdgeData* pEdgeData = NULL); // 根据给定的内外边界, 绘制三维外壳, 已经对区域进行离散 virtual void DrawShell(const XPoly2D &polyOut, const DList &lstPolyIn); virtual void DrawShell(Adesk::UInt32 nbVertex,const AcGePoint3d* pVertexList,Adesk::UInt32 faceListSize, const Adesk::Int32* pFaceList, const AcGiEdgeData* pEdgeData = NULL); virtual void DrawBody(const XPoly2D &polySrc, const XVector3D &vtOffset); virtual void DrawBody(const XPoly2D &polyOut, const XPoly2D &polyIn, const XVector3D &vtOffset); virtual void DrawBody(const XPoly2D &polyOut, const DList &lstHoles,const XVector3D &vtOffset); virtual void DrawFace(const X3DFace &face); virtual void DrawBlock(const AcDbBlockTableRecord &blockRec, const XPoint &ptInsert,const AcGeScale3d &scales, double nRot, BOOL bMakeBlock); virtual void DrawAtomicEntSet(const AcDbVoidPtrArray &entSet, const AcGeMatrix3d &matTrans); void DrawFace(const AcDbFace *pFace, const AcGeMatrix3d *mat = NULL); virtual Adesk::UInt16 GetColor() const; virtual void SetColor(Adesk::UInt16 nColor); virtual void SetColor1(Adesk::UInt16 nColor); virtual AcDbObjectId GetLayerId() const; virtual AcDbObjectId GetLineTypeId() const; virtual AcDbObjectId GetMaterialId()const; virtual Acad::ErrorStatus SetLayer(const AcDbObjectId &id) ; virtual Acad::ErrorStatus SetLayer(const TCHAR *pszLay) ; virtual Acad::ErrorStatus SetLineType(const TCHAR *pltype); virtual Acad::ErrorStatus SetLineType(AcDbObjectId idLinetype); virtual Acad::ErrorStatus SetMaterial(AcDbObjectId idMaterial); //设置图层以及颜色 virtual void SetColorLayer(Adesk::UInt16 iObjColor, const AcDbObjectId &id); virtual const TCHAR * Desc(); virtual Adesk::Boolean IsDragging() const; //add by zjq on 100629 //virtual COLORREF GetTrueColor() const; //virtual void SetTrueColor(COLORREF crRef); virtual AcCmColor GetTrueColor() const; virtual void SetTrueColor(AcCmColor crRef); static const TCHAR * Descriptor(); public: AcGiWorldDraw *m_pWd; AcGiViewportDraw *m_pVd; int m_nGsMark; }; inline Adesk::UInt16 XAcGiViewDraw::GetColor() const { if (m_pWd) { return m_pWd->subEntityTraits().color(); } return m_pVd->subEntityTraits().color(); } inline void XAcGiViewDraw::SetColor(Adesk::UInt16 nColor) { if (m_pWd) { m_pWd->subEntityTraits().setColor(nColor); } else { m_pVd->subEntityTraits().setColor(nColor); } } inline Acad::ErrorStatus XAcGiViewDraw::SetLayer(const AcDbObjectId &id) { Acad::ErrorStatus es = Acad::eOk; if (m_pWd) { m_pWd->subEntityTraits().setLayer(id); } else { m_pVd->subEntityTraits().setLayer(id); } return es; } inline Acad::ErrorStatus XAcGiViewDraw::SetLayer(const TCHAR *pszLayer) { AcDbObjectId id = GetLayerIdFromString(pszLayer); if (!id) { return Acad::eInvalidInput; } return SetLayer(id); } inline Acad::ErrorStatus XAcGiViewDraw::SetLineType(const TCHAR *pltype) { AcGiSubEntityTraits &traits = m_pVd ? m_pVd->subEntityTraits() : m_pWd->subEntityTraits(); AcDbObjectId idLineType = GetLinetypeIdFromString(pltype); if (!idLineType) { return Acad::eInvalidInput; } traits.setLineType(idLineType); return Acad::eOk; } inline Acad::ErrorStatus XAcGiViewDraw::SetLineType(AcDbObjectId idLineType) { AcGiSubEntityTraits &traits = m_pVd ? m_pVd->subEntityTraits() : m_pWd->subEntityTraits(); traits.setLineType(idLineType); return Acad::eOk; } inline Acad::ErrorStatus XAcGiViewDraw::SetMaterial(AcDbObjectId idMaterial) { #if ARX > 17 if (idMaterial.isValid()) { AcGiSubEntityTraits &traits = m_pVd ? m_pVd->subEntityTraits() : m_pWd->subEntityTraits(); traits.setMaterial(idMaterial); } #endif return Acad::eOk; } inline AcDbObjectId XAcGiViewDraw::GetLayerId() const { AcDbObjectId id; if (m_pWd) { id = m_pWd->subEntityTraits().layerId(); } else { id = m_pVd->subEntityTraits().layerId(); } return id; } inline AcDbObjectId XAcGiViewDraw::GetLineTypeId() const { AcDbObjectId id; if (m_pWd) { id = m_pWd->subEntityTraits().lineTypeId(); } else { id = m_pVd->subEntityTraits().lineTypeId(); } return id; } inline AcDbObjectId XAcGiViewDraw::GetMaterialId() const { AcDbObjectId id; #if ARX > 17 if (m_pWd) { id = m_pWd->subEntityTraits().materialId(); } else { id = m_pVd->subEntityTraits().materialId(); } #endif return id; } #endif