utiles_v2017/CartoBaseElements.h

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