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

298 lines
7.5 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGGiWorldViewportDraw 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGGiWorldViewportDraw 声明
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _TGGIWORLDVIEWPORTDRAW_H_
#define _TGGIWORLDVIEWPORTDRAW_H_
#ifndef _TGGIEXPLODEDRAWBASE_H_
#include "TGGiExplodeDrawBase.h"
#endif
#ifndef _TGGELINE_H_
#include "TGGeLine.h"
#endif
#ifndef _TGGEARC_H_
#include "TGGeArc.h"
#endif
#ifndef _TGGECIRCLE_H_
#include "TGGeCircle.h"
#endif
#ifndef _TGGEPOLY2D_H_
#include "TGGePoly2D.h"
#endif
#ifndef _TGGE3DFACE_H_
#include "TGGe3DFace.h"
#endif
#ifndef _TCHGLOBALFUNC_H_
#include "TchGlobalFunc.h"
#endif
//扩展AutoCAD的显示类
class GEOAPI TGGiWorldViewportDraw : public TGGiExplodeDrawBase
{
public:
TGGiWorldViewportDraw(AcGiWorldDraw *pWd, AcGiViewportDraw *pVd = NULL);
virtual ~TGGiWorldViewportDraw();
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 TGGePoly2D& poly,int flag = 0);
virtual void PopClip();
virtual void DrawText(const TCHAR *pszContent = NULL);
virtual void DrawTextFit(const TCHAR *pszText, TADSGePoint3d pt1, TADSGePoint3d pt2, double nTextHeight);
virtual void Polyline(AcDbPolyline &pline);
virtual void DrawLine(const TGGeLine &ln, double nThickness = 0.0);
virtual void DrawArc(const TGGeArc &ar, double nThickness = 0.0);
virtual void DrawCircle(const TGGeCircle &cir, double nThickness = 0.0);
//对指定的封闭区域填充
virtual void DrawSolid(const TGGePoly2D &polyOutline);
virtual void DrawHatch(const TGGePoly2D &polyOutline, const TCHAR *pszPattern, double nScale);
virtual void DrawHatchEx(const TGGePoly2D &polyOutline, const TCHAR *pszPattern, double nScale,double rotation);
virtual void DrawHatchEx(const TGGeHatch &hatch);
// 根据给定的边界和凸起方向, 绘制三维外壳
virtual void DrawMesh(const TGGePoly2D &polyOut, const TVector3D &vtOffset);
// 显示分别连接两个区域的边缘构成的侧面
virtual void DrawMesh(const TGGePoly2D &polyRegion1, const TGGePoly2D &polyRegion2);
virtual void DrawMesh( const Adesk::UInt32 rows, const Adesk::UInt32 columns,const AcGePoint3d* pVertexList, const AcGiEdgeData* pEdgeData = NULL);
// 根据给定的内外边界, 绘制三维外壳, 已经对区域进行离散
virtual void DrawShell(const TGGePoly2D &polyOut, const TDPtrList<TGGePoly2D> &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 TGGePoly2D &polySrc, const TVector3D &vtOffset);
virtual void DrawBody(const TGGePoly2D &polyOut, const TGGePoly2D &polyIn, const TVector3D &vtOffset);
virtual void DrawBody(const TGGePoly2D &polyOut, const TDPtrList<TGGePoly2D> &lstHoles,const TVector3D &vtOffset);
virtual void DrawFace(const TGGe3DFace &face);
virtual void DrawBlock(const AcDbBlockTableRecord &blockRec, const TADSGePoint3d &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 xlc on 100629 TArch8.5
//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 TGGiWorldViewportDraw::GetColor() const
{
if (m_pWd)
{
return m_pWd->subEntityTraits().color();
}
else if (m_pVd != NULL)
{
return m_pVd->subEntityTraits().color();
}
return 0;
}
inline void TGGiWorldViewportDraw::SetColor(Adesk::UInt16 nColor)
{
if (m_pWd)
{
m_pWd->subEntityTraits().setColor(nColor);
}
else if (m_pVd != NULL)
{
m_pVd->subEntityTraits().setColor(nColor);
}
}
inline Acad::ErrorStatus TGGiWorldViewportDraw::SetLayer(const AcDbObjectId &id)
{
Acad::ErrorStatus es = Acad::eOk;
if (m_pWd)
{
m_pWd->subEntityTraits().setLayer(id);
}
else if (m_pVd != NULL)
{
m_pVd->subEntityTraits().setLayer(id);
}
return es;
}
inline Acad::ErrorStatus TGGiWorldViewportDraw::SetLayer(const TCHAR *pszLayer)
{
AcDbObjectId id = GetLayerIdFromString(pszLayer);
if (!id)
{
return Acad::eInvalidInput;
}
return SetLayer(id);
}
inline Acad::ErrorStatus TGGiWorldViewportDraw::SetLineType(const TCHAR *pltype)
{
if (m_pVd == NULL && m_pWd == NULL) return Acad::eOk;
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 TGGiWorldViewportDraw::SetLineType(AcDbObjectId idLineType)
{
if (m_pVd == NULL && m_pWd == NULL) return Acad::eOk;
AcGiSubEntityTraits &traits = m_pVd ? m_pVd->subEntityTraits() : m_pWd->subEntityTraits();
traits.setLineType(idLineType);
return Acad::eOk;
}
inline Acad::ErrorStatus TGGiWorldViewportDraw::SetMaterial(AcDbObjectId idMaterial)
{
if (m_pVd == NULL && m_pWd == NULL) return Acad::eOk;
#if ADS>16
if (idMaterial.isValid())
{
AcGiSubEntityTraits &traits = m_pVd ? m_pVd->subEntityTraits() : m_pWd->subEntityTraits();
traits.setMaterial(idMaterial);
}
#endif
return Acad::eOk;
}
inline AcDbObjectId TGGiWorldViewportDraw::GetLayerId() const
{
AcDbObjectId id;
if (m_pWd)
{
id = m_pWd->subEntityTraits().layerId();
}
else if (m_pVd != NULL)
{
id = m_pVd->subEntityTraits().layerId();
}
return id;
}
inline AcDbObjectId TGGiWorldViewportDraw::GetLineTypeId() const
{
AcDbObjectId id;
if (m_pWd)
{
id = m_pWd->subEntityTraits().lineTypeId();
}
else if (m_pVd != NULL)
{
id = m_pVd->subEntityTraits().lineTypeId();
}
return id;
}
inline AcDbObjectId TGGiWorldViewportDraw::GetMaterialId() const
{
AcDbObjectId id;
#if ADS>16
if (m_pWd)
{
id = m_pWd->subEntityTraits().materialId();
}
else if (m_pVd != NULL)
{
id = m_pVd->subEntityTraits().materialId();
}
#endif
return id;
}
#endif