106 lines
2.3 KiB
C++
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 |