init
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.vs/DogAndArmControl/v17/.suo
Normal file
BIN
.vs/DogAndArmControl/v17/.suo
Normal file
Binary file not shown.
123
.vs/DogAndArmControl/v17/DocumentLayout.backup.json
Normal file
123
.vs/DogAndArmControl/v17/DocumentLayout.backup.json
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|c:\\users\\quella\\desktop\\dogandarmcontrol\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 5,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 4,
|
||||||
|
"Title": "KeyControl.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\KeyControl.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\KeyControl.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-08T08:08:37.079Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 3,
|
||||||
|
"Title": "Program.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Program.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Program.cs",
|
||||||
|
"ViewState": "AgIAAAQAAAAAAAAAAAAnwBQAAAAMAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-08T05:13:52.832Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 2,
|
||||||
|
"Title": "VideoCaltulate.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"ViewState": "AgIAAEYAAAAAAAAAAAAAwJYAAAAhAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T07:44:14.266Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "Form1.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ViewState": "AgIAAEgBAAAAAAAAAAAAwE4BAABBAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T03:22:21.005Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": "Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T03:16:18.914Z",
|
||||||
|
"EditorCaption": " [\u8BBE\u8BA1]"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DockedWidth": 172,
|
||||||
|
"SelectedChildIndex": -1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:283709:0:{1a46fd64-28d5-0019-8eb3-17a02d419b53}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
123
.vs/DogAndArmControl/v17/DocumentLayout.json
Normal file
123
.vs/DogAndArmControl/v17/DocumentLayout.json
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|c:\\users\\quella\\desktop\\dogandarmcontrol\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 5,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 4,
|
||||||
|
"Title": "KeyControl.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\KeyControl.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\KeyControl.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-08T08:08:37.079Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 3,
|
||||||
|
"Title": "Program.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Program.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Program.cs",
|
||||||
|
"ViewState": "AgIAAAQAAAAAAAAAAAAnwBQAAAAMAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-08T05:13:52.832Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 2,
|
||||||
|
"Title": "VideoCaltulate.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\VideoCaltulate.cs",
|
||||||
|
"ViewState": "AgIAAEYAAAAAAAAAAAAAwJYAAAAhAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T07:44:14.266Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "Form1.cs",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ViewState": "AgIAAEgBAAAAAAAAAAAAwEsBAAAWAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T03:22:21.005Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": "Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
|
||||||
|
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
|
||||||
|
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"RelativeToolTip": "DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2025-07-01T03:16:18.914Z",
|
||||||
|
"EditorCaption": " [\u8BBE\u8BA1]"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"DockedWidth": 172,
|
||||||
|
"SelectedChildIndex": -1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:283709:0:{1a46fd64-28d5-0019-8eb3-17a02d419b53}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Bookmark",
|
||||||
|
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
22
DogAndArmControl.sln
Normal file
22
DogAndArmControl.sln
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.12.35527.113
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DogAndArmControl", "DogAndArmControl\DogAndArmControl.csproj", "{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
21
DogAndArmControl/App.config
Normal file
21
DogAndArmControl/App.config
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
||||||
|
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<applicationSettings>
|
||||||
|
<DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
<setting name="DPIAwarenessMode" serializeAs="String">
|
||||||
|
<value>System</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="RegisterBonusSkins" serializeAs="String">
|
||||||
|
<value>True</value>
|
||||||
|
</setting>
|
||||||
|
</DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
</applicationSettings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
105
DogAndArmControl/DogAndArmControl.csproj
Normal file
105
DogAndArmControl/DogAndArmControl.csproj
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
<ProductVersion>8.0.30703</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>DogAndArmControl</RootNamespace>
|
||||||
|
<AssemblyName>DogAndArmControl</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="DevExpress.BonusSkins.v22.2" />
|
||||||
|
<Reference Include="DevExpress.Data.Desktop.v22.2" />
|
||||||
|
<Reference Include="DevExpress.Data.v22.2" />
|
||||||
|
<Reference Include="DevExpress.Utils.v22.2" />
|
||||||
|
<Reference Include="DevExpress.Sparkline.v22.2.Core" />
|
||||||
|
<Reference Include="DevExpress.XtraBars.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="DevExpress.XtraEditors.v22.2" />
|
||||||
|
<Reference Include="DevExpress.Printing.v22.2.Core" />
|
||||||
|
<Reference Include="DevExpress.Drawing.v22.2" />
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Form1.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Form1.Designer.cs">
|
||||||
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="KeyControl.cs" />
|
||||||
|
<Compile Include="ModernButton.cs">
|
||||||
|
<SubType>Component</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="VideoCaltulate.cs" />
|
||||||
|
<EmbeddedResource Include="Form1.resx">
|
||||||
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\licenses.licx" />
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<None Include="App.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
355
DogAndArmControl/Form1.Designer.cs
generated
Normal file
355
DogAndArmControl/Form1.Designer.cs
generated
Normal file
@@ -0,0 +1,355 @@
|
|||||||
|
namespace DogAndArmControl
|
||||||
|
{
|
||||||
|
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()
|
||||||
|
{
|
||||||
|
this.sidePanel1 = new DevExpress.XtraEditors.SidePanel();
|
||||||
|
this.ArmStatus = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl5 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.DogStatus = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.IpEdit = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.PortEdit = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.tabPane1 = new DevExpress.XtraBars.Navigation.TabPane();
|
||||||
|
this.tabNavigationPage1 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
|
||||||
|
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
|
||||||
|
this.button1 = new System.Windows.Forms.Button();
|
||||||
|
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.tabNavigationPage2 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
|
||||||
|
this.panelControl2 = new DevExpress.XtraEditors.PanelControl();
|
||||||
|
this.button2 = new System.Windows.Forms.Button();
|
||||||
|
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.ArmPort = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.labelControl6 = new DevExpress.XtraEditors.LabelControl();
|
||||||
|
this.ArmIp = new DevExpress.XtraEditors.TextEdit();
|
||||||
|
this.ArmVideo = new System.Windows.Forms.PictureBox();
|
||||||
|
this.DogVideo = new System.Windows.Forms.PictureBox();
|
||||||
|
this.ModeLabel = new System.Windows.Forms.Label();
|
||||||
|
this.sidePanel1.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.IpEdit.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.PortEdit.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.tabPane1)).BeginInit();
|
||||||
|
this.tabPane1.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmPort.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmIp.Properties)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmVideo)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.DogVideo)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// sidePanel1
|
||||||
|
//
|
||||||
|
this.sidePanel1.Appearance.BackColor = System.Drawing.Color.Silver;
|
||||||
|
this.sidePanel1.Appearance.Options.UseBackColor = true;
|
||||||
|
this.sidePanel1.Controls.Add(this.ArmStatus);
|
||||||
|
this.sidePanel1.Controls.Add(this.labelControl5);
|
||||||
|
this.sidePanel1.Controls.Add(this.DogStatus);
|
||||||
|
this.sidePanel1.Controls.Add(this.labelControl3);
|
||||||
|
this.sidePanel1.Location = new System.Drawing.Point(-1, 0);
|
||||||
|
this.sidePanel1.Name = "sidePanel1";
|
||||||
|
this.sidePanel1.Size = new System.Drawing.Size(1212, 64);
|
||||||
|
this.sidePanel1.TabIndex = 0;
|
||||||
|
this.sidePanel1.Text = "sidePanel1";
|
||||||
|
//
|
||||||
|
// ArmStatus
|
||||||
|
//
|
||||||
|
this.ArmStatus.Appearance.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.ArmStatus.Appearance.ForeColor = System.Drawing.Color.Red;
|
||||||
|
this.ArmStatus.Appearance.Options.UseFont = true;
|
||||||
|
this.ArmStatus.Appearance.Options.UseForeColor = true;
|
||||||
|
this.ArmStatus.Location = new System.Drawing.Point(406, 31);
|
||||||
|
this.ArmStatus.Name = "ArmStatus";
|
||||||
|
this.ArmStatus.Size = new System.Drawing.Size(39, 14);
|
||||||
|
this.ArmStatus.TabIndex = 3;
|
||||||
|
this.ArmStatus.Text = "未连接";
|
||||||
|
//
|
||||||
|
// labelControl5
|
||||||
|
//
|
||||||
|
this.labelControl5.Appearance.Font = new System.Drawing.Font("楷体", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
this.labelControl5.Appearance.Options.UseFont = true;
|
||||||
|
this.labelControl5.Location = new System.Drawing.Point(242, 27);
|
||||||
|
this.labelControl5.Name = "labelControl5";
|
||||||
|
this.labelControl5.Size = new System.Drawing.Size(158, 19);
|
||||||
|
this.labelControl5.TabIndex = 2;
|
||||||
|
this.labelControl5.Text = "机械臂连接状态:";
|
||||||
|
//
|
||||||
|
// DogStatus
|
||||||
|
//
|
||||||
|
this.DogStatus.Appearance.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.DogStatus.Appearance.ForeColor = System.Drawing.Color.Red;
|
||||||
|
this.DogStatus.Appearance.Options.UseFont = true;
|
||||||
|
this.DogStatus.Appearance.Options.UseForeColor = true;
|
||||||
|
this.DogStatus.Location = new System.Drawing.Point(177, 31);
|
||||||
|
this.DogStatus.Name = "DogStatus";
|
||||||
|
this.DogStatus.Size = new System.Drawing.Size(39, 14);
|
||||||
|
this.DogStatus.TabIndex = 1;
|
||||||
|
this.DogStatus.Text = "未连接";
|
||||||
|
//
|
||||||
|
// labelControl3
|
||||||
|
//
|
||||||
|
this.labelControl3.Appearance.Font = new System.Drawing.Font("楷体", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
this.labelControl3.Appearance.Options.UseFont = true;
|
||||||
|
this.labelControl3.Location = new System.Drawing.Point(13, 27);
|
||||||
|
this.labelControl3.Name = "labelControl3";
|
||||||
|
this.labelControl3.Size = new System.Drawing.Size(158, 19);
|
||||||
|
this.labelControl3.TabIndex = 0;
|
||||||
|
this.labelControl3.Text = "机械狗连接状态:";
|
||||||
|
//
|
||||||
|
// labelControl1
|
||||||
|
//
|
||||||
|
this.labelControl1.Location = new System.Drawing.Point(55, 18);
|
||||||
|
this.labelControl1.Name = "labelControl1";
|
||||||
|
this.labelControl1.Size = new System.Drawing.Size(33, 14);
|
||||||
|
this.labelControl1.TabIndex = 3;
|
||||||
|
this.labelControl1.Text = "远程ip";
|
||||||
|
//
|
||||||
|
// IpEdit
|
||||||
|
//
|
||||||
|
this.IpEdit.Location = new System.Drawing.Point(94, 15);
|
||||||
|
this.IpEdit.Name = "IpEdit";
|
||||||
|
this.IpEdit.Size = new System.Drawing.Size(126, 20);
|
||||||
|
this.IpEdit.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// PortEdit
|
||||||
|
//
|
||||||
|
this.PortEdit.Location = new System.Drawing.Point(94, 47);
|
||||||
|
this.PortEdit.Name = "PortEdit";
|
||||||
|
this.PortEdit.Size = new System.Drawing.Size(126, 20);
|
||||||
|
this.PortEdit.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// tabPane1
|
||||||
|
//
|
||||||
|
this.tabPane1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
|
||||||
|
this.tabPane1.Appearance.Options.UseBackColor = true;
|
||||||
|
this.tabPane1.Controls.Add(this.tabNavigationPage1);
|
||||||
|
this.tabPane1.Controls.Add(this.tabNavigationPage2);
|
||||||
|
this.tabPane1.Location = new System.Drawing.Point(-1, 70);
|
||||||
|
this.tabPane1.Name = "tabPane1";
|
||||||
|
this.tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] {
|
||||||
|
this.tabNavigationPage1,
|
||||||
|
this.tabNavigationPage2});
|
||||||
|
this.tabPane1.RegularSize = new System.Drawing.Size(537, 444);
|
||||||
|
this.tabPane1.SelectedPage = this.tabNavigationPage1;
|
||||||
|
this.tabPane1.Size = new System.Drawing.Size(537, 444);
|
||||||
|
this.tabPane1.TabIndex = 1;
|
||||||
|
this.tabPane1.Text = "tabPane1";
|
||||||
|
//
|
||||||
|
// tabNavigationPage1
|
||||||
|
//
|
||||||
|
this.tabNavigationPage1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
|
||||||
|
this.tabNavigationPage1.Appearance.Options.UseBackColor = true;
|
||||||
|
this.tabNavigationPage1.Caption = "机械狗";
|
||||||
|
this.tabNavigationPage1.Controls.Add(this.panelControl1);
|
||||||
|
this.tabNavigationPage1.Enabled = true;
|
||||||
|
this.tabNavigationPage1.Name = "tabNavigationPage1";
|
||||||
|
this.tabNavigationPage1.Size = new System.Drawing.Size(537, 411);
|
||||||
|
this.tabNavigationPage1.Paint += new System.Windows.Forms.PaintEventHandler(this.tabNavigationPage1_Paint);
|
||||||
|
//
|
||||||
|
// panelControl1
|
||||||
|
//
|
||||||
|
this.panelControl1.Controls.Add(this.button1);
|
||||||
|
this.panelControl1.Controls.Add(this.labelControl2);
|
||||||
|
this.panelControl1.Controls.Add(this.PortEdit);
|
||||||
|
this.panelControl1.Controls.Add(this.labelControl1);
|
||||||
|
this.panelControl1.Controls.Add(this.IpEdit);
|
||||||
|
this.panelControl1.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.panelControl1.Name = "panelControl1";
|
||||||
|
this.panelControl1.Size = new System.Drawing.Size(531, 76);
|
||||||
|
this.panelControl1.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// button1
|
||||||
|
//
|
||||||
|
this.button1.BackColor = System.Drawing.Color.Blue;
|
||||||
|
this.button1.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.button1.Location = new System.Drawing.Point(239, 18);
|
||||||
|
this.button1.Name = "button1";
|
||||||
|
this.button1.Size = new System.Drawing.Size(97, 46);
|
||||||
|
this.button1.TabIndex = 7;
|
||||||
|
this.button1.Text = "连接";
|
||||||
|
this.button1.UseVisualStyleBackColor = false;
|
||||||
|
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||||
|
//
|
||||||
|
// labelControl2
|
||||||
|
//
|
||||||
|
this.labelControl2.Location = new System.Drawing.Point(41, 50);
|
||||||
|
this.labelControl2.Name = "labelControl2";
|
||||||
|
this.labelControl2.Size = new System.Drawing.Size(47, 14);
|
||||||
|
this.labelControl2.TabIndex = 6;
|
||||||
|
this.labelControl2.Text = "远程Port";
|
||||||
|
//
|
||||||
|
// tabNavigationPage2
|
||||||
|
//
|
||||||
|
this.tabNavigationPage2.Appearance.BackColor = System.Drawing.Color.LightGray;
|
||||||
|
this.tabNavigationPage2.Appearance.Options.UseBackColor = true;
|
||||||
|
this.tabNavigationPage2.Caption = "机械臂";
|
||||||
|
this.tabNavigationPage2.Controls.Add(this.panelControl2);
|
||||||
|
this.tabNavigationPage2.Enabled = true;
|
||||||
|
this.tabNavigationPage2.Name = "tabNavigationPage2";
|
||||||
|
this.tabNavigationPage2.Size = new System.Drawing.Size(537, 411);
|
||||||
|
this.tabNavigationPage2.Paint += new System.Windows.Forms.PaintEventHandler(this.tabNavigationPage2_Paint);
|
||||||
|
//
|
||||||
|
// panelControl2
|
||||||
|
//
|
||||||
|
this.panelControl2.Controls.Add(this.button2);
|
||||||
|
this.panelControl2.Controls.Add(this.labelControl4);
|
||||||
|
this.panelControl2.Controls.Add(this.ArmPort);
|
||||||
|
this.panelControl2.Controls.Add(this.labelControl6);
|
||||||
|
this.panelControl2.Controls.Add(this.ArmIp);
|
||||||
|
this.panelControl2.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.panelControl2.Name = "panelControl2";
|
||||||
|
this.panelControl2.Size = new System.Drawing.Size(531, 76);
|
||||||
|
this.panelControl2.TabIndex = 8;
|
||||||
|
//
|
||||||
|
// button2
|
||||||
|
//
|
||||||
|
this.button2.BackColor = System.Drawing.Color.Blue;
|
||||||
|
this.button2.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.button2.Location = new System.Drawing.Point(239, 18);
|
||||||
|
this.button2.Name = "button2";
|
||||||
|
this.button2.Size = new System.Drawing.Size(97, 46);
|
||||||
|
this.button2.TabIndex = 8;
|
||||||
|
this.button2.Text = "连接";
|
||||||
|
this.button2.UseVisualStyleBackColor = false;
|
||||||
|
//
|
||||||
|
// labelControl4
|
||||||
|
//
|
||||||
|
this.labelControl4.Location = new System.Drawing.Point(41, 50);
|
||||||
|
this.labelControl4.Name = "labelControl4";
|
||||||
|
this.labelControl4.Size = new System.Drawing.Size(47, 14);
|
||||||
|
this.labelControl4.TabIndex = 6;
|
||||||
|
this.labelControl4.Text = "远程Port";
|
||||||
|
//
|
||||||
|
// ArmPort
|
||||||
|
//
|
||||||
|
this.ArmPort.Location = new System.Drawing.Point(94, 47);
|
||||||
|
this.ArmPort.Name = "ArmPort";
|
||||||
|
this.ArmPort.Size = new System.Drawing.Size(126, 20);
|
||||||
|
this.ArmPort.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// labelControl6
|
||||||
|
//
|
||||||
|
this.labelControl6.Location = new System.Drawing.Point(55, 18);
|
||||||
|
this.labelControl6.Name = "labelControl6";
|
||||||
|
this.labelControl6.Size = new System.Drawing.Size(33, 14);
|
||||||
|
this.labelControl6.TabIndex = 3;
|
||||||
|
this.labelControl6.Text = "远程ip";
|
||||||
|
//
|
||||||
|
// ArmIp
|
||||||
|
//
|
||||||
|
this.ArmIp.Location = new System.Drawing.Point(94, 15);
|
||||||
|
this.ArmIp.Name = "ArmIp";
|
||||||
|
this.ArmIp.Size = new System.Drawing.Size(126, 20);
|
||||||
|
this.ArmIp.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// ArmVideo
|
||||||
|
//
|
||||||
|
this.ArmVideo.BackColor = System.Drawing.Color.Black;
|
||||||
|
this.ArmVideo.Location = new System.Drawing.Point(539, 70);
|
||||||
|
this.ArmVideo.Name = "ArmVideo";
|
||||||
|
this.ArmVideo.Size = new System.Drawing.Size(669, 444);
|
||||||
|
this.ArmVideo.TabIndex = 2;
|
||||||
|
this.ArmVideo.TabStop = false;
|
||||||
|
//
|
||||||
|
// DogVideo
|
||||||
|
//
|
||||||
|
this.DogVideo.BackColor = System.Drawing.Color.Black;
|
||||||
|
this.DogVideo.Location = new System.Drawing.Point(444, 520);
|
||||||
|
this.DogVideo.Name = "DogVideo";
|
||||||
|
this.DogVideo.Size = new System.Drawing.Size(764, 536);
|
||||||
|
this.DogVideo.TabIndex = 3;
|
||||||
|
this.DogVideo.TabStop = false;
|
||||||
|
//
|
||||||
|
// ModeLabel
|
||||||
|
//
|
||||||
|
this.ModeLabel.AutoSize = true;
|
||||||
|
this.ModeLabel.Location = new System.Drawing.Point(476, 33);
|
||||||
|
this.ModeLabel.Name = "ModeLabel";
|
||||||
|
this.ModeLabel.Size = new System.Drawing.Size(38, 14);
|
||||||
|
this.ModeLabel.TabIndex = 4;
|
||||||
|
this.ModeLabel.Text = "label1";
|
||||||
|
//
|
||||||
|
// Form1
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(1231, 1068);
|
||||||
|
this.Controls.Add(this.ModeLabel);
|
||||||
|
this.Controls.Add(this.DogVideo);
|
||||||
|
this.Controls.Add(this.ArmVideo);
|
||||||
|
this.Controls.Add(this.tabPane1);
|
||||||
|
this.Controls.Add(this.sidePanel1);
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
|
this.Name = "Form1";
|
||||||
|
this.Text = "Form1";
|
||||||
|
this.sidePanel1.ResumeLayout(false);
|
||||||
|
this.sidePanel1.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.IpEdit.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.PortEdit.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.tabPane1)).EndInit();
|
||||||
|
this.tabPane1.ResumeLayout(false);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmPort.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmIp.Properties)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ArmVideo)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.DogVideo)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private DevExpress.XtraEditors.SidePanel sidePanel1;
|
||||||
|
private DevExpress.XtraBars.Navigation.TabPane tabPane1;
|
||||||
|
private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage1;
|
||||||
|
private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage2;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl1;
|
||||||
|
private DevExpress.XtraEditors.TextEdit IpEdit;
|
||||||
|
private DevExpress.XtraEditors.TextEdit PortEdit;
|
||||||
|
private DevExpress.XtraEditors.PanelControl panelControl1;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl2;
|
||||||
|
private System.Windows.Forms.Button button1;
|
||||||
|
private DevExpress.XtraEditors.LabelControl ArmStatus;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl5;
|
||||||
|
private DevExpress.XtraEditors.LabelControl DogStatus;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl3;
|
||||||
|
private DevExpress.XtraEditors.PanelControl panelControl2;
|
||||||
|
private System.Windows.Forms.Button button2;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl4;
|
||||||
|
private DevExpress.XtraEditors.TextEdit ArmPort;
|
||||||
|
private DevExpress.XtraEditors.LabelControl labelControl6;
|
||||||
|
private DevExpress.XtraEditors.TextEdit ArmIp;
|
||||||
|
private System.Windows.Forms.PictureBox ArmVideo;
|
||||||
|
private System.Windows.Forms.PictureBox DogVideo;
|
||||||
|
private System.Windows.Forms.Label ModeLabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
423
DogAndArmControl/Form1.cs
Normal file
423
DogAndArmControl/Form1.cs
Normal file
@@ -0,0 +1,423 @@
|
|||||||
|
|
||||||
|
using DevExpress.Utils.Extensions;
|
||||||
|
using DevExpress.XtraPrinting.Preview;
|
||||||
|
using RoboticControlApp;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Net.WebSockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using DevExpress.XtraPrinting.Native.WebClientUIControl;
|
||||||
|
|
||||||
|
namespace DogAndArmControl
|
||||||
|
{
|
||||||
|
public partial class Form1 : DevExpress.XtraEditors.XtraForm
|
||||||
|
{
|
||||||
|
private TcpClient mergedVideoClient; // 用于接收合并视频流的客户端
|
||||||
|
private NetworkStream mergedVideoStream; // 合并视频流
|
||||||
|
private Task videoReceiveTask;
|
||||||
|
// private ClientWebSocket webSocket; // 移除WebSocket
|
||||||
|
private CancellationTokenSource videoCancellationTokenSource;
|
||||||
|
private CancellationTokenSource cancellationTokenSource;
|
||||||
|
|
||||||
|
private TcpClient controlClient; // 新增:用于控制的TCP客户端
|
||||||
|
private NetworkStream controlStream; // 新增:用于控制的NetworkStream
|
||||||
|
private string currentControlMode = "DOG"; // 新增:当前控制模式,默认为DOG
|
||||||
|
|
||||||
|
private VideoCaltulate vic = new VideoCaltulate();
|
||||||
|
private bool Dogbutton = false;
|
||||||
|
private bool Armbutton = false;
|
||||||
|
private System.Windows.Forms.Timer keyRepeatTimer;
|
||||||
|
private Keys currentKey;
|
||||||
|
|
||||||
|
// 机械狗控制按钮
|
||||||
|
private ModernButton wDogButton, sDogButton, aDogButton, dDogButton; // 移动按钮
|
||||||
|
private ModernButton qDogButton, eDogButton, lDogButton, zDogButton, cDogButton, rDogButton, tDogButton, fDogButton; // 其他功能按钮
|
||||||
|
|
||||||
|
public Form1()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Init()
|
||||||
|
{
|
||||||
|
IpEdit.Text = "192.168.0.123";
|
||||||
|
PortEdit.Text = "8088";
|
||||||
|
ArmIp.Text = "192.168.123.18"; // 机械臂IP,现在也用于TCP控制
|
||||||
|
ArmPort.Text = "8000"; // 机械臂端口,现在也用于TCP控制
|
||||||
|
|
||||||
|
DogVideo.SizeMode = PictureBoxSizeMode.Zoom;
|
||||||
|
ArmVideo.SizeMode = PictureBoxSizeMode.Zoom;
|
||||||
|
|
||||||
|
IpEdit.ReadOnly = true;
|
||||||
|
PortEdit.ReadOnly = true;
|
||||||
|
ArmIp.ReadOnly = true;
|
||||||
|
ArmPort.ReadOnly = true;
|
||||||
|
|
||||||
|
this.KeyDown += Form1_KeyDown;
|
||||||
|
this.KeyUp += Form1_KeyUp;
|
||||||
|
this.KeyPreview = true;
|
||||||
|
|
||||||
|
UpdateModeDisplay(); // 初始化模式显示
|
||||||
|
tabPane1.SelectedPageChanged += TabPane1_SelectedPageChanged; // 监听标签页切换事件
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void button1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Dogbutton)
|
||||||
|
{
|
||||||
|
IpEdit.ReadOnly = true;
|
||||||
|
PortEdit.ReadOnly = true;
|
||||||
|
|
||||||
|
// 只建立一个TCP连接用于接收合并视频流
|
||||||
|
mergedVideoClient = new TcpClient();
|
||||||
|
await mergedVideoClient.ConnectAsync(IpEdit.Text, Convert.ToInt32(PortEdit.Text));
|
||||||
|
mergedVideoStream = mergedVideoClient.GetStream();
|
||||||
|
|
||||||
|
// 新增:建立控制TCP连接
|
||||||
|
controlClient = new TcpClient();
|
||||||
|
await controlClient.ConnectAsync(ArmIp.Text, Convert.ToInt32(ArmPort.Text)); // 使用机械臂的IP和端口进行控制连接
|
||||||
|
controlStream = mergedVideoClient.GetStream();
|
||||||
|
|
||||||
|
// 自动向服务端发送"MERGED"表示已连接
|
||||||
|
byte[] mergedData = Encoding.ASCII.GetBytes("MERGED");
|
||||||
|
await controlStream.WriteAsync(mergedData, 0, mergedData.Length);
|
||||||
|
|
||||||
|
videoCancellationTokenSource?.Cancel();
|
||||||
|
videoCancellationTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
|
// 启动接收合并视频流的任务
|
||||||
|
videoReceiveTask = Task.Run(() => vic.ReceiveVideoFramesAsync(
|
||||||
|
videoCancellationTokenSource.Token,
|
||||||
|
mergedVideoStream,
|
||||||
|
ArmVideo,
|
||||||
|
false));
|
||||||
|
|
||||||
|
DogStatus.Text = "已连接";
|
||||||
|
DogStatus.ForeColor = Color.Green;
|
||||||
|
Dogbutton = true;
|
||||||
|
button1.Text = "断开";
|
||||||
|
button1.BackColor = Color.Red;
|
||||||
|
DogVideo.BackColor = Color.Black;
|
||||||
|
ArmVideo.BackColor = Color.Black;
|
||||||
|
|
||||||
|
// 初始模式设置为DOG,并发送CHANGE指令
|
||||||
|
currentControlMode = "DOG";
|
||||||
|
await SendChangeModeCommand("DOG");
|
||||||
|
UpdateModeDisplay();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IpEdit.ReadOnly = false;
|
||||||
|
PortEdit.ReadOnly = false;
|
||||||
|
Dogbutton = false;
|
||||||
|
DogStatus.Text = "连接";
|
||||||
|
DogStatus.ForeColor = Color.Red;
|
||||||
|
button1.Text = "连接";
|
||||||
|
button1.BackColor = Color.Blue;
|
||||||
|
|
||||||
|
videoCancellationTokenSource?.Cancel();
|
||||||
|
mergedVideoClient?.Close();
|
||||||
|
controlClient?.Close(); // 关闭控制连接
|
||||||
|
|
||||||
|
Init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ee)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ee.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移除原有的button2_Click (WebSocket连接机械臂)
|
||||||
|
//private void button2_Click(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// if (!Armbutton)
|
||||||
|
// {
|
||||||
|
// ArmIp.ReadOnly = true;
|
||||||
|
// ArmPort.ReadOnly = true;
|
||||||
|
// Armbutton = true;
|
||||||
|
// string wsUrl = $"ws://{ArmIp.Text}:{ArmPort.Text}/ws/control";
|
||||||
|
// cancellationTokenSource = new CancellationTokenSource();
|
||||||
|
// webSocket = new ClientWebSocket();
|
||||||
|
// webSocket?.ConnectAsync(new Uri(wsUrl), cancellationTokenSource.Token);
|
||||||
|
// button2.BackColor = Color.Green;
|
||||||
|
// ArmStatus.Text = "已连接";
|
||||||
|
// ArmStatus.ForeColor = Color.Green;
|
||||||
|
// button2.Text = "断开";
|
||||||
|
// button2.BackColor = Color.Red;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// ArmIp.ReadOnly = false;
|
||||||
|
// ArmPort.ReadOnly = false;
|
||||||
|
// Armbutton = false;
|
||||||
|
// ArmStatus.Text = "未连接";
|
||||||
|
|
||||||
|
// button2.Text = "断开";
|
||||||
|
// button2.BackColor = Color.Blue;
|
||||||
|
|
||||||
|
// ArmStatus.ForeColor = Color.Red;
|
||||||
|
// button2.BackColor = Color.Blue;
|
||||||
|
// webSocket?.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
|
||||||
|
// webSocket?.Dispose();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// catch (Exception) { }
|
||||||
|
//}
|
||||||
|
|
||||||
|
private async void Form1_KeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (keyRepeatTimer == null)
|
||||||
|
{
|
||||||
|
currentKey = e.KeyCode;
|
||||||
|
keyRepeatTimer = new System.Windows.Forms.Timer();
|
||||||
|
keyRepeatTimer.Interval = 100;
|
||||||
|
|
||||||
|
keyRepeatTimer.Tick += async (s, args) => // 修改为async
|
||||||
|
{
|
||||||
|
string key = currentKey.ToString().ToLower();
|
||||||
|
if (e.KeyCode == Keys.Menu) return;
|
||||||
|
|
||||||
|
if (controlStream != null && controlClient.Connected)
|
||||||
|
{
|
||||||
|
if (currentControlMode == "ARM") // 根据当前模式发送指令
|
||||||
|
{
|
||||||
|
string Armkey = MapKeyToCommand(e.KeyCode);
|
||||||
|
if (Armkey != null)
|
||||||
|
{
|
||||||
|
await HandleArmKey("down", Armkey); // 发送按下事件到机械臂
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (currentControlMode == "DOG")
|
||||||
|
{
|
||||||
|
byte[] buffer = Encoding.UTF8.GetBytes(key.ToUpper());
|
||||||
|
await controlStream.WriteAsync(buffer, 0, buffer.Length); // 使用统一的controlStream发送
|
||||||
|
// Thread.Sleep(10); // 确保发送间隔,对于TCP异步发送,这个可能不需要或需要更精细控制
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
keyRepeatTimer.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Form1_KeyUp(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (controlStream != null && controlClient.Connected)
|
||||||
|
{
|
||||||
|
if (currentControlMode == "DOG")
|
||||||
|
{
|
||||||
|
byte[] buffer = Encoding.ASCII.GetBytes("L");
|
||||||
|
// if (mergedVideoStream != null) // 使用统一的controlStream
|
||||||
|
// {
|
||||||
|
// Task.Run(() => // 直接await
|
||||||
|
// {
|
||||||
|
for (int ii = 0; ii < 5; ii++)
|
||||||
|
{
|
||||||
|
await controlStream.WriteAsync(buffer, 0, buffer.Length);
|
||||||
|
// Thread.Sleep(10);
|
||||||
|
}
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else if (currentControlMode == "ARM")
|
||||||
|
{
|
||||||
|
string key = MapKeyToCommand(e.KeyCode);
|
||||||
|
if (key != null)
|
||||||
|
{
|
||||||
|
await HandleArmKey("up", key); // 发送松开事件到机械臂
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (keyRepeatTimer != null)
|
||||||
|
{
|
||||||
|
keyRepeatTimer.Stop();
|
||||||
|
keyRepeatTimer.Dispose();
|
||||||
|
keyRepeatTimer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 映射按键到机械臂控制命令
|
||||||
|
private string MapKeyToCommand(Keys keyCode)
|
||||||
|
{
|
||||||
|
switch (keyCode)
|
||||||
|
{
|
||||||
|
case Keys.W: return "W"; // 前进
|
||||||
|
case Keys.S: return "S"; // 后退
|
||||||
|
case Keys.A: return "A"; // 左移
|
||||||
|
case Keys.D: return "D"; // 右移
|
||||||
|
case Keys.I: return "I"; // 上升
|
||||||
|
case Keys.K: return "K"; // 下降
|
||||||
|
case Keys.M: return "M"; // Roll +(右转)
|
||||||
|
case Keys.N: return "N"; // Roll -(左转)
|
||||||
|
case Keys.L: return "L"; // Pitch +(前倾)
|
||||||
|
case Keys.OemPeriod: return "."; // Pitch -(后倾)
|
||||||
|
case Keys.Oemcomma: return ","; // Yaw +(顺时针)
|
||||||
|
case Keys.OemQuestion: return "/"; // Yaw -(逆时针)
|
||||||
|
case Keys.O: return "O"; // 夹爪打开
|
||||||
|
case Keys.C: return "C"; // 夹爪关闭
|
||||||
|
case Keys.U: return "U"; // 复位
|
||||||
|
case Keys.J: return "J"; // 重力补偿
|
||||||
|
case Keys.P: return "P"; // 退出
|
||||||
|
case Keys.F: return "F"; //预设
|
||||||
|
case Keys.G: return "g"; //自动丢入篮筐
|
||||||
|
default: return null; // 如果按下的键不在控制范围内,返回 null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送控制指令到机械臂 (现在通过TCP发送JSON)
|
||||||
|
private async Task HandleArmKey(string type, string key)
|
||||||
|
{
|
||||||
|
if (controlStream != null && controlClient.Connected)
|
||||||
|
{
|
||||||
|
//var msg = JsonConvert.SerializeObject(new { key_events = new[] { new { key, type } } });
|
||||||
|
var buffer = Encoding.UTF8.GetBytes(key.ToUpper()); // 将控制命令转为字节数组
|
||||||
|
await controlStream.WriteAsync(buffer, 0, buffer.Length); // 通过TCP发送消息
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:更新模式显示
|
||||||
|
private void UpdateModeDisplay()
|
||||||
|
{
|
||||||
|
// 假设你有一个Label控件用于显示模式,例如 modeLabel
|
||||||
|
// 如果没有,你需要在WinForms设计器中添加一个Label控件,并命名为modeLabel
|
||||||
|
// 例如:this.modeLabel.Text = $"mode:{currentControlMode}";
|
||||||
|
// 这里暂时使用Debug.WriteLine代替,实际应用中请替换为UI控件
|
||||||
|
Debug.WriteLine($"mode:{currentControlMode}");
|
||||||
|
// 假设ModeLabel是你的Label控件
|
||||||
|
if (ModeLabel != null)
|
||||||
|
{
|
||||||
|
ModeLabel.Text = $"mode:{currentControlMode}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:标签页切换事件处理
|
||||||
|
private async void TabPane1_SelectedPageChanged(object sender, DevExpress.XtraBars.Navigation.SelectedPageChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (controlStream != null && controlClient.Connected)
|
||||||
|
{
|
||||||
|
if (e.Page == tabNavigationPage1) // 切换到机械狗标签页
|
||||||
|
{
|
||||||
|
currentControlMode = "DOG";
|
||||||
|
await SendChangeModeCommand("DOG");
|
||||||
|
}
|
||||||
|
else if (e.Page == tabNavigationPage2) // 切换到机械臂标签页
|
||||||
|
{
|
||||||
|
currentControlMode = "ARM";
|
||||||
|
await SendChangeModeCommand("ARM");
|
||||||
|
}
|
||||||
|
UpdateModeDisplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:发送切换模式命令
|
||||||
|
private async Task SendChangeModeCommand(string mode)
|
||||||
|
{
|
||||||
|
if (controlStream != null && controlClient.Connected)
|
||||||
|
{
|
||||||
|
byte[] changeCommand = Encoding.ASCII.GetBytes($"CHANGE:{mode}"); // 发送 "CHANGE:DOG" 或 "CHANGE:ARM"
|
||||||
|
await controlStream.WriteAsync(changeCommand, 0, changeCommand.Length);
|
||||||
|
Debug.WriteLine($"Sent CHANGE command: CHANGE:{mode}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//加载机械狗的控件
|
||||||
|
private void tabNavigationPage1_Paint(object sender, PaintEventArgs e)
|
||||||
|
{
|
||||||
|
//移动控制按钮
|
||||||
|
wDogButton = new ModernButton("W", "前进");
|
||||||
|
wDogButton.Location = new Point(150, 80);
|
||||||
|
wDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(wDogButton);
|
||||||
|
|
||||||
|
//移动控制按钮
|
||||||
|
sDogButton = new ModernButton("S", "后退");
|
||||||
|
sDogButton.Location = new Point(150, 150);
|
||||||
|
sDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(sDogButton);
|
||||||
|
|
||||||
|
//移动控制按钮
|
||||||
|
aDogButton = new ModernButton("A", "左走");
|
||||||
|
aDogButton.Location = new Point(80, 150);
|
||||||
|
aDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(aDogButton);
|
||||||
|
|
||||||
|
dDogButton = new ModernButton("D", "右走");
|
||||||
|
dDogButton.Location = new Point(220, 150);
|
||||||
|
dDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(dDogButton);
|
||||||
|
|
||||||
|
qDogButton = new ModernButton("Q", "左转");
|
||||||
|
qDogButton.Location = new Point(80, 220);
|
||||||
|
qDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(qDogButton);
|
||||||
|
|
||||||
|
eDogButton = new ModernButton("E", "右转");
|
||||||
|
eDogButton.Location = new Point(220, 220);
|
||||||
|
eDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(eDogButton);
|
||||||
|
|
||||||
|
zDogButton = new ModernButton("Z", "趴下");
|
||||||
|
zDogButton.Location = new Point(80, 290);
|
||||||
|
zDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(zDogButton);
|
||||||
|
|
||||||
|
tDogButton = new ModernButton("T", "站起");
|
||||||
|
tDogButton.Location = new Point(220, 290);
|
||||||
|
tDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(tDogButton);
|
||||||
|
|
||||||
|
lDogButton = new ModernButton("F", "解除锁定");
|
||||||
|
lDogButton.Location = new Point(150, 340);
|
||||||
|
lDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage1.AddControl(lDogButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
//加载机械臂的控件
|
||||||
|
private void tabNavigationPage2_Paint(object sender, PaintEventArgs e)
|
||||||
|
{
|
||||||
|
//移动控制按钮
|
||||||
|
wDogButton = new ModernButton("W", "前进");
|
||||||
|
wDogButton.Location = new Point(150, 80);
|
||||||
|
wDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage2.AddControl(wDogButton);
|
||||||
|
|
||||||
|
//移动控制按钮
|
||||||
|
sDogButton = new ModernButton("S", "后退");
|
||||||
|
sDogButton.Location = new Point(150, 150);
|
||||||
|
sDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage2.AddControl(sDogButton);
|
||||||
|
|
||||||
|
//移动控制按钮
|
||||||
|
aDogButton = new ModernButton("A", "左走");
|
||||||
|
aDogButton.Location = new Point(80, 150);
|
||||||
|
aDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage2.AddControl(aDogButton);
|
||||||
|
|
||||||
|
dDogButton = new ModernButton("D", "右走");
|
||||||
|
dDogButton.Location = new Point(220, 150);
|
||||||
|
dDogButton.Size = new Size(60, 60);
|
||||||
|
tabNavigationPage2.AddControl(dDogButton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
174
DogAndArmControl/Form1.resx
Normal file
174
DogAndArmControl/Form1.resx
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<?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>
|
||||||
|
<metadata name="sidePanel1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="ArmStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>721, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl5.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>588, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="DogStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>473, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>340, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>207, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="IpEdit.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>118, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="PortEdit.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="tabPane1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>1123, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="tabNavigationPage1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>950, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panelControl1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>813, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>680, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="tabNavigationPage2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>507, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="panelControl2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>370, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl4.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>237, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="ArmPort.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>134, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="labelControl6.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>835, 55</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="ArmIp.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>968, 55</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
13
DogAndArmControl/KeyControl.cs
Normal file
13
DogAndArmControl/KeyControl.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace DogAndArmControl
|
||||||
|
{
|
||||||
|
public class KeyControl
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
131
DogAndArmControl/ModernButton.cs
Normal file
131
DogAndArmControl/ModernButton.cs
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace RoboticControlApp
|
||||||
|
{
|
||||||
|
public class ModernButton : Button
|
||||||
|
{
|
||||||
|
private bool isPressed = false;
|
||||||
|
private string description;
|
||||||
|
private Color normalColor = Color.FromArgb(245, 245, 245);
|
||||||
|
private Color hoverColor = Color.FromArgb(230, 230, 230);
|
||||||
|
private Color pressedColor = Color.FromArgb(0, 120, 215);
|
||||||
|
private Color borderColor = Color.FromArgb(200, 200, 200);
|
||||||
|
|
||||||
|
public ModernButton(string key, string desc)
|
||||||
|
{
|
||||||
|
description = desc;
|
||||||
|
Text = key;
|
||||||
|
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true);
|
||||||
|
FlatStyle = FlatStyle.Flat;
|
||||||
|
FlatAppearance.BorderSize = 0;
|
||||||
|
Font = new Font("Microsoft YaHei", 10F, FontStyle.Bold);
|
||||||
|
BackColor = normalColor;
|
||||||
|
ForeColor = Color.Black;
|
||||||
|
Cursor = Cursors.Hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetPressed(bool pressed)
|
||||||
|
{
|
||||||
|
isPressed = pressed;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
Graphics g = e.Graphics;
|
||||||
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||||
|
|
||||||
|
// 确定颜色
|
||||||
|
Color bgColor = isPressed ? pressedColor : (ClientRectangle.Contains(PointToClient(MousePosition)) ? hoverColor : normalColor);
|
||||||
|
Color textColor = isPressed ? Color.White : Color.Black;
|
||||||
|
|
||||||
|
// 绘制背景
|
||||||
|
using (SolidBrush brush = new SolidBrush(bgColor))
|
||||||
|
{
|
||||||
|
g.FillRoundedRectangle(brush, ClientRectangle, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制边框
|
||||||
|
using (Pen pen = new Pen(isPressed ? pressedColor : borderColor, 1))
|
||||||
|
{
|
||||||
|
g.DrawRoundedRectangle(pen, new Rectangle(0, 0, Width - 1, Height - 1), 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制按键文本
|
||||||
|
using (SolidBrush textBrush = new SolidBrush(textColor))
|
||||||
|
{
|
||||||
|
StringFormat sf = new StringFormat();
|
||||||
|
sf.Alignment = StringAlignment.Center;
|
||||||
|
sf.LineAlignment = StringAlignment.Center;
|
||||||
|
|
||||||
|
Font keyFont = new Font("Microsoft YaHei", 12F, FontStyle.Bold);
|
||||||
|
g.DrawString(Text, keyFont, textBrush, new RectangleF(0, 0, Width, Height * 0.6f), sf);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(description))
|
||||||
|
{
|
||||||
|
Font descFont = new Font("Microsoft YaHei", 8F);
|
||||||
|
g.DrawString(description, descFont, textBrush, new RectangleF(0, Height * 0.6f, Width, Height * 0.4f), sf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 绘制按下效果
|
||||||
|
if (isPressed)
|
||||||
|
{
|
||||||
|
using (SolidBrush shadowBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 0)))
|
||||||
|
{
|
||||||
|
g.FillRoundedRectangle(shadowBrush, new Rectangle(2, 2, Width - 4, Height - 4), 6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseEnter(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseEnter(e);
|
||||||
|
if (!isPressed) Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseLeave(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseLeave(e);
|
||||||
|
if (!isPressed) Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 扩展方法用于绘制圆角矩形
|
||||||
|
public static class GraphicsExtensions
|
||||||
|
{
|
||||||
|
public static void FillRoundedRectangle(this Graphics graphics, Brush brush, Rectangle rect, int radius)
|
||||||
|
{
|
||||||
|
using (GraphicsPath path = CreateRoundedRectanglePath(rect, radius))
|
||||||
|
{
|
||||||
|
graphics.FillPath(brush, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawRoundedRectangle(this Graphics graphics, Pen pen, Rectangle rect, int radius)
|
||||||
|
{
|
||||||
|
using (GraphicsPath path = CreateRoundedRectanglePath(rect, radius))
|
||||||
|
{
|
||||||
|
graphics.DrawPath(pen, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int radius)
|
||||||
|
{
|
||||||
|
GraphicsPath path = new GraphicsPath();
|
||||||
|
int diameter = radius * 2;
|
||||||
|
|
||||||
|
path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
|
||||||
|
path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
|
||||||
|
path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
|
||||||
|
path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
|
||||||
|
path.CloseFigure();
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
24
DogAndArmControl/Program.cs
Normal file
24
DogAndArmControl/Program.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using DevExpress.LookAndFeel;
|
||||||
|
using DevExpress.Skins;
|
||||||
|
using DevExpress.UserSkins;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace DogAndArmControl
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new Form1());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
DogAndArmControl/Properties/AssemblyInfo.cs
Normal file
32
DogAndArmControl/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("DogAndArmControl")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("DogAndArmControl")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("9006f149-aa49-4b8e-ba69-386d945fa738")]
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
71
DogAndArmControl/Properties/Resources.Designer.cs
generated
Normal file
71
DogAndArmControl/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.18034
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace DogAndArmControl.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DogAndArmControl.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
117
DogAndArmControl/Properties/Resources.resx
Normal file
117
DogAndArmControl/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?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.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: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:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
|
||||||
|
<xsd:attribute name="type" type="xsd:string"></xsd:attribute>
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string"></xsd:attribute>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string"></xsd:attribute>
|
||||||
|
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
|
||||||
|
</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>
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"></xsd:attribute>
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"></xsd:attribute>
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"></xsd:attribute>
|
||||||
|
</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:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
|
||||||
|
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
30
DogAndArmControl/Properties/Settings.Designer.cs
generated
Normal file
30
DogAndArmControl/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.18034
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace DogAndArmControl.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
DogAndArmControl/Properties/Settings.settings
Normal file
7
DogAndArmControl/Properties/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
2
DogAndArmControl/Properties/licenses.licx
Normal file
2
DogAndArmControl/Properties/licenses.licx
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
DevExpress.XtraBars.Navigation.TileNavPane, DevExpress.XtraBars.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
||||||
|
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
|
333
DogAndArmControl/VideoCaltulate.cs
Normal file
333
DogAndArmControl/VideoCaltulate.cs
Normal file
@@ -0,0 +1,333 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace DogAndArmControl
|
||||||
|
{
|
||||||
|
public class VideoCaltulate
|
||||||
|
{
|
||||||
|
private MemoryStream imageBuffer = new MemoryStream(); // 图像数据缓冲区
|
||||||
|
private byte[] videoBuffer = new byte[1400]; // 视频数据缓冲区
|
||||||
|
private int videoWidth;
|
||||||
|
private int videoHeight;
|
||||||
|
|
||||||
|
// 原有的单独视频流接收方法(保留兼容性)
|
||||||
|
public async Task ReceiveVideoFramesAsync(CancellationToken cancellationToken, NetworkStream videoStream, PictureBox VideoBox, bool flag)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (!cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 接收4字节的图像大小信息
|
||||||
|
int sizeBufferSize = 4;
|
||||||
|
byte[] sizeBuffer = new byte[sizeBufferSize];
|
||||||
|
int totalRead = 0;
|
||||||
|
|
||||||
|
while (totalRead < sizeBufferSize && !cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
int read = await videoStream.ReadAsync(sizeBuffer, totalRead, sizeBufferSize - totalRead, cancellationToken);
|
||||||
|
if (read == 0) break;
|
||||||
|
totalRead += read;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalRead != sizeBufferSize || cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
throw new IOException("未接收到完整的图像大小信息");
|
||||||
|
}
|
||||||
|
|
||||||
|
int imageSize = BitConverter.ToInt32(sizeBuffer, 0);
|
||||||
|
|
||||||
|
if (imageSize <= 0 || imageSize > 20 * 1024 * 1024)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Invalid image size: {imageSize} bytes. Skipping frame.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接收图像数据
|
||||||
|
imageBuffer.SetLength(0); // 清空缓冲区
|
||||||
|
int bytesRead = 0;
|
||||||
|
while (bytesRead < imageSize && !cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
int chunkSize = Math.Min(videoBuffer.Length, imageSize - bytesRead);
|
||||||
|
int read = await videoStream.ReadAsync(videoBuffer, 0, chunkSize, cancellationToken);
|
||||||
|
if (read == 0) break;
|
||||||
|
|
||||||
|
imageBuffer.Write(videoBuffer, 0, read);
|
||||||
|
bytesRead += read;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bytesRead != imageSize || cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
throw new IOException($"未接收到完整的图像数据,预期: {imageSize}, 实际: {bytesRead}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在UI线程上异步更新图像
|
||||||
|
await Task.Run(() => ProcessImageData(VideoBox, flag));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增:接收合并视频流并分割显示到两个PictureBox的方法
|
||||||
|
public async Task ReceiveMergedVideoFramesAsync(CancellationToken cancellationToken, NetworkStream videoStream, PictureBox dogVideoBox, PictureBox armVideoBox)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (!cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 接收4字节的图像大小信息
|
||||||
|
int sizeBufferSize = 4;
|
||||||
|
byte[] sizeBuffer = new byte[sizeBufferSize];
|
||||||
|
int totalRead = 0;
|
||||||
|
|
||||||
|
while (totalRead < sizeBufferSize && !cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
int read = await videoStream.ReadAsync(sizeBuffer, totalRead, sizeBufferSize - totalRead, cancellationToken);
|
||||||
|
if (read == 0) break;
|
||||||
|
totalRead += read;
|
||||||
|
}
|
||||||
|
|
||||||
|
int imageSize = BitConverter.ToInt32(sizeBuffer, 0);
|
||||||
|
|
||||||
|
if (imageSize <= 0 || imageSize > 20 * 1024 * 1024)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Invalid image size: {imageSize} bytes. Skipping frame.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接收图像数据
|
||||||
|
imageBuffer.SetLength(0); // 清空缓冲区
|
||||||
|
int bytesRead = 0;
|
||||||
|
while (bytesRead < imageSize && !cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
int chunkSize = Math.Min(videoBuffer.Length, imageSize - bytesRead);
|
||||||
|
int read = await videoStream.ReadAsync(videoBuffer, 0, chunkSize, cancellationToken);
|
||||||
|
if (read == 0) break;
|
||||||
|
|
||||||
|
imageBuffer.Write(videoBuffer, 0, read);
|
||||||
|
bytesRead += read;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bytesRead != imageSize || cancellationToken.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
throw new IOException($"未接收到完整的图像数据,预期: {imageSize}, 实际: {bytesRead}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理合并后的图像数据并分割显示
|
||||||
|
//await Task.Run(() => ProcessMergedImageData(dogVideoBox, armVideoBox));
|
||||||
|
await Task.Run(() => ProcessImageData(armVideoBox));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Error receiving merged video frame: {ex.Message}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Error in ReceiveMergedVideoFramesAsync: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理合并后的图像数据并分割显示到两个PictureBox
|
||||||
|
private void ProcessMergedImageData(PictureBox dogVideoBox, PictureBox armVideoBox)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
imageBuffer.Position = 0;
|
||||||
|
|
||||||
|
using (var mergedImage = Image.FromStream(imageBuffer))
|
||||||
|
{
|
||||||
|
// 获取合并图像的尺寸
|
||||||
|
int mergedWidth = mergedImage.Width;
|
||||||
|
int mergedHeight = mergedImage.Height;
|
||||||
|
|
||||||
|
// 计算分割点(假设是横向拼接,左右各占一半)
|
||||||
|
int halfWidth = mergedWidth / 2;
|
||||||
|
|
||||||
|
// 创建两个分割后的图像
|
||||||
|
Bitmap dogImage = new Bitmap(halfWidth, mergedHeight);
|
||||||
|
Bitmap armImage = new Bitmap(halfWidth, mergedHeight);
|
||||||
|
|
||||||
|
using (Graphics dogGraphics = Graphics.FromImage(dogImage))
|
||||||
|
using (Graphics armGraphics = Graphics.FromImage(armImage))
|
||||||
|
{
|
||||||
|
// 分割左半部分给机械狗视频
|
||||||
|
Rectangle dogSourceRect = new Rectangle(0, 0, halfWidth, mergedHeight);
|
||||||
|
Rectangle dogDestRect = new Rectangle(0, 0, halfWidth, mergedHeight);
|
||||||
|
dogGraphics.DrawImage(mergedImage, dogDestRect, dogSourceRect, GraphicsUnit.Pixel);
|
||||||
|
|
||||||
|
// 分割右半部分给机械臂视频
|
||||||
|
Rectangle armSourceRect = new Rectangle(halfWidth, 0, halfWidth, mergedHeight);
|
||||||
|
Rectangle armDestRect = new Rectangle(0, 0, halfWidth, mergedHeight);
|
||||||
|
armGraphics.DrawImage(mergedImage, armDestRect, armSourceRect, GraphicsUnit.Pixel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在UI线程上更新两个PictureBox
|
||||||
|
UpdatePictureBox(dogVideoBox, dogImage, false);
|
||||||
|
UpdatePictureBox(armVideoBox, armImage, true); // 机械臂视频需要旋转180度
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Error processing merged image data: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新单个PictureBox的辅助方法
|
||||||
|
private void UpdatePictureBox(PictureBox pictureBox, Bitmap image, bool rotateImage)
|
||||||
|
{
|
||||||
|
if (pictureBox.InvokeRequired)
|
||||||
|
{
|
||||||
|
pictureBox.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (pictureBox.Image != null)
|
||||||
|
{
|
||||||
|
pictureBox.Image.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bitmap displayImage = new Bitmap(image);
|
||||||
|
if (rotateImage)
|
||||||
|
{
|
||||||
|
displayImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
||||||
|
}
|
||||||
|
|
||||||
|
pictureBox.Image = displayImage;
|
||||||
|
pictureBox.Refresh();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Error updating PictureBox: {ex.Message}");
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (pictureBox.Image != null)
|
||||||
|
{
|
||||||
|
pictureBox.Image.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bitmap displayImage = new Bitmap(image);
|
||||||
|
if (rotateImage)
|
||||||
|
{
|
||||||
|
displayImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
||||||
|
}
|
||||||
|
|
||||||
|
pictureBox.Image = displayImage;
|
||||||
|
pictureBox.Refresh();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Error updating PictureBox: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 原有的单独图像处理方法(保留兼容性)
|
||||||
|
public void ProcessImageData(PictureBox videoPictureBox, bool flag = false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
imageBuffer.Position = 0;
|
||||||
|
|
||||||
|
if (videoPictureBox.InvokeRequired)
|
||||||
|
{
|
||||||
|
videoPictureBox.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (videoPictureBox.Image != null)
|
||||||
|
{
|
||||||
|
videoPictureBox.Image.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var tempImage = Image.FromStream(imageBuffer))
|
||||||
|
{
|
||||||
|
// 如果需要旋转,则旋转180度
|
||||||
|
Bitmap displayedImage = new Bitmap(tempImage);
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
displayedImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示图像
|
||||||
|
videoPictureBox.Image = displayedImage;
|
||||||
|
|
||||||
|
// 更新分辨率信息
|
||||||
|
videoWidth = displayedImage.Width;
|
||||||
|
videoHeight = displayedImage.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
videoPictureBox.Refresh();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Handle any exceptions (e.g., image load failure)
|
||||||
|
Debug.WriteLine($"Error processing image: {ex.Message}");
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (videoPictureBox.Image != null)
|
||||||
|
{
|
||||||
|
videoPictureBox.Image.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var tempImage = Image.FromStream(imageBuffer))
|
||||||
|
{
|
||||||
|
Bitmap displayedImage = new Bitmap(tempImage);
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
displayedImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
|
||||||
|
}
|
||||||
|
|
||||||
|
videoPictureBox.Image = displayedImage;
|
||||||
|
|
||||||
|
videoWidth = displayedImage.Width;
|
||||||
|
videoHeight = displayedImage.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
videoPictureBox.Refresh();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Handle any exceptions (e.g., image load failure)
|
||||||
|
Debug.WriteLine($"Error processing image: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// Handle any outer exceptions
|
||||||
|
Debug.WriteLine($"Error processing image data: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
BIN
DogAndArmControl/bin/Debug/DevExpress.BonusSkins.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.BonusSkins.v22.2.dll
Normal file
Binary file not shown.
BIN
DogAndArmControl/bin/Debug/DevExpress.Data.Desktop.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Data.Desktop.v22.2.dll
Normal file
Binary file not shown.
1054
DogAndArmControl/bin/Debug/DevExpress.Data.Desktop.v22.2.xml
Normal file
1054
DogAndArmControl/bin/Debug/DevExpress.Data.Desktop.v22.2.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.Data.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Data.v22.2.dll
Normal file
Binary file not shown.
20387
DogAndArmControl/bin/Debug/DevExpress.Data.v22.2.xml
Normal file
20387
DogAndArmControl/bin/Debug/DevExpress.Data.v22.2.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.Drawing.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Drawing.v22.2.dll
Normal file
Binary file not shown.
BIN
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Core.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Core.dll
Normal file
Binary file not shown.
13186
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Core.xml
Normal file
13186
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Core.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Drawing.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Drawing.dll
Normal file
Binary file not shown.
1564
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Drawing.xml
Normal file
1564
DogAndArmControl/bin/Debug/DevExpress.Pdf.v22.2.Drawing.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.Printing.v22.2.Core.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Printing.v22.2.Core.dll
Normal file
Binary file not shown.
27252
DogAndArmControl/bin/Debug/DevExpress.Printing.v22.2.Core.xml
Normal file
27252
DogAndArmControl/bin/Debug/DevExpress.Printing.v22.2.Core.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.Sparkline.v22.2.Core.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Sparkline.v22.2.Core.dll
Normal file
Binary file not shown.
445
DogAndArmControl/bin/Debug/DevExpress.Sparkline.v22.2.Core.xml
Normal file
445
DogAndArmControl/bin/Debug/DevExpress.Sparkline.v22.2.Core.xml
Normal file
@@ -0,0 +1,445 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<doc>
|
||||||
|
<assembly>
|
||||||
|
<name>DevExpress.Sparkline.v22.2.Core</name>
|
||||||
|
</assembly>
|
||||||
|
<members>
|
||||||
|
<member name="N:DevExpress.Sparkline">
|
||||||
|
<summary>
|
||||||
|
<para>Contains classes required for DevExpress sparklines.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.AreaSparklineView">
|
||||||
|
<summary>
|
||||||
|
<para>The Area sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.AreaSparklineView.#ctor">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> class with the default settings.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.AreaSparklineView.AreaOpacity">
|
||||||
|
<summary>
|
||||||
|
<para>Specifies the opacity (0-255) of the area sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Byte"/> value from 0 (transparent) to 255 (opaque).</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.AreaSparklineView.Assign(DevExpress.Sparkline.SparklineViewBase)">
|
||||||
|
<summary>
|
||||||
|
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object passed as the parameter.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">A <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.AreaSparklineView.Type">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the type of the sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Area"/>.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.AreaSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
|
||||||
|
<summary>
|
||||||
|
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.BarSparklineView">
|
||||||
|
<summary>
|
||||||
|
<para>The Bar sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.BarSparklineView.#ctor">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.BarSparklineView"/> class with the default settings.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.BarSparklineView.Type">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the type of the sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Bar"/>.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.BarSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
|
||||||
|
<summary>
|
||||||
|
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.BarSparklineView"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.BarSparklineViewBase">
|
||||||
|
<summary>
|
||||||
|
<para>The base for Bar and WinLoss sparkline views.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.BarSparklineViewBase.Assign(DevExpress.Sparkline.SparklineViewBase)">
|
||||||
|
<summary>
|
||||||
|
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.BarSparklineViewBase"/> object passed as the parameter.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">A <see cref="T:DevExpress.Sparkline.BarSparklineViewBase"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.BarSparklineViewBase.BarDistance">
|
||||||
|
<summary>
|
||||||
|
<para>Specifies the distance between two bars of a bar sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value (in pixels).</value>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.ISparklineViewVisitor">
|
||||||
|
<summary>
|
||||||
|
<para>Interface implementing the Visitor pattern.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.AreaSparklineView)">
|
||||||
|
<summary>
|
||||||
|
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">An <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object for which the operation is performed.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.BarSparklineView)">
|
||||||
|
<summary>
|
||||||
|
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">An <see cref="T:DevExpress.Sparkline.BarSparklineView"/> object for which the operation is performed.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.LineSparklineView)">
|
||||||
|
<summary>
|
||||||
|
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">An <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object for which the operation is performed.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.WinLossSparklineView)">
|
||||||
|
<summary>
|
||||||
|
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">An <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> object for which the operation is performed.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.LineSparklineView">
|
||||||
|
<summary>
|
||||||
|
<para>The Line sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.LineSparklineView.#ctor">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.LineSparklineView"/> class with the default settings.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.ActualMarkerColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline marker.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual marker color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.LineSparklineView.Assign(DevExpress.Sparkline.SparklineViewBase)">
|
||||||
|
<summary>
|
||||||
|
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object passed as the parameter.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">A <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.EnableAntialiasing">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets whether anti-aliasing (smoothing) is applied to the line view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>True to apply anti-aliasing to the line view; False to disable anti-aliasing.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.EndPointMarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the size of an end point’s marker.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.LineWidth">
|
||||||
|
<summary>
|
||||||
|
<para>Specifies the width of a line in a <see cref="T:DevExpress.Sparkline.LineSparklineView"/>.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the line width (in pixels).</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.MarkerColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw line markers.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw line markers.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.MarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the size of markers for data points in a line sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.MaxPointMarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the marker size of a data point that has the maximum value among all data points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.MinPointMarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the marker size of a data point that has the minimum value among all data points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.NegativePointMarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the marker size of all data points that have negative values (less than 0).</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.LineSparklineView.SetSizeForAllMarkers(System.Int32)">
|
||||||
|
<summary>
|
||||||
|
<para>Sets size for all markers of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="markerSize">An integer value specifying the new size for sparkline markers (in pixels).</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.ShowMarkers">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying the visibility of point markers on a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true to show markers for each data point; false to hide them.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.StartPointMarkerSize">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the size of a start point’s marker.</para>
|
||||||
|
</summary>
|
||||||
|
<value>An integer value specifying the marker size, in pixels.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.LineSparklineView.Type">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the type of the sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Line"/>.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.LineSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
|
||||||
|
<summary>
|
||||||
|
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.SparklineRange">
|
||||||
|
<summary>
|
||||||
|
<para>Represents a range to be used in DevExpress Sparkline controls.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineRange.#ctor">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class with the default settings.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineRange.#ctor(System.Double,System.Double)">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class with the specified minimum and maximum limits.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="min">A <see cref="T:System.Double"/> value, specifying the minimum limit. This value is assigned to the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit1"/> property.</param>
|
||||||
|
<param name="max">A <see cref="T:System.Double"/> value, specifying the maximum limit. This value is assigned to the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit2"/> property.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineRange.IsAuto">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value indicating whether or not range limits should be calculated automatically.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true to calculate range limits automatically; false to use the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit1"/> and <see cref="P:DevExpress.Sparkline.SparklineRange.Limit2"/> property values.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineRange.Limit1">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying the first limit of the range.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Double"/> value that specifies the first limit.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineRange.Limit2">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying the second limit of the range.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Double"/> value that specifies the second limit.</value>
|
||||||
|
</member>
|
||||||
|
<member name="E:DevExpress.Sparkline.SparklineRange.PropertiesChanged">
|
||||||
|
<summary>
|
||||||
|
<para>This event is hidden, because it is not appropriate for the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineRange.ToString">
|
||||||
|
<summary>
|
||||||
|
<para>Returns the textual representation of the <see cref="T:DevExpress.Sparkline.SparklineRange"/>.</para>
|
||||||
|
</summary>
|
||||||
|
<returns>A <see cref="T:System.String"/> value which is the textual representation of the <see cref="T:DevExpress.Sparkline.SparklineRange"/>.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.SparklineViewBase">
|
||||||
|
<summary>
|
||||||
|
<para>The base class for sparkline views.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual sparkline color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualEndPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline end point.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualMaxPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline maximum point.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualMinPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline minimum point.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualNegativePointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of sparkline negative points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualStartPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the actual color of a sparkline start point.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineViewBase.Assign(DevExpress.Sparkline.SparklineViewBase)">
|
||||||
|
<summary>
|
||||||
|
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object passed as the parameter.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="view">A <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.Color">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a sparkline.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineViewBase.CreateView(DevExpress.Sparkline.SparklineViewType)">
|
||||||
|
<summary>
|
||||||
|
<para>Creates a sparkline view of the specified type.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="viewType">A <see cref="T:DevExpress.Sparkline.SparklineViewType"/> enumeration value specifying the type of view to create.</param>
|
||||||
|
<returns>A <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> class descendant.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.EndPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw the end point of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw the end point.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightEndPoint">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying whether or not to highlight the end point of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true, to highlight the end point; otherwise, false.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightMaxPoint">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying whether or not to highlight a sparkline point that has the highest value among all points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true, to highlight a point with the maximum value; otherwise, false.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightMinPoint">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying whether or not to highlight a sparkline point that has the lowest value among all points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true, to highlight a point with the minimum value; otherwise, false.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightStartPoint">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets a value specifying whether or not to highlight the start point of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>true, to highlight the start point; otherwise, false.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.MaxPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw a sparkline point that has the highest value among all data points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a data point with the maximum value.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.MinPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw a sparkline point that has the lowest value among all data points.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a data point with the minimum value.</value>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.NegativePointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw sparkline points that have negative values (less than 0).</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw data points with negative values.</value>
|
||||||
|
</member>
|
||||||
|
<member name="E:DevExpress.Sparkline.SparklineViewBase.PropertiesChanged">
|
||||||
|
<summary>
|
||||||
|
<para>Occurs when any property of the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object has changed its value.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.StartPointColor">
|
||||||
|
<summary>
|
||||||
|
<para>Gets or sets the color to draw the start point of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw the start point.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineViewBase.ToString">
|
||||||
|
<summary>
|
||||||
|
<para>Returns a human-readable string that represents the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<returns>A <see cref="T:System.String"/> value that represents the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</returns>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.SparklineViewBase.Type">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the type of the sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>A <see cref="T:DevExpress.Sparkline.SparklineViewType"/> enumeration value specifying the view type.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.SparklineViewBase.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
|
||||||
|
<summary>
|
||||||
|
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.SparklineViewType">
|
||||||
|
<summary>
|
||||||
|
<para>Lists the values used to specify the available view types of a sparkline.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:DevExpress.Sparkline.SparklineViewType.Area">
|
||||||
|
<summary>
|
||||||
|
<para>Sparkline data points are represented as area.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:DevExpress.Sparkline.SparklineViewType.Bar">
|
||||||
|
<summary>
|
||||||
|
<para>Sparkline data points are represented as bars.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:DevExpress.Sparkline.SparklineViewType.Line">
|
||||||
|
<summary>
|
||||||
|
<para>Sparkline data points are represented as a line.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:DevExpress.Sparkline.SparklineViewType.WinLoss">
|
||||||
|
<summary>
|
||||||
|
<para>Sparkline data points are represented as win and loss squares.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:DevExpress.Sparkline.WinLossSparklineView">
|
||||||
|
<summary>
|
||||||
|
<para>The WinLoss sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.WinLossSparklineView.#ctor">
|
||||||
|
<summary>
|
||||||
|
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> class with the default settings.</para>
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:DevExpress.Sparkline.WinLossSparklineView.Type">
|
||||||
|
<summary>
|
||||||
|
<para>Gets the type of the sparkline view.</para>
|
||||||
|
</summary>
|
||||||
|
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.WinLoss"/>.</value>
|
||||||
|
</member>
|
||||||
|
<member name="M:DevExpress.Sparkline.WinLossSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
|
||||||
|
<summary>
|
||||||
|
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> object.</para>
|
||||||
|
</summary>
|
||||||
|
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
|
||||||
|
</member>
|
||||||
|
</members>
|
||||||
|
</doc>
|
BIN
DogAndArmControl/bin/Debug/DevExpress.Utils.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.Utils.v22.2.dll
Normal file
Binary file not shown.
18911
DogAndArmControl/bin/Debug/DevExpress.Utils.v22.2.xml
Normal file
18911
DogAndArmControl/bin/Debug/DevExpress.Utils.v22.2.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.XtraBars.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.XtraBars.v22.2.dll
Normal file
Binary file not shown.
36938
DogAndArmControl/bin/Debug/DevExpress.XtraBars.v22.2.xml
Normal file
36938
DogAndArmControl/bin/Debug/DevExpress.XtraBars.v22.2.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DevExpress.XtraEditors.v22.2.dll
Normal file
BIN
DogAndArmControl/bin/Debug/DevExpress.XtraEditors.v22.2.dll
Normal file
Binary file not shown.
39288
DogAndArmControl/bin/Debug/DevExpress.XtraEditors.v22.2.xml
Normal file
39288
DogAndArmControl/bin/Debug/DevExpress.XtraEditors.v22.2.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
DogAndArmControl/bin/Debug/DogAndArmControl.exe
Normal file
BIN
DogAndArmControl/bin/Debug/DogAndArmControl.exe
Normal file
Binary file not shown.
21
DogAndArmControl/bin/Debug/DogAndArmControl.exe.config
Normal file
21
DogAndArmControl/bin/Debug/DogAndArmControl.exe.config
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
||||||
|
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<applicationSettings>
|
||||||
|
<DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
<setting name="DPIAwarenessMode" serializeAs="String">
|
||||||
|
<value>System</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="RegisterBonusSkins" serializeAs="String">
|
||||||
|
<value>True</value>
|
||||||
|
</setting>
|
||||||
|
</DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
</applicationSettings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
BIN
DogAndArmControl/bin/Debug/DogAndArmControl.pdb
Normal file
BIN
DogAndArmControl/bin/Debug/DogAndArmControl.pdb
Normal file
Binary file not shown.
BIN
DogAndArmControl/bin/Debug/Newtonsoft.Json.dll
Normal file
BIN
DogAndArmControl/bin/Debug/Newtonsoft.Json.dll
Normal file
Binary file not shown.
11363
DogAndArmControl/bin/Debug/Newtonsoft.Json.xml
Normal file
11363
DogAndArmControl/bin/Debug/Newtonsoft.Json.xml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
Binary file not shown.
Binary file not shown.
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.Form1.resources
Normal file
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.Form1.resources
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
2e76b3282172c5c2af5dc8307255f5a3f005cec846ce8524277394d042763c58
|
@@ -0,0 +1,85 @@
|
|||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.BonusSkins.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Drawing.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.config
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
|
||||||
|
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
|
||||||
|
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb
|
Binary file not shown.
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.exe
Normal file
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.exe
Normal file
Binary file not shown.
21
DogAndArmControl/obj/Debug/DogAndArmControl.exe.config
Normal file
21
DogAndArmControl/obj/Debug/DogAndArmControl.exe.config
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
|
||||||
|
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<applicationSettings>
|
||||||
|
<DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
<setting name="DPIAwarenessMode" serializeAs="String">
|
||||||
|
<value>System</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="RegisterBonusSkins" serializeAs="String">
|
||||||
|
<value>True</value>
|
||||||
|
</setting>
|
||||||
|
</DevExpress.LookAndFeel.Design.AppSettings>
|
||||||
|
</applicationSettings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.pdb
Normal file
BIN
DogAndArmControl/obj/Debug/DogAndArmControl.pdb
Normal file
Binary file not shown.
BIN
DogAndArmControl/obj/Debug/dogandarmcontrol.exe.licenses
Normal file
BIN
DogAndArmControl/obj/Debug/dogandarmcontrol.exe.licenses
Normal file
Binary file not shown.
4
DogAndArmControl/packages.config
Normal file
4
DogAndArmControl/packages.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
|
||||||
|
</packages>
|
BIN
packages/Newtonsoft.Json.13.0.3/.signature.p7s
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/.signature.p7s
vendored
Normal file
Binary file not shown.
20
packages/Newtonsoft.Json.13.0.3/LICENSE.md
vendored
Normal file
20
packages/Newtonsoft.Json.13.0.3/LICENSE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2007 James Newton-King
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
BIN
packages/Newtonsoft.Json.13.0.3/Newtonsoft.Json.13.0.3.nupkg
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/Newtonsoft.Json.13.0.3.nupkg
vendored
Normal file
Binary file not shown.
71
packages/Newtonsoft.Json.13.0.3/README.md
vendored
Normal file
71
packages/Newtonsoft.Json.13.0.3/README.md
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#  Json.NET
|
||||||
|
|
||||||
|
[](https://www.nuget.org/packages/Newtonsoft.Json/)
|
||||||
|
[](https://dev.azure.com/jamesnk/Public/_build/latest?definitionId=8)
|
||||||
|
|
||||||
|
Json.NET is a popular high-performance JSON framework for .NET
|
||||||
|
|
||||||
|
## Serialize JSON
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
Product product = new Product();
|
||||||
|
product.Name = "Apple";
|
||||||
|
product.Expiry = new DateTime(2008, 12, 28);
|
||||||
|
product.Sizes = new string[] { "Small" };
|
||||||
|
|
||||||
|
string json = JsonConvert.SerializeObject(product);
|
||||||
|
// {
|
||||||
|
// "Name": "Apple",
|
||||||
|
// "Expiry": "2008-12-28T00:00:00",
|
||||||
|
// "Sizes": [
|
||||||
|
// "Small"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deserialize JSON
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
string json = @"{
|
||||||
|
'Name': 'Bad Boys',
|
||||||
|
'ReleaseDate': '1995-4-7T00:00:00',
|
||||||
|
'Genres': [
|
||||||
|
'Action',
|
||||||
|
'Comedy'
|
||||||
|
]
|
||||||
|
}";
|
||||||
|
|
||||||
|
Movie m = JsonConvert.DeserializeObject<Movie>(json);
|
||||||
|
|
||||||
|
string name = m.Name;
|
||||||
|
// Bad Boys
|
||||||
|
```
|
||||||
|
|
||||||
|
## LINQ to JSON
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
JArray array = new JArray();
|
||||||
|
array.Add("Manual text");
|
||||||
|
array.Add(new DateTime(2000, 5, 23));
|
||||||
|
|
||||||
|
JObject o = new JObject();
|
||||||
|
o["MyArray"] = array;
|
||||||
|
|
||||||
|
string json = o.ToString();
|
||||||
|
// {
|
||||||
|
// "MyArray": [
|
||||||
|
// "Manual text",
|
||||||
|
// "2000-05-23T00:00:00"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- [Homepage](https://www.newtonsoft.com/json)
|
||||||
|
- [Documentation](https://www.newtonsoft.com/json/help)
|
||||||
|
- [NuGet Package](https://www.nuget.org/packages/Newtonsoft.Json)
|
||||||
|
- [Release Notes](https://github.com/JamesNK/Newtonsoft.Json/releases)
|
||||||
|
- [Contributing Guidelines](https://github.com/JamesNK/Newtonsoft.Json/blob/master/CONTRIBUTING.md)
|
||||||
|
- [License](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
|
||||||
|
- [Stack Overflow](https://stackoverflow.com/questions/tagged/json.net)
|
BIN
packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
10393
packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.xml
vendored
Normal file
10393
packages/Newtonsoft.Json.13.0.3/lib/net20/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
9541
packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.xml
vendored
Normal file
9541
packages/Newtonsoft.Json.13.0.3/lib/net35/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
9741
packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.xml
vendored
Normal file
9741
packages/Newtonsoft.Json.13.0.3/lib/net40/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11363
packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.xml
vendored
Normal file
11363
packages/Newtonsoft.Json.13.0.3/lib/net45/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11325
packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.xml
vendored
Normal file
11325
packages/Newtonsoft.Json.13.0.3/lib/net6.0/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11051
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.xml
vendored
Normal file
11051
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.0/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11173
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.xml
vendored
Normal file
11173
packages/Newtonsoft.Json.13.0.3/lib/netstandard1.3/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.dll
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.dll
vendored
Normal file
Binary file not shown.
11338
packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.xml
vendored
Normal file
11338
packages/Newtonsoft.Json.13.0.3/lib/netstandard2.0/Newtonsoft.Json.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Newtonsoft.Json.13.0.3/packageIcon.png
vendored
Normal file
BIN
packages/Newtonsoft.Json.13.0.3/packageIcon.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.7 KiB |
Reference in New Issue
Block a user