Skip to content

Commit 22b570e

Browse files
committed
Added support for namespaces
This has required converting all std::string to std::wstring
1 parent 34137ba commit 22b570e

File tree

13 files changed

+145
-40
lines changed

13 files changed

+145
-40
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,7 @@ MigrationBackup/
438438

439439
# End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,visualstudiocode,sublimetext
440440

441-
**/.3rdParty/**
442-
**/.venvs/**
441+
**/.dev/**
443442
build/
444443
pypi/
445444
temp.cpp

src/cpp/.sln.ps1

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Set dependency variables here:
22
$devFolder = Resolve-Path -Path "$PSScriptRoot\..\..\.dev"
33
Write-Host $devFolder
4-
Set-Location "$devFolder\3rdparty"
4+
Set-Location "$devFolder\ThirdParty"
55
$Env:THIRD_PARTY_EIGEN = (Resolve-Path -Path "./eigen")
66
$Env:THIRD_PARTY_FMT = (Resolve-Path -Path "./fmt")
77

@@ -17,7 +17,7 @@ foreach ($version in $installedVersions) {
1717
$pythonRootPath = (Get-Item $pythonPath).Directory.FullName
1818
$majorMinor = $version -replace '(\d+\.\d+).*', '$1' -replace '\.', ''
1919
Set-Item "Env:PYTHON_$majorMinor" $pythonRootPath
20-
$pybindPath = Resolve-Path -Path "$devFolder\venv\$majorMinor\.venv\Lib\site-packages\pybind11"
20+
$pybindPath = Resolve-Path -Path "$devFolder\venvs\py$majorMinor\.venv\Lib\site-packages\pybind11" -ErrorAction SilentlyContinue
2121
if ($pybindPath) {
2222
Write-Host "Setting PyBind11 path: $pybindPath"
2323
Set-Item "Env:PYBIND11_$majorMinor" $pybindPath

src/cpp/skin_plus_plus_py/headers/skin_plus_plus_py.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
#define FMT_HEADER_ONLY
1414
#define FMT_DEPRECATED_INCLUDE_XCHAR
1515
#include <fmt/format.h>
16-
//#include <fmt/xchar.h>
16+
#include <fmt/xchar.h>
1717

1818
namespace py = pybind11;
1919
namespace eg = Eigen;
2020

2121

22-
typedef std::vector<std::string> BoneNamesVector;
22+
typedef std::vector<std::wstring> BoneNamesVector;
2323
typedef eg::MatrixXi BoneIDsMatrix;
2424
typedef eg::MatrixXd WeightsMatrix;
2525
typedef eg::MatrixXd PositionMatrix;
@@ -83,13 +83,13 @@ const char* convertStringToChar(std::string text)
8383
struct SortedBoneNameData
8484
{
8585
std::vector<UINT> sortedBoneIDs;
86-
std::vector<std::string> unfoundBoneNames;
86+
std::vector<std::wstring> unfoundBoneNames;
8787
UINT highestBoneID;
8888
UINT lowestBoneID;
8989
SortedBoneNameData(UINT boneCount)
9090
{
9191
sortedBoneIDs = std::vector<UINT>(boneCount);
92-
unfoundBoneNames = std::vector<std::string>();
92+
unfoundBoneNames = std::vector<std::wstring>();
9393
};
9494
~SortedBoneNameData() {}
9595
};
@@ -219,15 +219,15 @@ struct PySkinData final
219219
{
220220
const size_t cachedBoneCount = this->boneNames.size();
221221
auto sortedBoneNameData = SortedBoneNameData(cachedBoneCount);
222-
std::unordered_map<std::string, size_t> nameMap;
222+
std::unordered_map<std::wstring, size_t> nameMap;
223223
for (size_t index = 0; index < currentBoneNames.size(); index++)
224224
{
225225
nameMap[currentBoneNames[index]] = index;
226226
}
227227

228228
for (size_t boneIndex = 0; boneIndex < cachedBoneCount; boneIndex++)
229229
{
230-
const std::string nameToFind = this->boneNames[boneIndex];
230+
const std::wstring nameToFind = this->boneNames[boneIndex];
231231
const auto lookup = nameMap.find(nameToFind);
232232
if (lookup != nameMap.end())
233233
{
@@ -240,10 +240,10 @@ struct PySkinData final
240240
}
241241
if (!sortedBoneNameData.unfoundBoneNames.empty())
242242
{
243-
std::string message = "The following bones are not in the skin definition:";
244-
for (const std::string& name : sortedBoneNameData.unfoundBoneNames)
243+
std::wstring message = L"The following bones are not in the skin definition:";
244+
for (const std::wstring& name : sortedBoneNameData.unfoundBoneNames)
245245
{
246-
message += fmt::format("\n- {}", name);
246+
message = fmt::format(L"{}\n- {}", message, name);
247247
}
248248
py::print(message);
249249

src/cpp/skin_plus_plus_py/skin_plus_plus_py.vcxproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2023-Release|x64'">
127127
<LinkIncremental>false</LinkIncremental>
128128
<TargetExt>.pyd</TargetExt>
129-
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\py\39\</OutDir>
129+
<OutDir>$(SolutionDir)..\skin_plus_plus\py\39\</OutDir>
130130
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)headers;$(PYTHON_39)\include;$(PYBIND11_39)\include;$(IncludePath)</IncludePath>
131131
</PropertyGroup>
132132
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
@@ -248,8 +248,9 @@
248248
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
249249
<ConformanceMode>true</ConformanceMode>
250250
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
251-
<LanguageStandard>Default</LanguageStandard>
251+
<LanguageStandard>stdcpp17</LanguageStandard>
252252
<LanguageStandard_C>stdc17</LanguageStandard_C>
253+
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
253254
</ClCompile>
254255
<Link>
255256
<SubSystem>Console</SubSystem>

src/cpp/skin_plus_plus_pymaya/skin_plus_plus_pymaya.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ static UINT getFirstFreeIndex(MPlug* arrayPlug)
156156

157157
MObject SkinManagerMaya::addMissingBones(BoneNamesVector& missingBoneNames, const UINT& skinnedBoneCount)
158158
{
159-
for (std::string& name : missingBoneNames)
159+
for (std::wstring& name : missingBoneNames)
160160
{
161-
auto command = fmt::format("skinCluster -e -ai {} {}", name, this->fnSkinCluster.name().asChar());
161+
std::wstring command = fmt::format(L"skinCluster -e -ai {} {}", name, fmt::ptr(this->fnSkinCluster.name().asChar()));
162162
MGlobal::executeCommand(MString(command.c_str()));
163163
}
164164
}
@@ -278,10 +278,10 @@ PySkinData SkinManagerMaya::extractSkinData(const bool safeMode)
278278
{
279279
throw std::runtime_error("Failed to find influence objects!");
280280
}
281-
pySkinData.boneNames = std::vector<std::string>(skinnedBones.length());
281+
pySkinData.boneNames = std::vector<std::wstring>(skinnedBones.length());
282282
for (UINT boneIndex = 0; boneIndex < skinnedBones.length(); boneIndex++)
283283
{
284-
pySkinData.boneNames[boneIndex] = fmt::format("{}", skinnedBones[boneIndex].partialPathName().asChar());
284+
pySkinData.boneNames[boneIndex] = fmt::format(L"{}", fmt::ptr(skinnedBones[boneIndex].partialPathName().asChar()));
285285
}
286286
MPoint mPoint;
287287
pySkinData.setMaximumVertexWeightCount(boneCount);
@@ -409,13 +409,13 @@ static MDoubleArray getWeightsAsMDoubleArray(BoneIDsMatrix& boneIDs, WeightsMatr
409409
}
410410

411411

412-
static void getBoneNames(std::vector<std::string>& currentBoneNames, const MDagPathArray& skinnedBones, const UINT& skinnedBoneCount)
412+
static void getBoneNames(std::vector<std::wstring>& currentBoneNames, const MDagPathArray& skinnedBones, const UINT& skinnedBoneCount)
413413
{
414414
currentBoneNames.clear();
415415
currentBoneNames.resize(skinnedBoneCount);
416416
for (UINT boneIndex = 0; boneIndex < skinnedBoneCount; boneIndex++)
417417
{
418-
currentBoneNames[boneIndex] = fmt::format("{}", skinnedBones[boneIndex].partialPathName().asChar());
418+
currentBoneNames[boneIndex] = fmt::format(L"{}", fmt::ptr(skinnedBones[boneIndex].partialPathName().asChar()));
419419
}
420420
}
421421

@@ -456,7 +456,7 @@ bool SkinManagerMaya::applySkinData(PySkinData& skinData)
456456
throw std::runtime_error("Error querying bones!");
457457
}
458458
auto skinnedBoneCount = skinnedBones.length();
459-
auto currentBoneNames = std::vector<std::string>(skinnedBoneCount);
459+
auto currentBoneNames = std::vector<std::wstring>(skinnedBoneCount);
460460
getBoneNames(currentBoneNames, skinnedBones, skinnedBoneCount);
461461
bool bonesAdded = false;
462462
if (skinnedBoneCount == 0)

src/cpp/skin_plus_plus_pymaya/skin_plus_plus_pymaya.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ class SkinManagerMaya
235235

236236
// Get the skin weights from the given node's skin modifier
237237
//std::vector<std::vector<std::vector <float>>> getSkinWeights();
238-
MObject addMissingBones(std::vector<std::string>& missingBoneNames, const UINT& skinnedBoneCount);
238+
MObject addMissingBones(std::vector<std::wstring>& missingBoneNames, const UINT& skinnedBoneCount);
239239

240240
// Get the vertex weights, bone ids and positions from the given node
241241
PySkinData extractSkinData(const bool safeMode = true);

src/cpp/skin_plus_plus_pymaya/skin_plus_plus_pymaya.vcxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134
<TargetExt>.pyd</TargetExt>
135135
<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>
136136
<LibraryPath>$(ADSK_MAYA_SDK_2023)\lib;$(PYTHON_39)\libs;$(LibraryPath)</LibraryPath>
137-
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\dccs\maya\$(ProjectName)_2023\</OutDir>
137+
<OutDir>$(SolutionDir)..\skin_plus_plus\dccs\maya\$(ProjectName)_2023\</OutDir>
138138
</PropertyGroup>
139139
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
140140
<LinkIncremental>false</LinkIncremental>
@@ -232,6 +232,8 @@
232232
<SDLCheck>true</SDLCheck>
233233
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
234234
<ConformanceMode>true</ConformanceMode>
235+
<LanguageStandard>stdcpp17</LanguageStandard>
236+
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
235237
</ClCompile>
236238
<Link>
237239
<SubSystem>Console</SubSystem>

src/cpp/skin_plus_plus_pymxs/headers/skin_plus_plus_pymxs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <Max.h>
1818
#include <matrix3.h>
1919
#include <maxscript/maxwrapper/mxsobjects.h>
20+
//#include <modifiers/bonesdef/bonesdef.h>
2021

2122

2223
class SkinManager
@@ -60,7 +61,7 @@ class SkinManager
6061
void extractDataPoly(const UINT vertexCount);
6162

6263
// Add missing bones to the skin modifier based on the given vector of missing bone names
63-
void addMissingBones(std::vector<std::string> missingBoneNames);
64+
void addMissingBones(std::vector<std::wstring> missingBoneNames);
6465

6566
// Initialise skinModifier, iSkin, iSkinContextData, iSkinImportData
6667
bool initialiseSkin();

src/cpp/skin_plus_plus_pymxs/skin_plus_plus_pymxs.vcxproj

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,12 @@
135135
<TargetExt>.pyd</TargetExt>
136136
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)\headers;$(ProjectDir)..\skin_plus_plus_py\headers;$(ADSK_3DSMAX_SDK_2023)\include;$(ADSK_3DSMAX_SDK_2023)\include\geom;$(PYTHON_39)\include;$(PYBIND11_39)\include;$(IncludePath)</IncludePath>
137137
<LibraryPath>$(PYTHON_39)\libs;$(ADSK_3DSMAX_SDK_2023)\lib\x64\Release;$(LibraryPath)</LibraryPath>
138-
<OutDir>$(SolutionDir)..\..\PYProjects\skin_plus_plus\dccs\max\$(ProjectName)_2023</OutDir>
138+
<OutDir>$(SolutionDir)..\skin_plus_plus\dccs\max\$(ProjectName)_2023</OutDir>
139139
</PropertyGroup>
140140
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">
141141
<LinkIncremental>false</LinkIncremental>
142142
<TargetExt>.pyd</TargetExt>
143-
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)\headers;$(ProjectDir)..\skin_plus_plus_py\headers;$(ADSK_3DSMAX_SDK_2024)\include;$(ADSK_3DSMAX_SDK_2024)\include\geom;$(PYTHON_310)\include;$(PYBIND11_310)\include;$(IncludePath)</IncludePath>
143+
<IncludePath>$(THIRD_PARTY_EIGEN);$(THIRD_PARTY_FMT)\include;$(ProjectDir)\headers;$(ProjectDir)..\skin_plus_plus_py\headers;$(ADSK_3DSMAX_SDK_2024)\include;$(ADSK_3DSMAX_SDK_2024)\include\geom;$(PYTHON_310)\include;$(PYBIND11_310)\include;$(ADSK_3DSMAX_SDK_2024)\samples;$(IncludePath)</IncludePath>
144144
<LibraryPath>$(PYTHON_310)\libs;$(ADSK_3DSMAX_SDK_2024)\lib\x64\Release;$(LibraryPath)</LibraryPath>
145145
<OutDir>$(SolutionDir)..\skin_plus_plus\dccs\max\2024\</OutDir>
146146
<TargetName>$(ProjectName)</TargetName>
@@ -296,6 +296,11 @@
296296
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">stdcpp17</LanguageStandard>
297297
<FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">Speed</FavorSizeOrSpeed>
298298
<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">/utf-8 %(AdditionalOptions)</AdditionalOptions>
299+
<Optimization Condition="'$(Configuration)|$(Platform)'=='2024-Release|x64'">Disabled</Optimization>
300+
</ClCompile>
301+
<ClCompile>
302+
<LanguageStandard Condition="'$(Configuration)|$(Platform)'=='2023-Release|x64'">stdcpp17</LanguageStandard>
303+
<AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='2023-Release|x64'">/utf-8 %(AdditionalOptions)</AdditionalOptions>
299304
</ClCompile>
300305
</ItemDefinitionGroup>
301306
</Project>

0 commit comments

Comments
 (0)