diff --git a/Hi.Sample.Wpf.csproj b/Hi.Sample.Wpf.csproj
index bda9ecf..3a5ca3b 100644
--- a/Hi.Sample.Wpf.csproj
+++ b/Hi.Sample.Wpf.csproj
@@ -14,7 +14,7 @@
$(AssemblyName)
bin\$(Platform).$(Configuration)\
DEBUG;TRACE
- Sample.Machining.DemoRenderingMachiningProcessAndStripPosSelection
+ Sample.Machining.DemoMillingByCutterLocation
diff --git a/Machining/DemoMillingByCutterLocation.cs b/Machining/DemoMillingByCutterLocation.cs
new file mode 100644
index 0000000..5405afc
--- /dev/null
+++ b/Machining/DemoMillingByCutterLocation.cs
@@ -0,0 +1,141 @@
+using Hi.Common;
+using Hi.Disp;
+using Hi.Geom;
+using Hi.Geom.Resolution;
+using Hi.HiNcKits;
+using Hi.MachiningProcs;
+using Hi.Numerical.Acts;
+using Hi.Wpf.Disp;
+using HiMachining.Milling;
+using System;
+using System.IO;
+using System.Threading.Tasks;
+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);
+
+ SingleUserApp.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
+
+ 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;
+
+ project.RuntimeController.SetNcResolutionFixed(9999, 15);
+ project.RuntimeController.EnableCollisionDetection = false;
+ project.RuntimeController.EnablePhysics = false;
+ project.RuntimeController.MachiningResolution_mm = 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);
+
+ project.Dispose();
+ SingleUserApp.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();
+ SingleUserApp.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;
+ }
+ }
+}
diff --git a/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs b/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs
index 9c3148e..41bc63d 100644
--- a/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs
+++ b/Machining/DemoRenderingMachiningProcessAndStripPosSelection.cs
@@ -7,6 +7,7 @@ using Hi.Common.FileLines;
using System.Windows;
using Hi.Disp;
using Hi.MachiningSteps;
+using Hi.HiNcKits;
namespace Sample.Machining
{
@@ -25,21 +26,14 @@ namespace Sample.Machining
[STAThread]
static void Main(string[] args)
{
- #region Initialize Environment
- License.LogInAll();
- DispEngine.Init();
- MongoServer.Default = MongoServer.Run(new MongoRunnerOptions()
- {
- MongoPort = 28100
- });
- #endregion
+ SingleUserApp.AppBegin();
#region Load Machining Project
var projectPath = "C:/HiNC-Projects/DemoStandardPath/Main.hincproj";
Console.WriteLine($"Load Project: {projectPath}");
MachiningProject machiningProject = MachiningProject.LoadFile(projectPath);
- machiningProject.ShellApi.MachiningStepSelected += (MachiningStep step) =>
+ machiningProject.RuntimeController.MachiningStepSelected += (MachiningStep step) =>
{
var sourceCommand = step.SourceCommand;
Console.WriteLine($"Step Selected: MRR = {step.Mrr_mm3ds} At \"{sourceCommand?.FilePath}\" (Line {sourceCommand?.GetLineNo()}) \"{sourceCommand?.Line}\"");
@@ -64,9 +58,7 @@ namespace Sample.Machining
app.Exit += (o, e) =>
{
machiningProject.Dispose();
- MongoServer.Default.Dispose();
- DispEngine.FinishDisp();
- License.LogOutAll();
+ SingleUserApp.AppEnd();
Console.WriteLine($"App exit.");
};
app.Run(new RenderingWindow()