173 lines
4.3 KiB
C++
173 lines
4.3 KiB
C++
#pragma once
|
|
#include "base_head.h"
|
|
#include "cartoBaseDef.h"
|
|
#include "garray.h"
|
|
#ifndef CartoBaseElements_H
|
|
#define CartoBaseElements_H
|
|
class CartoEntity;
|
|
//clases internas de cartobase----------------------------------------------
|
|
class UTILES_EXPORT CartoBaseEntity
|
|
{
|
|
public:
|
|
int id; //indice a objeto
|
|
int type; //tipo de entidad
|
|
int idPaintp; //inide a propiedades
|
|
int flagsUser; //flags para uso de usuario
|
|
int flagsInt; //flags para uso interno
|
|
int ref; //referencia unica por elemento
|
|
|
|
//tamaño---------
|
|
int mima[2]; //indice a punto maximo y minimo (el elemento esta contenido entre dichos puntos)
|
|
int ia; //indice a informacion adicional
|
|
|
|
CartoBaseEntity()
|
|
{
|
|
id = -1;
|
|
idPaintp = -1;
|
|
flagsInt = 0;
|
|
}
|
|
};
|
|
//entidad interna de putno
|
|
class UTILES_EXPORT CartoBasePoint
|
|
{
|
|
public:
|
|
double pts[3];//coordenadas del punto
|
|
|
|
CartoBasePoint(){
|
|
pts[0]=pts[1]=pts[2]=0;
|
|
}
|
|
};
|
|
|
|
//entidad interna de linea
|
|
class UTILES_EXPORT CartoBaseLine
|
|
{
|
|
public:
|
|
int ini; //inidce a punto inicio
|
|
int n; //numero de puntos del lineal
|
|
CartoBaseLine()
|
|
{
|
|
n = 0;
|
|
ini = -1;
|
|
}
|
|
};
|
|
//entidad interna de propiedades de pintado
|
|
class UTILES_EXPORT CartoBasePaintedProps
|
|
{
|
|
public:
|
|
int color; //indice a color
|
|
int peso; //grosor o tamaño de letra (segun entidad)
|
|
int prioridad; //prioridad de pintado
|
|
int flags; //flags internos 0x1 (visto para los clear)
|
|
CartoBasePaintedProps()
|
|
{
|
|
color = -1;
|
|
peso = 1;
|
|
flags = 0;
|
|
}
|
|
};
|
|
//entidad interna de color
|
|
class UTILES_EXPORT CartoBaseColor
|
|
{
|
|
public:
|
|
|
|
int color;
|
|
int flags; //flags internos 0x1 (visto para los clear)
|
|
CartoBaseColor()
|
|
{
|
|
color = 0;
|
|
flags = 0;
|
|
}
|
|
};
|
|
|
|
//entidad base de informacion
|
|
class CartoBase;
|
|
class UTILES_EXPORT CartoBaseInfoEntity: public SetPtsR
|
|
{
|
|
public:
|
|
//funciones externas
|
|
CartoBasePoint* (*fpto)(CartoBaseInfoEntity *c);
|
|
CartoBaseLine* (*fline)(CartoBaseInfoEntity *c);
|
|
int i_entity;
|
|
|
|
CartoBase* ptr;
|
|
|
|
CartoBaseInfoEntity();
|
|
|
|
virtual bool isValid(); //dice si es valido o no la entidad de informacion
|
|
virtual CartoBaseInfoEntity next(); //devuelve entidad siguiente
|
|
virtual CartoBaseInfoEntity prev(); //devuelve entidad anterior
|
|
|
|
//acceso a informacion interna
|
|
virtual CartoBasePoint* pto();
|
|
virtual CartoBaseEntity* entity();
|
|
virtual CartoBaseLine* line();
|
|
virtual CartoBasePaintedProps* paintp();
|
|
virtual CartoBaseColor* color();
|
|
virtual CartoEntity* getCopy(CartoEntity *buf=NULL);
|
|
//funciones SetPts--------------------------
|
|
virtual double* getPto(int i);
|
|
virtual int getNumberPtos();
|
|
|
|
void* getIa();
|
|
double getLong();
|
|
double disMedLines(SetPtsR *line2, double l_avan, double *desv=NULL);
|
|
double disMedLines(SetPtsR *line2, double *desv=NULL, BOOL usa_z = FALSE);
|
|
double DisPtoLine(double*p, int* idpto=NULL, double *lamb=NULL, BOOL usa_z=FALSE);
|
|
SetPtsW *GetNPrimePtos(SetPtsW *ldst, int nptos, double dis, BOOL avanza);
|
|
bool DivLine(SetPtsW* ldst1, SetPtsW* ldst2, int ip, double lamb);
|
|
double *GetPtoDis(double dis, double *dst, double *distTot);
|
|
double *PtInLine(int ip, double lamb, double *pp);
|
|
double DplineSeg(double* s1, double *s2,int *n=NULL, double *lamd1=NULL,double *lamb2=NULL);
|
|
};
|
|
//calse coleccion de entidades
|
|
class UTILES_EXPORT SetEntities
|
|
{
|
|
public:
|
|
virtual CartoBaseInfoEntity getEntity(int i)=0;
|
|
virtual int getNumberEntities()=0;
|
|
};
|
|
|
|
//clase de filtrado de entidades
|
|
class UTILES_EXPORT FilterEntities
|
|
{
|
|
public:
|
|
virtual bool IsSeletedEntity(CartoBaseInfoEntity *e)=0;
|
|
};
|
|
|
|
//array de entidades
|
|
class UTILES_EXPORT EntitiesArray: public Cgarray<CartoBaseInfoEntity>, public SetEntities, public SetPtsR
|
|
{
|
|
public:
|
|
virtual CartoBaseInfoEntity getEntity(int i);
|
|
virtual int getNumberEntities();
|
|
|
|
virtual double* getPto(int i);
|
|
virtual int getNumberPtos();
|
|
|
|
EntitiesArray* filter(EntitiesArray* dst, FilterEntities* filter);
|
|
bool exportShp(char* path, int type = CartoBaseTypes::Ndef);
|
|
};
|
|
//entidad de informacion punto
|
|
class UTILES_EXPORT CartoBaseInfoPto
|
|
{
|
|
public:
|
|
static CartoBasePoint* pto(CartoBaseInfoEntity*c);
|
|
};
|
|
//entidad de informacion linea
|
|
class UTILES_EXPORT CartoBaseInfoLine
|
|
{
|
|
public:
|
|
|
|
static CartoBasePoint* pto(CartoBaseInfoEntity*c);
|
|
static CartoBaseLine* line(CartoBaseInfoEntity*c);
|
|
};
|
|
|
|
//clase constructor de entidades info
|
|
class UTILES_EXPORT CartoBaseInfoBuilder
|
|
{
|
|
public:
|
|
static CartoBaseInfoEntity get(int i, CartoBase* ptr);
|
|
static CartoEntity* get(int type);
|
|
};
|
|
#endif
|