MGCL V10  V10
MGCL V10
 全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 フレンド グループ ページ
TL2Triangles.h
1 #ifndef _mgTL2Triangles_HH_
2 #define _mgTL2Triangles_HH_
3 
4 #include "mg/Pvector.h"
5 #include "Tl2/TL2Triangle.h"
6 
7 /****************************************************************/
8 /* Copyright (c) 2015 by DG Technologies, Inc. */
9 /* All rights reserved. */
10 /****************************************************************/
11 
12 class MGFace;
13 class mgTL2Face;
14 class mgTL2Fans;
15 class mgTL2LPline;
16 
21 
25 class MG_DLL_DECLR mgTL2Triangles{
26 
27 public:
30 
31 friend std::ostream& operator<< (std::ostream& out, const mgTL2Triangles& tlTriangles);
32 
34 
43  const MGSurface* surf=0
44 );
45 
47 mgTL2Triangles(const mgTL2Triangles& tris);
48 
50 
52 const mgTL2Triangle& operator[](int i)const;
53 mgTL2Triangle& operator[](int i);
54 
56 iterator begin(){return m_triangles.begin();}
57 iterator end(){return m_triangles.end();}
58 const_iterator begin()const{return m_triangles.begin();}
59 const_iterator end()const{return m_triangles.end();}
60 
61 mgTL2Triangle* front(){return m_triangles.front();};
62 mgTL2Triangle* back(){return m_triangles.back();};
63 
64 const mgTL2Triangle* front()const{return m_triangles.front();};
65 const mgTL2Triangle* back()const{return m_triangles.back();};
66 
68 bool is_uv()const{return m_kind==MGCL::UV;};
69 
73 void makeStrip(
74  const mgTL2LPline& pline0,
75  const mgTL2LPline& pline2
76 );
77 
81 void makeFan(
82  const mgTL2LPline& plinen,
83  const mgTL2LPline& pline0
84 );
85 
87 bool need_normal()const{return m_kind==MGCL::XYZNormal;};
88 
90 MGCL::TL_DATA_KIND get_kind()const{return m_kind;};
91 
92 void push_back(mgTL2Triangle* pTlTriangle){m_triangles.push_back(pTlTriangle);};
93 void push_back(mgTL2Triangles& tris){m_triangles.push_back(tris.m_triangles);};
94 
97 void push_back(
98  const mgTL2Fans& fans,
99  int nvTri,
100  const std::vector<int>& verticesIDs
101 );
102 
103 int size()const{return int(m_triangles.size());};
104 
105 void set_surface(const MGSurface* surf){m_surface=surf;};
106 const MGSurface* surface()const{return m_surface;};
107 
116 void tessellate1234edgesLoop(
117  const MGLoop& oloop//Outer boundary loop of the face of mgTL2Plygon
118  //to tessellate whose number of edges is 4.
119 );
120 
121 private:
122  const MGSurface* m_surface;
123  MGCL::TL_DATA_KIND m_kind;
124 
131  MGPvector<mgTL2Triangle> m_triangles;
132 
133 
135 void tessellate2by2(
136  const mgTL2LPline& pl,
137  const mgTL2LPline& pl_opposite
138 );
139 
142 void tessellate222n(
143  const mgTL2LPline& pl_id3,//edge that has 3 or more than 3 vetices.
144  const mgTL2LPline& pl_opposite//opposite edge of pl_id3.
145 );
146 
150 void tessellate2n2n(
151  const mgTL2LPline& pl,//an edge whose number of vetices is more than 2.
152  const mgTL2LPline& pl_opposite//Opposite edge of pl.
153 );
154 
157 void tessellate22nn(
158  int id2, //id of edge that has 2 vertices. Next edge of id2 also have only 2 vertices.
159  const mgTL2LPline pline[4]
160 );
161 
165 void tessellate2(
166  const mgTL2LPline LPline[2]
167 );
168 
172 void tessellate3nnn(
173  int id3, //id of edge that has 2 or 3 vertices.
174  const mgTL2LPline pline[4]
175 );
176 
179 void tessellate3(
180  const mgTL2LPline LPline[3]
181 );
182 
183 //Tessellate a rectangle of a General case.
184 //All of the four edges have 4 or more than 4 vertices.
185 //Tessellated triangles will be appended.
186 void tessellate_nnnn(
187  int minID,
188  const mgTL2LPline pline[4]
189 );
190 
198 void tessellate_nm(
199  int maxID,
200  const mgTL2LPline pline[4]
201 );
209 void tessellate4(
210  const mgTL2LPline LPline[4]
211 );
212 
216 void tessellateConcave4(
217  int concaveID, //vertiex id at which vertex concavity is detected.
218  const mgTL2LPline LPline[4]
219 );
220 
224 void tessellateSharp4(
225  int sharpID, //vertiex id at which sharpness is detected.
226  const mgTL2LPline LPline[4]
227 );
228 
229 };
230  // end of UseTessellation group
232 #endif
mgTL2LPline is limitted subinterval of mgTL2Polyline.
Definition: TL2LPline.h:23
iterator begin()
Definition: TL2Triangles.h:56
data included are surface parameter (u,v).
Definition: MGCL.h:281
MGPvector< mgTL2Triangle >::const_iterator const_iterator
Definition: TL2Triangles.h:28
const_iterator begin() const
Definition: TL2Triangles.h:58
void set_surface(const MGSurface *surf)
Definition: TL2Triangles.h:105
A vector of mgTL2Triangle's.
Definition: TL2Triangles.h:25
TL_DATA_KIND
Triangles' data kind.
Definition: MGCL.h:280
Defines a vector mgTL2Fan.
Definition: TL2Fans.h:33
const_iterator end() const
Definition: TL2Triangles.h:59
bool need_normal() const
Return true if m_triangles' data is (u,v).
Definition: TL2Triangles.h:87
std::ostream & operator<<(std::ostream &ostrm, const MGisect &is)
Debug Function.
Definition: isect.h:95
MGFace is a trimmed surface.
Definition: Face.h:51
void push_back(mgTL2Triangle *pTlTriangle)
Definition: TL2Triangles.h:92
iterator end()
Definition: TL2Triangles.h:57
const mgTL2Triangle * front() const
Definition: TL2Triangles.h:64
int size() const
Definition: TL2Triangles.h:103
MGSurface is an abstract class of 3D surface.
Definition: Surface.h:54
mgTL2Face is a proprietry class for Face tessellation.
Definition: TL2Face.h:29
MGLoop is a boundary of a face, a boundary of 2D manifold cell.
Definition: Loop.h:44
bool is_uv() const
Return true if m_triangles' data is (u,v).
Definition: TL2Triangles.h:68
mgTL2Triangle * front()
Definition: TL2Triangles.h:61
mgTL2Triangle * back()
Definition: TL2Triangles.h:62
MGCL::TL_DATA_KIND get_kind() const
return the data kind of this.
Definition: TL2Triangles.h:90
const MGSurface * surface() const
Definition: TL2Triangles.h:106
void push_back(mgTL2Triangles &tris)
Definition: TL2Triangles.h:93
MGPvector< mgTL2Triangle >::iterator iterator
Definition: TL2Triangles.h:29
const mgTL2Triangle * back() const
Definition: TL2Triangles.h:65
(x,y,z,Nx,Ny,Nz).
Definition: MGCL.h:283
Defines Vector of newed object pointers.
Definition: Pvector.h:27
mgTL2Triangle holds (multiple) triangles data, which are a fan or a strip.
Definition: TL2Triangle.h:30