#include "StdAfx.h" #include "CartoBaseElements.h" #include "CartoElements.h" #include "CartoBase.h" #include "GeometryFunction.h" //***************************************************************************************** CartoBaseEntity* CartoComun::get(CartoBaseEntity * dst) { dst->flagsUser = flagsUser; dst->ia=ia; dst->type = getType(); return dst; } //***************************************************************************************** CartoBasePaintedProps* CartoComun::get(CartoBasePaintedProps * dst) { dst->peso = peso; return dst; } //***************************************************************************************** CartoBaseColor* CartoComun::get(CartoBaseColor * dst) { dst->color = color; return dst; } //***************************************************************************************** bool CartoComun::setInfo(CartoBaseInfoEntity * info) { CartoBaseEntity *e =info->entity(); CartoBaseColor *c =info->color(); CartoBasePaintedProps *p =info->paintp(); if(!e || !c || !p) return false; flagsUser = e->flagsUser; color= c->color; peso= p->peso; id= e->id; return true; } //***************************************************************************************** CartoEntity* CartoPto::set(CartoBaseInfoEntity *src) { if(!setInfo(src)) return NULL; CartoBasePoint *p = src->pto(); if(!p) return NULL; memcpy(pt,p->pts,sizeof(double)*3); return this; } //***************************************************************************************** double* CartoPto::getPto(int i) { if(i==0) return pt; return NULL; } //***************************************************************************************** int CartoPto::CopyInTo(CartoBase *src) { CartoBaseEntity e; CartoBasePaintedProps p; CartoBaseColor c; CartoBasePoint pt; memcpy(pt.pts, &this->pt, sizeof(double)*3); e.id = src->add(&pt); if(idPropsP<0) { p.color = src->add(get(&c)); if(p.color<0) return -1; e.idPaintp = src->add(get(&p)); } else e.idPaintp = idPropsP; if(e.idPaintp<-1) return -1; if(e.id<-1) return -1; return src->add(get(&e)); } //***************************************************************************************** double* CartoLine::getPto(int i) { return pts[i]; } //***************************************************************************************** double CartoLine::getLong() { return GeometryFunction::LongLine2d(this); } //***************************************************************************************** double *CartoLine::GetPtoDis(double dis, double *dst, double *distTot) { return GeometryFunction::GetPto(this, dis, dst, distTot); } //***************************************************************************************** bool CartoLine::addPto(double *p) { if(!(pts+=1)) return false; pts.n++; memcpy(pts[pts.n-1],p, sizeof(double)*3); return true; } //***************************************************************************************** CartoEntity* CartoLine::set(CartoBaseInfoEntity *src) { if(!setInfo(src)) return NULL; CartoBaseLine *l = src->line(); if(!l) return NULL; pts.n = 0; pts+=l->n; pts.n = l->n; CartoBasePoint *p = src->pto(); for(int i =0 ; in; i++) { memcpy(pts.ptr[i],p->pts,sizeof(double)*3); p=&p[1]; } return this; } //***************************************************************************************** int CartoLine::CopyInTo(CartoBase *src) { if(pts.n<=0) return -1; CartoBaseEntity e; CartoBasePaintedProps p; CartoBaseColor c; CartoBasePoint pt; CartoBaseLine l; l.n= pts.n; if(!(src->_lines+=pts.n)) return -1; memcpy(pt.pts,pts[0], sizeof(double)*3); l.ini = src->add(&pt); for(int i = 1; iadd(&pt); } if(idPropsP<0) { p.color = src->add(get(&c)); if(p.color<0) return -1; e.idPaintp = src->add(get(&p)); } else e.idPaintp = idPropsP; if(e.idPaintp<-1) return -1; e.id = src->add(&l); if(e.id<-1) return -1; return src->add(get(&e)); } //***************************************************************************************** void CartoLine::invert() { int ini =0; int fin =pts.n-1; double d; while(ini