diff --git a/Helper/HelperGdb.cs b/Helper/HelperGdb.cs index daef88c..24bceda 100644 --- a/Helper/HelperGdb.cs +++ b/Helper/HelperGdb.cs @@ -67,6 +67,7 @@ namespace OliviaAddInPro.Helper OpenFtrClassPoint = 2, OpenFtrClassPolygon = 4, OpenGdb = 8, + OpenDataset = 16 } private static void ReiniciaOutStr() @@ -332,6 +333,11 @@ namespace OliviaAddInPro.Helper filtro.AddFilter(BrowseProjectFilter.GetFilter("esri_browseDialogFilters_geodatabases")); titulo = "Abrir Geodatabase"; } + if ((tipo & TiposOpenFileDlg.OpenDataset) == TiposOpenFileDlg.OpenDataset) + { + filtro.AddFilter(BrowseProjectFilter.GetFilter("esri_browseDialogFilters_featureDatasets_all")); + titulo = "Abrir Dataset"; + } if (tipo == 0) { filtro.AddFilter(BrowseProjectFilter.GetFilter("")); @@ -2024,6 +2030,32 @@ namespace OliviaAddInPro.Helper return null; } + /** + * Comprueva si existe un Dataset, con ruta completa + */ + public static Task CheckDataset(string datasetName) + { + return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func)(() => + { + if (string.IsNullOrEmpty(datasetName)) + return false; + try + { + Geodatabase gdb = GetGdbSync(datasetName); + if (gdb == null) + return false; + var datname = new System.IO.DirectoryInfo(datasetName).Name; + FeatureDataset ftdst = gdb.OpenDataset(datname); + ftdst.Dispose(); + return true; + } + catch + { + return false; + } + })); + } + /** * Comprueva si una GDB contiene un Dataset */ @@ -2108,8 +2140,7 @@ namespace OliviaAddInPro.Helper { //existe ese nombre, pero con otra ref espacial //crea un nuevo dataset y avisa - datasetName = string.Format("{0}_{1}",datasetName,idat); - datasetNameOut = datasetName; + datasetName = string.Format("{0}_{1}",datasetName,idat); idat++; } else//r==1 @@ -2123,6 +2154,7 @@ namespace OliviaAddInPro.Helper else r = 3; //no existe, lo crea con ese nombre }; + datasetNameOut = datasetName; if (r!=3) return res; //no existe, lo crea diff --git a/Helper/HelperGlobal.cs b/Helper/HelperGlobal.cs index 465adcc..733d301 100644 --- a/Helper/HelperGlobal.cs +++ b/Helper/HelperGlobal.cs @@ -97,13 +97,14 @@ namespace OliviaAddInPro.Helper _ProgrSrc.SetProgress(0); _ProgrSrc.SetProceso(stat); } - public void IncMessage(uint inc, string mes) + public void IncMessage(uint inc, string mes=null) { var prog = _ProgrSrc.GetProgress() + inc; if (prog > 100) prog = 100; _ProgrSrc.SetProgress(prog); - _ProgrSrc.SetEstado(mes); + if(!string.IsNullOrEmpty(mes)) + _ProgrSrc.SetEstado(mes); } } diff --git a/Model/Limpieza.cs b/Model/Limpieza.cs index 33fcd62..332f799 100644 --- a/Model/Limpieza.cs +++ b/Model/Limpieza.cs @@ -61,17 +61,6 @@ namespace OliviaAddInPro.Model public override Respuesta Ejecuta(ModosEjec modo) { - - ///////////////////////////// - ///// - ///DEBUG - /// - //Respuesta res1 = new Respuesta { Value = TiposEjecucion.FinEjecOk }; - //HelperGdb.OpenLayer(@"C:\Users\Elena\Documents\ArcGIS\Projects\MyProject3\MyProject3.gdb\Barrido_man\BarMan_AceM_AceNM_20220529_134336", "SECTOR", true); - //Serv.ActualizaSecto(@"D:\Proyectos\Olivia\Instal2.0\data\data_T00_A0405_20220628_214902.shp", @"C:\\Users\\Elena\\Documents\\ArcGIS\\Projects\\MyProject3\\MyProject3.gdb\\Barrido_man\\BarMan_AceM_AceNM_20220628_214613"); - //return res1; - - ////////////////// ///////////////////////////// Respuesta res = new Respuesta { Value=false}; @@ -142,7 +131,10 @@ namespace OliviaAddInPro.Model { auxili = shapefile.Substring(aux, auxl); ambitos = ambitos + auxili; + + aux = indice; //para coger el timestamp } + //concatena el timestamp ambitos = ambitos + shapefile.Substring(aux); diff --git a/Model/Limpieza.cs.bak b/Model/Limpieza.cs.bak deleted file mode 100644 index c86c163..0000000 --- a/Model/Limpieza.cs.bak +++ /dev/null @@ -1,78 +0,0 @@ -using ArcGIS.Core.Geometry; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using OliviaAddInPro.Helper; -using System.Collections.ObjectModel; -using ArcGIS.Core.CIM; -using ArcGIS.Core.Data; -using OliviaAddInPro.Services; -using static OliviaAddInPro.Model.ComunDef; -using ArcGIS.Desktop.Framework.Contracts; -using ArcGIS.Desktop.Framework.Threading.Tasks; -using OliviaAddInPro.Services.LanzaSrv; - -namespace OliviaAddInPro.Model -{ - public class Limpieza : TratamientoComun - { - //********************************************** - //Se recogen en PaneLimpiezaSub1 - /** - * Ámbitos de trabajo elegidos - */ - public bool[] AmbitosSel { get; set; } = new bool[(int)LimpiezaDef.AmbitsTra.AmbN]; - /** - * Indica si respeta el sentido de circulación o no - */ - public bool RespCirc { get; set; } = false; - /** - * Tipo de unidades del tiempo de tto - */ - public int UdsTTto { get; set; } = (int)GeneralDef.OlvTiposTto.OlvTipTtoNoDef; - /** - * Instancia para las funciones de exportación y demás - */ - - public LimpiezaServ Serv { get; set; } = null; - public LanzaLimpSrv LanzaSrv { get; set; } = null; - - /** - * Ancho de vía, en metros - */ - public double AnchoVia { get; set; } = LimpiezaDef.Parametros.ancho_via; - public Limpieza() - { - Serv = new LimpiezaServ(this); - LanzaSrv = new LanzaLimpSrv(); -<<<<<<< HEAD -======= - ProceSrv = new ProcesoEjecServ(); - ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog.GetViewModel()); ->>>>>>> Gerardo/MarchandoUnaDe - } - - public override Respuesta Ejecuta(ModosEjec modo) - { - Respuesta res = new Respuesta { Value=false}; - Respuesta res2 = new Respuesta (){ Value = TiposEjecucion.FinEjecNOk }; - res = Serv.Ejecuta(modo); - if (res.Value) - { - res=LanzaSrv.ejec(this, modo, TipoTtoStr); - if (res.Value) - { - ProceSrv.ConfigConex(); - res2 = ProceSrv.start(LanzaSrv.str_cfg, ProgrSrc._ProgrSrc); - } - } - if (res.HasError) - { - res2.Error.AddRange(res.Error); - } - return res2; - } - } -} diff --git a/Model/LimpiezaDef.cs b/Model/LimpiezaDef.cs index d647f94..cf71d57 100644 --- a/Model/LimpiezaDef.cs +++ b/Model/LimpiezaDef.cs @@ -93,6 +93,8 @@ namespace OliviaAddInPro.Model public static int t_descansom; // resp = coge_ip(); if (!resp.Value && resp.HasError) @@ -136,6 +130,14 @@ namespace OliviaAddInPro.Model { HelperGlobal.ponMsg(resp.Error.First()); } + + IniDefault(); + LimpiezaDef.iniciaLimpDef(); + RecogidaDef.iniciaRecoDef(); + progrDialog = new MarchandoUnaDe(); + limp = new Limpieza(); + reco = new Recogida(); + SpatRef = ArcGIS.Core.Geometry.SpatialReferenceBuilder.CreateSpatialReference(GeneralDef.SpatRefDef); } public static bool IsLimp() @@ -288,9 +290,10 @@ namespace OliviaAddInPro.Model { if (string.IsNullOrEmpty(path)) return false; - - var dir = Path.GetDirectoryName(path); - if (string.IsNullOrEmpty(dir) || !Directory.Exists(path)) + if(Directory.Exists(path)) + return true; + //no existe directorio, mira el anterior + if (!Directory.Exists(Path.GetPathRoot(path))) return false; return true; @@ -417,6 +420,7 @@ namespace OliviaAddInPro.Model c.PathCartela = c.PathCartela; Paths.PathGdbImport = c.Path_Gdb_Import; + Paths.PathDatasetImport = c.Path_Dataset_Import; Paths.PathGuardCsv = c.Path_Guarda_Csv; HelperGlobal.create_folder(Paths.DirData); @@ -488,6 +492,8 @@ namespace OliviaAddInPro.Model LimpiezaDef.Parametros.t_descansom = c.t_descanso_min; LimpiezaDef.Parametros.t_descanso = c.t_descanso; LimpiezaDef.Parametros.h_inicio = c.hora_inicio; + LimpiezaDef.Parametros.reduc_traf = c.reduc_traf; + LimpiezaDef.Parametros.igno_ais = c.Igno_ais; LimpiezaDef.Parametros.ancho_viaM = c.ancho_via_max; LimpiezaDef.Parametros.ancho_viam = c.ancho_via_min; LimpiezaDef.Parametros.ancho_via = c.ancho_via; @@ -529,12 +535,12 @@ namespace OliviaAddInPro.Model LimpiezaDef.Parametros.vdespLS = c.v_desp_LS; LimpiezaDef.Parametros.umbral_reco = 80; - LimpiezaDef.OtrosParam.giro_max = c.Giro_max_vehiculo; LimpiezaDef.OtrosParam.anch_peat = c.Ancho_peat_def; LimpiezaDef.OtrosParam.anch_ace = c.Ancho_acera_def; LimpiezaDef.OtrosParam.anch_aplin = c.Ancho_ap_lin_def; LimpiezaDef.OtrosParam.anch_apbat = c.Ancho_ap_bat_def; LimpiezaDef.OtrosParam.anch_bordlib = c.Ancho_bord_lib_def; + LimpiezaDef.OtrosParam.giro_max = c.Giro_max_vehiculo; LimpiezaDef.OtrosParam.desv_max = c.Desv_max; LimpiezaDef.OtrosParam.desv_max_abs = c.Desv_max_abs; diff --git a/Model/Recogida.cs b/Model/Recogida.cs index a34fe8b..20d2e74 100644 --- a/Model/Recogida.cs +++ b/Model/Recogida.cs @@ -150,6 +150,8 @@ namespace OliviaAddInPro.Model { auxili = shapefile.Substring(aux, auxl); carga = carga + auxili; + + aux = indice; //para coger el timestamp } //concatena el timestamp diff --git a/Model/TratamientoComun.cs b/Model/TratamientoComun.cs index 55377b5..4c3b784 100644 --- a/Model/TratamientoComun.cs +++ b/Model/TratamientoComun.cs @@ -103,7 +103,7 @@ namespace OliviaAddInPro.Model /** * Porcentaje de tráfico que se estima, ya que si no los vehículos irían siempre a la velocida máxima permitida por la vía */ - public int Trafico { get; set; } = 80; + public int Trafico { get; set; } = LimpiezaDef.Parametros.reduc_traf; /** * Número de puntos de control */ @@ -115,7 +115,7 @@ namespace OliviaAddInPro.Model /** * Ignorar o noelementos aislados */ - public bool IgnoAis { get; set; } = true; + public bool IgnoAis { get; set; } = LimpiezaDef.Parametros.igno_ais; /** * Almacena la consulta para exportar los ámbitos */ diff --git a/Model/contract/IprocessManager.cs b/Model/contract/IprocessManager.cs index 553114e..6fb543b 100644 --- a/Model/contract/IprocessManager.cs +++ b/Model/contract/IprocessManager.cs @@ -16,5 +16,7 @@ namespace OliviaAddInPro.Model.contract bool Getcancelled(); void Setcancelled(); void Inicia(); + void PonBarColorVerde(); + void PonBarColorRojo(); } } diff --git a/OliviaAddInPro.csproj b/OliviaAddInPro.csproj index 7897709..91ffcd5 100644 --- a/OliviaAddInPro.csproj +++ b/OliviaAddInPro.csproj @@ -176,6 +176,9 @@ PropertyGridFilePickerFolder.xaml + + PropertyGridFilePickerDataset.xaml + PropertyGridFilePickerLine.xaml @@ -257,6 +260,10 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + MSBuild:Compile Designer diff --git a/Services/ConfigServ.cs b/Services/ConfigServ.cs index e7f3b61..e6c9df8 100644 --- a/Services/ConfigServ.cs +++ b/Services/ConfigServ.cs @@ -44,6 +44,12 @@ namespace OliviaAddInPro.Services if(res==null) res = Default(); + //pilla la IP + if(res.Ip.CompareTo("0.0.0.0")==0) + { + //coge la IP local + res.Ip = OliviaGlob.Conexion.Ip; + } res.PathGdbGen = pon_path_absoluto(res.PathGdbGen, res.path_work); res.PathSimbVSM = pon_path_absoluto(res.PathSimbVSM, res.path_work); @@ -157,8 +163,10 @@ namespace OliviaAddInPro.Services c.consulta_sector = "SECTOR"; c.consulta_secuen = "SECUENCIA"; + c.Igno_ais = true; + //c.red_carreteras = @"%dir_work%Datos\gdbs\TomTom_Q4_2015.gdb"; - c.puerto = 19995; + c.Puerto = 19995; c.buffer_export = 1000; c.path_exe=@"%dir_work%bin\OliviaTasks.exe"; @@ -168,6 +176,7 @@ namespace OliviaAddInPro.Services c.Path_Eje_via = ""; c.Path_Gdb_Import = ""; c.Path_Guarda_Csv = ""; + c.Path_Dataset_Import = ""; c.path_cfg_aux = @"%dir_work%cfg.ini"; /*c.eje_via = "TomTom_Q4_2015___nw"; c.municipios = "TomTom_Q4_2015___a8";*/ @@ -242,6 +251,7 @@ namespace OliviaAddInPro.Services c.t_carga_desc=40; c.t_descanso=30; c.hora_inicio=420; //ES UNA HORA, SON LOS MINUTOS DESDE LAS 00, PERO TIENE QUE APARECER CON FORMATO DE TIME 07:30, POR EJEMPLO + c.reduc_traf = 80; c.ancho_via=2; c.t_tratamiento_BarMan=2900; c.t_tratamiento_BarManMant=2900; @@ -280,15 +290,6 @@ namespace OliviaAddInPro.Services c.v_desp_LZI=0; c.v_desp_LPip=0; c.v_desp_LS=0; - - c.Giro_max_vehiculo=175.0000000; - c.Ancho_peat_def=6.0000000; - c.Ancho_acera_def=1.5000000; - c.Ancho_ap_lin_def=2.0000000; - c.Ancho_ap_bat_def=4.0000000; - c.Ancho_bord_lib_def=1.5000000; - c.Desv_max=0.1500000; - c.Desv_max_abs=1800.0000000; //Reco c.id= "OBJECTID"; @@ -371,6 +372,16 @@ namespace OliviaAddInPro.Services c.atr_FT="FT"; c.atr_N = "N"; c.atr_pedes="14"; + + c.Ancho_peat_def = 6.0000000; + c.Ancho_acera_def = 1.5000000; + c.Ancho_ap_lin_def = 2.0000000; + c.Ancho_ap_bat_def = 4.0000000; + c.Ancho_bord_lib_def = 1.5000000; + c.Giro_max_vehiculo = 175.0000000; + c.Desv_max = 0.1500000; + c.Desv_max_abs = 1800.0000000; + return c; } } diff --git a/Services/EjecServ.cs b/Services/EjecServ.cs index 0297759..0ace66e 100644 --- a/Services/EjecServ.cs +++ b/Services/EjecServ.cs @@ -56,6 +56,8 @@ namespace OliviaAddInPro.Services { ErrStr = string.Empty; + OliviaGlob.Paths.PathData = string.Empty; + OliviaGlob.Paths.PathNW = string.Empty; if (com.ProgrSrc._ProgrSrc.Getcancelled()) { ErrStr = Resource1.String_cancel_progreso; @@ -156,21 +158,21 @@ namespace OliviaAddInPro.Services com.NombreShpExport = PREF_NAME_EXPORT + com.NombreShpExp_PrefTto + "_" + fechaHora + EXT_SHP; com.ProgrSrc.IncMessage(10, "Exportando ámbitos de trabajo");//10% - + + //Guarda el nombre + OliviaGlob.Paths.PathData = OliviaGlob.Paths.DirData + com.NombreShpExport; //exporta los datos de entrada if (!HelperGdb.ExportShp2(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, com.ProgrSrc._ProgrSrc, null, 50)) { ErrStr = "Error al exportar los ámbitos: " + HelperGdb.OutStr; return false; } - + if (com.ProgrSrc._ProgrSrc.Getcancelled()) { ErrStr = Resource1.String_cancel_progreso; return false; } - //Guarda el nombre - OliviaGlob.Paths.PathData = OliviaGlob.Paths.DirData + com.NombreShpExport; /////////////////////////////////////////////////////////////////////// //ahora si está en modo planificación y la capa no tiene esa columna, exporta la sectorización @@ -332,14 +334,14 @@ namespace OliviaAddInPro.Services //Prepara nombre de exportación com.NombreShpExportNw = PREF_NAME_EXPORT_NW + fechaHora + EXT_SHP; + //guarda los nombres del shape + OliviaGlob.Paths.PathNW = OliviaGlob.Paths.DirData + com.NombreShpExportNw; //exporta los datos de entrada if (!HelperGdb.ExportShp2(OliviaGlob.Paths.PathGdbNw, filtroEspacial, com.NombreShpExportNw, OliviaGlob.Paths.DirData, com.ProgrSrc._ProgrSrc, spatRefData,100)) { ErrStr = "Error al exportar la red navegable: " + HelperGdb.OutStr; return false; - } - //guarda los nombres del shape - OliviaGlob.Paths.PathNW = OliviaGlob.Paths.DirData + com.NombreShpExportNw; + } if (com.ProgrSrc._ProgrSrc.Getcancelled()) { ErrStr = Resource1.String_cancel_progreso; @@ -596,16 +598,16 @@ namespace OliviaAddInPro.Services */ public bool CompruebaPlanif() { + //si ha importado seguro que las tiene + if (OliviaGlob.IsConfig2() && !string.IsNullOrEmpty(com.CapaPlanif)) + return true; + //comprueba capa if (ComprCamposPlanif(com.CapaElems)) { com.CapaPlanif = string.Empty;//reinicia para que coja la secto de la capa original return true; - } - - //si ha importado seguro que las tiene - if (OliviaGlob.IsConfig2() && !string.IsNullOrEmpty(com.CapaPlanif)) - return true; + } return false; } @@ -615,12 +617,14 @@ namespace OliviaAddInPro.Services */ public Respuesta ImportSecto(string GdbFileName) { + com.ProgrSrc.IncMessage(10,"Importando capas"); var res = Import(GdbFileName, 0); if (res.HasError || string.IsNullOrEmpty(res.Value)) { return res; - } + } ////////////////////////////////////////////////// + com.ProgrSrc.IncMessage(50, "Pintando capas con valores únicos"); //abre las capas, pintando los sectores bool mal = false; string path_import = res.Value; @@ -642,6 +646,7 @@ namespace OliviaAddInPro.Services */ public Respuesta ImportPlanif(string GdbFileName) { + com.ProgrSrc.IncMessage(10, "Importando capas"); var res = Import(GdbFileName, 1); if (res.HasError || string.IsNullOrEmpty(res.Value)) { @@ -649,6 +654,7 @@ namespace OliviaAddInPro.Services return res; } ////////////////////////////////////////////////// + com.ProgrSrc.IncMessage(30, "Pintando capas con valores únicos"); //abre las capas, pintando los sectores string path_import = res.Value; int NOPEN = 6; @@ -678,6 +684,7 @@ namespace OliviaAddInPro.Services var resb = new Respuesta(); for(i =0;i TiposActu.ActuFinOk) - cps.SetEstado("Calculando..."); - if ((actu == TiposActu.ActuPermu) && !cancela) - cps.SetEstado("Calculando Permutaciones..."); - if ((actu == TiposActu.ActuMal) || (actu == TiposActu.ActuFinNOk)) - col = 2; + cps.PonBarColorRojo(); else - col = 1; - + cps.PonBarColorVerde(); - if (actu > TiposActu.ActuFinOk) - button_canc.Text = "Finalizar"; + /*if (actu > TiposActu.ActuFinOk) + cps.SetEstado("Calculando..."); if ((actu == TiposActu.ActuPermu) && !cancela) - button_canc.Text = "Parar permu.";*/ + cps.SetEstado("Calculando Permutaciones..."); + + if (actu > TiposActu.ActuFinOk) + button_canc.Text = "Finalizar"; + if ((actu == TiposActu.ActuPermu) && !cancela) + button_canc.Text = "Parar permu.";*/ } /* * Para poder actualizar la barra de progreso hay que llamar a invoke diff --git a/View/Comun/MarchandoUnaDe.xaml b/View/Comun/MarchandoUnaDe.xaml index 801208c..6eb3e2d 100644 --- a/View/Comun/MarchandoUnaDe.xaml +++ b/View/Comun/MarchandoUnaDe.xaml @@ -8,17 +8,17 @@ mc:Ignorable="d" Title="Olivia" Height="227" Width="449" d:DataContext="{Binding Path=ui.MarchandoUnaDeViewModel}" - ResizeMode="NoResize"> - + WindowStartupLocation="CenterOwner" Icon="../OliviaIconPro.ico" + ResizeMode="NoResize">