00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __GEO_Closure_h__
00020 #define __GEO_Closure_h__
00021
00022 #include "GEO_API.h"
00023 #include "GEO_PrimType.h"
00024
00025 #include <UT/UT_IntArray.h>
00026
00027 class GB_Edge;
00028 class GB_BaseGroup;
00029 class GB_PointGroup;
00030 class GB_EdgeGroup;
00031 class GB_PrimitiveGroup;
00032 class GB_VertexGroup;
00033 class GB_BreakpointGroup;
00034 class GB_PointRefArray;
00035 class GEO_Face;
00036 class GEO_Detail;
00037 class GEO_Point;
00038 class GEO_PointRefArray;
00039
00040 class GEO_API GEO_Closure
00041 {
00042 public:
00043 GEO_Closure(GEO_Detail &gdp);
00044 ~GEO_Closure();
00045
00046
00047 void findPrimsUsingEdge(const GB_Edge *edge,
00048 GB_PrimitiveGroup *edgeprimsgrp,
00049 GB_PointRefArray &prefarr);
00050
00051
00052
00053 void findPolysUsingEdge(const GEO_Point &pt0,
00054 const GEO_Point &pt1,
00055 GB_PrimitiveGroup *edgeprimsgrp,
00056 GB_PointRefArray &prefarr);
00057
00058
00059
00060 void findPolysUsingEdge(const GEO_Point &pt0,
00061 const GEO_Point &pt1,
00062 UT_IntArray &primlist,
00063 GB_PointRefArray &prefarr);
00064
00065 void findPrimsUsingPoint(const GEO_Point *pt,
00066 GB_PrimitiveGroup *primgrp,
00067 GB_PointRefArray &prefarr);
00068
00069
00070
00071 void findPrimsUsingPoint(const GEO_Point *pt,
00072 UT_IntArray &primlist,
00073 GB_PointRefArray &prefarr,
00074 unsigned int primmask=GEOPRIMALL);
00075
00076
00077
00078
00079 static int getSharedPoint(GEO_Face *face0, GEO_Face *face1,
00080 int &vtxidx0, int &vtxidx1);
00081
00082
00083
00084 static int haveSharedPoint(GEO_Face *face0, GEO_Face *face1);
00085
00086
00087 int getNumSharedEdges(GEO_Point &pt,
00088 GB_PointRefArray &prefarr);
00089
00090 GB_PrimitiveGroup *getPrimitiveClosure(const GB_EdgeGroup &edgegroup,
00091 GEO_PointRefArray *&prefarr);
00092 GB_PrimitiveGroup *getEdgePointClosure(const GEO_PointRefArray &prefarr,
00093 const GB_Edge &edge,
00094 GB_PrimitiveGroup *primgrp = 0);
00095
00096
00097
00098 GB_PrimitiveGroup *getPrimitiveClosure(const GB_BreakpointGroup *grp = 0,
00099 unsigned int mask = GEOSPLINE);
00100
00101
00102 GB_PointGroup *getPointClosure(const GB_BaseGroup &group);
00103 GB_PointGroup *getPointClosure(const GB_PointGroup &ptgroup);
00104 GB_PointGroup *getPointClosure(const GB_EdgeGroup &edgegroup);
00105 GB_PointGroup *getPointClosure(const GB_PrimitiveGroup &primgroup);
00106 GB_PointGroup *getPointClosure(const GB_VertexGroup &vtxgroup);
00107
00108
00109 GB_VertexGroup *getVertexClosure(const GB_BaseGroup &group);
00110 GB_VertexGroup *getVertexClosure(const GB_PointGroup &ptgroup);
00111 GB_VertexGroup *getVertexClosure(const GB_EdgeGroup &edgegroup);
00112 GB_VertexGroup *getVertexClosure(const GB_PrimitiveGroup &primgroup);
00113 GB_VertexGroup *getVertexClosure(const GB_VertexGroup &vtxgroup);
00114
00115
00116 GB_PrimitiveGroup *getPrimitiveClosure(const GB_BaseGroup &group);
00117 GB_PrimitiveGroup *getPrimitiveClosure(const GB_PointGroup &ptgroup);
00118 GB_PrimitiveGroup *getPrimitiveClosure(
00119 const GB_PrimitiveGroup &primgroup);
00120 GB_PrimitiveGroup *getPrimitiveClosure(const GB_VertexGroup &vtxgroup);
00121
00122 private:
00123 GEO_Detail &myGdp;
00124 };
00125 #endif