00001 /* 00002 * lib-gmapkernel : Un noyau de 3-G-cartes et des opérations. 00003 * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC 00004 * http://www.sic.sp2mi.univ-poitiers.fr/ 00005 * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS, 00006 * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/ 00007 * 00008 * This file is part of lib-gmapkernel 00009 * 00010 * This program is free software: you can redistribute it and/or modify 00011 * it under the terms of the GNU Lesser General Public License as published by 00012 * the Free Software Foundation, either version 3 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Lesser General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU Lesser General Public License 00021 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00022 */ 00023 00024 //****************************************************************************** 00025 #include "g-map-vertex.hh" 00026 using namespace GMap3d; 00027 //****************************************************************************** 00028 int CGMapVertex::deleteNullLengthEdges() 00029 { 00030 int mark = getNewMark(); 00031 negateMaskMark(mark); 00032 int result = deleteMarkedNullLengthEdges(mark); 00033 negateMaskMark(mark); 00034 freeMark(mark); 00035 return result; 00036 } 00037 //------------------------------------------------------------------------------ 00038 int CGMapVertex::deleteMarkedNullLengthEdges(int AMarkNumber) 00039 { 00040 int toContract = getNewMark(); 00041 int treated = getNewMark(); 00042 00043 for (CDynamicCoverageAll it(this) ; it.cont(); ++it ) 00044 if (isMarked(*it, AMarkNumber)) 00045 { 00046 if (! isMarked(*it, treated)) 00047 { 00048 if (!isFree0(*it) && *findVertex(*it)==*findVertex(alpha0(*it))) 00049 setMark(*it, toContract); 00050 00051 markOrbit(*it, ORBIT_EDGE, treated); 00052 } 00053 } 00054 else 00055 setMark(*it, treated); 00056 00057 int deleted = contractMarkedCells(toContract, 1, true); 00058 00059 freeMark(toContract); 00060 negateMaskMark(treated); 00061 freeMark(treated); 00062 00063 return deleted; 00064 } 00065 //******************************************************************************