Index: src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs =================================================================== diff -u -r778 -r859 --- src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 778) +++ src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 859) @@ -9,6 +9,7 @@ using Deltares.Geotechnics.ConePenetrationTest; using Deltares.Geotechnics.Forms; using Deltares.Standard; +using Deltares.Standard.EventPublisher; using Deltares.Standard.Forms; using Deltares.Standard.Forms.DExpress; using Deltares.Standard.Forms.Maps; @@ -412,6 +413,34 @@ // empty project produces 0 errors if validated Assert.AreEqual(0, results.ToList().Count); } + + [Test] + public void DoesSaveSelectedDataWorkForSegmentWIthBoringAndNoSoilPRofile2D() + { + // first segment of project.soil holds a 2d profile with all layers having no soils and 1 boring with 3 different soils + var orgProject = DSoilModelIO.OpenSoilDatabase(Path.Combine(GetTestFilesPath(), "Project.soil")); + plugin.Assign(orgProject); + Assert.AreEqual(577, plugin.Project.Soils.Soils.Count); + Assert.AreEqual(0, plugin.Project.SoilProfiles1D.Count); + Assert.AreEqual(0, plugin.Project.CPTs.Count); + Assert.AreEqual(26, plugin.Project.Borings.Count); + Assert.AreEqual(0, plugin.Project.SurfaceLines.Count); + Assert.AreEqual(36, plugin.Project.SoilProfiles2D.Count); + Assert.AreEqual(27, plugin.Project.SoilSegments.Count); + // make sure first segment is selected object + DataEventPublisher.SelectionChanged(plugin.Project.SoilSegments[0]); + // save the selected data to the new project + var savedProject = plugin.PrepareSaveAsProject(); + + // check saved dat for proper amount of data + Assert.AreEqual(3, savedProject.Soils.Soils.Count); + Assert.AreEqual(0, savedProject.SoilProfiles1D.Count); + Assert.AreEqual(0, savedProject.CPTs.Count); + Assert.AreEqual(1, savedProject.Borings.Count); + Assert.AreEqual(0, savedProject.SurfaceLines.Count); + Assert.AreEqual(1, savedProject.SoilProfiles2D.Count); + Assert.AreEqual(1, savedProject.SoilSegments.Count); + } private DSoilModelProject NewProject(DSoilModelPlugin p) { Index: src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs =================================================================== diff -u -r848 -r859 --- src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 848) +++ src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 859) @@ -1372,66 +1372,8 @@ { if (selectedObjects.Count > 0) { - // Copy selected items to a new project - var saveAsProject = new DSoilModelProject(); + var saveAsProject = PrepareSaveAsProject(); - foreach (var item in selectedObjects) - { - var soil = item as Soil; - if (soil != null) - { - saveAsProject.Soils.Soils.Add(soil); - continue; - } - var soilProfile1D = item as SoilProfile1D; - if (soilProfile1D != null) - { - saveAsProject.SoilProfiles1D.Add(soilProfile1D); - continue; - } - var soilProfile2D = item as SoilProfile2D; - if (soilProfile2D != null) - { - saveAsProject.SoilProfiles2D.Add(soilProfile2D); - continue; - } - var soilSegment = item as SoilSegment; - if (soilSegment != null) - { - saveAsProject.SoilSegments.Add(soilSegment); - continue; - } - var cpt = item as ConePenetrationTestData; - if (cpt != null) - { - saveAsProject.CPTs.Add(cpt); - continue; - } - var boring = item as Boring; - if (boring != null) - { - saveAsProject.Borings.Add(boring); - continue; - } - var surfaceLine = item as SurfaceLine2; - if (surfaceLine != null) - { - saveAsProject.SurfaceLines.Add(surfaceLine); - } - } - - // update lists with referenced objects (ie soils used in the selected soilprofile) - saveAsProject.UpdateLists(); - - // items referencing the selected subset - foreach (var mpl in project.SpecificMechanismPointLocations) - { - if (saveAsProject.SoilProfiles2D.Contains(mpl.SoilProfile2D)) - { - saveAsProject.SpecificMechanismPointLocations.Add(mpl); - } - } - var saveDialog = new SaveFileDialog { Filter = "Soilbase files (*.soil)|*.soil" @@ -1444,6 +1386,70 @@ } } + public DSoilModelProject PrepareSaveAsProject() + { + // Copy selected items to a new project + var saveAsProject = new DSoilModelProject(); + + foreach (var item in selectedObjects) + { + var soil = item as Soil; + if (soil != null) + { + saveAsProject.Soils.Soils.Add(soil); + continue; + } + var soilProfile1D = item as SoilProfile1D; + if (soilProfile1D != null) + { + saveAsProject.SoilProfiles1D.Add(soilProfile1D); + continue; + } + var soilProfile2D = item as SoilProfile2D; + if (soilProfile2D != null) + { + saveAsProject.SoilProfiles2D.Add(soilProfile2D); + continue; + } + var soilSegment = item as SoilSegment; + if (soilSegment != null) + { + saveAsProject.SoilSegments.Add(soilSegment); + continue; + } + var cpt = item as ConePenetrationTestData; + if (cpt != null) + { + saveAsProject.CPTs.Add(cpt); + continue; + } + var boring = item as Boring; + if (boring != null) + { + saveAsProject.Borings.Add(boring); + continue; + } + var surfaceLine = item as SurfaceLine2; + if (surfaceLine != null) + { + saveAsProject.SurfaceLines.Add(surfaceLine); + } + } + + // update lists with referenced objects (ie soils used in the selected soilprofile) + saveAsProject.UpdateLists(); + + // items referencing the selected subset + foreach (var mpl in project.SpecificMechanismPointLocations) + { + if (saveAsProject.SoilProfiles2D.Contains(mpl.SoilProfile2D)) + { + saveAsProject.SpecificMechanismPointLocations.Add(mpl); + } + } + return saveAsProject; + } + private void SoilProfile1DImport() { int countWarnings = LogManager.Messages.Count(m => m.MessageType > LogMessageType.Info);