36 rbound.
set(HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF);
61 BREP_SHELL_LIST::iterator ishell =
shells.begin();
66 if (cnt!=NULL) cnt->
SetMax(100);
69 int shn = (int)
shells.size();
70 while (ishell!=
shells.end()) {
73 ishell =
shells.erase(ishell);
94 BREP_SHELL_LIST::iterator ishell;
95 for (ishell=
shells.begin(); ishell!=
shells.end(); ishell++) (*ishell)->CloseData();
124 BREP_SHELL_LIST::iterator ishell;
125 ishell = std::find(
shells.begin(),
shells.end(), shell);
140 rbound.
set(HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF);
152 if (counter!=NULL) counter->
SetMax(100);
159 BREP_FACET_LIST::iterator ifacet =
facets.begin();
162 int itv =
Max(1, (
int)
facets.size()/100);
163 while (ifacet!=
facets.end()) {
165 ifacet =
facets.erase(ifacet);
171 if (counter!=NULL && cnt%itv==0) counter->
StepIt();
178 BREP_FACET_LIST::iterator ifacet;
179 for (ifacet=
facets.begin(); ifacet!=
facets.end(); ifacet++) (*ifacet)->CloseData();
198 BREP_FACET_LIST::iterator ifacet;
199 ifacet = std::find(
facets.begin(),
facets.end(), facet);
221 rbound.
set(HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF);
242 BREP_CONTOUR_LIST::iterator icon;
253 contour->
facet =
this;
262 BREP_CONTOUR_LIST::iterator icon;
266 contour->
facet = NULL;
283 double dmin = HUGE_VALF;
284 double dmax = -HUGE_VALF;
286 BREP_CONTOUR_LIST::iterator icon;
288 (*icon)->CloseFacet(
this, emax, dmin, dmax);
291 d = (dmin + dmax)/2.0;
319 rbound.
set(HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF, HUGE_VALF, -HUGE_VALF);
345 if (new_wing==NULL)
return;
350 new_wing->
next = new_wing->
prev = new_wing;
364 if (
wing==dis_wing) {
365 if (dis_wing->
next==dis_wing) {
377 dis_wing->
next = dis_wing->
prev = NULL;
399 if (
wing==NULL)
return NULL;
422 if (first==NULL)
return;
425 for (
BREP_WING* swing=first->
prev; swing!=first; swing=prev) {
436 if (
wing==NULL)
return;
443 if (d < dmin) dmin = d;
444 if (d > dmax) dmax = d;
449 }
while (next!=
wing);
465 next = swing->next->vertex->point;
545 BREP_EDGE_LIST::iterator iedge = std::find(
edge_list->begin(),
edge_list->end(),
this);
550 (*(
edge_list->begin()))->edge_list = NULL;
604 BREP_WING_LIST::iterator iwing;
627 BREP_WING_LIST::iterator iwing;
668 for (
int i=0; i<8; i++)
child[i] = NULL;
674 for (
int i=0; i<8; i++) {
697 if (new_vertex==NULL)
return NULL;
710 if (cmp==8)
return p;
715 if (cmp>=0 && o!=NULL) {
735 if (new_vertex==NULL)
return this;
752 if (cmp>=0 && o!=NULL) {
770 if (cmp==8)
return p;
771 if (cmp<0)
return NULL;
781 for (
int i=0; i<8; i++) {
782 if (
child[i]!=NULL) {
805 (wing->
vertex)->wing_list.push_back(wing);
825 if (edge==NULL)
return NULL;
834 BREP_EDGE_LIST::iterator iedge=edge->
edge_list->begin();
836 if ((*iedge)->wing1->vertex==vertex1) wing = (*iedge)->wing1;
837 else if ((*iedge)->wing2->vertex==vertex1) wing = (*iedge)->wing2;
843 if (wing!=NULL && wing->
contour!=NULL){
846 if (new_edge==NULL)
return NULL;
854 wing = new_edge->
wing1;
892 BREP_WING_LIST::iterator iwing;
895 for (iwing=list.begin(); iwing!=list.end(); iwing++){
901 for (iwing=list.begin(); iwing!=list.end(); iwing++) {
926 if (vertexno!=NULL) *vertexno = num;
939 for (
int i=0; i<8; i++) {
940 if (p->
child[i]!=NULL) {
977 if (node==NULL)
return NULL;
990 if (v1==v2)
return NULL;
1013 if (dist2<=tolerance*tolerance)
return 8;
1043 tv.
n = sqrt(tv.
x*tv.
x + tv.
y*tv.
y + tv.
z*tv.
z);
BREP_CONTOUR * CreateContour(BREP_FACET *facet)
TVector< double > directRS
void DisconnectWing(BREP_WING *wing)
BREP_WING * CreateWing(BREP_VERTEX *vertex1, BREP_VERTEX *vertex2)
TVector< double > directS
void ConnectWing(BREP_WING *wing)
TVector< double > directR
△QRS 三角Contour衝突検出用
void CloseFacet(BREP_FACET *facet, double &emax, double &dmin, double &dmax)
BREP_CONTOUR(BREP_FACET *pr_facet)
BREP_EDGE_LIST * edge_list
多重エッジのリストへのポインタ
BREP_EDGE(BREP_VERTEX *vertex1, BREP_VERTEX *vertex2)
bool complete
完全なエッジ.2つの Wingは共に使用されている.
void DisconnectContour(BREP_CONTOUR *contour)
double d
定数,原点から平面への距離*(-1)
void ConnectContour(BREP_CONTOUR *contour)
BREP_CONTOUR_LIST outer_contours
void ComputePlaneEquation()
BREP_FACET(BREP_SHELL *pr_shell)
void DisconnectFacet(BREP_FACET *facet)
void ConnectFacet(BREP_FACET *facet)
BREP_SHELL(BREP_SOLID *pr_solid)
unsigned int vertexno
頂点の数
BREP_CONTOUR_LIST contours
Contours リスト
void ConnectShell(BREP_SHELL *shell)
CVCounter * counter
仮想計量カウンタ
void DisconnectShell(BREP_SHELL *shell)
BREP_WING_LIST wings
Wings リスト
BREP_WING_LIST shortage_wings
不足 Wings リスト
unsigned int vertexid
頂点のカウンタ.Vertex のIDを決める際に使用
BREP_CONTOUR_LIST surplus_contours
過剰 Contours リスト
bool calc_normal
normal を計算するか? しない場合は入力値を使用する.
long int index
シーケンシャルに増加する一意的な番号.Octree に格納されるときに設定される.
Vector< double > point
頂点の座標.
void DisconnectWing(BREP_WING *wing)
Vector< double > normal
法線ベクトル.周りの Contour の法線ベクトルの平均.
ArrayParam< int > weight
頂点の重み.要正規化.
BREP_VERTEX_LIST * forbidden_list
お互いに Edgeを張ることを禁止された Vertexの List
BREP_WING(BREP_VERTEX *v)
BREP_VERTEX * vertex
Start of Vertex.
virtual void StepIt(int n=1)
カウンタのメモリを増やす
virtual void SetMax(int m)
カウンタの最大値(最終目標)を設定
virtual void DeleteChildCounter()
子カウンタの削除(有効領域の無効化)
virtual CVCounter * GetUsableCounter()
現在使用可能な目盛りの有効領域を確保
virtual CVCounter * MakeChildCounter(int n)
子カウンタの作成(有効領域を再定義)
OctreeNode * FindSubtree(BREP_VERTEX *element)
Vertex element と同じ位置にある Vertexを含むノードを返す.
void ComputeVerticesNormal(void)
OctreeNode * AddWithDuplicates(BREP_VERTEX *new_vertex)
OctreeNode * AddWithUnique(BREP_VERTEX *new_vertex)
BREP_VERTEX * vertex
ルートノードの場合は NULL
OctreeNode(BREP_VERTEX *new_vertex, BREP_SOLID *sld)
OctreeNodeのコンストラクタは,BREP_VERTEXに対して,新たに領域を作らずにポインタをコピーすることに注意!!
void set(T XMin=(T) 0, T XMax=(T) 0, T YMin=(T) 0, T YMax=(T) 0, T ZMin=(T) 0, T ZMax=(T) 0, T TMin=(T) 0, T TMax=(T) 0)
void fusion(RBound< T > bound)
境界構造体 bound と融合させる
Vector< T > normalize(void)
DllExport BREP_WING * GetWingOtherSide(BREP_WING *wing)
DllExport BREP_EDGE * FindEdge(BREP_VERTEX *vertex1, BREP_VERTEX *vertex2)
DllExport void ConnectWingToVertex(BREP_WING *wing)
std::list< BREP_WING * > BREP_WING_LIST
std::list< BREP_EDGE * > BREP_EDGE_LIST
DllExport TVector< double > Vertex2TVector(BREP_VERTEX *v)
DllExport BREP_EDGE * CreateEdge(BREP_VERTEX *v1, BREP_VERTEX *v2)
class DllExport OctreeNode
class DllExport BREP_CONTOUR
DllExport BREP_VERTEX ** GetOctreeVertices(OctreeNode *octree, long int *vertexno)
DllExport void DestroyWing(BREP_WING *wing)
double Abs_Vertex_Tolerance
class DllExport BREP_WING
DllExport long int OctreeGetter(OctreeNode *p, BREP_VERTEX **vtx, long int counter)
class DllExport BREP_EDGE
DllExport BREP_WING * CreateWingWithoutContour(BREP_VERTEX *vertex1, BREP_VERTEX *vertex2)
DllExport BREP_VERTEX * AddVertex2Octree(BREP_VERTEX *vertex, OctreeNode *octree, bool dupli=false)
DllExport int CompareVertex(BREP_VERTEX *v1, BREP_VERTEX *v2)