Files
envi-code/SourceCode/Code2026/tg_shs/shs_geLib/TGGeHoleModel.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

138 lines
2.5 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TGGeHoleModel 类
// = Version : ver2.0
// = Author : wlw
// = CreateDate : 2002-09-09
// = Description: TGGeHoleModel 类定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TGGeHoleModel.h"
#include "TchPrivateGlobalFunc.h"
TGGeHoleModel::TGGeHoleModel()
{
}
TGGeHoleModel::~TGGeHoleModel()
{
}
void TGGeHoleModel::SetOutLine(const TGGePolygonEx& outline)
{
m_outline = outline;
}
void TGGeHoleModel::GetOutLine(TGGePolygonEx& outline)
{
outline = m_outline;
}
TGGePolygonEx& TGGeHoleModel::GetOutLine()
{
return m_outline;
}
void TGGeHoleModel::AppendHoleList(TGGePolygonEx* pHole)
{
m_holes.Append(pHole);
}
TDPtrList<TGGePolygonEx>& TGGeHoleModel::GetHoleList()
{
return m_holes;
}
int TGGeHoleModel::GetHoleList(TDPtrList<TGGePolygonEx>& lstPolygonEx)
{
for (int i = 0; i < m_holes.Length(); i++)
{
lstPolygonEx.Append(m_holes[i]);
}
return lstPolygonEx.Length();
}
BOOL TGGeHoleModel::IsValid() const
{
return (m_outline.Length() >= 3);
}
BOOL TGGeHoleModel::Wcs2Ecs(TVector3D &vtEcs, double &nElev)
{
ASSERT(IsValid());
int nRet = m_outline.GetNormal(vtEcs);
if (nRet != RTNORM)
{
return FALSE;
}
m_outline.Wcs2Ecs(vtEcs);
nElev = m_outline[0]->z;
m_outline.SetElevation(0.0);
for (int i = 0; i < m_holes.Length(); i++)
{
m_holes[i]->Wcs2Ecs(vtEcs);
m_holes[i]->SetElevation(0.0);
}
return TRUE;
}
BOOL TGGeHoleModel::Triangulate(BOOL bKeepConstant, TDPtrList<TGGeTriangle> &lstTris, BOOL bAs3D)
{ //坐标系发生变化
TVector3D vtEcs(0,0,1);
double nElev = 0.0;
if (bAs3D)
{
if (!this->Wcs2Ecs(vtEcs, nElev))
{
return FALSE;
}
}
BOOL bRet = TRUE;
if (TchPrivate::Triangulate(m_outline, m_holes, lstTris))
{
for (int n = 0; n < lstTris.Length(); n++)
{
TGGeTriangle *triangle = lstTris[n];
triangle->vertex1.z = triangle->vertex2.z = triangle->vertex3.z = nElev;
if (bAs3D)
{
triangle->Ecs2Wcs(vtEcs);
}
}
}
else
{
bRet = FALSE;
}
if (bKeepConstant)
{
m_outline.SetElevation(nElev);
if (bAs3D)
{
m_outline.Ecs2Wcs(vtEcs);
}
for (int i = 0; i < m_holes.Length(); i++)
{
m_holes[i]->SetElevation(nElev);
if (bAs3D)
{
m_holes[i]->Ecs2Wcs(vtEcs);
}
}
}
return bRet;
}