291 lines
7.0 KiB
C++
291 lines
7.0 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// 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<XPoly2D> &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<XPoly2D> &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
|