Skip to content

Commit

Permalink
Added support for 3DsMax 2024
Browse files Browse the repository at this point in the history
  • Loading branch information
munkybutt committed Sep 16, 2023
1 parent 2779170 commit 2488482
Show file tree
Hide file tree
Showing 11 changed files with 213 additions and 82 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,8 @@ PyProjects/source/vcpkg_installed/
PyProjects/venv37/
PyProjects/venv39/
PyProjects/.venvs/
/pypi/*
temp.cpp
*.exp
*.max
*.mb
*.mb
2 changes: 1 addition & 1 deletion PYProjects/skin_plus_plus/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def __get_skin_plus_plus_py(python_version: str, debug: bool = False):
return skin_plus_plus_py


def __get_dcc_backend(dcc:str, version: str, api:str):
def __get_dcc_backend(dcc: str, version: str, api: str):
current_directory = pathlib.Path(__file__).parent
sub_module_name = f"skin_plus_plus_{api}_{version}"
sub_module_path = current_directory / f"dccs/{dcc}" / sub_module_name
Expand Down
50 changes: 4 additions & 46 deletions PYProjects/skin_plus_plus/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import numpy as np
import numpy.typing as np_typing
import typing


from . import skin_plus_plus_py
from .core import FileType as _FileType
from .core import export_skin_data as _export_skin_data
from .core import import_skin_data as _import_skin_data
Expand All @@ -26,50 +25,9 @@ The name of the current DCC.
"""


class SkinData:
"""
Class containing data for a given skin object.
---
This class is a wrapped c++ struct exposed to Python with Pybind11.
# Note: It cannot be extended!
---
Attributes:
-----------
- `bone_names`: The names of the bones in the skin object.
- `bone_ids`: The ids of each influence assigned to each vertext.
These are used to map to the bone names.
- `weights`: The weights of each influence assigned to each vertext.
- `positions`: The positions of each vertex.
"""

bone_names: list[str]
bone_ids: np_typing.NDArray[np.int64]
weights: np_typing.NDArray[np.float32]
positions: np_typing.NDArray[np.float32]

@typing.overload
def __init__(self):
...

@typing.overload
def __init__(
self,
names: tuple[str, ...],
bone_ids: tuple[tuple[int, ...], ...],
weights: tuple[tuple[float, ...], ...],
positions: tuple[tuple[float, float, float], ...],
):
...


def get_skin_data(mesh_name: str) -> SkinData:
def get_skin_data(mesh_name: str) -> skin_plus_plus_py.SkinData:
...


def set_skin_weights(mesh_name: str, skin_data: SkinData) -> bool:
def set_skin_weights(mesh_name: str, skin_data: skin_plus_plus_py.SkinData) -> bool:
...
Binary file not shown.
Binary file not shown.
44 changes: 44 additions & 0 deletions PYProjects/skin_plus_plus/skin_plus_plus_py.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import numpy as np
import numpy.typing as np_typing
import typing


class SkinData:
"""
Class containing data for a given skin object.
---
This class is a wrapped c++ struct exposed to Python with Pybind11.
# Note: It cannot be extended!
---
Attributes:
-----------
- `bone_names`: The names of the bones in the skin object.
- `bone_ids`: The ids of each influence assigned to each vertext.
These are used to map to the bone names.
- `weights`: The weights of each influence assigned to each vertext.
- `positions`: The positions of each vertex.
"""

bone_names: list[str]
bone_ids: np_typing.NDArray[np.int64]
weights: np_typing.NDArray[np.float32]
positions: np_typing.NDArray[np.float32]

@typing.overload
def __init__(self):
...

@typing.overload
def __init__(
self,
names: tuple[str, ...],
bone_ids: tuple[tuple[int, ...], ...],
weights: tuple[tuple[float, ...], ...],
positions: tuple[tuple[float, float, float], ...],
):
...
3 changes: 3 additions & 0 deletions PYProjects/source/.sln.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ $Env:THIRD_PARTY_FMT = (Resolve-Path -Path "..\3rdParty\fmt-10.1.1")

$Env:ADSK_MAYA_SDK_2022 = "C:\Program Files\Autodesk\Maya2022\devkit\devkitBase"
$Env:ADSK_MAYA_SDK_2023 = "C:\Program Files\Autodesk\Maya2023\devkit\devkitBase"
$Env:ADSK_MAYA_SDK_2024 = "C:\Program Files\Autodesk\Maya2024\devkit\devkitBase"

$Env:PYBIND11_37 = (Resolve-Path -Path "..\.venvs\py379\Lib\site-packages\pybind11")
$Env:PYBIND11_39 = (Resolve-Path -Path "..\.venvs\py397\Lib\site-packages\pybind11")
$Env:PYBIND11_310 = (Resolve-Path -Path "..\.venvs\py3108\Lib\site-packages\pybind11")

$Env:PYTHON_37 = (Resolve-Path -Path "C:\Users\Sheaky\.pyenv\pyenv-win\versions\3.7.9")
$Env:PYTHON_39 = (Resolve-Path -Path "C:\Users\Sheaky\.pyenv\pyenv-win\versions\3.9.7")
$Env:PYTHON_310 = (Resolve-Path -Path "C:\Users\Sheaky\.pyenv\pyenv-win\versions\3.10.8")

.\skin_plus_plus.sln
6 changes: 6 additions & 0 deletions PYProjects/source/skin_plus_plus.sln
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Global
2022-Release|x64 = 2022-Release|x64
2023-Debug|x64 = 2023-Debug|x64
2023-Release|x64 = 2023-Release|x64
2024-Release|x64 = 2024-Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2021-Release|x64.ActiveCfg = 2021-Release|x64
Expand All @@ -34,6 +35,8 @@ Global
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2023-Debug|x64.Build.0 = 2023-Debug|x64
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2023-Release|x64.ActiveCfg = 2023-Release|x64
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2023-Release|x64.Build.0 = 2023-Release|x64
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2024-Release|x64.ActiveCfg = 2024-Release|x64
{7BF5EA8D-2105-425A-967C-590AD47EC6CB}.2024-Release|x64.Build.0 = 2024-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2021-Release|x64.ActiveCfg = 2021-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2021-Release|x64.Build.0 = 2021-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2022-Debug|x64.ActiveCfg = 2022-Debug|x64
Expand All @@ -44,6 +47,8 @@ Global
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2023-Debug|x64.Build.0 = 2023-Debug|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2023-Release|x64.ActiveCfg = 2023-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2023-Release|x64.Build.0 = 2023-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2024-Release|x64.ActiveCfg = 2024-Release|x64
{6A977F79-6449-4D2F-8B5F-9363A19F5046}.2024-Release|x64.Build.0 = 2024-Release|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2021-Release|x64.ActiveCfg = 2021-Release|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2022-Debug|x64.ActiveCfg = 2022-Debug|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2022-Debug|x64.Build.0 = 2022-Debug|x64
Expand All @@ -53,6 +58,7 @@ Global
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2023-Debug|x64.Build.0 = 2023-Debug|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2023-Release|x64.ActiveCfg = 2023-Release|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2023-Release|x64.Build.0 = 2023-Release|x64
{1A82B795-46D9-40C8-9AE2-4C4D2D71BBFD}.2024-Release|x64.ActiveCfg = 2024-Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
81 changes: 61 additions & 20 deletions PYProjects/source/skin_plus_plus_py/skin_plus_plus_py.vcxproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="2024-Release|x64">
<Configuration>2024-Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="2023-Debug|x64">
<Configuration>2023-Debug</Configuration>
<Platform>x64</Platform>
Expand Down Expand Up @@ -64,6 +68,14 @@
<CharacterSet>Unicode</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
Expand All @@ -84,6 +96,9 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='2023-Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2022-Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.pyd</TargetExt>
Expand Down Expand Up @@ -114,6 +129,12 @@
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\py\39\</OutDir>
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)headers;$(PYTHON_39)\include;$(PYBIND11_39)\include;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.pyd</TargetExt>
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\py\310\</OutDir>
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)headers;$(PYTHON_310)\include;$(PYBIND11_310)\include;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Label="Vcpkg">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
<VcpkgEnabled>false</VcpkgEnabled>
Expand Down Expand Up @@ -146,6 +167,42 @@
<AdditionalLibraryDirectories>$(PYTHON_37)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2021-Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(PYTHON_37)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<ProgramDatabaseFile>$(OutDir)obj\$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(OutDir)obj\$(TargetName).pgd</ProfileGuidedDatabase>
<ImportLibrary>$(OutDir)obj\$(TargetName).lib</ImportLibrary>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
<Xdcmake>
<OutputFile>$(OutDir)obj\$(TargetName).xml</OutputFile>
</Xdcmake>
<Bscmake>
<OutputFile>$(OutDir)obj\$(TargetName).bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Copy compiled files into correct python module structure</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2022-Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
Expand Down Expand Up @@ -202,7 +259,7 @@
<AdditionalLibraryDirectories>$(PYTHON_39)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2021-Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
Expand All @@ -211,32 +268,16 @@
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(PYTHON_37)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
<ProgramDatabaseFile>$(OutDir)obj\$(TargetName).pdb</ProgramDatabaseFile>
<ProfileGuidedDatabase>$(OutDir)obj\$(TargetName).pgd</ProfileGuidedDatabase>
<ImportLibrary>$(OutDir)obj\$(TargetName).lib</ImportLibrary>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(PYTHON_310)\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<Xdcmake>
<OutputFile>$(OutDir)obj\$(TargetName).xml</OutputFile>
</Xdcmake>
<Bscmake>
<OutputFile>$(OutDir)obj\$(TargetName).bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Copy compiled files into correct python module structure</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="headers\skin_plus_plus_py.h" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
<Configuration>2023-Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="2024-Release|x64">
<Configuration>2024-Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<!-- Globals -->
<PropertyGroup Label="Globals">
Expand Down Expand Up @@ -70,6 +74,14 @@
<CharacterSet>Unicode</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
Expand All @@ -88,6 +100,9 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='2023-Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='2023-Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
Expand Down Expand Up @@ -121,6 +136,13 @@
<LibraryPath>$(ADSK_MAYA_SDK_2023)\lib;$(PYTHON_39)\libs;$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\dccs\maya\$(ProjectName)_2023\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.pyd</TargetExt>
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir);$(ProjectDir)..\skin_plus_plus_py\headers;$(ADSK_MAYA_SDK_2023)\include;$(PYTHON_39)\include;$(PYBIND11_39)\include;$(IncludePath)</IncludePath>
<LibraryPath>$(ADSK_MAYA_SDK_2023)\lib;$(PYTHON_39)\libs;$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\dccs\maya\$(ProjectName)_2024\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2023-Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetExt>.pyd</TargetExt>
Expand Down Expand Up @@ -203,6 +225,23 @@
<AdditionalDependencies>OpenMaya.lib;OpenMayaAnim.lib;Foundation.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>OpenMaya.lib;OpenMayaAnim.lib;Foundation.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='2023-Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
Expand Down
Loading

0 comments on commit 2488482

Please sign in to comment.