新增 计划一个画出所有运动坐标点的软件

This commit is contained in:
zhengxuan.zhang
2022-12-05 10:23:02 +08:00
parent d652f671db
commit ba0eb21beb
26 changed files with 2536 additions and 0 deletions
+1
View File
@@ -6,3 +6,4 @@ HSI_HexagonMI_EF3/x64/Debug/
.vscode/
HSI_HexagonMI_EF3/obj/
HSI_SEVENOCEAN_EF1_CsTest/bin/
EF3/obj/
+32
View File
@@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.18" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.18" />
<PackageReference Include="ScottPlot.WinForms" Version="4.1.59" />
</ItemGroup>
<ItemGroup>
<Compile Update="Resource.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resource.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Resource.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Resource.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>
+25
View File
@@ -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
+661
View File
@@ -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)
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+190
View File
@@ -0,0 +1,190 @@
namespace EF3
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}
+118
View File
@@ -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();
}
}
+469
View File
@@ -0,0 +1,469 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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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
</value>
</data>
</root>
+17
View File
@@ -0,0 +1,17 @@
namespace EF3
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[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());
}
}
}
+90
View File
@@ -0,0 +1,90 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace EF3 {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 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() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[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;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找类似 提示 的本地化字符串。
/// </summary>
public static string Interface_Tips {
get {
return ResourceManager.GetString("Interface_Tips", resourceCulture);
}
}
/// <summary>
/// 查找类似 准备回家 的本地化字符串。
/// </summary>
public static string Interface_Tips_Home_Machine {
get {
return ResourceManager.GetString("Interface_Tips_Home_Machine", resourceCulture);
}
}
/// <summary>
/// 查找类似 定位完成 的本地化字符串。
/// </summary>
public static string Interface_Tips_Motion_Finished {
get {
return ResourceManager.GetString("Interface_Tips_Motion_Finished", resourceCulture);
}
}
}
}
+129
View File
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Interface_Tips" xml:space="preserve">
<value>提示</value>
</data>
<data name="Interface_Tips_Home_Machine" xml:space="preserve">
<value>准备回家</value>
</data>
<data name="Interface_Tips_Motion_Finished" xml:space="preserve">
<value>定位完成</value>
</data>
</root>
+92
View File
@@ -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;
}
}
}
+697
View File
@@ -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"
}
}
}
@@ -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"
}
]
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB