From a570fced8a31594d443c87d35c1f236b3e86ad52 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 30 Aug 2025 15:31:54 +0800 Subject: [PATCH] fix bug of wpf mission initialization. --- Machining/DemoMillingByCutterLocation.cs | 240 +++++++++--------- ...ingMachiningProcessAndStripPosSelection.cs | 4 +- 2 files changed, 125 insertions(+), 119 deletions(-) diff --git a/Machining/DemoMillingByCutterLocation.cs b/Machining/DemoMillingByCutterLocation.cs index a274a77..cef8eba 100644 --- a/Machining/DemoMillingByCutterLocation.cs +++ b/Machining/DemoMillingByCutterLocation.cs @@ -14,128 +14,134 @@ using System.Windows; namespace Sample.Machining { - /// - /// ### Source Code - /// [!code-csharp[SampleCode](~/../Hi.Sample/Machining/DemoMillingByCutterLocation.cs)] - /// - public static class DemoMillingByCutterLocation - { - [STAThread] - static void Main() - { - int h = 2; - string stlFile_CylinderR20 = $"Cache/CylinderH{h}R20.stl"; - string stlFile_CylinderR19 = $"Cache/CylinderH{h}R19.stl"; - string stlFile_CylinderR18 = $"Cache/CylinderH{h}R18.stl"; - new Cylindroid(new PairZr(-h, 20), new PairZr(0, 20)) - .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR20); - new Cylindroid(new PairZr(-h, 19), new PairZr(0, 19)) - .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR19); - new Cylindroid(new PairZr(-h, 18), new PairZr(0, 18)) - .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR18); + /// + /// ### Source Code + /// [!code-csharp[SampleCode](~/../Hi.Sample/Machining/DemoMillingByCutterLocation.cs)] + /// + public static class DemoMillingByCutterLocation + { + [STAThread] + static void Main() + { + int h = 2; + string stlFile_CylinderR20 = $"Cache/CylinderH{h}R20.stl"; + string stlFile_CylinderR19 = $"Cache/CylinderH{h}R19.stl"; + string stlFile_CylinderR18 = $"Cache/CylinderH{h}R18.stl"; + new Cylindroid(new PairZr(-h, 20), new PairZr(0, 20)) + .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR20); + new Cylindroid(new PairZr(-h, 19), new PairZr(0, 19)) + .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR19); + new Cylindroid(new PairZr(-h, 18), new PairZr(0, 18)) + .GenStl(new PolarResolution2d(1, MathUtil.ToRad(15))).WriteBin(stlFile_CylinderR18); - LocalApp.AppBegin(); + LocalApp.AppBegin(); - #region ProjectLoading - //var projectPath = "C:/HiNC-Projects/DemoStandardPath/Main.hincproj"; - var projectPath = "C:/HiNC-Projects/demo-test-1/Main.hincproj"; - var projectDir = Path.GetDirectoryName(projectPath); - Console.WriteLine($"Load Project: {projectPath}"); - MachiningProject project = MachiningProject.LoadFile(projectPath); - #endregion + LocalProjectService localProjectService = new LocalProjectService(); - var projectDisplayee = new MachiningProjectDisplayee(project); - var device = new ClMillingDevice(); - project.MachiningEquipment.MachiningChain = device; - project.ClStrip.IsShowDot = true; - double resolution_mm = 0.5; - project.Workpiece.InitGeom = new StlFile(stlFile_CylinderR20, projectDir); - project.Workpiece.IdealGeom = new StlFile(stlFile_CylinderR19, projectDir); - project.Workpiece.InitResolution = resolution_mm; + #region ProjectLoading + //var projectPath = "C:/HiNC-Projects/DemoStandardPath/Main.hincproj"; + var projectPath = "C:/HiNC-Projects/demo-test-1/Main.hincproj"; + Console.WriteLine($"Load Project: {projectPath}"); + localProjectService.LoadProject(projectPath).ShowIfCatched(null); + var project = localProjectService.MachiningProject; + #endregion - project.RuntimeController.SetNcResolutionFixed(9999, 15); - project.RuntimeController.EnableCollisionDetection = false; - project.RuntimeController.EnablePhysics = false; - project.RuntimeController.MachiningResolution_mm = resolution_mm; + var projectDisplayee = new MachiningProjectDisplayee(()=> localProjectService.MachiningProject); + var device = new ClMillingDevice(); + project.MachiningEquipment.MachiningChain = device; + project.ClStrip.IsShowDot = true; + double resolution_mm = 0.5; + var projectDir = Path.GetDirectoryName(projectPath); + project.Workpiece.InitGeom = new StlFile(stlFile_CylinderR20, projectDir); + project.Workpiece.IdealGeom = new StlFile(stlFile_CylinderR19, projectDir); + project.Workpiece.InitResolution = resolution_mm; - //RunConsole(project, projectDisplayee, resolution_mm); - RunWindow(project, projectDisplayee, resolution_mm); - } - static void RunConsole(MachiningProject project, - MachiningProjectDisplayee projectDisplayee, double resolution_mm) - { - RunSession(project, resolution_mm); - DispEngine dispEngine = new DispEngine(projectDisplayee); - dispEngine.SetViewToIsometricView(); - dispEngine.SketchView = project.ClStrip.GetFittingView(dispEngine.SketchView); - dispEngine.SketchView = dispEngine.SketchView.Scale(0.5); - dispEngine.Snapshot($"Cache/result.bmp", 1000, 1000); + RuntimeApi runtimeApi = new RuntimeApi(localProjectService); + runtimeApi.SetNcResolutionFixed(9999, 15); + runtimeApi.EnableCollisionDetection = false; + runtimeApi.EnablePhysics = false; + runtimeApi.MachiningResolution_mm = resolution_mm; - project.Dispose(); - LocalApp.AppEnd(); - Console.WriteLine($"App exit."); - } - static void RunWindow(MachiningProject project, - MachiningProjectDisplayee projectDisplayee, double resolution_mm) - { - var task = Task.Run(() => - { - RunSession(project, resolution_mm); - Console.WriteLine($"task done."); - }).ShowIfCatched(null); + //RunConsole(project, projectDisplayee, resolution_mm); + RunWindow(project, projectDisplayee, resolution_mm); + } + static void RunConsole(MachiningProject project, + MachiningProjectDisplayee projectDisplayee, double resolution_mm) + { + RunSession(project, resolution_mm); + DispEngine dispEngine = new DispEngine(projectDisplayee); + dispEngine.SetViewToIsometricView(); + dispEngine.SketchView = project.ClStrip.GetFittingView(dispEngine.SketchView); + dispEngine.SketchView = dispEngine.SketchView.Scale(0.5); + dispEngine.Snapshot($"Cache/result.bmp", 1000, 1000); - #region Create and Run WPF Application - Application app = new Application - { - ShutdownMode = ShutdownMode.OnMainWindowClose - }; - app.Exit += (o, e) => - { - project.Dispose(); - LocalApp.AppEnd(); - Console.WriteLine($"App exit."); - }; - app.Run(new RenderingWindow() - { - Title = "Demo", - Displayee = projectDisplayee - }); - #endregion - } - static void RunSession(MachiningProject project, double resolution_mm) - { - project.BeginSession(); - double radius = 20; - double z = -1; - project.Act(new ActToolingTeleport(1));//equip tool - project.Act(new ActClTeleport(new DVec3d(radius, 0, z, 0, 0, 1)));//goto initial position - //run an arbitrary contour. - int divNum = 36; - for (int i = 0; i <= divNum; i++) - { - var cl = new DVec3d( - radius * Math.Cos(i * Math.PI * 2 / divNum), - radius * Math.Sin(i * Math.PI * 2 / divNum), z, - 0, 0, 1); - Console.WriteLine($"{cl.Point.CsvText},{cl.Normal.CsvText},"); - project.Act(new ActClStep(cl)); - } - double diffLimit_mm = resolution_mm * 2; - project.RuntimeController.Diff(resolution_mm * 2); - Console.WriteLine($"IsDifferenceAceptable: {IsDifferenceAceptable(project, diffLimit_mm)}"); - project.EndSession(); - } - static bool IsDifferenceAceptable(MachiningProject project, double diffLimit) - { - foreach (var attachment in project.Workpiece.DiffAttachmentBag) - { - if (double.IsNaN(attachment.Diff) || Math.Abs(attachment.Diff) > diffLimit) - { - Console.WriteLine($"Diff: {attachment.Diff}"); - return false; - } - } - return true; - } - } + project.Dispose(); + LocalApp.AppEnd(); + Console.WriteLine($"App exit."); + } + static void RunWindow(MachiningProject project, + MachiningProjectDisplayee projectDisplayee, double resolution_mm) + { + var task = Task.Run(() => + { + RunSession(project, resolution_mm); + Console.WriteLine($"task done."); + }).ShowIfCatched(null); + + #region Create and Run WPF Application + Application app = new Application + { + ShutdownMode = ShutdownMode.OnMainWindowClose + }; + app.Exit += (o, e) => + { + project.Dispose(); + LocalApp.AppEnd(); + Console.WriteLine($"App exit."); + }; + app.Run(new RenderingWindow() + { + Title = "Demo", + Displayee = projectDisplayee + }); + #endregion + } + static void RunSession(MachiningProject project, double resolution_mm) + { + RuntimeApi runtimeApi = new RuntimeApi(project); + + project.BeginSession(); + double radius = 20; + double z = -1; + project.Act(new ActToolingTeleport(1));//equip tool + project.Act(new ActClTeleport(new DVec3d(radius, 0, z, 0, 0, 1)));//goto initial position + //run an arbitrary contour. + int divNum = 36; + for (int i = 0; i <= divNum; i++) + { + var cl = new DVec3d( + radius * Math.Cos(i * Math.PI * 2 / divNum), + radius * Math.Sin(i * Math.PI * 2 / divNum), z, + 0, 0, 1); + Console.WriteLine($"{cl.Point.CsvText},{cl.Normal.CsvText},"); + project.Act(new ActClStep(cl)); + } + double diffLimit_mm = resolution_mm * 2; + runtimeApi.Diff(resolution_mm * 2); + Console.WriteLine($"IsDifferenceAceptable: {IsDifferenceAceptable(project, diffLimit_mm)}"); + project.EndSession(); + } + static bool IsDifferenceAceptable(MachiningProject project, double diffLimit) + { + foreach (var attachment in project.Workpiece.DiffAttachmentBag) + { + if (double.IsNaN(attachment.Diff) || Math.Abs(attachment.Diff) > diffLimit) + { + Console.WriteLine($"Diff: {attachment.Diff}"); + return false; + } + } + return true; + } + } } diff --git a/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs b/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs index c8f504f..fc9dfc1 100644 --- a/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs +++ b/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs @@ -33,7 +33,7 @@ namespace Sample.Machining Console.WriteLine($"Load Project: {projectPath}"); MachiningProject machiningProject = MachiningProject.LoadFile(projectPath); - machiningProject.RuntimeController.MachiningStepSelected += (MachiningStep step) => + machiningProject.RuntimeApi.MachiningStepSelected += (MachiningStep step) => { var sourceCommand = step.SourceCommand; Console.WriteLine($"Step Selected: MRR = {step.Mrr_mm3ds} At \"{sourceCommand?.FilePath}\" (Line {sourceCommand?.GetLineNo()}) \"{sourceCommand?.Line}\""); @@ -42,7 +42,7 @@ namespace Sample.Machining #endregion #region Configure Rendering Options - var projectDisplayee = new MachiningProjectDisplayee(machiningProject); + var projectDisplayee = new MachiningProjectDisplayee(()=>machiningProject); projectDisplayee.RenderingFlagBitArray[(int)RenderingFlag.Mech] = true; projectDisplayee.RenderingFlagBitArray[(int)RenderingFlag.Fixture] = true; projectDisplayee.RenderingFlagBitArray[(int)RenderingFlag.WorkpieceGeom] = false;