retoques version 4.0.0.0

Gerardo/ModosViaje
Gerardo 2024-04-12 22:33:57 +02:00
parent 431578ba46
commit 028928896e
7 changed files with 279 additions and 26 deletions

View File

@ -28,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,6,0 FILEVERSION 3,4,0,0
PRODUCTVERSION 3,1,6,0 PRODUCTVERSION 3,4,0,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -46,12 +46,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "VSM" VALUE "CompanyName", "VSM"
VALUE "FileDescription", "Librería de la aplicación Olivia" VALUE "FileDescription", "Librería de la aplicación Olivia"
VALUE "FileVersion", "3.1.6.0" VALUE "FileVersion", "3.4.0.0"
VALUE "InternalName", "Olivia.dll" VALUE "InternalName", "Olivia.dll"
VALUE "LegalCopyright", "OLIVIA (c) VSM 2020. All rights reserved." VALUE "LegalCopyright", "OLIVIA (c) VSM 2020. All rights reserved."
VALUE "OriginalFilename", "Olivia.dll" VALUE "OriginalFilename", "Olivia.dll"
VALUE "ProductName", "OLIVIA" VALUE "ProductName", "OLIVIA"
VALUE "ProductVersion", "3.1.6.0" VALUE "ProductVersion", "3.4.0.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -94,7 +94,7 @@ public:
CartoBase cartoAux; CartoBase cartoAux;
std::map<int,Info_aso2> iaso; ///<Map con mismos elementos que entidades la carto, con la información asociada std::map<int,Info_aso2> iaso; ///<Map con mismos elementos que entidades la carto, con la información asociada
std::vector<Info_tramos> *tramos; std::vector<Info_tramos> *tramos;
std::vector <Coste_modif> coste_modificado;
std::vector<Info_aso_nw_elev> iaso_elev; ///<Map con mismos elementos que la nw, con la info de elevación de los nodos std::vector<Info_aso_nw_elev> iaso_elev; ///<Map con mismos elementos que la nw, con la info de elevación de los nodos
double mima[N_COOR_MIMA]; ///<Coordenadas de las cuatro esquinas de la red double mima[N_COOR_MIMA]; ///<Coordenadas de las cuatro esquinas de la red
//************************************************************************************* //*************************************************************************************

View File

@ -236,6 +236,17 @@ typedef struct Info_aso_nw
double velo; //velocidad de la vía, en km/h double velo; //velocidad de la vía, en km/h
char *nomb; //nombre de la vía char *nomb; //nombre de la vía
}Info_aso_nw; }Info_aso_nw;
/**
* Nueva Estructura que contiene la información asociada de la nw
*/
typedef struct Coste_modif
{
float coste;
int i;
int j;
}Coste_modif;
/** /**
* Nueva Estructura que contiene la información asociada de las entidades de limpieza (aceras, bordillos, peatonales...) * Nueva Estructura que contiene la información asociada de las entidades de limpieza (aceras, bordillos, peatonales...)
*/ */

View File

@ -960,7 +960,7 @@ BOOL Colv_limp_thr::rellena_info_nw()
/////////////////////////////// ///////////////////////////////
//velocidad //velocidad
if((olv_limp->iaso[ia].flgs & OLV_LIMP_FLG_CIRC_NONE) || ispedestrian) if ((olv_limp->iaso[ia].flgs & OLV_LIMP_FLG_CIRC_NONE) || ispedestrian)
{ {
s= OLV_LIMP_VELO_CIRC_PEAT; //se le pone velo muy bajita para que intente no ir por ahí, porque son calles prohibidas s= OLV_LIMP_VELO_CIRC_PEAT; //se le pone velo muy bajita para que intente no ir por ahí, porque son calles prohibidas
//a no ser que haya un contenedor //a no ser que haya un contenedor
@ -970,6 +970,7 @@ BOOL Colv_limp_thr::rellena_info_nw()
{ {
s=dbf.getI(icampv); s=dbf.getI(icampv);
} }
s = dbf.getI(icampv);
if(s<=0) if(s<=0)
{ {
s=OLV_LIMP_VELO_DEF;//pone por def s=OLV_LIMP_VELO_DEF;//pone por def
@ -977,7 +978,7 @@ BOOL Colv_limp_thr::rellena_info_nw()
olv_limp->iaso[ia].velReal = 1.0 * s * OLV_KMH2MS;; olv_limp->iaso[ia].velReal = 1.0 * s * OLV_KMH2MS;;
if(cevita==0) if(cevita==0)
olv_limp->iaso[ia].inf_n.velo=1.0*s*OLV_KMH2MS; olv_limp->iaso[ia].inf_n.velo= olv_limp->iaso[ia].velReal;
else if(cevita >0) else if(cevita >0)
{ {
olv_limp->iaso[ia].inf_n.velo = 1.0 * cevita * s * OLV_KMH2MS; olv_limp->iaso[ia].inf_n.velo = 1.0 * cevita * s * OLV_KMH2MS;
@ -1195,6 +1196,14 @@ BOOL Colv_limp_thr::rellena_info_amb()
if(!olv_limp->barr_mix) if(!olv_limp->barr_mix)
olv_limp->barr_mix=(barr_mix & (OLV_LIMP_FLG_AMB_APA | OLV_LIMP_FLG_AMB_BORD)) && (barr_mix & OLV_LIMP_FLG_AMB_ACE); olv_limp->barr_mix=(barr_mix & (OLV_LIMP_FLG_AMB_APA | OLV_LIMP_FLG_AMB_BORD)) && (barr_mix & OLV_LIMP_FLG_AMB_ACE);
} }
else
{
if (olv_limp->uds_tto == OliviaDef::GeneralDef::OlvTipTtoMh_eje)
ancho = 1;
else if (olv_limp->uds_tto == OliviaDef::GeneralDef::OlvTipTtoM2h_eje)
ancho = olv_limp->ancho_via;
olv_limp->iaso[ia].inf_l.ancho = ancho;
}
if (icampoid >= 0) if (icampoid >= 0)
{ {
olv_limp->iaso[ia].oid = dbf.getI(icampoid); olv_limp->iaso[ia].oid = dbf.getI(icampoid);
@ -1658,12 +1667,10 @@ BOOL Colv_limp_thr::replica_peat()
ient=olv_limp->carto.get(i); ient=olv_limp->carto.get(i);
if(!(olv_limp->iaso[ient.entity()->ref].flgs & OLV_LIMP_FLG_AMB_PEAT)) if(!(olv_limp->iaso[ient.entity()->ref].flgs & OLV_LIMP_FLG_AMB_PEAT))
continue; continue;
//Replica la peatonal //Replica la peatonal
if(!ient.getCopy(&peatcp) || !olv_limp->carto.add(peatcp)) if(!ient.getCopy(&peatcp) || !olv_limp->carto.add(peatcp))
break; break;
ientcp=olv_limp->carto.get(olv_limp->carto.getNumberEntities()-1); ientcp=olv_limp->carto.get(olv_limp->carto.getNumberEntities()-1);
//Añade la info aso //Añade la info aso
info_aux.reset(); info_aux.reset();
info_aux.flgs=OLV_LIMP_FLG_PEAT_REP; info_aux.flgs=OLV_LIMP_FLG_PEAT_REP;
@ -1923,7 +1930,7 @@ BOOL Colv_limp_thr::une_amb_nw(int soloi)
{ {
pon_mi_msg("Error en la unión de ámbitos a red navegable"); pon_mi_msg("Error en la unión de ámbitos a red navegable");
return FALSE; return FALSE;
} }
//Bucle por ámbito //Bucle por ámbito
for(i=0;i<olv_limp->n_amb && !pirate; i++) for(i=0;i<olv_limp->n_amb && !pirate; i++)
{ {
@ -1936,6 +1943,7 @@ BOOL Colv_limp_thr::une_amb_nw(int soloi)
continue; continue;
//Añade los segmentos a clase NW_union //Añade los segmentos a clase NW_union
add_uniones_obj(i); add_uniones_obj(i);
} }
//cuida si ha salido antes por falta de memo //cuida si ha salido antes por falta de memo
@ -1947,7 +1955,6 @@ BOOL Colv_limp_thr::une_amb_nw(int soloi)
if(comp_lejos) //ojo if(comp_lejos) //ojo
comprueba_aislados(olv_limp->inww_amb); comprueba_aislados(olv_limp->inww_amb);
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
//si hay algún ámbito asignado a una carretera de prohibido circular //si hay algún ámbito asignado a una carretera de prohibido circular
//se le quita el flag a la carretera //se le quita el flag a la carretera
@ -2134,6 +2141,8 @@ BOOL Colv_limp_thr::busca_inw_dmin_ejes(int i_amb)
ientamb=olv_limp->carto.getEntity(i_amb); ientamb=olv_limp->carto.getEntity(i_amb);
refamb=ientamb.entity()->ref; refamb=ientamb.entity()->ref;
npts=ientamb.getNumberPtos(); npts=ientamb.getNumberPtos();
double* pi = ientamb.getPto(0);
double* pf = ientamb.getPto(npts-1);
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//Bucle por cada carretera de la nw //Bucle por cada carretera de la nw
//empiezan donde acaban los ámbitos, y terminan en namb+nnw //empiezan donde acaban los ámbitos, y terminan en namb+nnw
@ -2143,9 +2152,14 @@ BOOL Colv_limp_thr::busca_inw_dmin_ejes(int i_amb)
refenw=ientnw.entity()->ref; refenw=ientnw.entity()->ref;
if(!(olv_limp->iaso[refenw].flgs & OLV_LIMP_FLG_NW)) if(!(olv_limp->iaso[refenw].flgs & OLV_LIMP_FLG_NW))
continue; //no debería, pero por si acaso continue; //no debería, pero por si acaso
double* ei = ientnw.getPto(0);
if(olv_limp->iaso[refenw].oid==olv_limp->iaso[refamb].oid) double* ef = ientnw.getPto(ientnw.getNumberPtos()-1);
if (ei[0] == pi[0] && ef[0] == pf[0])
break; break;
/*
if(olv_limp->iaso[refenw].oid==olv_limp->iaso[refamb].oid)//todo a elena
break;
*/
} }
if(inw>=olv_limp->n_amb+olv_limp->n_nw || pirate) if(inw>=olv_limp->n_amb+olv_limp->n_nw || pirate)
return FALSE; return FALSE;
@ -3532,13 +3546,13 @@ BOOL Colv_limp_thr::busca_conjs()
if((olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_PEAT_SEG) || if((olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_PEAT_SEG) ||
(olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_EJE_SEG)) (olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_EJE_SEG))
continue; continue;
for(k=0; k<2; k++) for(k=0; k<2; k++)
{ {
pto = ient.getPto(k*(npts-1)); pto = ient.getPto(k*(npts-1));
if((olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_PEAT_REP) || if((olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_PEAT_REP) ||
(olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_EJE)) (olv_limp->iaso[refent].flgs & OLV_LIMP_FLG_EJE))
{ {
//en estos casos replica las conjunciones //en estos casos replica las conjunciones
//llega la segunda vez //llega la segunda vez
ic=olv_limp->conjs.n; ic=olv_limp->conjs.n;
@ -3883,7 +3897,7 @@ void Colv_limp_thr::calcula_ang_conj_sub(int ithr)
//marca las conjunciones que son adyacentes //marca las conjunciones que son adyacentes
conjs[i]=1; conjs[i]=1;
for(j=i+1;j<nconj;j++) for (j = i + 1; j<nconj; j++)
{ {
if(j==ic) if(j==ic)
continue; continue;
@ -4067,7 +4081,7 @@ double Colv_limp_thr::dame_ang_conj(int ic, int i, int j)
} }
ang=Colv_geom::ang_vect(v[0],v[1]); ang=Colv_geom::ang_vect(v[0],v[1]);
if(ang> OLV_PI) //if(ang> OLV_PI)
ang=OLV_PI-ang; ang=OLV_PI-ang;
return ang; return ang;
@ -4148,23 +4162,131 @@ void Colv_limp_thr::revisa_calles_cortadas()
// return; // return;
for(ic=0;ic<olv_limp->conjs.n;ic++) for(ic=0;ic<olv_limp->conjs.n;ic++)
{ {
Coste_modif coste_old;
nady=olv_limp->ang_conj[ic].nady; nady=olv_limp->ang_conj[ic].nady;
/*if (nady == 1)
{
i = 0;
j = 0;
}
else
{*/
for (i = 0; i < nady; i++)
{
j = -1;
k = nady;
//localiza entrada a ic
if (olv_limp->cost_conj[olv_limp->ang_conj[ic].i_conjs[i]][ic] >= MAYUSCULO)
continue;
//localiza al menos una salida
for (j = 0; j < nady; j++)
{
//if (j == i) La salida puede ser tambien i
// continue;
if (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] < MAYUSCULO &&
olv_limp->ang_conj[ic].angs[i][j])
break;
}
//por cada entrada a ic al menos tiene que tener una salida
if (j >= nady)
{
//pone coste extra de i a ic
// coste_old.i = olv_limp->ang_conj[ic].i_conjs[i];
coste_old.i = olv_limp->ang_conj[ic].i_conjs[i];
coste_old.j = ic;
coste_old.coste = olv_limp->cost_conj[olv_limp->ang_conj[ic].i_conjs[i]][ic];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(olv_limp->ang_conj[ic].i_conjs[i], ic, coste_old.coste * 10);
//por la entrada i a ic es cortada, abre salidas
for (j = 0; j < nady; j++)
{
if (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] < MAYUSCULO)
{
//abre salidas con un coste extra
olv_limp->ang_conj[ic].angs[i][j] = 1;
coste_old.i = ic;
coste_old.j = olv_limp->ang_conj[ic].i_conjs[j];
coste_old.coste = olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[j], coste_old.coste * 10);
}
}
}
}
//}
/*
if(i<nady && k<nady)
{
//solo tiene una calle por donde volver
olv_limp->ang_conj[ic].angs[i][k] = 1;
if (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[k]] < MAYUSCULO)
{
coste_old.i = ic;
coste_old.j = olv_limp->ang_conj[ic].i_conjs[k];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[k], olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[k]] * 10);
}
if(olv_limp->cost_conj[olv_limp->ang_conj[ic].i_conjs[i]][ic] < MAYUSCULO)
{
coste_old.i = olv_limp->ang_conj[ic].i_conjs[i];
coste_old.j = ic;
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(olv_limp->ang_conj[ic].i_conjs[i], ic, olv_limp->cost_conj[olv_limp->ang_conj[ic].i_conjs[i]][ic] * 10);
}
}
*/
/*else
{
for (i = 0; i < nady; i++)
{
if (!(olv_limp->cost_conj[olv_limp->ang_conj[ic].i_conjs[i]][ic] < MAYUSCULO))
continue;
for (j = 0; j < nady; j++)
{
if (j == i)
continue;
if (!(olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] < MAYUSCULO))
continue;
}
if (j >= nady)
{
//de la conjunción i no se puede ir a otra que no sea ella misma
}
if (!olv_limp->ang_conj[ic].angs[i][j])
{
//comprueba si se puede ir de i a j o de j a i
if()
}
}
for(i=0;i<nady;i++) for(i=0;i<nady;i++)
{ {
for(j=0;j<nady;j++) for(j=0;j<nady;j++)
{ {
if (j == i)
continue;
if(!olv_limp->ang_conj[ic].angs[i][j]) if(!olv_limp->ang_conj[ic].angs[i][j])
{ {
//si el ángulo es prohibido, mira a ver si hay más conjunciones //si el ángulo es prohibido, mira a ver si hay más conjunciones
for(k=0;k<nady;k++) for(k=0;k<nady;k++)
{ {
if (k == i || k==j)
continue;
if(olv_limp->ang_conj[ic].i_conjs[k]<0 || olv_limp->ang_conj[ic].i_conjs[k]>=olv_limp->conjs.n) if(olv_limp->ang_conj[ic].i_conjs[k]<0 || olv_limp->ang_conj[ic].i_conjs[k]>=olv_limp->conjs.n)
{ {
olvlog(LOG_TODO,"olv_limp_t","Ojo ang_conj fuera de límites ic %ld, k %ld",ic,k); olvlog(LOG_TODO,"olv_limp_t","Ojo ang_conj fuera de límites ic %ld, k %ld",ic,k);
continue; continue;
} }
/*if(((k!=i) || (k!=j)) && (olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[k]].n>1)) /* if(((k!=i) || (k!=j)) && (olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[k]].n>1))
break;*/ break; /
if((olv_limp->ang_conj[ic].i_conjs[k]!=olv_limp->ang_conj[ic].i_conjs[i]) && if((olv_limp->ang_conj[ic].i_conjs[k]!=olv_limp->ang_conj[ic].i_conjs[i]) &&
(olv_limp->ang_conj[ic].i_conjs[k]!=olv_limp->ang_conj[ic].i_conjs[j]) && (olv_limp->ang_conj[ic].i_conjs[k]!=olv_limp->ang_conj[ic].i_conjs[j]) &&
(olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[k]]<MAYUSCULO) && (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[k]]<MAYUSCULO) &&
@ -4174,6 +4296,105 @@ void Colv_limp_thr::revisa_calles_cortadas()
if(k>=nady)//estos nodos son los únicos que tiene para entrar y salir if(k>=nady)//estos nodos son los únicos que tiene para entrar y salir
{ {
olv_limp->ang_conj[ic].angs[i][j]=1; olv_limp->ang_conj[ic].angs[i][j]=1;
//coste en calles cortadas
int rnw = -1;
Coste_modif coste_old;
coste_old.i = ic;
if (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] < MAYUSCULO)
{
coste_old.j = j;
coste_old.coste = olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[j], olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] * 10);
}
if (i!=j && olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]] < MAYUSCULO)
{
coste_old.j = i;
coste_old.coste = olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[i], olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]] * 10);
if (olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[i]].n == 1)
rnw = olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[i]].refnw0;
}
/*if (rnw != -1)
{
}*
}
}
}
}*/
}
}
//*************************************************************************************
/**
* Resvisa los ángulos, de forma que si hay algún giro "prohibido" de 180º, en caso
* de que sean calles cortadas o sin salida, los pone a ok
*/
void Colv_limp_thr::revisa_calles_cortadas_old()
{
int ic, i, j, k, nady;
//if(olv_limp->res_circ==OLV_RES_NO)
// return;
for (ic = 0; ic < olv_limp->conjs.n; ic++)
{
nady = olv_limp->ang_conj[ic].nady;
for (i = 0; i < nady; i++)
{
for (j = 0; j < nady; j++)
{
if (j == i)
continue;
if (!olv_limp->ang_conj[ic].angs[i][j])
{
//si el ángulo es prohibido, mira a ver si hay más conjunciones
for (k = 0; k < nady; k++)
{
if (k == i || k == j)
continue;
if (olv_limp->ang_conj[ic].i_conjs[k] < 0 || olv_limp->ang_conj[ic].i_conjs[k] >= olv_limp->conjs.n)
{
olvlog(LOG_TODO, "olv_limp_t", "Ojo ang_conj fuera de límites ic %ld, k %ld", ic, k);
continue;
}
/*if(((k!=i) || (k!=j)) && (olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[k]].n>1))
break;*/
if ((olv_limp->ang_conj[ic].i_conjs[k] != olv_limp->ang_conj[ic].i_conjs[i]) &&
(olv_limp->ang_conj[ic].i_conjs[k] != olv_limp->ang_conj[ic].i_conjs[j]) &&
(olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[k]] < MAYUSCULO) &&
(olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[k]].n > 1))
break;
}
if (k >= nady)//estos nodos son los únicos que tiene para entrar y salir
{
olv_limp->ang_conj[ic].angs[i][j] = 1;
//coste en calles cortadas
int rnw = -1;
Coste_modif coste_old;
coste_old.i = ic;
if (olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] < MAYUSCULO)
{
coste_old.j = j;
coste_old.coste = olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[j], olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[j]] * 10);
}
if (i != j && olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]] < MAYUSCULO)
{
coste_old.j = i;
coste_old.coste = olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]];
olv_limp->coste_modificado.push_back(coste_old);
olv_limp->cost_conj.set(ic, olv_limp->ang_conj[ic].i_conjs[i], olv_limp->cost_conj[ic][olv_limp->ang_conj[ic].i_conjs[i]] * 10);
if (olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[i]].n == 1)
rnw = olv_limp->conjs.inc[olv_limp->ang_conj[ic].i_conjs[i]].refnw0;
}
/*if (rnw != -1)
{
}*/
} }
} }
} }
@ -7906,7 +8127,6 @@ BOOL Colv_limp_thr::planifica_fin()
//Si es barrido mixto hay que copiar la info en las que no se ha sectorizado //Si es barrido mixto hay que copiar la info en las que no se ha sectorizado
if(olv_limp->barr_mix) if(olv_limp->barr_mix)
copia_info_barr_mix(); copia_info_barr_mix();
/////////////////////////////////// ///////////////////////////////////
//prepara los datos para guardarlos //prepara los datos para guardarlos
if(!genera_rut_ctrl(olv_limp->nsec, olv_limp->plan, FALSE)) if(!genera_rut_ctrl(olv_limp->nsec, olv_limp->plan, FALSE))
@ -8037,6 +8257,16 @@ BOOL Colv_limp_thr::genera_planif_aux(int is, Info_sec *ss, Info_planif *pp, int
is_uno=FALSE; is_uno=FALSE;
ref_nw=0; ref_nw=0;
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
//recompone costes
/*int cmn = olv_limp->coste_modificado.size();
for (int i = 0; i < olv_limp->coste_modificado.size(); i++)
{
Coste_modif cm = olv_limp->coste_modificado[i];
olv_limp->cost_conj.set(cm.i, cm.j, cm.coste);
}*/
if(nsecu==1) if(nsecu==1)
{ {
@ -8223,7 +8453,15 @@ BOOL Colv_limp_thr::genera_planif_aux(int is, Info_sec *ss, Info_planif *pp, int
} }
else//es carretera else//es carretera
{ {
//todo_costes_virtuales
ref_nw=ref_j; ref_nw=ref_j;
if (olv_limp->iaso[ref_nw].inf_n.velo != olv_limp->iaso[ref_nw].velReal && olv_limp->iaso[ref_nw].velReal>0)
{
//poner coste real
cost = ltot / olv_limp->iaso[ref_nw].velReal;
}
tp=OLV_PLAN_TIP_NW; tp=OLV_PLAN_TIP_NW;
dt=OLV_DESP; dt=OLV_DESP;
} }
@ -8527,7 +8765,7 @@ BOOL Colv_limp_thr::genera_rut_aux(Info_planif *pp, int is, BOOL is_insta, int i
lin_parc.pts.n=0; lin_parc.pts.n=0;
ptos=(double (*)[3])ient.getPto(0); ptos=(double (*)[3])ient.getPto(0);
ptos_par=NULL; ptos_par=NULL;
//si es carretera y es de doble sentido, //si es carretera y es de doble sentido,
//hace la paralela a una distancia dada para que no se superpongan la ida y la vuelta //hace la paralela a una distancia dada para que no se superpongan la ida y la vuelta
if((pp->elem[i].tp==OLV_PLAN_TIP_NW) && (olv_limp->iaso[pp->elem[i].refe].flgs & OLV_LIMP_FLG_NW) && if((pp->elem[i].tp==OLV_PLAN_TIP_NW) && (olv_limp->iaso[pp->elem[i].refe].flgs & OLV_LIMP_FLG_NW) &&

View File

@ -197,6 +197,7 @@ public:
//Cálculo del coste entre ámbitos //Cálculo del coste entre ámbitos
void invierte_nodos(int nn, int KK,Secu_amb * ord_sec, BOOL *pirate); void invierte_nodos(int nn, int KK,Secu_amb * ord_sec, BOOL *pirate);
void revisa_calles_cortadas_old();
BOOL calcula_cost_amb(); BOOL calcula_cost_amb();
BOOL inicia_cost_amb(); BOOL inicia_cost_amb();
BOOL calcula_cost_amb_fin(); BOOL calcula_cost_amb_fin();

View File

@ -82,8 +82,8 @@ MAINICON ICON "favicon.ico"
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,1,7,0 FILEVERSION 4,0,0,0
PRODUCTVERSION 3,1,7,0 PRODUCTVERSION 4,0,0,0
FILEFLAGSMASK 0x17L FILEFLAGSMASK 0x17L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -100,12 +100,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "VSM" VALUE "CompanyName", "VSM"
VALUE "FileDescription", "Launcher de la aplicación Olivia" VALUE "FileDescription", "Launcher de la aplicación Olivia"
VALUE "FileVersion", "3.1.7.0" VALUE "FileVersion", "4.0.0.0"
VALUE "InternalName", "OliviaTasks" VALUE "InternalName", "OliviaTasks"
VALUE "LegalCopyright", "OLIVIA (c) VSM 2020. All rights reserved." VALUE "LegalCopyright", "OLIVIA (c) VSM 2020. All rights reserved."
VALUE "OriginalFilename", "OliviaTasks.exe" VALUE "OriginalFilename", "OliviaTasks.exe"
VALUE "ProductName", "OliviaTasks" VALUE "ProductName", "OliviaTasks"
VALUE "ProductVersion", "3.1.7.0" VALUE "ProductVersion", "4.0.0.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -22,6 +22,7 @@ class UTILES_EXPORT CartoBase: public SetEntities, public SetPtsR, public DataIa
friend class CartoBaseInfoBuilder; friend class CartoBaseInfoBuilder;
friend class CartoPto; friend class CartoPto;
friend class CartoLine; friend class CartoLine;
friend class CartoBaseTopologyManager;
private: private:
//info interna------------------------------- //info interna-------------------------------
int ref;//referencia para el siguiente elemento int ref;//referencia para el siguiente elemento
@ -56,7 +57,7 @@ public:
CartoBaseInfoEntity get(int i);//acceso a entidad iesima (modo lectura) CartoBaseInfoEntity get(int i);//acceso a entidad iesima (modo lectura)
CartoBaseInfoEntity getRef(int r);//acceso a entidad con referencia r (modo lectura) CartoBaseInfoEntity getRef(int r);//acceso a entidad con referencia r (modo lectura)
bool compruebaPts();
//añade elementos //añade elementos
bool add(CartoEntity& element); bool add(CartoEntity& element);
bool add(CartoBase& cad); bool add(CartoBase& cad);
@ -106,6 +107,8 @@ public:
virtual bool IaGetVal( int refEnt, int icol, int* v ); virtual bool IaGetVal( int refEnt, int icol, int* v );
virtual bool IaFinW(){return true;} virtual bool IaFinW(){return true;}
private: private:
int add(CartoBaseEntity* src); int add(CartoBaseEntity* src);