!XT (Code) Update copyright headers in Code/Sandbox.
[CRYENGINE.git] / Code / Sandbox / Plugins / CryDesigner / Core / BSPTree2D.h
blob16655907a610848798f5bf38a9ef66a74ae3bc61
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 namespace Designer
7 class BSPTree2DNode;
8 class BSPTree2D : public _i_reference_target_t
10 public:
12 BSPTree2D() : m_pRootNode(NULL)
15 ~BSPTree2D();
17 EPointPosEnum IsVertexIn(const BrushVec3& vertex) const;
18 EIntersectionType HasIntersection(const BrushEdge3D& edge) const;
19 bool IsInside(const BrushEdge3D& edge, bool bCheckCoDiff) const;
20 bool IsOnEdge(const BrushEdge3D& edge) const;
22 struct OutputEdges
24 BrushEdge3D::List posList;
25 BrushEdge3D::List negList;
26 BrushEdge3D::List coSameList;
27 BrushEdge3D::List coDiffList;
30 void GetPartitions(const BrushEdge3D& inEdge, OutputEdges& outEdges) const;
32 void BuildTree(const BrushPlane& plane, const std::vector<BrushEdge3D>& edgeList);
33 void GetEdgeList(BrushEdge3D::List& outEdgeList) const { GetEdgeList(m_pRootNode, outEdgeList); }
35 bool HasNegativeNode() const;
37 private:
39 struct Intersection
41 BrushVec2 point;
42 int lineIndex[2];
44 typedef std::vector<Intersection> IntersectionList;
46 static void GetEdgeList(BSPTree2DNode* pTree, BrushEdge3D::List& outEdgeList);
47 static BSPTree2DNode* ConstructTree(const BrushPlane& plane, const std::vector<BrushEdge3D>& edgeList);
49 private:
50 BSPTree2DNode* m_pRootNode;
53 typedef _smart_ptr<BSPTree2D> BSPTree2DPtr;