utiles_v2017/CartoBase.h

134 lines
4.1 KiB
C++

#pragma once
#ifndef CartoBase_h
#define CartoBase_h
#include "base_head.h"
#include "CartoBaseDef.h"
#include "CartoBaseElements.h"
#include "CartoElements.h"
#include "IaDataTable.h"
#include <map>
/*
hacer el memoryclear
guardar dbf ia
*/
class Cb_file;
class UTILES_EXPORT CartoBase: public SetEntities, public SetPtsR, public DataIaCartoBase
{
//clases amigo-----------------
friend class CartoBaseInfoEntity;
friend class CartoBaseInfoPto;
friend class CartoBaseInfoLine;
friend class CartoBaseInfoBuilder;
friend class CartoPto;
friend class CartoLine;
private:
//info interna-------------------------------
int ref;//referencia para el siguiente elemento
CartoBasePaintedProps _defaultpaintedProps;
CartoBaseColor _defaultColor;
//array de informacion de entidades
Cgarray<CartoBaseEntity> _entities;//entidades
Cgarray<CartoBasePoint> _points;//coordenadas
Cgarray<CartoBaseLine> _lines;//lineas
Cgarray<CartoBasePaintedProps> _paintedProps;//propiedades de pintado
Cgarray<CartoBaseColor> _colors;
std::map<int, int> refIndex;//indexado por referencias;
//datos de ia-----------------------------------------
char iaName[12];//nombre columna ia tipo IntIa
int typeIA;//indica el tipo de informacion asociada que se utilizara
public:
IaDataTable dataIa;
DataIaCartoBase *iaEx;
enum TypedataIa
{
NIa=0,//sin informacion asociada
IntIa,//usa solo un entero por entidad como ia con nombre de columna iaName
DtIa,//usa la dataIa para almacenar info asociada
ExIa//informacion asociada externa
};
CartoBase(void);
~CartoBase(void);
//funciones-----------------------------------------------------------------
CartoBaseInfoEntity get(int i);//acceso a entidad iesima (modo lectura)
CartoBaseInfoEntity getRef(int r);//acceso a entidad con referencia r (modo lectura)
//añade elementos
bool add(CartoEntity& element);
bool add(CartoBase& cad);
bool remove(int i);//pone marca de flag de borrado (pero sigue siendo accesible)
bool removeRef(int r);
bool FastClear();//solo borra entidades y rehace las referencias
bool clear();//limpia elementos borrados y ajusta memoria
bool MemClear();//limpia memoria de todos los arrays
EntitiesArray* filter(EntitiesArray* dst, FilterEntities *filter);
virtual bool leer(char *path);
virtual bool grabar(char *path);
virtual bool leer(Cb_file *f);
virtual bool grabar(Cb_file *f);
int addDefaultPaintedProps();//crea unas propiedades de pintado como las por defecto
bool importShp(char* path);//importa shp
bool exportShp(char* path);//exporta a shp (todos los tipos que cuinciden con la primera)
bool ptosExportShp(char* path);
bool linesExportShp(char* path);
void del();//limpia toda la carto (sin liberar memoria)
//funciones de ia-------------------------------------------------------------------
void* getIa(int refEnt);//devuelve informacion asociada externa de la entidad refEnt
int getTypeIA(){return typeIA;}//devuelve el tipo de ia que tiene actualmente
void setExIa(DataIaCartoBase* ia);//setea un ia externo
int getEntityRef(int ientity);//devuelve la referencia
void setNameIa(char *name);//pone el nombre de la col
//funciones por ser SetEntities
virtual CartoBaseInfoEntity getEntity(int i);
virtual int getNumberEntities();
//funciones por ser SetPts
virtual double* getPto(int i);
virtual int getNumberPtos();
//funciones auxiliares------------
int getNexRef(){return ref;};
//funciones DataIaCartoBase
virtual bool IaGetSize( int *ncolm );
virtual bool IaGetColm( int icol, char* name, BYTE *type, int *size, int*ndecimal );
virtual bool IaGetVal( int refEnt, int icol, int* v );
virtual bool IaFinW(){return true;}
private:
int add(CartoBaseEntity* src);
int add(CartoBasePoint* src);
int add(CartoBaseLine* src);
int add(CartoBasePaintedProps* src);
int add(CartoBaseColor* src);
bool fexportShp(char* path, int type = CartoBaseTypes::Ndef);
void indexRef(bool buscaRepes=false);//indexa referencias
void iniIndexRef();//crea indexado
void reIndexRef();
};
class FiterCartoBase: public SetEntities
{
public:
CartoBase* cb;
Cgarray<int> ind;
virtual CartoBaseInfoEntity getEntity( int i );
virtual int getNumberEntities();
};
#endif