00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "g-map-generic.hh"
00026 using namespace GMap3d;
00027
00028 int CGMapGeneric::degree(CDart * ADart, int ACellDim, int ABoundingCell)
00029 {
00030 assert(ADart!=NULL);
00031 assert(0<=ACellDim && ACellDim<3);
00032 assert(0<ABoundingCell && ABoundingCell<=4);
00033 assert(ACellDim<ABoundingCell);
00034
00035 TOrbit countOrbit =
00036 AND_ORBIT(ORBIT_CELL[ACellDim], ORBIT_CELL[ACellDim+1]);
00037
00038 TOrbit boundingOrbit =
00039 AND_ORBIT(ORBIT_CELL[ACellDim], ORBIT_CELL[ABoundingCell]);
00040
00041 countOrbit = AND_ORBIT(countOrbit, ORBIT_CELL[ABoundingCell]);
00042
00043 int nbIncident = 0;
00044 int treated = getNewMark();
00045
00046 CCoverage * cov = getDynamicCoverage(ADart, boundingOrbit);
00047 for (; cov->cont(); ++(*cov))
00048 if (!isMarked(**cov, treated))
00049 {
00050 ++nbIncident;
00051 markOrbit(**cov, countOrbit, treated);
00052 }
00053 delete cov;
00054
00055 unmarkOrbit(ADart, boundingOrbit, treated);
00056 freeMark(treated);
00057
00058 assert(nbIncident!=0);
00059
00060 return nbIncident;
00061 }
00062
00063 bool CGMapGeneric::isLocalDegreeTwoSup(CDart * ADart, int ACellDim)
00064 {
00065 assert(ADart!=NULL);
00066 assert(0<=ACellDim && ACellDim<=3);
00067
00068 if ( ACellDim==2 ) return true;
00069 if ( ACellDim==3 ) return false;
00070
00071
00072
00073 CCoverage* cov = getDynamicCoverage(ADart, ORBIT_CELL[ACellDim]);
00074 bool res = true;
00075
00076 while (res && cov->cont())
00077 {
00078 if ( alpha(alpha(**cov, ACellDim+1), ACellDim+2)!=
00079 alpha(alpha(**cov, ACellDim+2), ACellDim+1) )
00080 res = false;
00081
00082 ++(*cov);
00083 }
00084
00085 delete cov;
00086
00087 return res;
00088 }
00089
00090 bool CGMapGeneric::isLocalDegreeTwoInf(CDart * ADart, int ACellDim)
00091 {
00092 assert(ADart!=NULL);
00093 assert(0<=ACellDim && ACellDim<=3);
00094
00095 if ( ACellDim==1 ) return true;
00096 if ( ACellDim==0 ) return false;
00097
00098 CCoverage* cov = getDynamicCoverage(ADart, ORBIT_CELL[ACellDim]);
00099 bool res = true;
00100
00101 while (res && cov->cont())
00102 {
00103 if ( alpha(alpha(**cov, ACellDim-1), ACellDim-2)!=
00104 alpha(alpha(**cov, ACellDim-2), ACellDim-1) )
00105 res = false;
00106
00107 ++(*cov);
00108 }
00109
00110 delete cov;
00111
00112 return res;
00113
00114 }
00115