diff --git a/FieldVisualizer/Entities/Values/Primitives/ITrianglePrimitive.cs b/FieldVisualizer/Entities/Values/Primitives/ITrianglePrimitive.cs index f800c68..9310dd6 100644 --- a/FieldVisualizer/Entities/Values/Primitives/ITrianglePrimitive.cs +++ b/FieldVisualizer/Entities/Values/Primitives/ITrianglePrimitive.cs @@ -12,5 +12,8 @@ namespace FieldVisualizer.Entities.Values.Primitives IPoint2D Point1 { get; set; } IPoint2D Point2 { get; set; } IPoint2D Point3 { get; set; } + double ValuePoint1 { get; set; } + double ValuePoint2 { get; set; } + double ValuePoint3 { get; set; } } } diff --git a/FieldVisualizer/Entities/Values/Primitives/TrianglePrimitive.cs b/FieldVisualizer/Entities/Values/Primitives/TrianglePrimitive.cs index b6be9c7..a59baa3 100644 --- a/FieldVisualizer/Entities/Values/Primitives/TrianglePrimitive.cs +++ b/FieldVisualizer/Entities/Values/Primitives/TrianglePrimitive.cs @@ -23,5 +23,9 @@ namespace FieldVisualizer.Entities.Values.Primitives (Point2.X - Point1.X) * (Point3.Y - Point1.Y) - (Point3.X - Point1.X) * (Point2.Y - Point1.Y) ); + + public double ValuePoint1 { get; set; } + public double ValuePoint2 { get; set; } + public double ValuePoint3 { get; set; } } } diff --git a/StructureHelper/Documentation/Manuals/Руководство пользователя.docx b/StructureHelper/Documentation/Manuals/Руководство пользователя.docx index 80bbffc..c83778f 100644 Binary files a/StructureHelper/Documentation/Manuals/Руководство пользователя.docx and b/StructureHelper/Documentation/Manuals/Руководство пользователя.docx differ diff --git a/StructureHelper/Infrastructure/HelixViewModelBase.cs b/StructureHelper/Infrastructure/HelixViewModelBase.cs new file mode 100644 index 0000000..fbbfb4a --- /dev/null +++ b/StructureHelper/Infrastructure/HelixViewModelBase.cs @@ -0,0 +1,126 @@ +using HelixToolkit.SharpDX; +using HelixToolkit.Wpf.SharpDX; +using System; +using System.Collections.Generic; +using System.IO; +using System.Numerics; +using System.Text; +using System.Windows.Media; +using System.Windows.Media.Media3D; + +namespace StructureHelper.Infrastructure +{ + public class HelixViewModelBase : ViewModelBase + { + private string subTitle = string.Empty; + private string title = string.Empty; + private DefaultEffectsManager effectsManager; + private HelixToolkit.Wpf.SharpDX.Camera camera; + private Color ambientLightColor; + private Viewport3DX viewPort3D; + private Vector3D directionalLightDirection; + private Stream? backgroundTexture; + + public HelixToolkit.Wpf.SharpDX.Camera Camera + { + get => camera; + set + { + camera = value; + OnPropertyChanged(nameof(Camera)); + } + } + public System.Windows.Media.Color AmbientLightColor + { + get => ambientLightColor; + set + { + ambientLightColor = value; + OnPropertyChanged(nameof(AmbientLightColor)); + } + } + public System.Windows.Media.Color DirectionalLightColor { get; set; } + public Vector3D DirectionalLightDirection + { + get => directionalLightDirection; + set + { + directionalLightDirection = value; + OnPropertyChanged(nameof(DirectionalLightDirection)); + } + } + public Stream? BackgroundTexture + { + get => backgroundTexture; + set + { + backgroundTexture = value; + OnPropertyChanged(nameof(BackgroundTexture)); + } + } + + + public Viewport3DX Viewport3D + { + get => viewPort3D; + set + { + viewPort3D = value; + OnPropertyChanged(nameof(Viewport3DX)); + } + } + public DefaultEffectsManager EffectsManager + { + get => effectsManager; + set + { + effectsManager = value; + OnPropertyChanged(nameof(EffectsManager)); + } + } + public string Title + { + get => title; + set + { + title = value; + OnPropertyChanged(nameof(Title)); + } + } + public string SubTitle + { + get => subTitle; + set + { + subTitle = value; + OnPropertyChanged(nameof(SubTitle)); + } + } + + public HelixViewModelBase() + { + EffectsManager = new DefaultEffectsManager(); + + Camera = new HelixToolkit.Wpf.SharpDX.OrthographicCamera + { + Position = new Point3D(3, 3, 5), + LookDirection = new Vector3D(-3, -3, -5), + UpDirection = new Vector3D(0, 1, 0), + FarPlaneDistance = 50000 + }; + + // setup lighting + AmbientLightColor = Colors.DimGray; + DirectionalLightColor = Colors.White; + DirectionalLightDirection = new Vector3D(-2, -5, -2); + + BackgroundTexture = + BitmapExtensions.CreateLinearGradientBitmapStream(EffectsManager, 128, 128, Direct2DImageFormat.Bmp, + new Vector2(0, 0), new Vector2(0, 128), new SharpDX.Direct2D1.GradientStop[] + { + new(){ Color = Colors.White.ToRawColor4(), Position = 0f }, + new(){ Color = Colors.DarkGray.ToRawColor4(), Position = 1f } + }); + } + } +} diff --git a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml index dac8ef4..1b010c9 100644 --- a/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml +++ b/StructureHelper/Infrastructure/UI/Resources/ButtonStyles.xaml @@ -508,6 +508,17 @@ + + + + + + + + + + + diff --git a/StructureHelper/Services/Reports/CalculationReports/IIsoField3DReport.cs b/StructureHelper/Services/Reports/CalculationReports/IIsoField3DReport.cs new file mode 100644 index 0000000..8ed4a89 --- /dev/null +++ b/StructureHelper/Services/Reports/CalculationReports/IIsoField3DReport.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelper.Services.Reports.CalculationReports +{ + public interface IIsoField3DReport : IReport + { + } +} diff --git a/StructureHelper/Services/Reports/CalculationReports/IsoField3DReport.cs b/StructureHelper/Services/Reports/CalculationReports/IsoField3DReport.cs new file mode 100644 index 0000000..51beed6 --- /dev/null +++ b/StructureHelper/Services/Reports/CalculationReports/IsoField3DReport.cs @@ -0,0 +1,37 @@ +using FieldVisualizer.Entities.Values.Primitives; +using FieldVisualizer.WindowsOperation; +using StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelper.Services.Reports.CalculationReports +{ + public class IsoField3DReport : IIsoField3DReport + { + private IEnumerable primitiveSets; + private IsoField3DViewerViewModel viewModel; + + public void Prepare() + { + viewModel = new IsoField3DViewerViewModel(primitiveSets); + + } + + public void ShowPrepared() + { + var wnd = new IsoField3DViewerView(viewModel); + wnd.Show(); + } + + public void Show() + { + Prepare(); + ShowPrepared(); + } + public IsoField3DReport(IEnumerable primitiveSets) + { + this.primitiveSets = primitiveSets; + } + } +} diff --git a/StructureHelper/Services/Reports/CalculationReports/IsoFieldReport.cs b/StructureHelper/Services/Reports/CalculationReports/IsoFieldReport.cs index 00eb343..f8ead00 100644 --- a/StructureHelper/Services/Reports/CalculationReports/IsoFieldReport.cs +++ b/StructureHelper/Services/Reports/CalculationReports/IsoFieldReport.cs @@ -1,11 +1,6 @@ using FieldVisualizer.Entities.Values.Primitives; -using FieldVisualizer.Services.PrimitiveServices; using FieldVisualizer.WindowsOperation; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelper.Services.Reports.CalculationReports { diff --git a/StructureHelper/Services/ResultViewers/ShowIsoFieldResult.cs b/StructureHelper/Services/ResultViewers/ShowIsoFieldResult.cs index 5a70668..2741897 100644 --- a/StructureHelper/Services/ResultViewers/ShowIsoFieldResult.cs +++ b/StructureHelper/Services/ResultViewers/ShowIsoFieldResult.cs @@ -9,6 +9,7 @@ using StructureHelperLogics.NdmCalculations.Cracking; using StructureHelperLogics.NdmCalculations.Triangulations; using System; using System.Collections.Generic; +using System.Runtime.Intrinsics.Arm; namespace StructureHelper.Services.ResultViewers { @@ -83,7 +84,8 @@ namespace StructureHelper.Services.ResultViewers } else if (ndm is ITriangleNdm triangle) { - valuePrimitive = ProcessTriangle(triangle, val); + //valuePrimitive = ProcessTriangle(triangle, val); + valuePrimitive = ProcessTriangle(strainMatrix, valDelegate, triangle); } else { @@ -92,18 +94,39 @@ namespace StructureHelper.Services.ResultViewers return valuePrimitive; } - private static IValuePrimitive ProcessTriangle(ITriangleNdm triangle, double val) + private static IValuePrimitive ProcessTriangle(IStrainMatrix strainMatrix, ForceResultFunc valDelegate, ITriangleNdm triangle) { + double delegateResult = valDelegate.ResultFunction.Invoke(strainMatrix, triangle); + double val = delegateResult * valDelegate.UnitFactor; + var moqNdm1 = new Ndm() { CenterX = triangle.Point1.X, CenterY = triangle.Point1.Y, Area = triangle.Area, Material = triangle.Material }; + var moqNdm2 = new Ndm() { CenterX = triangle.Point2.X, CenterY = triangle.Point2.Y, Area = triangle.Area, Material = triangle.Material }; + var moqNdm3 = new Ndm() { CenterX = triangle.Point3.X, CenterY = triangle.Point3.Y, Area = triangle.Area, Material = triangle.Material }; var primitive = new TrianglePrimitive() { Point1 = new Point2D() { X = triangle.Point1.X, Y = triangle.Point1.Y }, Point2 = new Point2D() { X = triangle.Point2.X, Y = triangle.Point2.Y }, Point3 = new Point2D() { X = triangle.Point3.X, Y = triangle.Point3.Y }, - Value = val + Value = val, + ValuePoint1 = valDelegate.ResultFunction.Invoke(strainMatrix, moqNdm1) * valDelegate.UnitFactor, + ValuePoint2 = valDelegate.ResultFunction.Invoke(strainMatrix, moqNdm2) * valDelegate.UnitFactor, + ValuePoint3 = valDelegate.ResultFunction.Invoke(strainMatrix, moqNdm3) * valDelegate.UnitFactor, }; return primitive; } + + //private static IValuePrimitive ProcessTriangle(ITriangleNdm triangle, double val) + //{ + // var primitive = new TrianglePrimitive() + // { + // Point1 = new Point2D() { X = triangle.Point1.X, Y = triangle.Point1.Y }, + // Point2 = new Point2D() { X = triangle.Point2.X, Y = triangle.Point2.Y }, + // Point3 = new Point2D() { X = triangle.Point3.X, Y = triangle.Point3.Y }, + // Value = val + // }; + // return primitive; + //} + private static IValuePrimitive ProcessRectangle(IRectangleNdm shapeNdm, double val) { return new RectanglePrimitive() diff --git a/StructureHelper/StructureHelper.csproj b/StructureHelper/StructureHelper.csproj index b8173b9..394ed3d 100644 --- a/StructureHelper/StructureHelper.csproj +++ b/StructureHelper/StructureHelper.csproj @@ -61,7 +61,8 @@ - + + diff --git a/StructureHelper/StructureHelper.csproj.user b/StructureHelper/StructureHelper.csproj.user index bf1f821..ce00a93 100644 --- a/StructureHelper/StructureHelper.csproj.user +++ b/StructureHelper/StructureHelper.csproj.user @@ -72,6 +72,9 @@ Code + + Code + Code diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ContourViewportViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ContourViewportViewModel.cs new file mode 100644 index 0000000..20c586b --- /dev/null +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ContourViewportViewModel.cs @@ -0,0 +1,11 @@ +using StructureHelper.Infrastructure; +using System; +using System.Collections.Generic; +using System.Text; + +namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalculatorViews +{ + public class ContourViewportViewModel : HelixViewModelBase + { + } +} diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml index baead56..3ce01b8 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/ForceCalculatorViews/ForcesResultsView.xaml @@ -111,6 +111,16 @@ +