#pragma once //clase para leer grabar shp #ifndef Fshape_h #define Fshape_h #include "base_head.h" #include "garray.h" #include "b_file.h" #pragma pack(4) typedef struct ShpHead { int code; int res[5]; int nb; // tamaño en bytes del archivo int ver; int tipo; double mima[2][2]; double mimaz[2]; double mimam[2]; } ShpHead; typedef struct ShpHeadReg { int nrec; // nº del recor empezando en cero (en el file empiezan en 1) int nb; // tamaño en bytes del record int tipo; } Shp_reg; #pragma pack(8) class UTILES_EXPORT Fshape { Cgarray bufRecord; //datos de archivo ShpHead head; ShpHeadReg headr; double* mimC; //coordenadas mima double* maxC; //coordenadas mima double* mimaM; //coordenadas mima double* mimaZ; //coordenadas mima double* ptos; //coordenadas de los puntos double* ptosM; //coordenadas de los puntos double* ptosZ; //coordenadas de los puntos int ReadType; int offserW; int nc; // número de coordenadas que tiene cada punto int npt;//numero total de puntos int tc;//total de coordenadas de todos los puntos sumados int *part;//partes del record int numPart;//numero de partes Cb_file *f;//puntero a archivo Cb_file *f_shx;//puntero a archivo public: enum FShapeType { NullShape=0, Point=1, PolyLine=3, Polygon=5, MultiPoint=8, PointZ=11, PolyLineZ=13, PolygonZ=15, MultiPointZ=18, PointM=21, PolyLineM=23, PolygonM=25, MultiPointM=28, MultiPatch=31, }; enum FshpReadType { Rpoint=0, RMpoint, RPolyLine, Rpolygon, }; Fshape(void); ~Fshape(void); //funciones de lectura-------------------------------- bool leeHead(Cb_file *file); bool LeeRecord(); double* get(int i);//devuelve el punto i esimo de la parte ip double* get(int ip, int i);//devuelve el punto i esimo de la parte ip int getNp();//devuelve el total de partes int getNPt(int ip);//devuelve el total de puntos de la parte ip int getNPt();//devuelve el total de puntos de la parte ip int getType();//devuelve tipo de objetos almacenados int getNcoord();//devuelve numero de coordenadas por punto //funciones de escritura------------------------------- bool set(int tipe/*FshpReadType*/,int ncoord, Cb_file *file,Cb_file *file_shx =0); bool grabaRecord(Cgarray *pts); bool grabaRecord(Cgarray *pts, Cgarray *parts); bool FinGraba(); private: int inv_4(int *pb); }; #endif