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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Para que veas en forma <strong>de</strong> ejemplo cómo usar todo lo anterior, el siguiente bloque <strong>de</strong> código<br />

amplía el ejemplo <strong>de</strong> la sección anterior, copiando valor a valor también la tabla <strong>de</strong> atributos<br />

<strong>de</strong> una capa a otra.<br />

int i,j,k,iField;<br />

TGEO_Point Point;<br />

CShape *pShape,*pShape2;<br />

for(i=0; iGet_Count(); i++){<br />

pShape = pInput->Get_Shape(i);<br />

pShape2 = pOutput->Add_Shape();<br />

for(int j=0; jGet_Part_Count(); j++){<br />

for(int k=0; kGet_Point_Count(j); k++){<br />

Point = pShape->Get_Point(k,j);<br />

pShape2->Add_Point(Point.x,Point.y,j);<br />

for (iField = 0; iFieldGet_Field_Count(); iField++){<br />

if (pTable->Get_Field_Type(iField) == TABLE_FIELDTYPE_String){<br />

<strong>con</strong>st char *cValue = pShape->Get_Record()->asString(iField);<br />

pShape2->Get_Record()->Set_Value(iField, cValue);<br />

}<br />

else{<br />

double dValue = pShape->Get_Record()->asDouble(iField);<br />

pShape2->Get_Record()->Set_Value(iField, dValue);<br />

}<br />

}<br />

}<br />

}<br />

}<br />

20.6. Módulos interactivos<br />

Crear un módulo interactivo es algo diferente a lo que hemos visto hasta el momento,<br />

aunque no más complejo. Para empezar, los módulos interactivos heredan <strong>de</strong> la clase CModule<br />

Interactive o CModule Grid Interactive en lugar <strong>de</strong> CModule o CModule Grid. Ello da acceso a<br />

otra serie <strong>de</strong> métodos que nos serán muy útiles para recuperar información acerca <strong>de</strong> la parte<br />

interactiva <strong>de</strong>l mismo.<br />

En lo referente a la disposición <strong>de</strong>l código, la principal diferencia resi<strong>de</strong> en el hecho <strong>de</strong> que<br />

los algoritmos principales <strong>de</strong> proceso no <strong>de</strong>ben estar <strong>de</strong>ntro <strong>de</strong>l método On Execute(), sino en<br />

otro <strong>de</strong>nominado On Execute Position(), que es llamado cada vez que se efectúa alguna acción<br />

sobre una representación <strong>de</strong> mapa, tal como mover el ratón o hacer clic sobre un punto. Esta<br />

llamada sólo se produce si se encuentra activa la herramienta Seleccionar.<br />

Aquí tienes la <strong>de</strong>finición <strong>de</strong>l método On Execute Position()<br />

virtual bool On_Execute_Position (CGEO_Point ptWorld,<br />

TModule_Interactive_Mo<strong>de</strong> Mo<strong>de</strong>);<br />

Una buena i<strong>de</strong>a es poner las sentencias <strong>de</strong> asignación <strong>de</strong> variables en el método On Execute()<br />

(que sólo es llamado una vez), y <strong>de</strong>spués los algoritmos propiamente dichos en On Execute Position().<br />

Lo habitual es procesar la información cuando se hace clic en un punto y no cuando éste<br />

se mueve, ya que el uso típico <strong>de</strong> un módulo interactivo es la selección <strong>de</strong> un punto dado a

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

Saved successfully!

Ooh no, something went wrong!