Primer intento revisar elevación. Id de conjunción truncado, no sirve. Configurado para arrancar Olivia sin Addin
parent
334a060db6
commit
01f143205e
|
|
@ -391,7 +391,7 @@ void COlivia::prueba()
|
|||
|
||||
///////////////////
|
||||
//solo para debug elena olivia
|
||||
i=3;
|
||||
i=1;
|
||||
|
||||
if(fin)
|
||||
{
|
||||
|
|
@ -411,12 +411,17 @@ void COlivia::prueba()
|
|||
switch(i)
|
||||
{
|
||||
case 1:
|
||||
sprintf_s(config, max_char_cap,"/CONFIG /t_tto:2900 /restr_cir:0 /u_tto:3 /v_despl:5 /t_conv:480 /t_descan:30 /t_despl:25 /t_carg:40 "\
|
||||
sprintf_s(config, max_char_cap,"/CONFIG_PLANIF /t_tto:2900 /restr_cir:0 /u_tto:3 /v_despl:5 /t_conv:480 /t_descan:30 /t_despl:25 /t_carg:40 "\
|
||||
"/h_inicio:450 /trafico:80 /n_ptsctrl:3 /n_secdef:3 /anch_med:2 /coor_inst_x:0 /coor_inst_y:0 /aislados:1 /cons_obser:OBSERVACIONES "\
|
||||
"/cons_anch_tip:ANCHO_TIPO /cons_tipolo:TIPOLOGIA /cons_tip_ent:NOM_TIPO_ENTIDAD /atr_aparc:Banda Aparcamiento /atr_bord:Bordillo Libre "\
|
||||
"/atr_acera:Aceras /atr_peat:Peatonales /atr_ap_lin:Linea /atr_ap_bat:Bateria /cons_onew:ONEWAY /cons_kph:KPH /cons_fow:FOW /cons_name:NAME "\
|
||||
"/atr_TF:TF /atr_FT:FT /atr_N:N /atr_pedes:14 /str_tto:Barrido_man "\
|
||||
"/path_data:D:\\Proyectos\\Olivia\\Instal2.0\\data\\data_T00_A04050607_NNivel7_20220327_155737.shp /path_nw:D:\\Proyectos\\Olivia\\Instal2.0\\data\\nw_20220327_155737.shp ");
|
||||
"/Camp_sector:SECTOR /Camp_secuencia:SECUENCIA /Camp_objectid:FID "\
|
||||
"/Giro_max_vehiculo:175 /Desv_max_rel:0.15 /Desv_max_abs:1000 "\
|
||||
"/Ancho_peat_def:6 /Ancho_acera_def:1.5 /Ancho_ap_lin_def:2 "\
|
||||
"/Ancho_ap_bat_def:4 /Ancho_bord_lib_def:1.5 "\
|
||||
"/path_data:D:\\Proyectos\\Olivia\\Instal3.0\\data_prueba_2\\data_T00_A0405_20230111_233224.shp "\
|
||||
"/path_nw:D:\\Proyectos\\Olivia\\Instal3.0\\data_prueba_2\\nw_20230111_233224.shp ");
|
||||
break;
|
||||
case 3://nw de arcmap
|
||||
sprintf_s(config, max_char_cap, "/CONFIG /t_tto:2900 /restr_cir:0 /u_tto:3 /v_despl:5 /t_conv:480 /t_descan:30 /t_despl:25 /t_carg:40 "\
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ Colv_limp::Colv_limp(COlivia *olv)
|
|||
nomb_tto[0]=0;
|
||||
barr_mix=FALSE;
|
||||
usa_secuen = FALSE;
|
||||
revisa_elev = TRUE;
|
||||
}
|
||||
//*******************************************************************************************************************************************
|
||||
Colv_limp::~Colv_limp(void)
|
||||
|
|
@ -691,6 +692,10 @@ BOOL Colv_limp::guarda_campos_ini(char *path)
|
|||
|
||||
}
|
||||
//*************************************************************************************
|
||||
#define NOMB_CAMP_CONJ_TO "T_JNCTID"
|
||||
#define NOMB_CAMP_CONJ_FROM "F_JNCTID"
|
||||
#define NOMB_CAMP_ELEV_TO "T_ELEV"
|
||||
#define NOMB_CAMP_ELEV_FROM "F_ELEV"
|
||||
/**
|
||||
* Rellena los nombres de los campos de la dbf
|
||||
*/
|
||||
|
|
@ -701,6 +706,11 @@ void Colv_limp::rellena_campos()
|
|||
sprintf_s(camps.campo_velo,OLV_LIMP_MAX_CAMP,"KPH");
|
||||
sprintf_s(camps.campo_fow,OLV_LIMP_MAX_CAMP,"FOW");
|
||||
sprintf_s(camps.campo_name,OLV_LIMP_MAX_CAMP,"NAME");
|
||||
//TOM TOM ELEV
|
||||
sprintf_s(camps.campo_conj_to, OLV_LIMP_MAX_CAMP, NOMB_CAMP_CONJ_TO);
|
||||
sprintf_s(camps.campo_conj_from, OLV_LIMP_MAX_CAMP, NOMB_CAMP_CONJ_FROM);
|
||||
sprintf_s(camps.campo_elev_to, OLV_LIMP_MAX_CAMP, NOMB_CAMP_ELEV_TO);
|
||||
sprintf_s(camps.campo_elev_from, OLV_LIMP_MAX_CAMP, NOMB_CAMP_ELEV_FROM);
|
||||
|
||||
//VSM
|
||||
sprintf_s(camps.campo_obs,OLV_LIMP_MAX_CAMP,"OBSERVACIO");
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ public:
|
|||
BOOL igno_ais; ///<Indica si ignorar aislados
|
||||
BOOL barr_mix; ///<Indica si es barrido mixto
|
||||
BOOL usa_secuen;
|
||||
BOOL revisa_elev;
|
||||
double f_trafic; ///<Factor de reducción de la velocidad en calles por el tráfico en tanto por 1
|
||||
double calc_nsec; ///<Indica si el número de sectores es calculado (almacena el coste del sector) o impuesto (0)
|
||||
double margen_sect; ///<Margen de diferencia entre sectores, en tanto por uno
|
||||
|
|
@ -88,6 +89,8 @@ public:
|
|||
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::map<int, Info_aso_nw_elev> iaso_elev; ///<Map con mismos elementos que la nw, con la info de elevación de los nodos
|
||||
|
||||
//*************************************************************************************
|
||||
//Funciones
|
||||
Colv_limp(COlivia *olv);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include <float.h>
|
||||
#include <vector>
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////
|
||||
|
|
@ -232,8 +233,7 @@ enum TiposPlan{
|
|||
typedef struct Info_aso_nw
|
||||
{
|
||||
double velo; //velocidad de la vía, en km/h
|
||||
char *nomb; //nombre de la vía
|
||||
//int refe2; //en replicas, la calle orig
|
||||
char *nomb; //nombre de la vía
|
||||
}Info_aso_nw;
|
||||
/**
|
||||
* Nueva Estructura que contiene la información asociada de las entidades de limpieza (aceras, bordillos, peatonales...)
|
||||
|
|
@ -433,10 +433,17 @@ typedef struct Info_planif
|
|||
*/
|
||||
typedef struct Campos_dbf
|
||||
{
|
||||
/////////////////////////////////////////////
|
||||
char campo_circ[OLV_LIMP_MAX_CAMP];
|
||||
char campo_velo[OLV_LIMP_MAX_CAMP];
|
||||
char campo_name[OLV_LIMP_MAX_CAMP];
|
||||
char campo_fow[OLV_LIMP_MAX_CAMP];
|
||||
//ELEV TOM TOM
|
||||
char campo_conj_to[OLV_LIMP_MAX_CAMP];
|
||||
char campo_conj_from[OLV_LIMP_MAX_CAMP];
|
||||
char campo_elev_to[OLV_LIMP_MAX_CAMP];
|
||||
char campo_elev_from[OLV_LIMP_MAX_CAMP];
|
||||
/////////////////////////////////////////////
|
||||
char campo_obs[OLV_LIMP_MAX_CAMP];
|
||||
char campo_anch[OLV_LIMP_MAX_CAMP];
|
||||
char campo_tipo_ap[OLV_LIMP_MAX_CAMP];
|
||||
|
|
@ -523,4 +530,52 @@ typedef struct th_param_planif
|
|||
}
|
||||
return j;
|
||||
};
|
||||
}th_param_planif;
|
||||
}th_param_planif;
|
||||
/*
|
||||
* Para revisar la elevación de las carreteras y borrar uniones que no debería haber por estar a distinta elevación
|
||||
*/
|
||||
#define INFO_ASO_NW_NO_ELEV 0
|
||||
enum INFO_ASO_NW_NODOS
|
||||
{
|
||||
FROM = 0,
|
||||
TO = 1,
|
||||
N_NODOS = 2
|
||||
};
|
||||
/*
|
||||
* Estructura para almacenar los id de los nodos de cada ent de la nw TO y FROM, y la elevación
|
||||
*/
|
||||
typedef struct Info_aso_nw_elev
|
||||
{
|
||||
short elev[N_NODOS]; //indica elevación
|
||||
//elev[FROM] = 0 o 1
|
||||
//elev[TO]=0 o 1
|
||||
double inod[N_NODOS]; //almacena aquí el id de las conjunciones de la carto FROM y TO
|
||||
bool inod_check[N_NODOS]; //almacena aquí si se ha comprobado ya ese nodo
|
||||
int i_nw; //la ref de la nw
|
||||
}Info_aso_nw_elev;
|
||||
enum INFO_ASO_NW_ELEV
|
||||
{
|
||||
NO_ELEV = 0,
|
||||
ELEV = 1,
|
||||
N_ELEV = 2
|
||||
};
|
||||
/*
|
||||
* Estructura para almacenar nodos que están a distinta elevación
|
||||
*/
|
||||
typedef struct Info_aso_conj_elev_aux
|
||||
{
|
||||
short tofrom;
|
||||
int i_nw;
|
||||
void set(int _i_nw, short _tofrom)
|
||||
{
|
||||
i_nw = _i_nw;
|
||||
tofrom = _tofrom;
|
||||
}
|
||||
}Info_aso_conj_elev_aux;
|
||||
/*
|
||||
* Estructura para almacenar los id de los nodos a los que llegan ent de la nw con distinta elevación
|
||||
*/
|
||||
typedef struct Info_aso_conj_elev
|
||||
{
|
||||
std::vector<Info_aso_conj_elev_aux> conj_nw; //dos maps con las entidades de la nw que están a nivel 0 y a nivel 1 en la misma conjunción
|
||||
}Info_aso_conj_elev;
|
||||
|
|
|
|||
|
|
@ -591,7 +591,16 @@ BOOL Colv_limp_thr::abre_datos()
|
|||
pon_mi_msg("Error al leer info asociada a red navegable: %s", err_str);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//revisa info de elevación
|
||||
if (olv_limp->revisa_elev)
|
||||
{
|
||||
rellena_elev_nw();
|
||||
if (!revisa_elev_nw())
|
||||
{
|
||||
pon_mi_msg("Error al revisar información de elevación");
|
||||
}
|
||||
}
|
||||
////////////////////
|
||||
|
||||
olvlog(LOG_TODO,"olv_limp_t","Finaliza Abrir datos con éxito");
|
||||
|
|
@ -1191,6 +1200,205 @@ fin:
|
|||
return ret;
|
||||
}
|
||||
//*************************************************************************************
|
||||
/**
|
||||
* Lee la info de elevación y la almacena
|
||||
*/
|
||||
void Colv_limp_thr::rellena_elev_nw()
|
||||
{
|
||||
char nfile[MAX_PATH];
|
||||
Cb_file file;
|
||||
Fdbf dbf;
|
||||
int ic_conj_to, ic_conj_from, ic_elev_to, ic_elev_from;
|
||||
int idd, n, num;
|
||||
|
||||
olvlog(LOG_TODO, "olv_limp_t", "Rellenando matriz de info de elevación de carreteras.");
|
||||
|
||||
//lee dbf del shp
|
||||
strcpy_s(nfile, MAX_PATH, olv->paths.path_nw);
|
||||
char bufAux[256];
|
||||
strcpy(nfile, Cdir_manager::cambia_extension_archivo(nfile, bufAux, ".dbf"));
|
||||
if (!file.abre(nfile, 1) || !dbf.lee(&file))
|
||||
{
|
||||
olvlog(LOG_TODO, "olv_limp_t", "Error al abrir %s en rellena_elev", nfile);
|
||||
return;
|
||||
}
|
||||
|
||||
//busca el campo del sentido "ONEWAY" y el de "KPH"
|
||||
ic_conj_to = ic_conj_from = ic_elev_to = ic_elev_from = -1;
|
||||
ic_conj_to = dbf.findCol(olv_limp->camps.campo_conj_to);
|
||||
ic_conj_from = dbf.findCol(olv_limp->camps.campo_conj_from);
|
||||
ic_elev_to = dbf.findCol(olv_limp->camps.campo_elev_to);
|
||||
ic_elev_from = dbf.findCol(olv_limp->camps.campo_elev_from);
|
||||
if (ic_conj_to == -1 || ic_conj_from == -1 || ic_elev_to == -1 || ic_elev_from == -1)
|
||||
{
|
||||
olvlog(LOG_TODO, "olv_limp_t","No encontrado campos para rellenar elevación");
|
||||
return;
|
||||
}
|
||||
|
||||
idd = dbf.leeNexRow();
|
||||
n = 0;
|
||||
|
||||
while (idd == 1)
|
||||
{
|
||||
//inicia
|
||||
olv_limp->iaso_elev[n].inod_check[FROM] = olv_limp->iaso_elev[n].inod_check[TO] = false;
|
||||
olv_limp->iaso_elev[n].i_nw = n;
|
||||
//conj
|
||||
olv_limp->iaso_elev[n].inod[TO]= dbf.getD(ic_conj_to);
|
||||
olv_limp->iaso_elev[n].inod[FROM] = dbf.getD(ic_conj_from);
|
||||
//elev
|
||||
olv_limp->iaso_elev[n].elev[TO] = dbf.getI(ic_elev_to);
|
||||
olv_limp->iaso_elev[n].elev[FROM] = dbf.getI(ic_elev_from);
|
||||
|
||||
n++;
|
||||
idd = dbf.leeNexRow();
|
||||
|
||||
}
|
||||
if (n < olv_limp->n_nw)
|
||||
{
|
||||
sprintf_s(err_str, OLV_MAX_ERR, "Error al leer elemento de la nw %ld en\n%s", n, nfile);
|
||||
}
|
||||
else
|
||||
err_str[0] = 0;
|
||||
olvlog(LOG_TODO, "olv_limp_t", "Finaliza matriz de info de elevación de carreteras. %s",err_str);
|
||||
|
||||
}
|
||||
//*************************************************************************************
|
||||
/**
|
||||
* Revisa que no haya elementos de la nw que comparten nodo pero están a distinta elevación
|
||||
* si encuentra, mueve el nodo de las que están a distinta elevación
|
||||
*/
|
||||
BOOL Colv_limp_thr::revisa_elev_nw()
|
||||
{
|
||||
std::map<int, Info_aso_conj_elev> conj_elev = busca_elev_nw();
|
||||
|
||||
olvlog(LOG_TODO, "olv_limp_t", "Encontrados %ld nodos con elevaciones distintas", conj_elev.size());
|
||||
|
||||
if (conj_elev.size() == 0)
|
||||
return TRUE;
|
||||
|
||||
//ha encontrado nodos con distinta elevación, mueve las coordenadas
|
||||
BOOL resul_mueve = mueve_distint_elev_nw(conj_elev);
|
||||
|
||||
return resul_mueve;
|
||||
}
|
||||
//*************************************************************************************
|
||||
/**
|
||||
* Busca y almacena los elementos que tienen nodo compartido pero a distinta elevación
|
||||
*/
|
||||
std::map<int, Info_aso_conj_elev> Colv_limp_thr::busca_elev_nw()
|
||||
{
|
||||
std::map<int, Info_aso_conj_elev> conj_elev;
|
||||
Info_aso_conj_elev conj_elev_i1;
|
||||
Info_aso_conj_elev_aux conj_elev_nw_i1, conj_elev_nw_i2;
|
||||
std::map<int, Info_aso_nw_elev>::iterator it1;
|
||||
std::map<int, Info_aso_nw_elev>::iterator it2;
|
||||
int i1, i2,elev1,elev2;
|
||||
Info_aso_nw_elev* info1, * info2;
|
||||
BOOL encontrado_distinta_elev = false;
|
||||
|
||||
it1 = olv_limp->iaso_elev.begin();
|
||||
while (it1 != olv_limp->iaso_elev.end())
|
||||
{
|
||||
info1 = &it1->second;
|
||||
for (i1 = 0; i1 < N_NODOS; i1++)
|
||||
{
|
||||
if (info1->inod_check[i1]) //si ya se ha comprobado, pasa
|
||||
continue;
|
||||
it2 = olv_limp->iaso_elev.begin();
|
||||
while (it2 != olv_limp->iaso_elev.end())
|
||||
{
|
||||
info2 = &it2->second;
|
||||
if (info2->i_nw == info1->i_nw)
|
||||
{
|
||||
it2++;
|
||||
continue;//mismo elemento
|
||||
}
|
||||
encontrado_distinta_elev = false;
|
||||
for (i2 = 0; i2 < N_NODOS && !encontrado_distinta_elev; i2++)
|
||||
{
|
||||
if (info2->inod_check[i2])//si ya se ha comprobado, pasa
|
||||
continue;
|
||||
if (info1->inod[i1] == info2->inod[i2])
|
||||
{
|
||||
//comparten nodo, revisa elevación
|
||||
if (info1->elev[i1] != info2->elev[i2])
|
||||
{
|
||||
//distinta elevación
|
||||
encontrado_distinta_elev = true;
|
||||
}
|
||||
}
|
||||
//info2->inod_check[i2] = true;
|
||||
}
|
||||
if (encontrado_distinta_elev)
|
||||
{
|
||||
//añade i2
|
||||
conj_elev_nw_i2.set(info2->i_nw, i2);
|
||||
conj_elev[info1->inod[i1]].conj_nw.push_back(conj_elev_nw_i2);
|
||||
}
|
||||
///////////////////////////////////////
|
||||
it2++;
|
||||
}
|
||||
info1->inod_check[i1] = true;
|
||||
}
|
||||
it1++;
|
||||
}
|
||||
|
||||
return conj_elev;
|
||||
}
|
||||
//*************************************************************************************
|
||||
#define MUEVE_COOR_METROS 5
|
||||
/**
|
||||
* Mueve las coordenadas de una conjunción de las que tienen distinta elevación
|
||||
*/
|
||||
BOOL Colv_limp_thr::mueve_distint_elev_nw(std::map<int, Info_aso_conj_elev> conj_elev)
|
||||
{
|
||||
int ELEV_MUEVE = ELEV; //mueve los que están a elev, y deja igual los que están a no_elev
|
||||
std::map<int, Info_aso_conj_elev>::iterator it_conj = conj_elev.begin();
|
||||
CartoBaseInfoEntity ient;
|
||||
std::vector<Info_aso_conj_elev_aux>::iterator it_nw;
|
||||
int ipt, nptos;
|
||||
double pto_aux[3];
|
||||
|
||||
try
|
||||
{
|
||||
while (it_conj != conj_elev.end())
|
||||
{
|
||||
//coge las nw que están a elev distinta de 0 y les mueve su coordenada en común
|
||||
it_nw = it_conj->second.conj_nw.begin();
|
||||
while (it_nw != it_conj->second.conj_nw.end())
|
||||
{
|
||||
ient = olv_limp->carto.getEntity(it_nw->i_nw + olv_limp->n_amb); //+n_amb porque el nw empieza a continuación de los ámbitos
|
||||
if (it_nw->tofrom == FROM)
|
||||
{
|
||||
ipt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
nptos = ient.getNumberPtos();
|
||||
ipt = nptos - 1;
|
||||
}
|
||||
//////////////////////////////////////////////////////
|
||||
//coge el pto original
|
||||
memcpy(&pto_aux, ient.getPto(ipt), 3 * sizeof(double));
|
||||
//lo mueve
|
||||
pto_aux[0] += MUEVE_COOR_METROS;
|
||||
pto_aux[1] += MUEVE_COOR_METROS;
|
||||
//lo sobreescribe
|
||||
memcpy(ient.getPto(ipt), &pto_aux, 3 * sizeof(double));
|
||||
//////////////////////////////////////////////////////
|
||||
it_nw++;
|
||||
}
|
||||
it_conj++;
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//*************************************************************************************
|
||||
/**
|
||||
* Replica los ámbitos cuando son tipo peatonal, añadiendo otro lineal igual que tendrá solo coste
|
||||
* de desplazamiento, no de tratamiento, más los segmentos que los unen, de coste 0
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ struct th_param_planif;
|
|||
struct Djkt_ang_ady;
|
||||
struct HeadCostConj;
|
||||
struct HeadCostAng;
|
||||
struct Info_aso_conj_elev;
|
||||
/**
|
||||
* Estructura de parámetros de comunicación con el thread de cálculo de limpieza
|
||||
*/
|
||||
|
|
@ -143,6 +144,10 @@ public:
|
|||
virtual BOOL rellena_datos();
|
||||
BOOL rellena_info_nw();
|
||||
BOOL rellena_info_amb();
|
||||
void rellena_elev_nw();
|
||||
BOOL revisa_elev_nw();
|
||||
std::map<int, Info_aso_conj_elev> busca_elev_nw();
|
||||
BOOL mueve_distint_elev_nw(std::map<int, Info_aso_conj_elev> conj_elev);
|
||||
BOOL replica_peat();
|
||||
void mejora_barr_mix();
|
||||
void mejora_barr_mix_sub(int ithr);
|
||||
|
|
|
|||
|
|
@ -13,14 +13,13 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LocalDebuggerWorkingDirectory>..\bin\$(IntDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>/tipo:0 /ip:192.168.2.61 /port:19995 /tout:20 /path_temp:D:\Proyectos\Olivia\Instal2.0\temp\ /path_cfgeo:D:\Proyectos\Olivia\Instal2.0\cfg.ini /debug</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommand>C:\Desa\v2017\Olivia\bin\$(IntDir)$(TargetFileName)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>/tipo:0 /ip:192.168.2.61 /port:19995 /tout:20 /path_temp:D:\Proyectos\Olivia\Instal3.0\temp\ /path_cfgeo: /debug</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LocalDebuggerWorkingDirectory>..\bin\$(IntDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommandArguments>
|
||||
</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>/tipo:0 /ip:192.168.2.61 /port:19995 /tout:20 /path_temp:D:\Proyectos\Olivia\Instal3.0\temp\ /path_cfgeo: /debug</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Loading…
Reference in New Issue