Skip to content

Commit e5a8b79

Browse files
committed
CLI rewrite
1 parent 2fc55bc commit e5a8b79

File tree

12 files changed

+761
-213
lines changed

12 files changed

+761
-213
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.cab filter=lfs diff=lfs merge=lfs -text

.github/workflows/build.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ name: Check-Build
22

33
on: [push]
44

5+
env:
6+
KINECTSDK20_DIR: D:\Microsoft SDKs\Kinect\v2.0_1409\
7+
58
jobs:
69
build:
710

@@ -12,13 +15,24 @@ jobs:
1215

1316
steps:
1417
- uses: actions/checkout@v3
18+
with:
19+
lfs: 'true'
20+
1521
- uses: actions/setup-dotnet@v3
1622
with:
1723
dotnet-version: '7.0.x'
1824

1925
- name: Add MSYS64 bin to PATH
2026
run: echo "C:\msys64\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
2127

28+
- name: Install Kinect SDK20
29+
shell: powershell
30+
run: |
31+
New-Item -ItemType directory KinectSDK-v2.0 | Out-Null
32+
wget "https://download.microsoft.com/download/F/2/D/F2D1012E-3BC6-49C5-B8B3-5ACFF58AF7B8/KinectSDK-v2.0_1409-Setup.exe" -OutFile KinectSDK-v2.0-Setup.exe
33+
& "C:\Program Files (x86)\WiX Toolset v3.11\bin\dark.exe" KinectSDK-v2.0-Setup.exe -x KinectSDK-v2.0
34+
Start-Process msiexec -ArgumentList "/a ${{ github.workspace }}\KinectSDK-v2.0\AttachedContainer\KinectSDK-v2.0_1409-x64.msi /passive /qn" -Wait -NoNewWindow
35+
2236
- name: Add MSBuild to PATH
2337
uses: microsoft/[email protected]
2438

@@ -27,7 +41,7 @@ jobs:
2741

2842
- name: Pack published files
2943
run: |
30-
cd plugin_KinectOne/bin/Release/net7.0/win10-x64/publish
44+
cd plugin_KinectOne/bin/Release/Publish
3145
7z a plugin_KinectOne.zip *
3246
3347
- name: Upload plugin artifact
@@ -38,5 +52,5 @@ jobs:
3852
prerelease: true
3953
title: "plugin_KinectOne Build Artifact"
4054
files: |
41-
./plugin_KinectOne/bin/Release/net7.0/win10-x64/publish/plugin_KinectOne.zip
55+
./plugin_KinectOne/bin/Release/Publish/plugin_KinectOne.zip
4256
./external/manifest.json

KinectHandler/AssemblyInfo.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// ReSharper disable once CppUnusedIncludeDirective
2+
#include "KinectHandler.h"
3+
4+
using namespace System;
5+
using namespace Reflection;
6+
using namespace Runtime::CompilerServices;
7+
using namespace Runtime::InteropServices;
8+
using namespace Security::Permissions;
9+
10+
[assembly:AssemblyTitleAttribute(L"KinectHandler")];
11+
[assembly:AssemblyDescriptionAttribute(L"Kinect V1 native handler for Kinect for Xbox One Amethyst (.NET) plugin")];
12+
[assembly:AssemblyConfigurationAttribute(L"")];
13+
[assembly:AssemblyCompanyAttribute(L"K2VR Team")];
14+
[assembly:AssemblyProductAttribute(L"KinectHandler")];
15+
[assembly:AssemblyCopyrightAttribute(L"Copyright (c) 2022 K2VR Team")];
16+
[assembly:AssemblyTrademarkAttribute(L"")];
17+
[assembly:AssemblyCultureAttribute(L"")];
18+
19+
[assembly:AssemblyVersionAttribute(L"1.0.*")];
20+
21+
[assembly:ComVisible(false)];

KinectHandler/KinectHandler.h

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#pragma once
2+
3+
#pragma unmanaged
4+
#include "KinectWrapper.h"
5+
#pragma managed
6+
7+
using namespace System;
8+
using namespace Numerics;
9+
using namespace Collections::Generic;
10+
using namespace ComponentModel::Composition;
11+
using namespace Runtime::InteropServices;
12+
13+
using namespace Amethyst::Plugins::Contract;
14+
15+
namespace KinectHandler
16+
{
17+
public ref class KinectJoint sealed
18+
{
19+
public:
20+
KinectJoint(const int role)
21+
{
22+
JointRole = role;
23+
}
24+
25+
property Vector3 Position;
26+
property Quaternion Orientation;
27+
28+
property int TrackingState;
29+
property int JointRole;
30+
};
31+
32+
delegate void FunctionToCallDelegate();
33+
34+
public ref class KinectHandler
35+
{
36+
private:
37+
KinectWrapper* kinect_;
38+
FunctionToCallDelegate^ function_;
39+
40+
public:
41+
KinectHandler() : kinect_(new KinectWrapper())
42+
{
43+
function_ = gcnew FunctionToCallDelegate(this, &KinectHandler::StatusChangedHandler);
44+
pin_ptr<FunctionToCallDelegate^> tmp = &function_; // Pin the function delegate
45+
46+
status_changed_event = static_cast<void(__cdecl*)()>(
47+
Marshal::GetFunctionPointerForDelegate(function_).ToPointer());
48+
}
49+
50+
virtual void StatusChangedHandler()
51+
{
52+
// implemented in the c# handler
53+
}
54+
55+
List<KinectJoint^>^ GetTrackedKinectJoints()
56+
{
57+
if (!IsInitialized) return gcnew List<KinectJoint^>;
58+
59+
const auto& positions = kinect_->skeleton_positions();
60+
const auto& orientations = kinect_->bone_orientations();
61+
62+
auto trackedKinectJoints = gcnew List<KinectJoint^>;
63+
for each (auto v in Enum::GetValues<TrackedJointType>())
64+
{
65+
if (v == TrackedJointType::JointManual)
66+
continue; // Skip unsupported joints
67+
68+
auto joint = gcnew KinectJoint(static_cast<int>(v));
69+
70+
joint->TrackingState =
71+
positions[kinect_->KinectJointType(static_cast<int>(v))].TrackingState;
72+
73+
joint->Position = Vector3(
74+
positions[kinect_->KinectJointType(static_cast<int>(v))].Position.X,
75+
positions[kinect_->KinectJointType(static_cast<int>(v))].Position.Y,
76+
positions[kinect_->KinectJointType(static_cast<int>(v))].Position.Z);
77+
78+
joint->Orientation = Quaternion(
79+
orientations[kinect_->KinectJointType(static_cast<int>(v))].Orientation.x,
80+
orientations[kinect_->KinectJointType(static_cast<int>(v))].Orientation.y,
81+
orientations[kinect_->KinectJointType(static_cast<int>(v))].Orientation.z,
82+
orientations[kinect_->KinectJointType(static_cast<int>(v))].Orientation.w);
83+
84+
trackedKinectJoints->Add(joint);
85+
}
86+
87+
return trackedKinectJoints;
88+
}
89+
90+
property bool IsInitialized
91+
{
92+
bool get() { return kinect_->is_initialized(); }
93+
}
94+
95+
property bool IsSkeletonTracked
96+
{
97+
bool get() { return kinect_->skeleton_tracked(); }
98+
}
99+
100+
property int DeviceStatus
101+
{
102+
int get() { return kinect_->status_result(); }
103+
}
104+
105+
property bool IsSettingsDaemonSupported
106+
{
107+
bool get() { return DeviceStatus == 0; }
108+
}
109+
110+
int InitializeKinect()
111+
{
112+
return kinect_->initialize();
113+
}
114+
115+
int ShutdownKinect()
116+
{
117+
return kinect_->shutdown();
118+
}
119+
};
120+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|x64">
5+
<Configuration>Debug</Configuration>
6+
<Platform>x64</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release|x64">
9+
<Configuration>Release</Configuration>
10+
<Platform>x64</Platform>
11+
</ProjectConfiguration>
12+
</ItemGroup>
13+
<PropertyGroup Label="Globals">
14+
<VCProjectVersion>17.0</VCProjectVersion>
15+
<EnableManagedPackageReferenceSupport>true</EnableManagedPackageReferenceSupport>
16+
<ProjectGuid>{A2F2D832-190E-4933-8D11-B27459BA2D8C}</ProjectGuid>
17+
<Keyword>NetCoreCProj</Keyword>
18+
<RootNamespace>KinectHandler</RootNamespace>
19+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
20+
<TargetFramework>net7.0</TargetFramework>
21+
<RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
22+
</PropertyGroup>
23+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
24+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
25+
<ConfigurationType>DynamicLibrary</ConfigurationType>
26+
<UseDebugLibraries>true</UseDebugLibraries>
27+
<PlatformToolset>v143</PlatformToolset>
28+
<CLRSupport>NetCore</CLRSupport>
29+
<CharacterSet>Unicode</CharacterSet>
30+
</PropertyGroup>
31+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
32+
<ConfigurationType>DynamicLibrary</ConfigurationType>
33+
<UseDebugLibraries>false</UseDebugLibraries>
34+
<PlatformToolset>v143</PlatformToolset>
35+
<CLRSupport>NetCore</CLRSupport>
36+
<CharacterSet>Unicode</CharacterSet>
37+
</PropertyGroup>
38+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
39+
<ImportGroup Label="ExtensionSettings">
40+
</ImportGroup>
41+
<ImportGroup Label="Shared">
42+
</ImportGroup>
43+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
44+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
45+
</ImportGroup>
46+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
47+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
48+
</ImportGroup>
49+
<PropertyGroup Label="UserMacros" />
50+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
51+
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\$(CLRSupport)\</OutDir>
52+
</PropertyGroup>
53+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
54+
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\$(CLRSupport)\</OutDir>
55+
</PropertyGroup>
56+
<PropertyGroup Label="Vcpkg">
57+
<VcpkgEnabled>false</VcpkgEnabled>
58+
</PropertyGroup>
59+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
60+
<ClCompile>
61+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
62+
<PrecompiledHeaderFile>
63+
</PrecompiledHeaderFile>
64+
<WarningLevel>Level3</WarningLevel>
65+
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
66+
<LanguageStandard>stdcpp17</LanguageStandard>
67+
<AdditionalIncludeDirectories>$(KINECTSDK20_DIR)inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
68+
</ClCompile>
69+
<Link>
70+
<AdditionalDependencies>Kinect20.lib;shell32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
71+
<AdditionalLibraryDirectories>$(KINECTSDK20_DIR)lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
72+
</Link>
73+
</ItemDefinitionGroup>
74+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
75+
<ClCompile>
76+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
77+
<PrecompiledHeaderFile>
78+
</PrecompiledHeaderFile>
79+
<WarningLevel>Level3</WarningLevel>
80+
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
81+
<LanguageStandard>stdcpp17</LanguageStandard>
82+
<AdditionalIncludeDirectories>$(KINECTSDK20_DIR)inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
83+
</ClCompile>
84+
<Link>
85+
<AdditionalDependencies>Kinect20.lib;shell32.lib;shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
86+
<AdditionalLibraryDirectories>$(KINECTSDK20_DIR)lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
87+
</Link>
88+
</ItemDefinitionGroup>
89+
<ItemGroup>
90+
<ClInclude Include="KinectHandler.h" />
91+
<ClInclude Include="KinectWrapper.h" />
92+
</ItemGroup>
93+
<ItemGroup>
94+
<ClCompile Include="AssemblyInfo.cpp" />
95+
</ItemGroup>
96+
<ItemGroup>
97+
<PackageReference Include="Amethyst.Plugins.Contract">
98+
<Version>0.2.22</Version>
99+
</PackageReference>
100+
<PackageReference Include="System.ComponentModel">
101+
<Version>4.3.0</Version>
102+
</PackageReference>
103+
<PackageReference Include="System.ComponentModel.Composition">
104+
<Version>8.0.0</Version>
105+
</PackageReference>
106+
</ItemGroup>
107+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
108+
<ImportGroup Label="ExtensionTargets">
109+
</ImportGroup>
110+
</Project>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup>
4+
<Filter Include="Source Files">
5+
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6+
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7+
</Filter>
8+
<Filter Include="Header Files">
9+
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10+
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
11+
</Filter>
12+
<Filter Include="Resource Files">
13+
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14+
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15+
</Filter>
16+
</ItemGroup>
17+
<ItemGroup>
18+
<ClInclude Include="KinectHandler.h">
19+
<Filter>Header Files</Filter>
20+
</ClInclude>
21+
<ClInclude Include="KinectWrapper.h">
22+
<Filter>Header Files</Filter>
23+
</ClInclude>
24+
</ItemGroup>
25+
<ItemGroup>
26+
<ClCompile Include="AssemblyInfo.cpp">
27+
<Filter>Source Files</Filter>
28+
</ClCompile>
29+
</ItemGroup>
30+
</Project>

0 commit comments

Comments
 (0)