diff --git a/.gitignore b/.gitignore
index e3e326c..18650be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ HSI_HexagonMI_EF3/x64/Debug/
.vscode/
HSI_HexagonMI_EF3/obj/
HSI_SEVENOCEAN_EF1_CsTest/bin/
+EF3/obj/
diff --git a/EF3/EF3.csproj b/EF3/EF3.csproj
new file mode 100644
index 0000000..b238f14
--- /dev/null
+++ b/EF3/EF3.csproj
@@ -0,0 +1,32 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resource.resx
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ Resource.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/EF3/EF3.sln b/EF3/EF3.sln
new file mode 100644
index 0000000..cfb9382
--- /dev/null
+++ b/EF3/EF3.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32929.385
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EF3", "EF3.csproj", "{47C34DC7-67A1-425E-9460-E045F8BE14CE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {47C34DC7-67A1-425E-9460-E045F8BE14CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {47C34DC7-67A1-425E-9460-E045F8BE14CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {47C34DC7-67A1-425E-9460-E045F8BE14CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {47C34DC7-67A1-425E-9460-E045F8BE14CE}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0458C7C0-2145-4A08-B4D5-D26EC3638A5A}
+ EndGlobalSection
+EndGlobal
diff --git a/EF3/HSI/HSI.cs b/EF3/HSI/HSI.cs
new file mode 100644
index 0000000..23a43fd
--- /dev/null
+++ b/EF3/HSI/HSI.cs
@@ -0,0 +1,661 @@
+using System.Runtime.InteropServices;
+using static EF3.HSI.HSI.Def;
+
+namespace EF3.HSI;
+
+internal class HSI
+{
+ internal class Interface
+ {
+ // >>>> In Interfaces
+ //引用回调
+ public delegate void PEventCallback(
+ HSI_EVENT_TYPE eventType, HSI_EVENT_RESPONSE_TYPE responseType, uint eventId, string eventData,
+ ref uint eventCallbackId);
+
+ public static PEventCallback HsiCallback;
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_GET_INTERFACE_VERSION", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetInterfaceVersion(ref uint apiVersionMajor, ref uint apiVersionMinor);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_GET_MACHINE_INFO", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetMachineInfo(ref int numMachineTypes);
+
+ //引用返回值表示一个方法的返回值是一个引用,而不是值类型对象的副本或者引用类型的地址,
+ //而一个方法要实现引用返回值,需要满足两个条件:
+ //1、返回值不能为void,且需要使用ref关键字(或者ref readonly表示只读)修饰返回类型
+ //2、方法的每一个return语句需要是一个ref引用
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_FIREWAREVERION", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS MotionGetFirewareVerion(IntPtr firewareVerion);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_STARTUP", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS Startup(IntPtr hWnd, bool bOfflineOnly);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_SET_EVENT_CALLBACK", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS SetEventCallback(PEventCallback pCallback);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_SHUTDOWM", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS Shutdown();
+
+ // <<<< Out Interfacess
+ //事件回调函数
+ public static void EventCallback(HSI_EVENT_TYPE eventType, HSI_EVENT_RESPONSE_TYPE responseType,
+ uint eventId, string eventData, ref uint eventCallbackId)
+ {
+ var msgBtn = MessageBoxButtons.OK;
+ switch (responseType)
+ {
+ case HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_OK:
+ msgBtn = MessageBoxButtons.OK;
+ break;
+ case HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_RETRY:
+ msgBtn = MessageBoxButtons.RetryCancel;
+ break;
+ case HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_CANCEL:
+ msgBtn = MessageBoxButtons.OKCancel;
+ break;
+ case HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_RESPONSE_YES:
+ msgBtn = MessageBoxButtons.YesNo;
+ break;
+ }
+
+ switch (eventType)
+ {
+ case HSI_EVENT_TYPE.HSI_EVENT_NONE:
+ break;
+ case HSI_EVENT_TYPE.HSI_EVENT_ERROR:
+ break;
+ case HSI_EVENT_TYPE.HSI_EVENT_FUNCTION:
+ var eventFunctionId = (HSI_EVENT_FUNCTION_ID)eventId;
+ switch (eventFunctionId)
+ {
+ case HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOTION_DCC_HOME: //准备回家
+ {
+ MessageBox.Show(Resource.Interface_Tips_Home_Machine, Resource.Interface_Tips,
+ msgBtn, MessageBoxIcon.Information);
+ break;
+ }
+ case HSI_EVENT_FUNCTION_ID.HSI_EVENT_DEBUG_LOG:
+ {
+ MessageBox.Show(eventData, Resource.Interface_Tips,
+ msgBtn, MessageBoxIcon.Information);
+ break;
+ }
+ case HSI_EVENT_FUNCTION_ID.HSI_EVENT_MOVE_POINT: //定位完成
+ {
+ MessageBox.Show(Resource.Interface_Tips_Motion_Finished, Resource.Interface_Tips,
+ msgBtn, MessageBoxIcon.Information);
+ ; //Motion completed
+ break;
+ }
+ }
+
+ break;
+ }
+ }
+ }
+
+ internal class Motion
+ {
+ //public static bool IsActive(bool bForce = false)
+ //{
+ // if (_bFirst || bForce)
+ // {
+ // IsSupported(ref _supported);
+ // _bFirst = false;
+ // }
+ // return (_supported != 0);
+ //}
+
+ private static bool _bFirst;
+ private static uint _supported;
+
+ // <<<< Out Interfaces
+ public Motion()
+ {
+ _supported = 0;
+ _bFirst = true;
+ }
+ // >>>> In Interfaces
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS IsSupported(ref uint types);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STARTUP", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS Startup(bool bHome);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_HOMED", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS IsHomed(ref bool bHomed);
+
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_XYZ", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetSpeedXyz(ref double speed);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_XYZ", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS SetSpeedXyz(double speed);
+
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_SET_DATA", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS DCCScanSetData(uint axisTypes, HSI_SCAN_MOTION_TYPE eType, uint lTrigNumber,
+ double[] dTrigDis);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_START", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS DCCScanStart();
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_DCC_SCAN_STOP", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS DCCScanStop();
+
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ_CACHE", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetPositionXyzCache(IntPtr CacheData, ref int DataCount);
+
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SPEED_R", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS GetSpeedR(ref double speed);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SPEED_R", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS SetSpeedR(double speed);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS GetScaleResolution(
+ // ref double scaleX, ref double scaleY, ref double scaleZ);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_SCALE_RESOLUTION", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS SetScaleResolution(double scaleX, double scaleY, double scaleZ);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DEADBAND", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS GetDeadBand(
+ // ref double deadbandX, ref double deadbandY, ref double deadbandZ, ref double deadbandR);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_REFRESH_DEADBAND", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS GetRefreshDeadBand(ref double deadband);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_JOG", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS Jog(uint axisTypes, double speed);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_STOP_JOG", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS StopJog();
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_XYZ", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetPositionXyz(
+ uint axisTypes, ref double positionX, ref double positionY, ref double positionZ, ref double time);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_XYZ", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS SetPositionXyz(
+ uint axisTypes, double positionX, double positionY, double positionZ, HSI_MOTION_MOVE_TYPE eType,
+ double dFlyRadius);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_POSITION_R", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS GetPositionR(uint axisTypes, ref double positionR, ref double time);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_POSITION_R", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS SetPositionR(
+ // uint axisTypes, double positionR, Def.HSI_MOTION_AXIS_R_MOVE_TYPE directionType, bool bWait);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_ABORT_MOTION", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS AbortMotion();
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_GET_DIO", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS GetDIO(uint ioChannel, ref uint status);
+
+ //[DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SET_DIO", CharSet = CharSet.Unicode)]
+ //public static extern Def.HSI_STATUS SetDIO(uint ioChannel, uint status);
+
+ [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_SHUTDOWN", CharSet = CharSet.Unicode)]
+ public static extern HSI_STATUS Shutdown();
+ }
+
+
+ //internal class Illumination
+ // {
+ // // >>>> In Interfaces
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS IsSupported(ref uint types);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_STARTUP();
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_COUNT(ref int nLamps);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_INFO(ref int lampInfo, ref int numLamps,
+ // int[] lampsType,
+ // int[] numRings, int[] numSectors, int[] color, double[] angle, ref bool bCanBeCalibrated);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE(
+ // int nLamp, bool[] bBulbStates, double[] intensities, ref int color, ref double angle);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE(
+ // int nLamp, bool[] bBulbStates, double[] intensities, int color, double angle, bool bWait);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_GET_LAMP_STATE_ALL(
+ // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SET_LAMP_STATE_ALL(
+ // int lampInfo, int numLamps, int[] lampsType, int[,] bBulbStates, double[,] intensities, bool bWait);
+
+ // [DllImport("HSI.dll", EntryPoint = "HSI_MOTION_IS_SUPPORTED", CharSet = CharSet.Unicode)]
+ // public static extern Def.HSI_STATUS HSI_ILLUMINATION_SHUTDOWN();
+
+ // // <<<< Out Interfaces
+ // public Illumination()
+ // {
+ // _supported = 0;
+ // _bFirst = true;
+ // }
+
+ // public static bool IsActive(bool bForce = false)
+ // {
+ // if (_bFirst || bForce)
+ // {
+ // IsSupported(ref _supported);
+ // _bFirst = false;
+ // }
+ // return (_supported != 0);
+ // }
+
+ // private static bool _bFirst;
+ // private static uint _supported;
+ // }
+
+ internal class Def
+ {
+ public enum HSI_EVENT_FUNCTION_ID //EventData
+ {
+ //SendReceive
+ // V4.2 & V4.3 +
+ HSI_EVENT_DONE = 0, //N/A N/A
+ HSI_EVENT_TAKE_HIT = 1, //N/A N/A
+ HSI_EVENT_ERASE_HIT = 2, //N/AN/A
+ HSI_EVENT_TIME_CRITICAL = 3, //"ON", or "OFF" N/A
+ HSI_EVENT_ZOOM_IN = 4, //"MAX", "COARSE", or "FINE" N/A
+ HSI_EVENT_ZOOM_OUT = 5, //"MAX", "COARSE", or "FINE" N/A
+ HSI_EVENT_REFRESH_LIVE_VIEW = 6, //N/AN/A
+ HSI_EVENT_UPDATE_READOUTS = 7, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"N/A
+ HSI_EVENT_READ_MC_POSITION = 8, //"AxisFlags""AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r}"
+ HSI_EVENT_MOVE_MC_POSITION = 9, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed},%1d{bWait}"N/A
+ HSI_EVENT_CONVERT_MC_TO_GLOBAL = 10, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_UPDATE_STATUS_MESSAGE = 11, //N/AN/A
+ HSI_EVENT_OPENFILE_DLG = 12, //N/A"FileName"
+ HSI_EVENT_DISPLAY_YESNO_MESSAGE = 13, //N/AN/A
+ HSI_EVENT_DISPLAY_OKCANCEL_MESSAGE = 14, //N/AN/A
+ HSI_EVENT_DISPLAY_OK_MESSAGE = 15, //N/AN/A
+
+ // V4.3 + Only
+ HSI_EVENT_DEBUG_LOG = 20, //"%s" N/A
+ HSI_EVENT_MOVE_MC_POSITION_AND_SETTLE = 21, //"AxisFlags,%lf{x},%lf{y},%lf{z},%lf{r},%lf{speed}" N/A
+ HSI_EVENT_CONVERT_GLOBAL_TO_MM = 22, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_CONVERT_ROT_TO_TABLE_POINT = 23, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_CONVERT_ROT_OUT_TABLE_POINT = 24, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_CONVERT_ROT_TO_TABLE_VECTOR = 25, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_CONVERT_ROT_OUT_TABLE_VECTOR = 26, //"%lf{x},%lf{y},%lf{z}" "%lf{x},%lf{y},%lf{z}"
+ HSI_EVENT_ILLUMINATION_REFRESH = 27,
+ HSI_EVENT_ILLUMINATION_LOCK = 28,
+ HSI_EVENT_ILLUMINATION_STORE_SET = 29,
+ HSI_EVENT_ILLUMINATION_RESTORE_SET = 30,
+ HSI_EVENT_ILLUMINATION_DECREASE_ACTIVE = 31, // "%d"
+ HSI_EVENT_ILLUMINATION_INCREASE_ACTIVE = 32, // "%d"
+ HSI_EVENT_ILLUMINATION_DECREASE_ALL = 33, // "%d"
+ HSI_EVENT_ILLUMINATION_INCREASE_ALL = 34, // "%d"
+ HSI_EVENT_ILLUMINATION_SELECT_LAMP = 35, // "%d"
+ HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY = 36, // "%d"
+ HSI_EVENT_ILLUMINATION_GET_LAMP_INTENSITY = 37, // "%d"
+ HSI_EVENT_ILLUMINATION_SET_LAMP_CALIBRATION_OVERRIDE = 38, // "%d"
+ HSI_EVENT_ILLUMINATION_NEXT_RING = 39,
+ HSI_EVENT_ILLUMINATION_PREV_RING = 40,
+ HSI_EVENT_ILLUMINATION_NEXT_SECTOR = 41,
+ HSI_EVENT_ILLUMINATION_PREV_SECTOR = 42,
+ HSI_EVENT_ILLUMINATION_NUM_LAMPS_INSTALLED = 43,
+ HSI_EVENT_ILLUMINATION_IS_LAMP_INSTALLED = 44,
+ HSI_EVENT_ILLUMINATION_APPLY = 45,
+ HSI_EVENT_ILLUMINATION_ALLOFF = 46,
+ HSI_EVENT_ILLUMINATION_ALLON = 47,
+ HSI_EVENT_ILLUMINATION_UNLOCK = 48,
+ HSI_EVENT_IS_PROGRAMMING_MODE = 49, //1/0
+ HSI_EVENT_IS_PORTLOCK_DCC = 50, //1/0
+ HSI_EVENT_IS_ROTAB_ENABLED = 51, //1/0
+ HSI_EVENT_IS_TIME_CRITICAL = 52, // 1/0
+ HSI_EVENT_CONVERT_MM_TO_GLOBAL = 53,
+ HSI_EVENT_CONVERT_GLOBAL_TO_MC = 54,
+ HSI_EVENT_LASER_FOCUS_ENABLE = 55, // "%d" 0 = not available, 1 = available
+ HSI_EVENT_MOVE_POINT = 56, //N/AN/A
+ HSI_EVENT_MAG_CHANGED = 57,
+ HSI_EVENT_ILLUMINATION_SET_LAMP_INTENSITY_IN_MACHINE_LEVELx100 = 58,
+
+ // "%d" //PR251359-- Instructed to "Please focus on slide" but it's rather unhelpfully turned the lights off for us.
+ HSI_EVENT_DCC_SCAN_POINTS_AVAILABLE = 59, //"%d"= more to come, 1 = last set N/A
+ HSI_EVENT_ILLUMINATION_IS_ALL_OFF = 60,
+
+ //1/0//PR253777-- Sensilight does not work if the target has 'ALL OFF' for illum setting--4/16/2008
+ HSI_EVENT_ILLUMINATION_DECREASE_ALL_NONZERO = 61,
+
+ // Sensilight command that wont change a lamp currently set to zero
+ HSI_EVENT_ILLUMINATION_INCREASE_ALL_NONZERO = 62,
+ // Sensilight command that wont change a lamp currently set to zero22
+
+ HSI_EVENT_LP_QUALITY = 63, //"%d" 0-100%
+ HSI_EVENT_TP_QUALITY = 64, //"%d" 0-100%
+ HSI_EVENT_VP_QUALITY = 65, //"%d" 0-100%
+
+ HSI_EVENT_FLYMODE_MOVE_COMPLETE = 66, // A queued flymode move has completed
+ HSI_EVENT_PENDANT_SPEED_PERCENT = 67, // 108336 HMV : Add calls to HSI.H for Speed
+ HSI_EVENT_PENDANT_AXES_SELECTED = 68, // 108335 HMV : Need to add calls to the HSI.H for Stacked Rotary
+
+ HSI_EVENT_MOTION = 500,
+ HSI_EVENT_MOTION_DCC_HOME = 501,
+ HSI_EVENT_SHUTDOWN_ = 999 //N/AN/A
+ }
+
+ public enum HSI_EVENT_RESPONSE_TYPE
+ {
+ HSI_EVENT_CALLBACK = 0,
+ HSI_EVENT_RESPONSE_OK = 1,
+ HSI_EVENT_RESPONSE_RETRY = 2,
+ HSI_EVENT_RESPONSE_CANCEL = 3,
+ HSI_EVENT_RESPONSE_YES = 4,
+ HSI_EVENT_RESPONSE_NO = 5,
+ HSI_EVENT_FUNCTION_OK = 6,
+ HSI_EVENT_FUNCTION_FAILED = 7
+ }
+
+ public enum HSI_EVENT_TYPE
+ {
+ HSI_EVENT_NONE = 0,
+ HSI_EVENT_ERROR = 1,
+ HSI_EVENT_FUNCTION = 2
+ }
+
+ public enum HSI_ILLUMINATION_BULB_STATE
+ {
+ HSI_ILLUMINATION_BULB_STATE_TURN_ON = 0,
+ HSI_ILLUMINATION_BULB_STATE_TURN_OFF = 1,
+ HSI_ILLUMINATION_BULB_STATE_TOTAL
+ }
+
+ public enum HSI_ILLUMINATION_BULB_TYPE
+ {
+ HSI_ILLUMINATION_BULB_ROUND = 1,
+ HSI_ILLUMINATION_BULB_SQUARE = 2,
+ HSI_ILLUMINATION_BULB_RING = 3,
+ HSI_ILLUMINATION_BULB_GRID = 4
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ //Illumination API
+ ///////////////////////////////////////////////////////////////////////////////
+ public enum HSI_ILLUMINATION_INFO
+ {
+ HSI_ILLUMINATION_INFO_UNKNOWN = 0,
+ HSI_ILLUMINATION_INFO_HSI = 0x01,
+ HSI_ILLUMINATION_INFO_HSI_II = 0x02, //lvgang
+ HSI_ILLUMINATION_INFO_HSI_III = 0x04, //shixuyong
+ HSI_ILLUMINATION_INFO_TOTAL
+ }
+
+ public enum HSI_ILLUMINATION_LAMP_CONTROL_TYPE
+ {
+ HSI_ILLUMINATION_LAMP_CONTROL_NONE = 0x0000,
+ HSI_ILLUMINATION_LAMP_CONTROL_BY_WHOLE_LAMP = 0x0001,
+ HSI_ILLUMINATION_LAMP_CONTROL_BY_RINGS = 0x0002,
+ HSI_ILLUMINATION_LAMP_CONTROL_BY_OCTANTS = 0x0004,
+ HSI_ILLUMINATION_LAMP_CONTROL_BY_SEGMENTS = 0x0008,
+ HSI_ILLUMINATION_LAMP_CONTROL_BY_OTHER
+ }
+
+ public enum HSI_ILLUMINATION_LAMP_LOCATION_TYPE
+ {
+ HSI_ILLUMINATION_LAMP_LOCATION_NONE = 0,
+ HSI_ILLUMINATION_LAMP_LOCATION_TOP_ON_AXIS = 1,
+ HSI_ILLUMINATION_LAMP_LOCATION_TOP_ANGLED = 2,
+ HSI_ILLUMINATION_LAMP_LOCATION_BOTTOM = 3,
+ HSI_ILLUMINATION_LAMP_LOCATION_MOVABLE = 4
+ }
+
+ public enum HSI_ILLUMINATION_LAMP_TYPE
+ {
+ HSI_ILLUMINATION_LAMP_NONE = 0,
+ HSI_ILLUMINATION_LAMP_COAXIAL = 1,
+ HSI_ILLUMINATION_LAMP_SURFACE = 2,
+ HSI_ILLUMINATION_LAMP_PROFILE = 3,
+ HSI_ILLUMINATION_LAMP_PROFILE_OUTER = 4
+ }
+
+ public enum HSI_ILLUMINATION_TYPE
+ {
+ HSI_ILLUMINATION_SUPPORTS_DCC_CONTROL = 0x0001,
+ HSI_ILLUMINATION_SUPPORTS_MANUAL_CONTROL = 0x0002
+ }
+
+ public enum HSI_MACHINE_TYPE
+ {
+ HSI_MACHINE_UNKNOWN = 0,
+ HSI_MACHINE_SO7 = 1,
+ HSI_MACHINE_TYPE_TOTAL
+ }
+
+ public enum HSI_MOTION_AXIS_R_MOVE_TYPE
+ {
+ HSI_MOTION_AXIS_R_CLOCKWISE = 1,
+ HSI_MOTION_AXIS_R_ANTICLOCKWISE = 2,
+ HSI_MOTION_AXIS_R_FASTEST = 3
+ }
+
+ public enum HSI_MOTION_AXIS_TYPE
+ {
+ //HSI_MOTION_AXIS_X = 0x0001, //对应ACS 0轴 X
+ //HSI_MOTION_AXIS_Y = 0x0000, //对应ACS 1轴 Y
+ //HSI_MOTION_AXIS_Z = 0x0004, //对应ACS 4轴 Z
+ HSI_MOTION_AXIS_X = 0x0001, // This is the default "Sensor level" X Axis - use on single X axis machines
+ HSI_MOTION_AXIS_Y = 0x0002, // This is the default "Sensor level" Y Axis - use on single Y axis machines
+ HSI_MOTION_AXIS_Z = 0x0004, // This is the default "Sensor level" Z Axis - use on single Z axis machines
+ HSI_MOTION_AXIS_R = 0x0008, // This is the default "Sensor level" R Axis - use on single R axis machines
+
+ HSI_MOTION_AXIS_X1 =
+ 0x0010, // This is the 1st X Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Y1 =
+ 0x0020, // This is the 1st Y Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Z1 =
+ 0x0040, // This is the 1st Z Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_R1 =
+ 0x0080, // This is the 1st R Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_X2 =
+ 0x0100, // This is the 2nd X Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Y2 =
+ 0x0200, // This is the 2nd Y Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Z2 =
+ 0x0400, // This is the 2nd Z Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_R2 =
+ 0x0800, // This is the 2nd R Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_X3 =
+ 0x1000, // This is the 3rd X Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Y3 =
+ 0x2000, // This is the 3rd Y Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_Z3 =
+ 0x4000, // This is the 3rd Z Axis - use on multiple axis machines when specific axis needed
+
+ HSI_MOTION_AXIS_R3 =
+ 0x8000 // This is the 3rd R Axis - use on multiple axis machines when specific axis needed
+ }
+
+ public enum HSI_MOTION_IO_TYPE
+ {
+ HSI_MOTION_INPUT1 = 0x0001,
+ HSI_MOTION_INPUT2,
+
+ HSI_MOTION_OUTPUT1 = 0x0100,
+ HSI_MOTION_OUTPUT2
+ }
+
+ public enum HSI_MOTION_MOVE_TYPE
+ {
+ HSI_MOTION_MOVE_WAIT = 1,
+ HSI_MOTION_MOVE_NOWAIT = 2,
+ HSI_MOTION_MOVE_INTERMEDIATE_POSITION = 3,
+ HSI_MOTION_MOVE_FINAL_POSITION = 4,
+ HSI_MOTION_IN_POSITION_EVENT = 5,
+ HSI_MOTION_MOVE_FLYMODE = 6,
+ HSI_MOTION_MOVE_START_POSITION = 7,
+ HSI_MOTION_MOVE_START_FINAL_POSITION = 8
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Motion API
+ ///////////////////////////////////////////////////////////////////////////////
+
+ public enum HSI_MOTION_TYPE
+ {
+ HSI_MOTION_SUPPORTS_DCC_CONTROL = 0x0001,
+ HSI_MOTION_SUPPORTS_MANUAL_CONTROL = 0x0002,
+ HSI_MOTION_SUPPORTS_HOMING = 0x0004,
+ HSI_MOTION_SUPPORTS_CIRCULAR_MOVES = 0x0008,
+ HSI_MOTION_SUPPORTS_CMM_WRIST = 0x0010,
+ HSI_MOTION_SUPPORTS_BUFFERED_MOVES = 0x0020,
+ HSI_MOTION_SUPPORTS_FLY_MOVES = 0x0040,
+ HSI_MOTION_SUPPORTS_SCAN = 0x0080,
+ HSI_MOTION_SUPPORTS_ALL_AXIS_MOVE = 0x0100,
+ HSI_MOTION_SUPPORTS_MEASPOINT_VW = 0x0200
+ }
+
+ public enum HSI_NOTIFY_TYPE
+ {
+ HSI_NOTIFY_PROGRAM_EXECUTION_START = 0,
+ HSI_NOTIFY_PROGRAM_EXECUTION_STOP = 1,
+
+ HSI_NOTIFY_TIME_CRITICAL_EVENT_START = 2,
+ HSI_NOTIFY_TIME_CRITICAL_EVENT_STOP = 3,
+ HSI_NOTIFY_PROGRAM_OPEN = 4,
+ HSI_NOTIFY_PROGRAM_CLOSE = 5,
+ HSI_NOTIFY_PCDMIS_SHUTDOWN = 6
+ }
+
+ public enum HSI_SCAN_MOTION_TYPE
+ {
+ HSI_SCAN_MOTION_LINEAR = 1,
+ HSI_SCAN_MOTION_CIRCULAR,
+ HSI_SCAN_MOTION_SPEC_LOCA = 100, //EF1
+ HSI_SCAN_MOTION_EQ_DIS,
+ HSI_SCAN_MOTION_EQ_DIS_II,
+ HSI_SCAN_MOTION_LINEAR_TEST, //测试使用
+ HSI_SCAN_MOTION_EQ_TEST, //测试使用
+ HSI_SCAN_MOTION_MANUAL_TEST //测试使用
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////
+ // Interface API
+ ///////////////////////////////////////////////////////////////////////////////
+ public enum HSI_STATUS
+ {
+ HSI_STATUS_NOT_SUPPORTED = -1,
+ HSI_STATUS_NORMAL = 0,
+ HSI_STATUS_FAILED,
+ HSI_FAILED_DLL_LOAD,
+
+ HSI_STATUS_PORTLOCK_HSI_MISMATCH,
+
+ HSI_STATUS_FILE_NOT_FOUND,
+ HSI_STATUS_HARDWARE_NOT_FOUND,
+ HSI_STATUS_INVALID_PARAMETERS,
+ HSI_STATUS_INVALID_POINTS,
+ HSI_STATUS_PART_NOT_DETECTED,
+ HSI_STATUS_MEASURE_ERROR,
+ HSI_STATUS_TEMPERATURE_ERROR,
+
+ HSI_STATUS_ILLUMINATION_COMM = 50,
+
+ HSI_STATUS_OPTICS_COMM = 100,
+ HSI_STATUS_OPTICS_HOMING,
+ HSI_STATUS_OPTICS_TIMEOUT,
+ HSI_STATUS_OPTICS_CALIBRATIONDATA,
+ HSI_STATUS_OPTICS_CALIBRATIONDATADEFAULT,
+ HSI_STATUS_OPTICS_CALFILEDATACOUNTMISMATCH,
+
+ HSI_STATUS_MOTION_COMM = 150,
+ HSI_STATUS_MOTION_HOMING,
+ HSI_STATUS_MOTION_TIMEOUT,
+ HSI_STATUS_MOTION_EMERGENCY_STOP,
+ HSI_STATUS_MOTION_EXCEED_LIMIT,
+ HSI_STATUS_MOTION_UNKNOWN_ERROR,
+ HSI_STATUS_MOTION_EXCEED_SW_LIMIT,
+ HSI_STATUS_MOTION_POSITION_ERROR,
+ HSI_STATUS_MOTION_MOVING,
+
+ HSI_STATUS_TP_UNEXPECTED_HIT = 200,
+ HSI_STATUS_TP_TIMEOUT = 201,
+ HSI_STATUS_TP_APPROACH_TIMEOUT = 202,
+ HSI_STATUS_TP_WRIST_ERROR,
+
+ HSI_STATUS_FG_COMM = 250,
+ HSI_STATUS_FG_TIMEOUT,
+ HSI_STATUS_FG_DIRECTX,
+ HSI_STATUS_FG_COLORDEPTH,
+
+ HSI_STATUS_LP_TIMEOUT = 300,
+ HSI_STATUS_LP_EXCEED_LIMIT = 301,
+
+ HSI_STATUS_VP_TIMEOUT = 350,
+ HSI_STATUS_VP_IMAGEPROCESS_FAIL
+ }
+
+ public const int HSI_APIVersionMajor = 1;
+ public const int HSI_APIVersionMinor = 3;
+ public const int HSI_MaxStringLength = 255; // Maximum string length (buffer size - 1)
+
+ public const int HSI_EF3Version = 0; //默认EF3版本号
+
+ public const uint HSI_MOTION_AXIS_ALL =
+ (uint)
+ (HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_X | HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Y |
+ HSI_MOTION_AXIS_TYPE.HSI_MOTION_AXIS_Z);
+
+ public const int HSI_MAX_POSITIONS_STORED = 500;
+
+ public const int HSI_ILLUMINATION_MAX_LAMPS = 6;
+ public const int HSI_ILLUMINATION_MAX_BULB_COLORS = 3;
+ public const int HSI_ILLUMINATION_MAX_RINGS = 12;
+ public const int HSI_ILLUMINATION_MAX_SECTORS = 16;
+ public const int HSI_ILLUMINATION_MAX_BULBS = HSI_ILLUMINATION_MAX_RINGS * HSI_ILLUMINATION_MAX_SECTORS;
+
+ public const int HSI_MaxLampNameLength = 29, HSI_MaxLampDescriptionLength = 255;
+
+ public struct Point
+ {
+ private double x;
+ private double y;
+ private double z;
+ }
+
+ public struct SHsiEventProperties
+ {
+ public uint EventId;
+ public uint EventCallbackId;
+ public HSI_EVENT_TYPE EventType;
+ public HSI_EVENT_RESPONSE_TYPE EventResponse;
+ public char[] EventData;
+
+ public void Init()
+ {
+ EventId = (uint)HSI_EVENT_FUNCTION_ID.HSI_EVENT_DONE;
+ EventCallbackId = 0;
+ EventType = HSI_EVENT_TYPE.HSI_EVENT_NONE;
+ EventResponse = HSI_EVENT_RESPONSE_TYPE.HSI_EVENT_CALLBACK;
+ EventData = new char[HSI_MaxStringLength + 1];
+ }
+ }
+ // Maximum string length (buffer size - 1)
+ }
+}
\ No newline at end of file
diff --git a/EF3/HexagonNew.ico b/EF3/HexagonNew.ico
new file mode 100644
index 0000000..4d44afa
Binary files /dev/null and b/EF3/HexagonNew.ico differ
diff --git a/EF3/MainForm.Designer.cs b/EF3/MainForm.Designer.cs
new file mode 100644
index 0000000..d79c841
--- /dev/null
+++ b/EF3/MainForm.Designer.cs
@@ -0,0 +1,190 @@
+namespace EF3
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.formsPlot1 = new ScottPlot.FormsPlot();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.btn_GoHome = new System.Windows.Forms.Button();
+ this.txt_EF3Version = new System.Windows.Forms.TextBox();
+ this.btn_GetPoints = new System.Windows.Forms.Button();
+ this.btn_StopScan = new System.Windows.Forms.Button();
+ this.btn_StartSCan = new System.Windows.Forms.Button();
+ this.btn_GetEF3Version = new System.Windows.Forms.Button();
+ this.btn_Plot = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // formsPlot1
+ //
+ this.formsPlot1.Location = new System.Drawing.Point(320, 12);
+ this.formsPlot1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ this.formsPlot1.Name = "formsPlot1";
+ this.formsPlot1.Size = new System.Drawing.Size(467, 417);
+ this.formsPlot1.TabIndex = 0;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.btn_GoHome);
+ this.groupBox1.Controls.Add(this.txt_EF3Version);
+ this.groupBox1.Controls.Add(this.btn_GetPoints);
+ this.groupBox1.Controls.Add(this.btn_StopScan);
+ this.groupBox1.Controls.Add(this.btn_StartSCan);
+ this.groupBox1.Controls.Add(this.btn_GetEF3Version);
+ this.groupBox1.Location = new System.Drawing.Point(12, 12);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(299, 173);
+ this.groupBox1.TabIndex = 1;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "操作面板";
+ //
+ // btn_GoHome
+ //
+ this.btn_GoHome.Location = new System.Drawing.Point(18, 86);
+ this.btn_GoHome.Name = "btn_GoHome";
+ this.btn_GoHome.Size = new System.Drawing.Size(75, 23);
+ this.btn_GoHome.TabIndex = 7;
+ this.btn_GoHome.Text = "回家";
+ this.btn_GoHome.UseVisualStyleBackColor = true;
+ this.btn_GoHome.Click += new System.EventHandler(this.btn_GoHome_Click);
+ //
+ // txt_EF3Version
+ //
+ this.txt_EF3Version.Location = new System.Drawing.Point(111, 37);
+ this.txt_EF3Version.Name = "txt_EF3Version";
+ this.txt_EF3Version.Size = new System.Drawing.Size(149, 23);
+ this.txt_EF3Version.TabIndex = 6;
+ //
+ // btn_GetPoints
+ //
+ this.btn_GetPoints.Location = new System.Drawing.Point(18, 135);
+ this.btn_GetPoints.Name = "btn_GetPoints";
+ this.btn_GetPoints.Size = new System.Drawing.Size(75, 23);
+ this.btn_GetPoints.TabIndex = 3;
+ this.btn_GetPoints.Text = "获取点";
+ this.btn_GetPoints.UseVisualStyleBackColor = true;
+ this.btn_GetPoints.Click += new System.EventHandler(this.btn_GetPoints_Click);
+ //
+ // btn_StopScan
+ //
+ this.btn_StopScan.Location = new System.Drawing.Point(192, 86);
+ this.btn_StopScan.Name = "btn_StopScan";
+ this.btn_StopScan.Size = new System.Drawing.Size(75, 23);
+ this.btn_StopScan.TabIndex = 2;
+ this.btn_StopScan.Text = "结束扫描";
+ this.btn_StopScan.UseVisualStyleBackColor = true;
+ this.btn_StopScan.Click += new System.EventHandler(this.btn_StopScan_Click);
+ //
+ // btn_StartSCan
+ //
+ this.btn_StartSCan.Location = new System.Drawing.Point(105, 86);
+ this.btn_StartSCan.Name = "btn_StartSCan";
+ this.btn_StartSCan.Size = new System.Drawing.Size(75, 23);
+ this.btn_StartSCan.TabIndex = 1;
+ this.btn_StartSCan.Text = "开始扫描";
+ this.btn_StartSCan.UseVisualStyleBackColor = true;
+ this.btn_StartSCan.Click += new System.EventHandler(this.btn_StartSCan_Click);
+ //
+ // btn_GetEF3Version
+ //
+ this.btn_GetEF3Version.Location = new System.Drawing.Point(18, 37);
+ this.btn_GetEF3Version.Name = "btn_GetEF3Version";
+ this.btn_GetEF3Version.Size = new System.Drawing.Size(75, 23);
+ this.btn_GetEF3Version.TabIndex = 0;
+ this.btn_GetEF3Version.Text = "获取固件版本";
+ this.btn_GetEF3Version.UseVisualStyleBackColor = true;
+ this.btn_GetEF3Version.Click += new System.EventHandler(this.btn_GetEF3Version_Click);
+ //
+ // btn_Plot
+ //
+ this.btn_Plot.Location = new System.Drawing.Point(687, 406);
+ this.btn_Plot.Name = "btn_Plot";
+ this.btn_Plot.Size = new System.Drawing.Size(75, 23);
+ this.btn_Plot.TabIndex = 4;
+ this.btn_Plot.Text = "绘制";
+ this.btn_Plot.UseVisualStyleBackColor = true;
+ this.btn_Plot.Click += new System.EventHandler(this.btn_Plot_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.textBox1);
+ this.groupBox2.Location = new System.Drawing.Point(12, 203);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(299, 226);
+ this.groupBox2.TabIndex = 2;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "打印日志";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(16, 33);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(261, 184);
+ this.textBox1.TabIndex = 3;
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.btn_Plot);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.formsPlot1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "Form1";
+ this.Text = "EF3测试";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private ScottPlot.FormsPlot formsPlot1;
+ private GroupBox groupBox1;
+ private TextBox txt_EF3Version;
+ private Button btn_Plot;
+ private Button btn_GetPoints;
+ private Button btn_StopScan;
+ private Button btn_StartSCan;
+ private Button btn_GetEF3Version;
+ private GroupBox groupBox2;
+ private TextBox textBox1;
+ private Button btn_GoHome;
+ }
+}
\ No newline at end of file
diff --git a/EF3/MainForm.cs b/EF3/MainForm.cs
new file mode 100644
index 0000000..657b4ee
--- /dev/null
+++ b/EF3/MainForm.cs
@@ -0,0 +1,118 @@
+using ScottPlot;
+using System.Runtime.InteropServices;
+using static EF3.HSI.HSI;
+
+namespace EF3;
+
+public partial class Form1 : Form
+{
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ private void btn_StartSCan_Click(object sender, EventArgs e)
+ {
+ //ɨ
+ Motion.DCCScanStart();
+ }
+
+ private void btn_GetEF3Version_Click(object sender, EventArgs e)
+ {
+ }
+
+ private void btn_StopScan_Click(object sender, EventArgs e)
+ {
+ //ɨ
+ Motion.DCCScanStop();
+ }
+
+ private void btn_GetPoints_Click(object sender, EventArgs e)
+ {
+ //ȡɨ
+ var dataCache = Marshal.AllocHGlobal(1000);
+ var pointCount = 0;
+ var data = new byte[1000];
+ Motion.GetPositionXyzCache(dataCache, ref pointCount);
+ Console.WriteLine("pointCount = " + pointCount);
+ Marshal.Copy(dataCache, data, 0, pointCount);
+
+ //Point
+ //ӡɨ
+ for (var i = 0; i < pointCount; i++) Console.WriteLine("Hex:{0} {1:X}", i, data[i]);
+ }
+
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ //1 ȡHSI Dll汾
+ uint major = Def.HSI_APIVersionMajor;
+ uint minjor = Def.HSI_APIVersionMinor;
+ var rStatus = Interface.GetInterfaceVersion(ref major, ref minjor);
+ Console.WriteLine("Interface.GetInterfaceVersion: {0}", rStatus);
+ Console.WriteLine("HSI.dll Version: {0}.{1}", major, minjor);
+
+ //2 HSI ʼ
+ var mainIntPtr = User32Api.GetCurrentWindowHandle();
+ rStatus = Interface.Startup(mainIntPtr, false);
+ Console.WriteLine("Interface.Startup: {0}", rStatus);
+
+ //3 ȡ
+ var machineVersion = Def.HSI_EF3Version;
+ rStatus = Interface.GetMachineInfo(ref machineVersion);
+ Console.WriteLine("Interface.GetMachineInfo: {0}", rStatus);
+ Console.WriteLine("HSI EF3 Version: {0}", machineVersion);
+
+ //4 ûصݻص
+ Interface.HsiCallback = Interface.EventCallback;
+ rStatus = Interface.SetEventCallback(Interface.HsiCallback);
+ Console.WriteLine("SetEventCallback:{0}", rStatus); //¼صɹ
+ }
+
+ private void btn_GoHome_Click(object sender, EventArgs e)
+ {
+ var rStatus = Motion.Startup(true); //˶ʼؼж
+ Console.WriteLine("Motion.Startup:{0}", rStatus);
+ }
+
+ private void btn_Plot_Click(object sender, EventArgs e)
+ {
+ //double[] dataX = { 1, 2, 3, 4, 5 };
+ //double[] dataY = { 1, 4, 9, 16, 25 };
+ //formsPlot1.Plot.AddScatter(dataX, dataY);
+ //formsPlot1.Refresh();
+
+ var plt = new ScottPlot.Plot(600, 400);
+
+ // plot some sample data
+ plt.AddSignal(DataGen.Sin(51));
+
+ // add arrows using coordinates
+ plt.AddArrow(25, 0, 27, .2);
+
+ // you can define a minimum length so the line persists even when zooming out
+ var arrow2 = plt.AddArrow(27, -.25, 23, -.5);
+ arrow2.Color = System.Drawing.Color.Red;
+ arrow2.MinimumLengthPixels = 100;
+
+ // the shape of the arrowhead can be adjusted
+ var skinny = plt.AddArrow(12, 1, 12, .5);
+ skinny.Color = System.Drawing.Color.Green;
+ skinny.ArrowheadLength = 5;
+ skinny.ArrowheadWidth = 2;
+
+ var fat = plt.AddArrow(20, .6, 20, 1);
+ fat.Color = System.Drawing.Color.Blue;
+ fat.ArrowheadLength = 2;
+ fat.ArrowheadWidth = 5;
+
+ // a marker can be drawn at the base of the arrow
+ var arrow3 = plt.AddArrow(30, -.58, 35, -.4);
+ arrow3.MarkerSize = 15;
+
+ plt.SaveFig("plottable_arrow_quickstart.png");
+ formsPlot1.Plot.Add(plt.GetPlottables()[1]);
+
+ formsPlot1.Refresh();
+ }
+}
\ No newline at end of file
diff --git a/EF3/MainForm.resx b/EF3/MainForm.resx
new file mode 100644
index 0000000..d695920
--- /dev/null
+++ b/EF3/MainForm.resx
@@ -0,0 +1,469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ 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
+ AP2YeQD+mXsA/Zl7AP2afAD+mXsA/Zl7AP2afAD/5r9C/+a/Qv/kvUD95r9C/+a/Qv/vxkb9q4gE/4lr
+ AP+RcgD9hmQA/+nbt///9er/elYA/cCsXP//+vH9/////9/NnP+ScwD9lXUA/5t9AP+ZewD9m30A/5t9
+ AP+ZewD95r9C/+a/Qv/kvUD95r9C/+nBQf/JqT/9zbh2/9G6cP/KsmH9z7x5///////9+/X/w6ZK/cCl
+ SP///v39/Pjw///+/P/////9sZo7/5Z3AP+ZewD9m30A/5t9AP+ZewD95L1A/eS9QP3lvkH+5L1A/eS7
+ Nv3025v+knUA/ebSn/3/8NH+/////f7///3////9+eS8/vnmwP33687+/////f7///3////+xbJq/ZJy
+ AP2afAD+mXsA/Zl7AP2XeQD+5r9C/+a/Qv/kvUD95r9C/+S7Nv/33Z390Lt4/3tYAP/ItWz9////////
+ ////////8tyt/fXiuf/z3Kz9/fz3///////////9wq9k/5R0AP+ZewD9m30A/5Z4AP+mhgn95r9C/+a/
+ Qv/kvUD95r9C/+S7Nv/v1Y79//Te/5R1AP//+O79+u3V//z06f//////+OO6/fXiuf/z37X99eK8////
+ ///////9wq9k/5R0AP+ZewD9lngA/51+Af/xyUz95r9C/+a/Qv/kvUD95r9C/+S7Nv/v1Y799eK6///5
+ 7v/779z9+u/b//vv2//269P/xKlT/f/02v/45cD99N6v//z06P/////9wq9k/5R0AP+UdwD9nX4B//DI
+ S//mv0L95L1A/eS9QP3lvkH+5L1A/eO6NP3v1Iz+9eTC/f////368uL++OzX/frv3f388eL9gF4A/pl7
+ AP3l0p7+//DU/fXgtf3////+wq9k/Y1uAP2dfgH+8chL/ea/Qv3lvkH+5r9C/+a/Qv/kvUD95r9C/+S7
+ Nv/tz4H9/v7//////////v/9+evU//zx3v/88uP/i2oA/Zl6AP+MbAD9rI8l/+3asv/////9vq5o/5Z1
+ AP/wyEv96MBD/+a/Qv/kvUD95L1A/eS9QP3lvkH+5L1A/eK4MP3047P+/////f39/v3+///+/PXr/fnu
+ 2f388uP9i2oA/pl7AP2YegD+iGwA/dKqHf311oP+yrhz/enAPP3mv0L+5L1A/eS9QP3lvkH+5r9C/+a/
+ Qv/kvUD95r9C/+W+P//lvT399uvI///////+///9/v////ru2v/88uP/i2oA/Zp8AP+OcQD937k8/+zE
+ R//jujf96b87/+fAQ//kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvD3947Yn/+fD
+ Tv/8+vH9///////9+v/8797/imkA/Y5xAP/huz797MRH/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/
+ Qv/kvUD95L1A/+S9QP/lvkH+5L1A/eS9QP3lvkH+5L1A/eO7Of3hsyD+7dF5/f////3++fX9gF8A/uG7
+ Pv3qwkX+5L1A/eS9QP3lvkH+5L1A/eS9QP3lvkH+5L1A/eS9QP3lvkH+9MpGVua/Qv/kvUD/5r9C/+a/
+ Qv/kvUD95r9C/+a/Qv/kvUD95Lo1/+O3KP/v3af/1K0n/evER//kvUD95r9C/+a/Qv/kvUD95r9C/+a/
+ Qv/kvUD95r9C/+a/Qv/kvUD9AAAAAAAAAADtxEOi5r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a+
+ QP/luzb/58BD/ea/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD9AAAAAAAA
+ AAAAAAAA/9hKHejAQdTlvkH/5L1A/+S9QP3lvkH+5L1A/eS9QP3kvUD95b5B/uS9QP3lvkH+5L1A/eS9
+ QP3lvkH+5L1A/eS9QP3lvkH+5L1A/eS9QP3lvkH+AAAAAAAAAAAAAAAAAAAAAAAAAAD6z0dM58BC+Oa/
+ Qv/kvUD+5r9C/+a/Qv/mv0L/5L1A/ea/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/
+ Qv/kvUD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPKRn7kvUD/5r9C/+a/Qv/mv0L/5L1A/ea/
+ Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD95r9C/+a/Qv/kvUD/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADwx0QD5L1AoOS9QPzkvUD+5b5B/uS9QP3lvkH+5L1A/eS9QP3lvkH+5L1A/eS9
+ QP3lvkH+5L1A/eS9QP/lvkHpAAA/AAAADwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADgAAAA+AAAAP4AAAD/AAAAKAAAACAA
+ AABAAAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAOa/Qtjmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+7GSf/XsjX/lHUA/5p9AP+bfQD/m30A/5t9
+ AP+bfQDBm30AKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/uxkn/064x/4xuAP+afQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30AtaaGAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/7sZJ/9OuMf+MbgD/mn0A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5x+AIIAAAAAAAAAAAAAAAAAAAAAAAAAAOa/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+7GSf/TrjH/jG4A/5p9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9APqegABOAAAAAAAA
+ AAAAAAAA5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/uxkn/064x/4xu
+ AP+afQD/lXYA/5NzAP+YegD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP+bfQDWooMAHwAAAADmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/7sZJ/9Ou
+ Mf+MbgD/mn0A/5R1AP+5o03/39Gk/5t9AP+QbwD/mnwA/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30AeOa/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+7G
+ Sf/TrjH/jG4A/5p9AP+ZewD/kXIA///58f+dgAX//////9G9gf+MawD/lHQA/5t8AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/uxkn/064x/4xuAP+afQD/m30A/45tAP/dzJn///bq/39bAP/j06j////7///79f+6o0z/iGcA/5d4
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/7sZI/9KtL/+LbQD/mnwA/5p8AP+XeAD/nYAI///////47tr/i2kA/5N0AP////7//PHf///+
+ 9//269b/pIcX/4xrAP+ZegD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+nCRP/Oqi3/h2sA/5FyAP+RcgD/kXIA/4VjAP/u4sT///Tl//fq0/+CYAD/hmQA/8Gr
+ XP//9+r/+e3X//zx3v////3/4dCi/5l7AP+ZegD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/6b87/8y0bP/p16n////y///02v//8NH///no///////////////////u
+ zP//8tb/+ua+////////////////////////////3NKn/5FwAP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/kujL//+3J/4ZnAP+pjCD/9eO///nluv/+////////////
+ ///+/v7/892u//Xiuf/04LT/9+nM///////////////////////VyJT/kXAA/5t9AP+bfQD/m30A/5t9
+ AP+bfQD/mXsA/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+S6Mv/55Lj/38uU/4hoAP+DYgD/3c6f////
+ //////////////7+/v/z3a7/9eK5//Xiuf/z3Kv//fz5/////////////////9XIlP+RcAD/m30A/5t9
+ AP+bfQD/m30A/5h6AP+dfwL/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5Loy//Perv//89v/o4YT/45v
+ AP///Pf/+e3Y//348//+/////v////Pdrv/14rn/9eK5//Thtv/1473/////////////////1ciU/5Fw
+ AP+bfQD/m30A/5t9AP+YegD/lHcA/+7GSf/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/kujL/896u//jm
+ wv/o0pz/1sOK///26P/67tr/+e3W//rw3f///v3//unE//fkvP/14rn/9eK5//Per//79ur/////////
+ ///VyJT/kXAA/5t9AP+bfQD/mHoA/5R3AP/txUj/6cFE/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+S6
+ Mv/z3q7/9eK6//jpyf///v3/+e3Y//rv2//679v//PHe//HkyP+hhA//+ejG//7szP/14rr/9OG3//Tf
+ sv///////////9XIlP+RcAD/m30A/5h6AP+UdwD/7cVI/+nBRP/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5Loy//Perv/z3a///v38///////57NX/+u7a//rv2//88d//+O7a/4hmAP+LawD/xa1b///x
+ 1v/76cX/9N+y//ju2f//////1ciU/5FwAP+YegD/lHcA/+3FSP/pwUT/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/kujL/89yp//fs0/////////////v48P/57db/+u/b//zx3//47tr/jWwA/5p8
+ AP+ScwD/knMA/9rEh///89n/9N2x///////VyZX/jm4A/5R3AP/txUj/6cFE/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+S6Mf/x2qP//////////////////v////ju2v/67tr//PHf//ju
+ 2v+NbAD/m30A/5t9AP+ZewD/jm4A/5h7CP/14bP///fr/9PLnv+KagD/7cVI/+nBRP/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/47cr//v27f///////////////////////fv5//ns
+ 1P/88d//+O7a/41sAP+bfQD/m30A/5t9AP+McAD/xqEg/+m9Mf/tzG3/1MWN/+S6NP/pwUT/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvTz/5sJM//v26P//////////////
+ ////////+vDi//zw3f/47tr/jWwA/5t9AP+bfQD/jHAA/8uoK//wyEv/5r9B/+W8Ov/ovjj/58BD/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvTz/4bMg/+vM
+ bP/////////////////+/v//++7X//ju2v+NbAD/m30A/4xwAP/NqCv/8MhL/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5Ls2/+C0If/y25v////////////++O7/+OzX/41sAP+McAD/zagr//DIS//mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r5B/+O5L//juC//9uvI///////47tz/fl8A/82oK//wyEv/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+fAQlvmv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+W+Pv/itif/6cdV//Hr3P+/mA7/8MhL/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/AAAAAPTL
+ RgXmv0K05r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvDv/5bow/+vD
+ Rv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv8AAAAAAAAAAAAAAADtxUQs5r9C4ua/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/wAAAAAAAAAAAAAAAAAAAAAAAAAA6cFDXea/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOa/QpDmv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHI
+ RRDmv0LD5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADrw0M65r9C7ea/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5r9CZea/QuHmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/QtgAAAD/AAAAPwAA
+ AB8AAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOAAAAD4AAAA/gAAAP8AAAD/wAAA//AAACgA
+ AAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAADmv0Ko5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+fAQ//zyk3/ro8S/5d6AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9APqbfQC6m30AOwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5b5B/fPJTP2mhwr/knUA/Zl7AP2bfQD/mXsA/Zl7AP2bfQD/mXsA/Zt9
+ AP+ZewD/mXsA/5t9AMWZewAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADmv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3nwEP/88lM/aeHCv2UdgD/mXsA/Zl7AP2bfQD/mXsA/Zl7
+ AP2bfQD/mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD/mXsAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+fAQ//zyUz/pocK/5R2AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQBhAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5b5B/fPJTP2mhwr/knUA/Zl7
+ AP2bfQD/mXsA/Zl7AP2bfQD/mXsA/Zl7AP2bfQD/mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD/mXsA4pt9ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3nwEP/88lM/aeH
+ Cv2UdgD/mXsA/Zl7AP2bfQD/mXsA/Zl7AP2bfQD/mXsA/Zl7AP2bfQD/mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/5t9AP+ZewC2mXsACQAAAAAAAAAAAAAAAAAAAADmv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+fA
+ Q//zyUz/pocK/5R2AP+bfQD/m30A/5l6AP+YeQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AIUAAAAAAAAAAAAA
+ AADmv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9
+ QP3mv0L/5b5B/fPJTP2mhwr/knUA/Zl7AP2bfQD/l3gA/aSIGP2uljH/jGsA/Zh5AP2bfQD/mXsA/Zl7
+ AP2bfQD/mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/pt9
+ AP+ZewD4mXsAUgAAAADmv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/
+ Qv/kvUD95L1A/eS9QP3nwEP/88lM/aeHCv2UdgD/mXsA/Zl7AP2bfAD/jG0A/ePUq/3dzJz/5NWs/ZFx
+ AP2ScgD/mXsA/Zl7AP2bfQD/mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD/mXsA/5l7AIDmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+fAQ//zyUz/pocK/5R2AP+bfQD/m30A/5t9AP+TcwD/wKpZ//vw
+ 4P+CYAD////////////Fr2T/i2oA/5V2AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95b5B/fPJTP2mhwr/knUA/Zl7AP2bfQD/mXsA/Zh6
+ AP2PbgD////5/fLlyv2GZAD/wKlY/f/89f3//PP//PLj/a+WNP2KaQD/lngA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zl7AP7mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/nwEP/88lM/6eHCv+TdgD/m30A/5t9
+ AP+bfQD/m30A/49vAP/SwIX///31//Djx/+ObQD/imoA//ju3P/98uH//PLg////+//r3r7/mn4D/49u
+ AP+aewD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/efAQ//zyUz9pogK/ZJ1
+ AP2bfQD/mXsA/Zl7AP2bfQD/lngA/Zl7AP3//////PHh/fDjx/2ObgD/lHUA/amQJv3///7/+O3Z/fjt
+ 2f3+9OX//////dbFjf+PbwD9kXEA/Zt8AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zl7AP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5b5A/fLI
+ Sv+lhgj9kXQA/ph6AP2afAD/mHoA/Zh6AP2afAD/imkA/ejbt/3/9eX/+/Hg/fDjx/2NbQD/mHoA/Ytp
+ AP3m2LL//fPk/fjt2f3679r/+O3Z/f/47P///PT9v6hW/YpqAP+VdQD9mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD9mnwA/pp8AP7mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/6sNF/amLEf+OcQD9lHUA/ZR1AP2UdQD/lHUA/ZR1AP2PcAD/rZMu/f/++f357dn//PHg/e3g
+ wf2FYgD/kXEA/Y5uAP2QcQD///ry/fnu2v357dn/+e3Z/fnt2f/679v9//vz/fnu2/+pkCb9lXYA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zl7AP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/lvj7/7Mhe/72nYP//9N3///zn///y1v//8dX///HV///x1f//7cn/////////
+ ////////////////////7s3///LW///y1v//7Mr/+/Xo////////////////////////////////////
+ ////////jWsA/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP+bfQD/m30A/5t9AP/mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/7MdZ/eDNn/9+XQD9xq5i/f/x1f376MT/8+C3/fLe
+ sf347tf//////f39/f3//////f7//f78+P3z3q//8+C3/fPgt/314bj/8t6w/f////3//////f39/f//
+ ///9/f39/f39/f/////6+PT9i2kA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zl7
+ AP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/58JR/f/25P+ojiL9i2sA/ZV2
+ AP3cx47///LX/fTgtP3//////f7+/f39/f3//////f7//f78+P3z3q//8+C3/fPgt/314rn/8t6x/fjr
+ 0f3//////f39/f/////9/f39/f39/f/////6+PT9i2kA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9
+ AP+ZewD9mXsA/Zl7AP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvT3/58JQ//np
+ zf/14r3/i2wA/5l6AP+NbgD/nX4F//nz5/////////////////////////////77+P/z3q//9eK5//Xi
+ uf/14rn/9eK5//Pcq//+/f3////////////////////////////6+PT/jWsA/5t9AP+bfQD/m30A/5t9
+ AP+bfQD/m30A/5t9AP+bfQD/mnwA/5Z4AP/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3lvj3/58JQ/ffmyP/+7Mz9v6VR/ZFyAP2YeQD/nH4D/f/78v389On//v///f7+//3//////f7//f78
+ +P3z3q//8+C3/fPgt/314rn/8+C3/fPftP315cL//////f/////9/f39/f39/f/////6+PT9i2kA/Zt9
+ AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zt9AP+YegD9jnAA/d65PP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3lvj3/58JQ/ffmyP/04bn9/+3R/ZByAP2IaAD/7eHC/fzy4v357tj/+ezV/fz4
+ 8P3+/////v///f78+P3z3q//8+C3/fPgt/314rn/8+C3/fPgt/3z3a7/+/fu/f/////9/f39/f39/f//
+ ///6+PT9i2kA/Zt9AP+ZewD9mXsA/Zt9AP+ZewD9mXsA/Zp8AP+OcAD927Y5/evDRv3mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvT3/58JQ//fmyP/14rn//OrH/8+3cP+pjyT///76//rv
+ 2//679v/+u/a//nt1v/47tr//fz7///////24bT/9eK5//Xiuf/14rn/9eK5//Xiuf/04bf/9OG1////
+ ///////////////////6+PT/jWsA/5t9AP+bfQD/m30A/5t9AP+bfQD/mnwA/41wAP/ctjn/7cVI/+a/
+ Qv/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/58JQ/ffmyP/z4Lf98+C3/fnk
+ vf327dz/+u/c/fjt2f3679v/+O3Z/fjt2f367tr/++7Z/fHnzv3p1KL//u3N/fThuf314rn/8+C3/fPg
+ t/314rn/8t2w/frx3v/+///9/f39/f/////6+PT9i2kA/Zt9AP+ZewD9mXsA/Zt9AP+YegD9jnAA/du2
+ Of/rw0b95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/58JQ/ffm
+ yP/z4Lf98t2w/frx3v3/////+ezU/fjt2f3679v/+O3Z/fjt2f3679v/+/Hg/e7gwv1/XAD/vaRO/f/u
+ 0v386sf/9OG4/fPgt/314rn/8+C3/fPdrf/+///9/f7//f/////6+PT9i2kA/Zt9AP+ZewD9mXsA/Zp8
+ AP+OcAD927Y5/e3FSP/kvUD95L1A/eS9QP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/lvT3/58JQ//fmyP/14bf/9N+1////////////+vLl//ru2P/679v/+u/b//rv2//679v//fPi//Dj
+ x/+ObQD/k3QA/45vAP/TvXn///LX//nnwf/14rn/9eK5//TgtP/36cz////////////6+PT/jWsA/5t9
+ AP+bfQD/mnwA/41wAP/ctjn/7cVI/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3lvj3/58JQ/ffmyP/y3a79/Pft/f7///3//////////fnr1P3679v/+O3Z/fjt
+ 2f3679v/+/Hg/fDjx/2ObgD/mXsA/Zh6AP2PcAD/nH4G/ebSov3/8NP/9eK7/fXiuf/z3Kz9/fz5/f//
+ ///6+PT9i2kA/Zt9AP+YegD9jnAA/du2Of/rw0b95L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/58JQ/fblxf/15cD9/////f39/f3//////v///fz3
+ 7f357df/+O3Z/fjt2f3679v/+/Hg/fDjx/2ObgD/mXsA/Zl7AP2bfQD/lngA/YtrAP2uky3/+ObD/f/t
+ zf/z4Lb99eO9/f/////6+fT9i2kA/Zp8AP+OcAD927Y5/e3FSP/kvUD95L1A/ea/Qv/kvUD95L1A/eS9
+ QP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/lvT3/58JQ//Xhuv/+/fz/////////
+ //////////////7////47tj/+u/a//rv2//679v//fPi//Djx/+ObQD/m30A/5t9AP+bfQD/m30A/5t9
+ AP+WdwD/imsA/8GoVv/458z/9eG3//758P/7+vn/jGoA/41wAP/ctjn/7cVI/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvj3/58BL/fnw
+ 3//////9/f39/f39/f3//////f39/f7+//39+vb/9+vV/fjt2f3679v/+/Hg/fDjx/2ObgD/mXsA/Zl7
+ AP2bfQD/mXsA/Zl7AP2bfQD/lHYA/ZR0AP/mvjz98NeY/fjnzf/6/v/9gF4A/du2Of/rw0b95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3lvT3/5sJR/f/////+///9/f39/f39/f3//////f39/f39/f3+////+vHf/fjs2P3679v/+/Hg/fDj
+ x/2ObgD/mXsA/Zl7AP2bfQD/mXsA/Zl7AP2WeAD/m30A/e7HSv/mvj/95Low/ejCTP/s4L/9zqcf/e3F
+ SP/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0H/5Lk0/+3Ug/////////////////////////////////////////3+//ns
+ 1P/679v//fPi//Djx/+ObQD/m30A/5t9AP+bfQD/m30A/5V4AP+egAP/8MZJ/+jBRP/mv0L/5r9C/+W9
+ Pf/luzP/6cJF/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS6M//htin98+Ow/f////3//////f39/f39
+ /f3//////v///fr05/367tj/+/Hg/fDjx/2ObgD/mXsA/Zl7AP2bfQD/lHYA/Z6AAv3xyUz/5r9C/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9
+ QP3mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mvkD/47cr/+a+
+ P//5893////////////////////////////57dX//fPi//Djx/+ObQD/m30A/5t9AP+VeAD/noAC//HI
+ S//nwEP/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/
+ Qv/kvUD95L1A/eS8O/3itCL/6sli/f3+//3//////f7//f7///389/D/++/c/fDjx/2ObgD/mXsA/ZR2
+ AP2ggQT/8clM/ea/Qv3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/47o2/eGzIP3w2ZD//////f////3//////PLg/fDj
+ xv2ObgD/lHYA/Z6AAv3xyUz/5r5B/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L25r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qf/juTH/47cu//Xo
+ u////////////+/gwf+IaQD/noAC//HIS//nwEP/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0Ja5L1A/+S9
+ QP/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5Lw9/eG1KP3lwEb///zz/fDs5P2TcQD/8clM/ea/Qv3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9
+ QP0AAAAA5L1AI+S9QNLmv0L/5L1A/+S9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3lvTz/47Ym/ePGZ/3nvz7/5r5B/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAAAADmv0JO5r9C+ea/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a+PP/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv8AAAAAAAAAAAAAAAAAAAAAAAAAAOS9QIDmv0L/5L1A/+S9
+ QP7mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADmv0IK5L1As+S9QP/mv0L/5L1A/ea/Qv/kvUD95L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOa/Qi3mv0Li5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5L1AXea/Qv/kvUD/5L1A/uS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADkvUCQ5L1A/+S9QP/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA5r9CE+a/QsLmv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/
+ Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv/mv0L/5r9C/+a/Qv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmv0I65L1A6uS9QP/mv0L/5L1A/eS9
+ QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/Qv/kvUD95L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/eS9QP0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOS9
+ QGvmv0L/5L1A/+S9QP/mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/ea/
+ Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95L1A/ea/Qv/kvUD95b5B/uW+
+ Qf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA5L1Ah+S9QOPmv0L/5L1A/eS9QP3mv0L/5L1A/eS9QP3mv0L/5L1A/eS9
+ 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
+ MZeYvYdTAAAAAElFTkSuQmCC
+
+
+
\ No newline at end of file
diff --git a/EF3/Program.cs b/EF3/Program.cs
new file mode 100644
index 0000000..14db088
--- /dev/null
+++ b/EF3/Program.cs
@@ -0,0 +1,17 @@
+namespace EF3
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EF3/Resource.Designer.cs b/EF3/Resource.Designer.cs
new file mode 100644
index 0000000..50a00b1
--- /dev/null
+++ b/EF3/Resource.Designer.cs
@@ -0,0 +1,90 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace EF3 {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class Resource {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resource() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EF3.Resource", typeof(Resource).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// 查找类似 提示 的本地化字符串。
+ ///
+ public static string Interface_Tips {
+ get {
+ return ResourceManager.GetString("Interface_Tips", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 准备回家 的本地化字符串。
+ ///
+ public static string Interface_Tips_Home_Machine {
+ get {
+ return ResourceManager.GetString("Interface_Tips_Home_Machine", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 定位完成 的本地化字符串。
+ ///
+ public static string Interface_Tips_Motion_Finished {
+ get {
+ return ResourceManager.GetString("Interface_Tips_Motion_Finished", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/EF3/Resource.resx b/EF3/Resource.resx
new file mode 100644
index 0000000..aad10f8
--- /dev/null
+++ b/EF3/Resource.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 提示
+
+
+ 准备回家
+
+
+ 定位完成
+
+
\ No newline at end of file
diff --git a/EF3/User32Api.cs b/EF3/User32Api.cs
new file mode 100644
index 0000000..34adaaa
--- /dev/null
+++ b/EF3/User32Api.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EF3
+{
+ class User32Api
+ {
+ private static readonly Hashtable ProcessWnd = null;
+
+ public delegate bool Wndenumproc(IntPtr hwnd, uint lParam);
+
+ static User32Api()
+ {
+ if (ProcessWnd == null)
+ {
+ ProcessWnd = new Hashtable();
+ }
+ }
+
+ [DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
+ public static extern bool EnumWindows(Wndenumproc lpEnumFunc, uint lParam);
+
+ [DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
+ public static extern IntPtr GetParent(IntPtr hWnd);
+
+ [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
+ public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
+
+ [DllImport("user32.dll", EntryPoint = "IsWindow")]
+ public static extern bool IsWindow(IntPtr hWnd);
+
+ [DllImport("kernel32.dll", EntryPoint = "SetLastError")]
+ public static extern void SetLastError(uint dwErrCode);
+
+ public static IntPtr GetCurrentWindowHandle()
+ {
+ IntPtr ptrWnd = IntPtr.Zero;
+ uint uiPid = (uint)System.Diagnostics.Process.GetCurrentProcess().Id; // 当前进程 ID
+ object objWnd = ProcessWnd[uiPid];
+
+ if (objWnd != null)
+ {
+ ptrWnd = (IntPtr)objWnd;
+ if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd)) // 从缓存中获取句柄
+ {
+ return ptrWnd;
+ }
+ else
+ {
+ ptrWnd = IntPtr.Zero;
+ }
+ }
+
+ bool bResult = EnumWindows(new Wndenumproc(EnumWindowsProc), uiPid);
+ // 枚举窗口返回 false 并且没有错误号时表明获取成功
+ if (!bResult && Marshal.GetLastWin32Error() == 0)
+ {
+ objWnd = ProcessWnd[uiPid];
+ if (objWnd != null)
+ {
+ ptrWnd = (IntPtr)objWnd;
+ }
+ }
+
+ return ptrWnd;
+ }
+
+ private static bool EnumWindowsProc(IntPtr hwnd, uint lParam)
+ {
+ uint uiPid = 0;
+
+ if (GetParent(hwnd) == IntPtr.Zero)
+ {
+ GetWindowThreadProcessId(hwnd, ref uiPid);
+ if (uiPid == lParam) // 找到进程对应的主窗口句柄
+ {
+ ProcessWnd[uiPid] = hwnd; // 把句柄缓存起来
+ SetLastError(0); // 设置无错误
+ return false; // 返回 false 以终止枚举窗口
+ }
+ }
+
+ return true;
+ }
+
+ }
+}
diff --git a/EF3/bin/Debug/net6.0-windows/EF3.deps.json b/EF3/bin/Debug/net6.0-windows/EF3.deps.json
new file mode 100644
index 0000000..f9b0657
--- /dev/null
+++ b/EF3/bin/Debug/net6.0-windows/EF3.deps.json
@@ -0,0 +1,697 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "EF3/1.0.0": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "Avalonia.Desktop": "0.10.18",
+ "ScottPlot.WinForms": "4.1.59"
+ },
+ "runtime": {
+ "EF3.dll": {}
+ }
+ },
+ "Avalonia/0.10.18": {
+ "dependencies": {
+ "Avalonia.Remote.Protocol": "0.10.18",
+ "JetBrains.Annotations": "10.3.0",
+ "System.ComponentModel.Annotations": "4.5.0",
+ "System.Memory": "4.5.3",
+ "System.Reactive": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.6.0",
+ "System.ValueTuple": "4.5.0"
+ },
+ "runtime": {
+ "lib/netcoreapp2.0/Avalonia.Animation.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Base.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Controls.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.DesignerSupport.dll": {
+ "assemblyVersion": "0.7.0.0",
+ "fileVersion": "0.7.0.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.DesktopRuntime.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Dialogs.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Input.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Interactivity.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Layout.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Markup.Xaml.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Markup.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.MicroCom.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.OpenGL.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Styling.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Themes.Default.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Themes.Fluent.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.Visuals.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ },
+ "lib/netcoreapp2.0/Avalonia.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.0.2020091801": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/av_libglesv2.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "2.1.0.0"
+ },
+ "runtimes/win7-x64/native/av_libglesv2.dll": {
+ "rid": "win7-x64",
+ "assetType": "native",
+ "fileVersion": "2.1.0.0"
+ },
+ "runtimes/win7-x86/native/av_libglesv2.dll": {
+ "rid": "win7-x86",
+ "assetType": "native",
+ "fileVersion": "2.1.0.0"
+ }
+ }
+ },
+ "Avalonia.Desktop/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "Avalonia.Native": "0.10.18",
+ "Avalonia.Skia": "0.10.18",
+ "Avalonia.Win32": "0.10.18",
+ "Avalonia.X11": "0.10.18"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.Desktop.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.FreeDesktop/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "Tmds.DBus": "0.9.0"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.FreeDesktop.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.Native/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.Native.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ },
+ "runtimeTargets": {
+ "runtimes/osx/native/libAvaloniaNative.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "Avalonia.Remote.Protocol/0.10.18": {
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.Remote.Protocol.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.Skia/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "HarfBuzzSharp": "2.8.2.1-preview.108",
+ "HarfBuzzSharp.NativeAssets.Linux": "2.8.2.1-preview.108",
+ "HarfBuzzSharp.NativeAssets.WebAssembly": "2.8.2.1-preview.108",
+ "SkiaSharp": "2.88.1-preview.108",
+ "SkiaSharp.NativeAssets.Linux": "2.88.1-preview.108",
+ "SkiaSharp.NativeAssets.WebAssembly": "2.88.1-preview.108"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.Skia.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.Win32/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "Avalonia.Angle.Windows.Natives": "2.1.0.2020091801",
+ "System.Drawing.Common": "4.6.1",
+ "System.Numerics.Vectors": "4.5.0"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.Win32.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "Avalonia.X11/0.10.18": {
+ "dependencies": {
+ "Avalonia": "0.10.18",
+ "Avalonia.FreeDesktop": "0.10.18",
+ "Avalonia.Skia": "0.10.18"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Avalonia.X11.dll": {
+ "assemblyVersion": "0.10.18.0",
+ "fileVersion": "0.10.18.0"
+ }
+ }
+ },
+ "HarfBuzzSharp/2.8.2.1-preview.108": {
+ "dependencies": {
+ "HarfBuzzSharp.NativeAssets.Win32": "2.8.2.1-preview.108",
+ "HarfBuzzSharp.NativeAssets.macOS": "2.8.2.1-preview.108"
+ },
+ "runtime": {
+ "lib/net6.0/HarfBuzzSharp.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "2.8.2.1"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/2.8.2.1-preview.108": {
+ "dependencies": {
+ "HarfBuzzSharp": "2.8.2.1-preview.108"
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libHarfBuzzSharp.so": {
+ "rid": "linux-arm",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-arm64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-musl-x64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-musl-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-x64/native/libHarfBuzzSharp.so": {
+ "rid": "linux-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/2.8.2.1-preview.108": {
+ "runtimeTargets": {
+ "runtimes/osx/native/libHarfBuzzSharp.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/2.8.2.1-preview.108": {},
+ "HarfBuzzSharp.NativeAssets.Win32/2.8.2.1-preview.108": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libHarfBuzzSharp.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x64/native/libHarfBuzzSharp.dll": {
+ "rid": "win-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x86/native/libHarfBuzzSharp.dll": {
+ "rid": "win-x86",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "JetBrains.Annotations/10.3.0": {
+ "dependencies": {
+ "System.Runtime": "4.1.0"
+ },
+ "runtime": {
+ "lib/netstandard1.0/JetBrains.Annotations.dll": {
+ "assemblyVersion": "10.3.0.0",
+ "fileVersion": "10.3.0.0"
+ }
+ }
+ },
+ "Microsoft.NETCore.Platforms/3.0.0": {},
+ "Microsoft.NETCore.Targets/1.0.1": {},
+ "Microsoft.Win32.SystemEvents/4.6.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "3.0.0"
+ }
+ },
+ "ScottPlot/4.1.59": {
+ "dependencies": {
+ "System.Drawing.Common": "4.6.1",
+ "System.Numerics.Vectors": "4.5.0"
+ },
+ "runtime": {
+ "lib/net6.0/ScottPlot.dll": {
+ "assemblyVersion": "4.1.59.0",
+ "fileVersion": "4.1.59.0"
+ }
+ }
+ },
+ "ScottPlot.WinForms/4.1.59": {
+ "dependencies": {
+ "ScottPlot": "4.1.59"
+ },
+ "runtime": {
+ "lib/net6.0-windows7.0/ScottPlot.WinForms.dll": {
+ "assemblyVersion": "4.1.59.0",
+ "fileVersion": "4.1.59.0"
+ }
+ }
+ },
+ "SkiaSharp/2.88.1-preview.108": {
+ "dependencies": {
+ "SkiaSharp.NativeAssets.Win32": "2.88.1-preview.108",
+ "SkiaSharp.NativeAssets.macOS": "2.88.1-preview.108"
+ },
+ "runtime": {
+ "lib/net6.0/SkiaSharp.dll": {
+ "assemblyVersion": "2.88.0.0",
+ "fileVersion": "2.88.1.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.1-preview.108": {
+ "dependencies": {
+ "SkiaSharp": "2.88.1-preview.108"
+ },
+ "runtimeTargets": {
+ "runtimes/linux-arm/native/libSkiaSharp.so": {
+ "rid": "linux-arm",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-arm64/native/libSkiaSharp.so": {
+ "rid": "linux-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-musl-x64/native/libSkiaSharp.so": {
+ "rid": "linux-musl-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/linux-x64/native/libSkiaSharp.so": {
+ "rid": "linux-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.1-preview.108": {
+ "runtimeTargets": {
+ "runtimes/osx/native/libSkiaSharp.dylib": {
+ "rid": "osx",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.1-preview.108": {},
+ "SkiaSharp.NativeAssets.Win32/2.88.1-preview.108": {
+ "runtimeTargets": {
+ "runtimes/win-arm64/native/libSkiaSharp.dll": {
+ "rid": "win-arm64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x64/native/libSkiaSharp.dll": {
+ "rid": "win-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ },
+ "runtimes/win-x86/native/libSkiaSharp.dll": {
+ "rid": "win-x86",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "System.ComponentModel.Annotations/4.5.0": {},
+ "System.Drawing.Common/4.6.1": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "3.0.0",
+ "Microsoft.Win32.SystemEvents": "4.6.0"
+ }
+ },
+ "System.Memory/4.5.3": {},
+ "System.Numerics.Vectors/4.5.0": {},
+ "System.Reactive/5.0.0": {
+ "runtime": {
+ "lib/net5.0/System.Reactive.dll": {
+ "assemblyVersion": "5.0.0.0",
+ "fileVersion": "5.0.0.1"
+ }
+ }
+ },
+ "System.Reflection.Emit/4.7.0": {},
+ "System.Runtime/4.1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "3.0.0",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe/4.6.0": {},
+ "System.Security.Principal.Windows/4.7.0": {},
+ "System.ValueTuple/4.5.0": {},
+ "Tmds.DBus/0.9.0": {
+ "dependencies": {
+ "System.Reflection.Emit": "4.7.0",
+ "System.Security.Principal.Windows": "4.7.0"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Tmds.DBus.dll": {
+ "assemblyVersion": "0.9.0.0",
+ "fileVersion": "0.9.0.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "EF3/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Avalonia/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-hA7US1I75f+ztOyqFWXdzkyJDU9FxcMktfmnmey2uPb+9Cn2GSTU+/7t08CMAyMxuCBpWjlOwkdCZh1cPFWHpg==",
+ "path": "avalonia/0.10.18",
+ "hashPath": "avalonia.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.Angle.Windows.Natives/2.1.0.2020091801": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-nGsCPI8FuUknU/e6hZIqlsKRDxClXHZyztmgM8vuwslFC/BIV3LqM2wKefWbr6SORX4Lct4nivhSMkdF/TrKgg==",
+ "path": "avalonia.angle.windows.natives/2.1.0.2020091801",
+ "hashPath": "avalonia.angle.windows.natives.2.1.0.2020091801.nupkg.sha512"
+ },
+ "Avalonia.Desktop/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7NgFqsyN2hS3NRheou5M3chQzqe/A3pP98iDFFvlzRNEfMC1qyuOULWRdetmAIrs3L4xiQ248ICsJhIssuJxuw==",
+ "path": "avalonia.desktop/0.10.18",
+ "hashPath": "avalonia.desktop.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.FreeDesktop/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-DVCBasTcXHwc271rt8NT0e5hRpKFZP69+wSOo+eVWxCSXic9fyPx2kTBXzJZ1lrXaxYT2Mf6DIXLP/wfh3nyVQ==",
+ "path": "avalonia.freedesktop/0.10.18",
+ "hashPath": "avalonia.freedesktop.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.Native/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-iBMV/mYK6vM+cwKFfuFwayF7cUHYqfUUsZKuHb64FmYQEL+lEGhDY1Z8YT2s9YiZO+r+KvMwzWpVPdWOjjonaQ==",
+ "path": "avalonia.native/0.10.18",
+ "hashPath": "avalonia.native.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.Remote.Protocol/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-YRymqWJWBDTM+o1CRs5ymAXQpd26erystkyavPgk10bWR4o3D657yFp0oCdfJek2Eba+agazcbZEmB8rdO8eiA==",
+ "path": "avalonia.remote.protocol/0.10.18",
+ "hashPath": "avalonia.remote.protocol.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.Skia/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-QY3W/Hb3PfOW6mM0E9y1TsUeOjuECGwoXoHhmPmiBmNismXxOkLeXJUYNcUkCxTgKYjj6ZNfFYc5wbHWVJ2Hsw==",
+ "path": "avalonia.skia/0.10.18",
+ "hashPath": "avalonia.skia.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.Win32/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-NcfRy+gVQebKEOU9XNwbjJDrgV08sJMSQmFnJRdfKf0uniU0hzgfTrDi/5XEtaxJvfzVpd8xQWYh2E6ByJ28cQ==",
+ "path": "avalonia.win32/0.10.18",
+ "hashPath": "avalonia.win32.0.10.18.nupkg.sha512"
+ },
+ "Avalonia.X11/0.10.18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-9w4X7y6vZ+0l4Vpj0/TM2s4vwjAcY9N72mX91c5KP0vaMo4Yol7XUb/Ygekkk3tRb9nlvEx+3oywXnZfPYQ2Og==",
+ "path": "avalonia.x11/0.10.18",
+ "hashPath": "avalonia.x11.0.10.18.nupkg.sha512"
+ },
+ "HarfBuzzSharp/2.8.2.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-vo2eE1jLvYWrfeghYAzkfHr7GNtWsay2ODfufavz8xReOZ648a2sBggSjTU02DQU5EPBSOhKxDnkqnUVWA8xkg==",
+ "path": "harfbuzzsharp/2.8.2.1-preview.108",
+ "hashPath": "harfbuzzsharp.2.8.2.1-preview.108.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.Linux/2.8.2.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-kRjP0sub39GxY7/YUoWwMAvltH+i+0+HvG6ND1v1iWAeBbAwcBFnPfT6FQDBqdnEaeYQT6y8FxMn9phOND7Kyg==",
+ "path": "harfbuzzsharp.nativeassets.linux/2.8.2.1-preview.108",
+ "hashPath": "harfbuzzsharp.nativeassets.linux.2.8.2.1-preview.108.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.macOS/2.8.2.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-pDw8R6ndu8usa9unSqEZrl3RbUNw2AzqAkcJTkocA15dxBpHvaaVKqgEozTLfye0/l5s0YgYAb4WpcY4qBg6Pw==",
+ "path": "harfbuzzsharp.nativeassets.macos/2.8.2.1-preview.108",
+ "hashPath": "harfbuzzsharp.nativeassets.macos.2.8.2.1-preview.108.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.WebAssembly/2.8.2.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-BSgvS7jHt/UMoFRpVNxLcQhPFbNN/KRt/ntKH5Jo64gCpLwBzRF8Pv2mzKI2xQ3KKp+x/n1e6MAug3umls+wUA==",
+ "path": "harfbuzzsharp.nativeassets.webassembly/2.8.2.1-preview.108",
+ "hashPath": "harfbuzzsharp.nativeassets.webassembly.2.8.2.1-preview.108.nupkg.sha512"
+ },
+ "HarfBuzzSharp.NativeAssets.Win32/2.8.2.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-0ws24k21iRH2GRiOLEcG6ESl+VROOwaeHnC0vqKQChGmreGTJ//JBQJqIu189oY30G0NVdypDe1UwFA/scjBAw==",
+ "path": "harfbuzzsharp.nativeassets.win32/2.8.2.1-preview.108",
+ "hashPath": "harfbuzzsharp.nativeassets.win32.2.8.2.1-preview.108.nupkg.sha512"
+ },
+ "JetBrains.Annotations/10.3.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-0GLU9lwGVXjUNlr9ZIdAgjqLI2Zm/XFGJFaqJ1T1sU+kwfeMLhm68+rblUrNUP9psRl4i8yM7Ghb4ia4oI2E5g==",
+ "path": "jetbrains.annotations/10.3.0",
+ "hashPath": "jetbrains.annotations.10.3.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Platforms/3.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TsETIgVJb/AKoYfSP+iCxkuly5d3inZjTdx/ItZLk2CxY85v8083OBS3uai84kK3/baLnS5/b5XGs6zR7SuuHQ==",
+ "path": "microsoft.netcore.platforms/3.0.0",
+ "hashPath": "microsoft.netcore.platforms.3.0.0.nupkg.sha512"
+ },
+ "Microsoft.NETCore.Targets/1.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==",
+ "path": "microsoft.netcore.targets/1.0.1",
+ "hashPath": "microsoft.netcore.targets.1.0.1.nupkg.sha512"
+ },
+ "Microsoft.Win32.SystemEvents/4.6.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Edg+pFW5C8WJb680Za2kTV8TqUi6Ahl/WldRVoOVJ23UQLpDHFspa+umgFjkWZw24ETsU99Cg+ErZz683M4chg==",
+ "path": "microsoft.win32.systemevents/4.6.0",
+ "hashPath": "microsoft.win32.systemevents.4.6.0.nupkg.sha512"
+ },
+ "ScottPlot/4.1.59": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-zUEBIW6rN6T6SoG8JGK4EGiwc94wX4iz1PFEGyAqRjGlnwwvHCCNdVWcNoQ/3u0rm8SJQQMD+AgT/2aoJUHLGQ==",
+ "path": "scottplot/4.1.59",
+ "hashPath": "scottplot.4.1.59.nupkg.sha512"
+ },
+ "ScottPlot.WinForms/4.1.59": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-RkCbZT48aRspJSdsBbpMeorLqhx83njgHuY1iU/EQfoNLOatMhraPXV0F9maIbwfIXBSQaE0m2Dcn2OcZ2ngNg==",
+ "path": "scottplot.winforms/4.1.59",
+ "hashPath": "scottplot.winforms.4.1.59.nupkg.sha512"
+ },
+ "SkiaSharp/2.88.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Zfs4qdQuvLsdSdBa42CnD8Dlcnkr46GaaFEwouzrjOLse8DmKkf/zBaCFCUkNIjGDZFkjFGe/ai5qHYkMcXIsg==",
+ "path": "skiasharp/2.88.1-preview.108",
+ "hashPath": "skiasharp.2.88.1-preview.108.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.Linux/2.88.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-1aOmUqcuzXJP0FaDL5JPRx7FbLFbiyl5R2lI1YwTTfXTpawnPxpPXlBClj+CuRrSS5Azfn8k3ZIHPHTd37vOWw==",
+ "path": "skiasharp.nativeassets.linux/2.88.1-preview.108",
+ "hashPath": "skiasharp.nativeassets.linux.2.88.1-preview.108.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.macOS/2.88.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-nz+Ege0i1aCicLnaHOBzuTBj5LnLxlZVxLv+wUEtOXaAHq6of7kxaE+/+4KC1OBnKs64L8WDGf88VC2fIC/zxw==",
+ "path": "skiasharp.nativeassets.macos/2.88.1-preview.108",
+ "hashPath": "skiasharp.nativeassets.macos.2.88.1-preview.108.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.WebAssembly/2.88.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-mVXV6XulqCZ5eXzWhLAdhl1CWvaYnCJEusADuS0WZ3CdzgPZl8gqfyRzM3KMrMfkaJVh/L4n3VVDnbxQw5YSvA==",
+ "path": "skiasharp.nativeassets.webassembly/2.88.1-preview.108",
+ "hashPath": "skiasharp.nativeassets.webassembly.2.88.1-preview.108.nupkg.sha512"
+ },
+ "SkiaSharp.NativeAssets.Win32/2.88.1-preview.108": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-98r2fGVjPNjIhH0ooHtvAcqsHUjWZPEkqrfpynZNWdo8gkUPZhENvOodDtvBNUW6we24Bo4aWCnGbJuhyn//ug==",
+ "path": "skiasharp.nativeassets.win32/2.88.1-preview.108",
+ "hashPath": "skiasharp.nativeassets.win32.2.88.1-preview.108.nupkg.sha512"
+ },
+ "System.ComponentModel.Annotations/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==",
+ "path": "system.componentmodel.annotations/4.5.0",
+ "hashPath": "system.componentmodel.annotations.4.5.0.nupkg.sha512"
+ },
+ "System.Drawing.Common/4.6.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TFAADvBEUhdDb2Lteq/BUeG0J1y7a0GyFdpB8yE/eAcbiN0R5MII1nXExXsrtRZiO8C/L9SozL2wGqkRlhiv6A==",
+ "path": "system.drawing.common/4.6.1",
+ "hashPath": "system.drawing.common.4.6.1.nupkg.sha512"
+ },
+ "System.Memory/4.5.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
+ "path": "system.memory/4.5.3",
+ "hashPath": "system.memory.4.5.3.nupkg.sha512"
+ },
+ "System.Numerics.Vectors/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==",
+ "path": "system.numerics.vectors/4.5.0",
+ "hashPath": "system.numerics.vectors.4.5.0.nupkg.sha512"
+ },
+ "System.Reactive/5.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "path": "system.reactive/5.0.0",
+ "hashPath": "system.reactive.5.0.0.nupkg.sha512"
+ },
+ "System.Reflection.Emit/4.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==",
+ "path": "system.reflection.emit/4.7.0",
+ "hashPath": "system.reflection.emit.4.7.0.nupkg.sha512"
+ },
+ "System.Runtime/4.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "path": "system.runtime/4.1.0",
+ "hashPath": "system.runtime.4.1.0.nupkg.sha512"
+ },
+ "System.Runtime.CompilerServices.Unsafe/4.6.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-HxozeSlipUK7dAroTYwIcGwKDeOVpQnJlpVaOkBz7CM4TsE5b/tKlQBZecTjh6FzcSbxndYaxxpsBMz+wMJeyw==",
+ "path": "system.runtime.compilerservices.unsafe/4.6.0",
+ "hashPath": "system.runtime.compilerservices.unsafe.4.6.0.nupkg.sha512"
+ },
+ "System.Security.Principal.Windows/4.7.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
+ "path": "system.security.principal.windows/4.7.0",
+ "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
+ },
+ "System.ValueTuple/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
+ "path": "system.valuetuple/4.5.0",
+ "hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
+ },
+ "Tmds.DBus/0.9.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-KcTWL9aKuob9Qo2sOTTKFePs1rKGTwZrcBvMFuGVIVR5RojX3oIFj5UBLYfSGjYgrcImC7LjQI3DdCFwUnhNXw==",
+ "path": "tmds.dbus/0.9.0",
+ "hashPath": "tmds.dbus.0.9.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/EF3/bin/Debug/net6.0-windows/EF3.runtimeconfig.json b/EF3/bin/Debug/net6.0-windows/EF3.runtimeconfig.json
new file mode 100644
index 0000000..f9988b2
--- /dev/null
+++ b/EF3/bin/Debug/net6.0-windows/EF3.runtimeconfig.json
@@ -0,0 +1,15 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "6.0.0"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/EF3/bin/Debug/net6.0-windows/plottable_arrow_quickstart.png b/EF3/bin/Debug/net6.0-windows/plottable_arrow_quickstart.png
new file mode 100644
index 0000000..e348129
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/plottable_arrow_quickstart.png differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libHarfBuzzSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..1286d35
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libHarfBuzzSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libSkiaSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libSkiaSharp.so
new file mode 100644
index 0000000..fe70078
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm/native/libSkiaSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libHarfBuzzSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..6b58905
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libHarfBuzzSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libSkiaSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libSkiaSharp.so
new file mode 100644
index 0000000..9b961f9
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-arm64/native/libSkiaSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..2d3b280
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libHarfBuzzSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libSkiaSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libSkiaSharp.so
new file mode 100644
index 0000000..c3d520d
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-musl-x64/native/libSkiaSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libHarfBuzzSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libHarfBuzzSharp.so
new file mode 100644
index 0000000..0baece0
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libHarfBuzzSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libSkiaSharp.so b/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libSkiaSharp.so
new file mode 100644
index 0000000..3508576
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/linux-x64/native/libSkiaSharp.so differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libAvaloniaNative.dylib b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libAvaloniaNative.dylib
new file mode 100644
index 0000000..b1361e1
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libAvaloniaNative.dylib differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libHarfBuzzSharp.dylib b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libHarfBuzzSharp.dylib
new file mode 100644
index 0000000..16a1ad7
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libHarfBuzzSharp.dylib differ
diff --git a/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libSkiaSharp.dylib b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libSkiaSharp.dylib
new file mode 100644
index 0000000..b75bb53
Binary files /dev/null and b/EF3/bin/Debug/net6.0-windows/runtimes/osx/native/libSkiaSharp.dylib differ