Files
envi-code/SourceCode/Code2026/tg_shs/inc/geo/THole.h
T

139 lines
4.2 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
//-----------------------------------------------------------------------------+
2026-09-28 15:28:50 +08:00
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : THole.h
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
2026-10-04 00:04:20 +08:00
// = Description: 类的声明
2026-09-28 15:28:50 +08:00
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _THOLE_H_
#define _THOLE_H_
#ifndef _TACDBFACEPTR_H_
#include "TAcDbFacePtr.h"
#endif
#ifndef _TDPTRLIST_H_
#include "TDPtrList.h"
#endif
#ifndef _TGGETRIANGLE_H_
#include "TGGeTriangle.h"
#endif
#ifndef _TGGEPOLY2D_H_
#include "TGGePoly2D.h"
#endif
#ifndef _TGGEPOLYGONEX_H_
#include "TGGePolygonEx.h"
#endif
#ifndef _TBPLOYGON_H_
#include "TBPloygon.h"
#endif
#ifndef _TACDBENTITYPTR_H_
#include "TAcDbEntityPtr.h"
#endif
class TBNode;
class GEOAPI THole
{
public:
THole();
virtual ~THole();
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList();
2026-10-04 00:04:20 +08:00
//单连通化\然后三角化,返回3DFACE
2026-09-28 15:28:50 +08:00
BOOL SimplifyToFace(TAcDbFacePtrList& face3DList);
2026-10-04 00:04:20 +08:00
//将空从左到右\从下到上排序
2026-09-28 15:28:50 +08:00
BOOL SortHolesInXY();
2026-10-04 00:04:20 +08:00
//将外边界变为逆时针,内边界顺时针,并且按X从小到大排序
2026-09-28 15:28:50 +08:00
BOOL SortNodesAlongClockWise();
TBNode* GetADivideNode(TBPloygon* pEdge,TBPloygon* pEdge1,TBNode* pNode);
2026-10-04 00:04:20 +08:00
//在边界pEdge上选择一个适当的顶点,它和pNode的连线不与任何其他边界相交(包括pEdge和pEdge1)
//因此可将多边形一分为二
//创建孔洞
2026-09-28 15:28:50 +08:00
void CreateHoles();
2026-10-04 00:04:20 +08:00
//单连通化\然后三角化,返回3DFACE
2026-09-28 15:28:50 +08:00
BOOL SimplifyToTriangle(TDPtrList<TGGeTriangle> &lstRes);
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList(const TDPtrList<TGGePoly2D> &lstHole);
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList(const TDPtrList<TGGePolygonEx> &lstHole);
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList(const TGGePoly2D &out, const TDPtrList<TGGePoly2D> &lstHole);
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList(const TGGePolygonEx &out, const TDPtrList<TGGePoly2D> &lstHole);
2026-10-04 00:04:20 +08:00
//构造边界线链表,用基线描述边界,第一个链表为外边,其余为内边
2026-09-28 15:28:50 +08:00
BOOL ConstructEdgeList(const TGGePolygonEx &out, const TDPtrList<TGGePolygonEx> &lstHole);
BOOL GetTriangles(TDPtrList<TGGeTriangle> &lstRes);
BOOL FormatEdgeList();
BOOL FormatEdgeListAuto();
public:
2026-10-04 00:04:20 +08:00
//区域各边链表
2026-09-28 15:28:50 +08:00
TBPolygonList m_RegionLst;
2026-10-04 00:04:20 +08:00
//基线插入基点
2026-09-28 15:28:50 +08:00
AcGePoint3d m_insertPt;
private:
BOOL CreateReference(AcGePoint3d org,CString& BlockTableRecordName,double rotAng,CString layerName = "");
2026-10-04 00:04:20 +08:00
//构造块名
2026-09-28 15:28:50 +08:00
BOOL BlockName(CString& blockName);
2026-10-04 00:04:20 +08:00
//根据entLst创建块
2026-09-28 15:28:50 +08:00
BOOL CreateBlock(CEntityList& entLst,CString& blockName,AcDbObjectId& blockId,AcGePoint3d org);
2026-10-04 00:04:20 +08:00
//返回层layerName的记录ID
2026-09-28 15:28:50 +08:00
AcDbObjectId GetLayerRecordId(CString layerName);
2026-10-04 00:04:20 +08:00
//只删除C3DFface对象,不删除其AcDbFace对象
2026-09-28 15:28:50 +08:00
void ReleaseC3DFaceList(TAcDbFacePtrList& c3dfaceLst);
2026-10-04 00:04:20 +08:00
//只删除TAcDbEntityPtr对象,不删除其AcDbEntity对象
2026-09-28 15:28:50 +08:00
void ReleaseCEntityList(CEntityList& centityLst);
2026-10-04 00:04:20 +08:00
//将链表中的所有实体的层设置为layerName
2026-09-28 15:28:50 +08:00
void SetLayerOfEntities(CEntityList& entLst,CString layerName, int colorNum = 7);
2026-10-04 00:04:20 +08:00
//层layerName是否存在于数据库中
2026-09-28 15:28:50 +08:00
BOOL IsLayerExistInDb(CString layerName);
2026-10-04 00:04:20 +08:00
//设置层,如果不存在则新建。
2026-09-28 15:28:50 +08:00
BOOL SetLayer(CString layerName, int colorNum = 0);
2026-10-04 00:04:20 +08:00
//新建层layerName。
2026-09-28 15:28:50 +08:00
BOOL NewLayer(CString& layerName, int colorNum = 0, BOOL bFreeze = 0);
2026-10-04 00:04:20 +08:00
//将TAcDbFacePtrList转换为CEntityList
2026-09-28 15:28:50 +08:00
void C3DFaceList2EntityList(TAcDbFacePtrList& c3dFaceLst,CEntityList& entLst);
2026-10-04 00:04:20 +08:00
//将层冻结
2026-09-28 15:28:50 +08:00
BOOL SetLayerFrozen(CString layerName, bool bFreeze = 1);
2026-10-04 00:04:20 +08:00
//将层关闭
2026-09-28 15:28:50 +08:00
BOOL SetLayerOff(CString layerName, bool bOff = 1);
};
#endif