utiles_v2017/Fshape.h

106 lines
2.3 KiB
C++

#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<char> 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<double> *pts);
bool grabaRecord(Cgarray<double> *pts, Cgarray<int> *parts);
bool FinGraba();
private:
int inv_4(int *pb);
};
#endif