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

121 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : CPloygon.h
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: 类的声明 描述单连通区域
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _BPLOYGON_H_
#define _BPLOYGON_H_
#ifndef _BPLOYLINE_H_
#include "CPloyLine.h"
#endif
#ifndef _DLIST_H_
#include "DList.h"
#endif
#ifndef _C3DFACE_H_
#include "C3DFace.h"
#endif
#ifndef _XTRIANGLE_H_
#include "XTriangle.h"
#endif
class CBNode;
class CPloygon;
typedef CTypedPtrList<CObList, CPloygon*> TBPolygonList;
class GEOAPI CPloygon : public CPloyLine
{
public:
CPloygon();
CPloygon(const CPloyLine& bline);
#if ARX > 17
CPloygon(const CPloygon& poly);
#endif
virtual ~CPloygon();
//返回下一结点,当作封闭环
virtual CBNode* GetNextNode(CBNode* pNode);
//返回上一结点,当作封闭环
virtual CBNode* GetPreNode(CBNode* pNode);
//判断多边形pPolygon是否在此多边形内部
//返回0:相交
//如果返回1,则包含pPolygon,
//如果返回2,则被pPolygon包含
//如果返回3,则与pPolygon互不包含
BOOL IsSurrounded(CPloyLine* pPolygon);
//释放内存
void ReleaseRgnLst(TBPolygonList& sRgnList);
//是否平行于XY平面
BOOL IsParallelToXY(double tol);
//根据此面创建m_plane
BOOL CreatAcGePlane();
//构造从当前坐标系到此平面所在的坐标系的变换矩阵
AcGeMatrix3d GetUCSToECSMat();
//构造从此平面所在的坐标系到当前坐标系的变换矩阵
AcGeMatrix3d GetECSToUCSMat();
//将此区域通过矩阵mat进行变换
void TransformBy(AcGeMatrix3d& mat);
//返回下下一结点
CBNode* GetNextNode2(CBNode* pNode);
//三角化单连通区域,并将三角形存于sRgnList
BOOL TrianglizePolygon(TBPolygonList& sRgnList);
//将此区域一分为二直到全为三角形,并将三角形存于sRgnList
void CutDown(TBPolygonList& sRgnList);
//测试pTestNode是否在以pNode为结点的前后两边内部
BOOL IsPtInsideRgn(CBNode* pNode,CBNode* pTestNode);
//连线PT1-PT2是否于其他边相交
BOOL IsCrossOtherEdges(CBNode* pNode1,CBNode* pNode2);
//pNode1和pNode2组成的连线是否可以将此区域分为两个单连通域
BOOL IsASuitableDivLine(CBNode* pNode1,CBNode* pNode2);
//以结点1-2为分界将此区域一分为二
void DivideTo2Polygon(CBNode* pNode1,CBNode* pNode2,CPloygon*& pRgn1,CPloygon*& pRgn2);
//将此结点转化成3DFACE
AcDbFace* ConvertTo3dFace();
//将此结点转化成3DFACE
XTriangle* ConvertToTriangle();
//将此区域三角化为一系列3DFACE
BOOL ConvertTo3DFaces(C3DFaceList& face3DList);
//将此区域三角化为一系列3DFACE
BOOL ConvertToTriangle(DList<XTriangle> &lstRes);
public:
//三角化后的三角区域链表
TBPolygonList m_childSRList;
//m_plane是否已经构造成功
BOOL m_bPlaned;
//所在平面
AcGePlane m_plane;
private:
//pt是否在pt11-pt12所在线段上
BOOL IsOnLineSeg(AcGePoint3d pt11,AcGePoint3d pt12,AcGePoint3d pt,double tol = TOL);
};
#endif