00001 /* 00002 * lib-controler-gmap : Le contrôleur de 3-G-cartes, surcouche de lib-controler. 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-controler-gmap 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 "controler-gmap.hh" 00026 #include "view-precompile.hh" 00027 using namespace GMap3d; 00028 //****************************************************************************** 00029 void CControlerGMap::onEnterMode() 00030 { 00031 switch (FCurrentMode) 00032 { 00033 case MODE_CREATION_POLYGON : FCreationType = OBJECT_POLYGON ; break; 00034 case MODE_CREATION_MESH : FCreationType = OBJECT_MESH ; break; 00035 case MODE_CREATION_SPHERE : FCreationType = OBJECT_SPHERE ; break; 00036 case MODE_CREATION_CYLINDER: FCreationType = OBJECT_CYLINDER; break; 00037 case MODE_CREATION_PYRAMID : FCreationType = OBJECT_PYRAMID ; break; 00038 case MODE_CREATION_TORUS : FCreationType = OBJECT_TORUS ; break; 00039 } 00040 00041 switch (FCurrentMode) 00042 { 00043 case MODE_CREATION_POLYLINE: 00044 case MODE_CREATION_POLYGON : 00045 case MODE_CREATION_MESH : 00046 case MODE_CREATION_SPHERE : 00047 case MODE_CREATION_CYLINDER: 00048 case MODE_CREATION_PYRAMID : 00049 case MODE_CREATION_TORUS : modeCreationBegin (); break; 00050 case MODE_TRANSLATION : modeTranslationBegin(); break; 00051 case MODE_ROTATION : modeRotationBegin (); break; 00052 case MODE_SCALE : modeScaleBegin (); break; 00053 #ifdef MODULE_ROUNDING 00054 case MODE_ROUNDING : modeRoundingBegin (); break; 00055 #endif // MODULE_ROUNDING 00056 00057 default: CControler::onEnterMode(); break; 00058 } 00059 } 00060 //****************************************************************************** 00061 void CControlerGMap::onExitMode() 00062 { 00063 switch (FCurrentMode) 00064 { 00065 case MODE_CREATION_POLYLINE: 00066 case MODE_CREATION_POLYGON : 00067 case MODE_CREATION_MESH : 00068 case MODE_CREATION_SPHERE : 00069 case MODE_CREATION_CYLINDER: 00070 case MODE_CREATION_PYRAMID : 00071 case MODE_CREATION_TORUS : modeCreationEnd(); break; 00072 case MODE_TRANSLATION : modeTranslationEnd(); break; 00073 case MODE_ROTATION : modeRotationEnd(); break; 00074 case MODE_SCALE : modeScaleEnd(); break; 00075 #ifdef MODULE_ROUNDING 00076 case MODE_ROUNDING : modeRoundingEnd(); break; 00077 #endif // MODULE_ROUNDING 00078 00079 default: CControler::onExitMode(); break; 00080 } 00081 } 00082 //****************************************************************************** 00083 bool CControlerGMap::isInCreationMode() const 00084 { 00085 return 00086 FCurrentMode>=MODE_CREATION_POLYLINE && 00087 FCurrentMode<=MODE_CREATION_TORUS; 00088 } 00089 //****************************************************************************** 00090 void CControlerGMap::setNextCreationMode() 00091 { 00092 if (!isInCreationMode()) 00093 return; 00094 00095 TMode currentMode = FCurrentMode+1; 00096 00097 if (currentMode>MODE_CREATION_TORUS) 00098 currentMode=MODE_CREATION_POLYLINE; 00099 00100 setMode(currentMode); 00101 } 00102 //****************************************************************************** 00103 void CControlerGMap::onOperationModeStart() 00104 { 00105 switch (FCurrentMode) 00106 { 00107 case MODE_CREATION_POLYLINE: 00108 FCurrentModeOperation = MODE_OPERATION_CREATION_POLYLINE; break; 00109 case MODE_CREATION_POLYGON : 00110 FCurrentModeOperation = MODE_OPERATION_CREATION_POLYGON; break; 00111 case MODE_CREATION_MESH : 00112 FCurrentModeOperation = MODE_OPERATION_CREATION_MESH; break; 00113 case MODE_CREATION_SPHERE : 00114 FCurrentModeOperation = MODE_OPERATION_CREATION_SPHERE; break; 00115 case MODE_CREATION_CYLINDER: 00116 FCurrentModeOperation = MODE_OPERATION_CREATION_CYLINDER; break; 00117 case MODE_CREATION_PYRAMID : 00118 FCurrentModeOperation = MODE_OPERATION_CREATION_PYRAMID; break; 00119 case MODE_CREATION_TORUS : 00120 FCurrentModeOperation = MODE_OPERATION_CREATION_TORUS; break; 00121 case MODE_TRANSLATION : 00122 FCurrentModeOperation = MODE_OPERATION_TRANSLATION; break; 00123 case MODE_ROTATION : 00124 FCurrentModeOperation = MODE_OPERATION_ROTATION; break; 00125 case MODE_SCALE : 00126 FCurrentModeOperation = MODE_OPERATION_SCALE; break; 00127 case MODE_ROUNDING : 00128 FCurrentModeOperation = MODE_OPERATION_ROUNDING; break; 00129 } 00130 00131 switch (FCurrentMode) 00132 { 00133 case MODE_CREATION_POLYLINE: modeCreationPolylineOperationStart(); break; 00134 case MODE_CREATION_POLYGON : 00135 case MODE_CREATION_MESH : 00136 case MODE_CREATION_SPHERE : 00137 case MODE_CREATION_CYLINDER: 00138 case MODE_CREATION_PYRAMID : 00139 case MODE_CREATION_TORUS : modeCreationOperationStart(); break; 00140 case MODE_TRANSLATION : modeTranslationOperationStart(); break; 00141 case MODE_ROTATION : modeRotationOperationStart(); break; 00142 case MODE_SCALE : modeScaleOperationStart(); break; 00143 #ifdef MODULE_ROUNDING 00144 case MODE_ROUNDING : modeRoundingOperationStart(); break; 00145 #endif // MODULE_ROUNDING 00146 00147 default: CControler::onOperationModeStart(); 00148 } 00149 } 00150 //------------------------------------------------------------------------------ 00151 void CControlerGMap::onOperationModeMove() 00152 { 00153 switch (FCurrentModeOperation) 00154 { 00155 case MODE_OPERATION_CREATION_POLYLINE: 00156 modeCreationPolylineOperationMove(); break; 00157 case MODE_OPERATION_CREATION_POLYGON : 00158 case MODE_OPERATION_CREATION_MESH : 00159 case MODE_OPERATION_CREATION_SPHERE : 00160 case MODE_OPERATION_CREATION_CYLINDER: 00161 case MODE_OPERATION_CREATION_PYRAMID : 00162 case MODE_OPERATION_CREATION_TORUS : 00163 modeCreationOperationMove (); break; 00164 case MODE_OPERATION_TRANSLATION : 00165 modeTranslationOperationMove (); break; 00166 case MODE_OPERATION_ROTATION : 00167 modeRotationOperationMove (); break; 00168 case MODE_OPERATION_SCALE : 00169 modeScaleOperationMove (); break; 00170 #ifdef MODULE_ROUNDING 00171 case MODE_OPERATION_ROUNDING : 00172 modeRoundingOperationMove (); break; 00173 #endif // MODULE_ROUNDING 00174 00175 default: CControler::onOperationModeMove(); 00176 } 00177 } 00178 //------------------------------------------------------------------------------ 00179 void CControlerGMap::onOperationModeStop() 00180 { 00181 switch (FCurrentModeOperation) 00182 { 00183 case MODE_OPERATION_CREATION_POLYLINE: 00184 modeCreationPolylineOperationStop (); break; 00185 case MODE_OPERATION_CREATION_POLYGON : 00186 case MODE_OPERATION_CREATION_MESH : 00187 case MODE_OPERATION_CREATION_SPHERE : 00188 case MODE_OPERATION_CREATION_CYLINDER: 00189 case MODE_OPERATION_CREATION_PYRAMID : 00190 case MODE_OPERATION_CREATION_TORUS : 00191 modeCreationOperationStop (); break; 00192 case MODE_OPERATION_TRANSLATION : 00193 case MODE_OPERATION_ROTATION : 00194 case MODE_OPERATION_SCALE : 00195 modeTransformationOperationStop (); break; 00196 #ifdef MODULE_ROUNDING 00197 case MODE_OPERATION_ROUNDING : 00198 modeRoundingOperationStop (); break; 00199 #endif // MODULE_ROUNDING 00200 00201 default: CControler::onOperationModeStop(); 00202 } 00203 } 00204 //******************************************************************************