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::unsewMarkedCells(int AMarkNumber, int ADim)
00029 {
00030 CDynamicCoverageAll it(this);
00031 int nbUnsews = 0;
00032
00033 for (; it.cont(); ++it)
00034 if (!isFree(*it,ADim) && isMarked(*it, AMarkNumber))
00035 {
00036 unsew(*it, ADim);
00037 ++nbUnsews;
00038 }
00039
00040 return nbUnsews;
00041 }
00042
00043 int CGMapGeneric::intuitiveUnsewMarkedCells(int AMarkNumber)
00044 {
00045 CDynamicCoverageAll it(this);
00046 int nbUnsews = 0;
00047 int treated = getNewMark();
00048 int memo = getNewMark();
00049
00050 for (int dim=3; dim>=0; --dim)
00051 {
00052 for (it.reinit(); it.cont(); ++it)
00053 if (!isMarked(*it, treated))
00054 {
00055
00056
00057
00058 bool cellUnsewed = false;
00059
00060 CCoverage * cov = getDynamicCoverage(*it, ORBIT_CELL[dim]);
00061
00062 for (; cov->cont(); ++(*cov))
00063 if (!isMarked(**cov, treated))
00064 {
00065 if (!isMarked(**cov, AMarkNumber) || isFree(**cov, dim))
00066 setMark(**cov, treated);
00067 else
00068 {
00069 markOrbit(**cov, ORBIT_SEWS[dim], treated);
00070 markOrbit(**cov, ORBIT_SEWS[dim], memo);
00071 unsew(**cov, dim);
00072 cellUnsewed = true;
00073 ++nbUnsews;
00074 }
00075 }
00076
00077 delete cov;
00078
00079 if (cellUnsewed &&
00080 isWholeCellMarked(*it, ORBIT_CELL[dim], AMarkNumber))
00081 markOrbit(*it, ORBIT_CELL[dim], memo);
00082 }
00083
00084 markCopy(memo, treated);
00085 }
00086
00087 unmarkAll(memo);
00088 freeMark(memo);
00089 unmarkAll(treated);
00090 freeMark(treated);
00091
00092 return nbUnsews;
00093 }
00094