<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">Hola</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">

Antes que nada les comento que estoy escribiendo un módulo o función complementaria, para agregarlo posteriormente a un programa que ya tengo hecho.</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">

Lo que he hecho es crear tres archivos:<br>1. Archivo con la aplicación principal, main.cc<br>2. Archivo de cabecera que contiene la declaración de la función: zeroline.h<br>3. Archivo donde se encuentran detalladas las funciones: zeroline.cc</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">Sin embargo, dentro del código del archivo zeroline.cc son llamadas funciones de otra libreria, shapefil.h (que es una api de shapefiles <a href="http://shapelib.maptools.org/" rel="nofollow" style="color:rgb(50,103,153);text-decoration:none" target="_blank"></a>).</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">Es decir, en mi carpeta tengo más archivos ".c", y obviamente la librería. La librería incluye su propio método de compilación, así que con make se crean los archivos ".o", que yo llamo cuando compilo mi aplicación main.cc</p>

<div style="max-height:400px;overflow:auto;padding:5px;border:1px solid rgb(204,204,204);background-color:rgb(238,238,238);color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px"><code>#g++ -g *.o *.cc</code></div>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">y bien, así ya tengo funcionando mi aplicación, en fase de desarrollo pero ya funciona bien.</p>
<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">Se preguntarán entonces qué es lo que este tío quiere o necesita. Bueno, la verdad es que cuando lo hago en linux no tengo ningún problema. Jeje.</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">El punto es que la aplicación la hago para que la utilicen otros y ejem, para eso tengo que compilar también en Windows. De hecho lo que he hecho antes primero lo hago en linux y después lo paso a Windows, y no he tenido ningún problema puesto que son muy sencillas, así que descarto problemas con la no estandarización.</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">En Windows utilizo la aplicación Dev-c++ para compilar y organizar proyectos. Sin embargo he tenido problemas al compilar esto, porque me reconoce las funciones definidas en el archivo zeroline.cpp y declaradas en zeroline.h, pero las que pertenecen a la librería shapefil.h no, entonces ese es mi problema, que no me reconoce las funciones de una librería que utiliza una función que contiene funciones. No sé si me haya dado a entender, espero que sí.</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">El resultado que me arroja el dev-c++ es el siguiente:</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">

... undefined reference to SHPCreate</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">... undefined reference to DBFCreate</p>
<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">... undefined reference to SHPClose</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">

... undefined reference to DBFClose</p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">y otras más, que no pongo pero que son de ese estilo. Y todas ellas son funciones que llama la función zeroline definida por mí, y que están definidas en el archivo shapefil.h</p>

<p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px"><br></p><p style="color:rgb(34,34,34);font-size:13px;font-family:Arial,Helvetica,sans-serif;margin:0.75em 15px 0.75em 0px">

Para compilar se necesita la librería shapelib que se descarga de <a href="http://shapelib.maptools.org/" style="background-color:transparent" target="_blank">http://shapelib.maptools.org/</a></p><div><br></div><div>Por si gustan probar, el código de mis archivos es el siguiente. </div>

<div><br></div><div>-------------------------------------------------------------------------------------------</div><div>main.cc</div><div><br></div><div><code style="color:rgb(34,34,34);font-size:13px">#include "zeroline.h"<br>

#include "shapefil.h"<br>#include <iostream><br>#include <string><p style="margin:0.75em 15px 0.75em 0px"></p><p style="margin:0.75em 15px 0.75em 0px">using namespace  std;</p><p style="margin:0.75em 15px 0.75em 0px">

int main()<br>{</p><p style="margin:0.75em 15px 0.75em 0px">double X[2], Y[2];<br>int contador, escala;<br>string nombreshape="yosoyelshape";</p><p style="margin:0.75em 15px 0.75em 0px">contador = 2;<br>escala=200;<br>

X[0]=1;<br>X[1]=2;</p><p style="margin:0.75em 15px 0.75em 0px">Y[0]=3;<br>Y[1]=4;</p><p style="margin:0.75em 15px 0.75em 0px">zeroline(X, Y, contador, escala, nombreshape);</p></code><p style="margin:0.75em 15px 0.75em 0px;color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px">

<code>return 0;</code></p><p style="margin:0.75em 15px 0.75em 0px;color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px"><code>}</code></p></div><div>------------------------------------------------------------------------------------------------------</div>

<div>zeroline.h</div><div><br></div><div><code style="color:rgb(34,34,34);font-size:13px">#ifndef ZERO_LINE_H<br>#define ZERO_LINE_H<br>#include <string><p style="margin:0.75em 15px 0.75em 0px"></p><p style="margin:0.75em 15px 0.75em 0px">

using namespace std;</p><p style="margin:0.75em 15px 0.75em 0px">//Prototipo de la función</p><p style="margin:0.75em 15px 0.75em 0px">void zeroline(double Xm[], double Ym[], int k, int scale, std::string shapenamez);</p>

</code><p style="margin:0.75em 15px 0.75em 0px;color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px"><code>#endif //ZERO_LINE_H</code></p></div><div>--------------------------------------------------------------------------</div>

<div>zeroline.cc</div><div><br></div><div><code style="color:rgb(34,34,34);font-size:13px">#include "zeroline.h"<br>#include "shapefil.h"<br>#include <iostream><br>#include  <string><p style="margin:0.75em 14px 0.75em 0px">

</p><p style="margin:0.75em 14px 0.75em 0px">using namespace std;</p><p style="margin:0.75em 14px 0.75em 0px">//void zeroline ()<br>void zeroline(double Xm[], double Ym[], int k, int scale, std::string shapenamez)</p><p style="margin:0.75em 14px 0.75em 0px">

{</p><p style="margin:0.75em 14px 0.75em 0px">int izeroline=0,jzeroline=0, shapefiletype=3, puntosdelinea=2;;<br>double Xil[k], Yil[k], Xfl[k], Yfl[k], sc;<br>double Xz[2], Yz[2];<br>int field_name;<br>string  name_id;</p>

<p style="margin:0.75em 14px 0.75em 0px">shapenamez=shapenamez+"zl";</p><p style="margin:0.75em 14px 0.75em 0px">SHPHandle zerolineshp;<br>DBFHandle zerolinedbf;<br>SHPObject *objetops;</p><p style="margin:0.75em 14px 0.75em 0px">

sc= scale;<br>//string zerolinefilename;</p><p style="margin:0.75em 14px 0.75em 0px">cout << "Esta es la función zero line" << endl;<br>cout << "La escala es: " << scale << endl;<br>

cout << "El nombre del shape es: " << shapenamez << endl;<br>cout << "El tipo de shape es de arco, su indicador es: " << shapefiletype << endl;<br>cout << "Aquí inicia el cálculo de las coordenadas superior e inferior de la línea vertical zero para los diagramas" << endl; <br>

for (izeroline=0; izeroline<k; izeroline++)<br>{<br>Xil[izeroline]=Xm[izeroline];<br>Yil[izeroline]=(Ym[izeroline]+(sc*0.55));</p><p style="margin:0.75em 14px 0.75em 0px">Xfl[izeroline]=Xm[izeroline];<br>Yfl[izeroline]=(Ym[izeroline]-(sc*0.55));<br>

cout << izeroline << endl;<br>cout << "Punto superior" << endl;<br>cout << "Xm[" << izeroline << "]=" << Xm[izeroline] << "; Xil[" << izeroline << "]=" << Xil[izeroline] << endl;<br>

cout << "Ym[" << izeroline << "]=" << Ym[izeroline] << "; Yil[" << izeroline << "]=" << Yil[izeroline] << endl;<br>cout << "Punto inferior" << endl;<br>

cout << "Xm[" << izeroline << "]=" << Xm[izeroline] << "; Xfl" << izeroline << "]=" << Xfl[izeroline] << endl;<br>cout << "Ym[" << izeroline << "]=" << Ym[izeroline] << "; Yfl" << izeroline << "]=" << Yfl[izeroline] << endl;<br>

}<br>//HERE BEGINS THE BUILDING OF THE SHAPEFILE. <br>cout << "Construyendo el shapefile" << endl;<br>zerolineshp = SHPCreate (shapenamez.c_str(), shapefiletype);<br>zerolinedbf = DBFCreate (shapenamez.c_str());</p>

<p style="margin:0.75em 14px 0.75em 0px">cout << "Shape y Dbf construidos" << endl;<br>cout << "agregando información" << endl;<br>name_id="identificador";</p><p style="margin:0.75em 14px 0.75em 0px">

field_name= DBFAddField( zerolinedbf, name_id.c_str(),   FTString, 15, 0);</p><p style="margin:0.75em 14px 0.75em 0px">//<br>for (izeroline=0; izeroline<k; izeroline++)<br>{<br>//Se creará un vector de dos pares de coordenadas para construir la línea vertical.</p>

<p style="margin:0.75em 14px 0.75em 0px">for (jzeroline=0; jzeroline<2; jzeroline++)<br>{<br>if (jzeroline==0)<br>{<br>Xz[jzeroline]=Xil[izeroline];<br>Yz[jzeroline]=Yil[izeroline];<br>}<br>else<br>{<br>if (jzeroline==1)<br>

{<br>Xz[jzeroline]=Xfl[izeroline];<br>Yz[jzeroline]=Yfl[izeroline];<br>}<br>}<br>}</p><p style="margin:0.75em 14px 0.75em 0px">cout << "Las coordenadas del punto superior son: " << Xz[0] << ", " << Yz[0] << endl;</p>

<p style="margin:0.75em 14px 0.75em 0px">cout << "Las coordenadas del punto central son: " << Xm[izeroline] << ", " << Ym[izeroline] << endl;</p><p style="margin:0.75em 14px 0.75em 0px">

cout << "Las coordenadas del punto inferior son: " << Xz[1] << ", " << Yz[1] << endl;</p><p style="margin:0.75em 14px 0.75em 0px">objetops = SHPCreateSimpleObject(shapefiletype, puntosdelinea, Xz, Yz,NULL);<br>

SHPWriteObject(zerolineshp,-1,objetops);</p><p style="margin:0.75em 14px 0.75em 0px">}</p><p style="margin:0.75em 14px 0.75em 0px">DBFClose(zerolinedbf);<br>SHPClose(zerolineshp);</p><p style="margin:0.75em 14px 0.75em 0px">

cout << "shape y dbf cerrados" << endl;</p></code><p style="margin:0.75em 14px 0.75em 0px;color:rgb(34,34,34);font-family:Arial,Helvetica,sans-serif;font-size:13px"><code>}</code></p></div><div><br>
</div>
-- <br>Saludos<br><br>Joaquín Pérez Valera<br>