12.05.2013 Views

Fundamentos de análisis geográfico con SEXTANTE - La Salle

Fundamentos de análisis geográfico con SEXTANTE - La Salle

Fundamentos de análisis geográfico con SEXTANTE - La Salle

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

336 CAPÍTULO 20. PROGRAMACIÓN DE MÓDULOS DE <strong>SEXTANTE</strong><br />

Este bloque <strong>de</strong> código que ves a <strong>con</strong>tinuación pue<strong>de</strong> sustituir al anterior inicio <strong>de</strong>l método<br />

On Execute Position() en el caso <strong>de</strong> tratarse <strong>de</strong> un módulo interactivo <strong>con</strong> capas raster.<br />

int iX, iY;<br />

if( Mo<strong>de</strong> != MODULE_INTERACTIVE_LDOWN || !Get_Grid_Pos(iX, iY) )<br />

{<br />

return( false );<br />

}<br />

20.7. Llamando a otros módulos<br />

Dentro <strong>de</strong> tu módulo pue<strong>de</strong>s utilizar las capacida<strong>de</strong>s <strong>de</strong> otros módulos, simplemente llamándolos<br />

y pasándoles los parámetros a<strong>de</strong>cuados. Para ver cómo funciona esto, crearemos una versión<br />

simplificada <strong>de</strong>l módulo <strong>de</strong> ejemplo, en el cual el parámetro DOUBLE (que luego asignábamos a<br />

una variable llamada d) tome un valor fijo. En lugar <strong>de</strong> reescribir todo el módulo, simplemente<br />

creamos uno que pida al usuario los parámetros requeridos excepto dicho valor, y <strong>de</strong>spués <strong>con</strong><br />

ellos y <strong>con</strong> el valor fijo llamamos al módulo <strong>de</strong> ejemplo.<br />

Supongo que ya podrás escribir por ti mismo todo el código correspondiente a la ventana<br />

<strong>de</strong> parámetros, por lo que tan solo <strong>de</strong>sarrollaré la parte que se incluye <strong>de</strong>ntro <strong>de</strong>l método<br />

On Execute(). Para el parámetroDOUBLE usaré un valor fijo <strong>de</strong> 5. He aquí la llamada al módulo:<br />

CMiModulo* pM = new CMiModulo;<br />

pTemplate->Get_Parameters()->Set_Parameter("INPUT", Parameters("INPUT");<br />

pTemplate->Get_Parameters()->Set_Parameter("OUTPUT", Parameters("OUTPUT");<br />

pTemplate->Get_Parameters()->Set_Parameter("DOUBLE", PARAMETER_TYPE_Double ,5);<br />

pTemplate->Execute(Get_Callback());<br />

<strong>de</strong>lete(pM);<br />

Únicamente tienes que crear un objeto <strong>de</strong> la clase que <strong>con</strong>tiene el módulo a ejecutar, pasarle<br />

los parámetros necesarios y ejecutarlo. Sencillo, ¿verdad?.<br />

Como pue<strong>de</strong>s ver, en el caso <strong>de</strong> que pases un parámetro obtenido directamente <strong>de</strong> la<br />

ventana <strong>de</strong> parámetros, no es necesario especificar el tipo <strong>de</strong>l mismo. Sin embargo, al pasar el<br />

valor fijo, sí que <strong>de</strong>be especificarse que se trata <strong>de</strong> un valor <strong>de</strong> precisión doble. Suponiendo que<br />

tienes los punteros a las capas raster <strong>de</strong> entrada y salida almacenados en las variables pInput<br />

y pOutput, pue<strong>de</strong>s reescribir lo anterior <strong>de</strong> la siguiente forma.<br />

CMiModulo Modulo<br />

pTemplate.Get_Parameters()->Set_Parameter("INPUT", PARAMETER_TYPE_Grid, pInput);<br />

pTemplate.Get_Parameters()->Set_Parameter("OUTPUT", PARAMETER_TYPE_Grid, pOutput);<br />

pTemplate.Get_Parameters()->Set_Parameter("DOUBLE", PARAMETER_TYPE_Double ,5);<br />

pTemplate.Execute(Get_Callback());<br />

Para ver otro ejemplo, imagina que quieres calcular una capa <strong>de</strong> pendientes y orientaciones<br />

a partir <strong>de</strong> una dada que has obtenido como entrada para tu módulo (supongamos que tienes<br />

un puntero a la misma almacenado en pGrid). El siguiente código te serviría para crear dos<br />

nuevas capas <strong>con</strong> dichas variables.<br />

CMorphometry Morphometry;<br />

Morphometry.Get_Parameters()->Set_Parameter("ELEVATION" , Parameters("ELEVATION");<br />

Morphometry.Get_Parameters()->Set_Parameter("SLOPE" , Parameters("SLOPE");

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!