Aux info functionality for ProjectPath

This commit is contained in:
Jack Andersen 2016-04-04 15:49:42 -10:00
parent 635193c2fe
commit 41dbd30970
6 changed files with 81 additions and 23 deletions

View File

@ -430,6 +430,14 @@ bool BlenderConnection::openBlend(const ProjectPath& path, bool force)
} }
++idx; ++idx;
} }
m_loadedRigged = false;
if (m_loadedType == BlendType::Mesh)
{
_writeLine("GETMESHRIGGED");
_readLine(lineBuf, sizeof(lineBuf));
if (!strcmp("TRUE", lineBuf))
m_loadedRigged = true;
}
return true; return true;
} }
return false; return false;

View File

@ -57,6 +57,7 @@ private:
int m_readpipe[2]; int m_readpipe[2];
int m_writepipe[2]; int m_writepipe[2];
BlendType m_loadedType = BlendType::None; BlendType m_loadedType = BlendType::None;
bool m_loadedRigged = false;
ProjectPath m_loadedBlend; ProjectPath m_loadedBlend;
std::string m_startupBlend; std::string m_startupBlend;
size_t _readLine(char* buf, size_t bufSz); size_t _readLine(char* buf, size_t bufSz);
@ -70,6 +71,7 @@ public:
bool createBlend(const ProjectPath& path, BlendType type); bool createBlend(const ProjectPath& path, BlendType type);
BlendType getBlendType() const {return m_loadedType;} BlendType getBlendType() const {return m_loadedType;}
bool getRigged() const {return m_loadedRigged;}
bool openBlend(const ProjectPath& path, bool force=false); bool openBlend(const ProjectPath& path, bool force=false);
bool saveBlend(); bool saveBlend();
void deleteBlend(); void deleteBlend();

View File

@ -221,6 +221,16 @@ while True:
elif cmdargs[0] == 'GETTYPE': elif cmdargs[0] == 'GETTYPE':
writepipeline(bpy.context.scene.hecl_type.encode()) writepipeline(bpy.context.scene.hecl_type.encode())
elif cmdargs[0] == 'GETMESHRIGGED':
meshName = bpy.context.scene.hecl_mesh_obj
if meshName not in bpy.data.objects:
writepipeline(b'FALSE')
else:
if len(bpy.data.objects[meshName].vertex_groups):
writepipeline(b'TRUE')
else:
writepipeline(b'FALSE')
elif cmdargs[0] == 'SAVE': elif cmdargs[0] == 'SAVE':
bpy.context.user_preferences.filepaths.save_version = 0 bpy.context.user_preferences.filepaths.save_version = 0
if 'FINISHED' in bpy.ops.wm.save_mainfile(check_existing=False, compress=True): if 'FINISHED' in bpy.ops.wm.save_mainfile(check_existing=False, compress=True):

2
hecl/extern/boo vendored

@ -1 +1 @@
Subproject commit 23f49fcc19f2ef2be2e272ba00bfed863eaea423 Subproject commit 4cec163804dd293818029d838dda512c7b985aaf

View File

@ -765,10 +765,12 @@ class ProjectPath
Database::Project* m_proj = nullptr; Database::Project* m_proj = nullptr;
SystemString m_absPath; SystemString m_absPath;
SystemString m_relPath; SystemString m_relPath;
SystemString m_auxInfo;
Hash m_hash = 0; Hash m_hash = 0;
#if HECL_UCS2 #if HECL_UCS2
std::string m_utf8AbsPath; std::string m_utf8AbsPath;
std::string m_utf8RelPath; std::string m_utf8RelPath;
std::string m_utf8AuxInfo;
#endif #endif
public: public:
/** /**
@ -1048,6 +1050,20 @@ public:
#endif #endif
} }
const SystemString& getAuxInfo() const
{
return m_auxInfo;
}
const std::string& getAuxInfoUTF8() const
{
#if HECL_UCS2
return m_utf8AuxInfo;
#else
return m_auxInfo;
#endif
}
/** /**
* @brief Type of path * @brief Type of path
*/ */

View File

@ -63,7 +63,18 @@ static SystemString CanonRelPath(const SystemString& path, const ProjectRootPath
void ProjectPath::assign(Database::Project& project, const SystemString& path) void ProjectPath::assign(Database::Project& project, const SystemString& path)
{ {
m_proj = &project; m_proj = &project;
m_relPath = CanonRelPath(path);
SystemString usePath;
size_t pipeFind = path.rfind(_S('|'));
if (pipeFind != SystemString::npos)
{
m_auxInfo.assign(path.cbegin() + pipeFind + 1, path.cend());
usePath.assign(path.cbegin(), path.cbegin() + pipeFind);
}
else
usePath = path;
m_relPath = CanonRelPath(usePath);
m_absPath = project.getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath; m_absPath = project.getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath;
SanitizePath(m_relPath); SanitizePath(m_relPath);
SanitizePath(m_absPath); SanitizePath(m_absPath);
@ -71,8 +82,15 @@ void ProjectPath::assign(Database::Project& project, const SystemString& path)
#if HECL_UCS2 #if HECL_UCS2
m_utf8AbsPath = WideToUTF8(m_absPath); m_utf8AbsPath = WideToUTF8(m_absPath);
m_utf8RelPath = WideToUTF8(m_relPath); m_utf8RelPath = WideToUTF8(m_relPath);
m_utf8AuxInfo = WideToUTF8(m_auxInfo);
if (m_utf8AuxInfo.size())
m_hash = Hash(m_utf8RelPath + '|' + m_utf8AuxInfo);
else
m_hash = Hash(m_utf8RelPath); m_hash = Hash(m_utf8RelPath);
#else #else
if (m_auxInfo.size())
m_hash = Hash(m_relPath + '|' + m_auxInfo);
else
m_hash = Hash(m_relPath); m_hash = Hash(m_relPath);
#endif #endif
} }
@ -80,22 +98,26 @@ void ProjectPath::assign(Database::Project& project, const SystemString& path)
#if HECL_UCS2 #if HECL_UCS2
void ProjectPath::assign(Database::Project& project, const std::string& path) void ProjectPath::assign(Database::Project& project, const std::string& path)
{ {
m_proj = &project;
std::wstring wpath = UTF8ToWide(path); std::wstring wpath = UTF8ToWide(path);
m_relPath = CanonRelPath(wpath); assign(project, wpath);
m_absPath = project.getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath;
SanitizePath(m_relPath);
SanitizePath(m_absPath);
m_utf8AbsPath = WideToUTF8(m_absPath);
m_utf8RelPath = WideToUTF8(m_relPath);
m_hash = Hash(m_utf8RelPath);
} }
#endif #endif
void ProjectPath::assign(const ProjectPath& parentPath, const SystemString& path) void ProjectPath::assign(const ProjectPath& parentPath, const SystemString& path)
{ {
m_proj = parentPath.m_proj; m_proj = parentPath.m_proj;
m_relPath = CanonRelPath(parentPath.m_relPath + _S('/') + path);
SystemString usePath;
size_t pipeFind = path.rfind(_S('|'));
if (pipeFind != SystemString::npos)
{
m_auxInfo.assign(path.cbegin() + pipeFind + 1, path.cend());
usePath.assign(path.cbegin(), path.cbegin() + pipeFind);
}
else
usePath = path;
m_relPath = CanonRelPath(parentPath.m_relPath + _S('/') + usePath);
m_absPath = m_proj->getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath; m_absPath = m_proj->getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath;
SanitizePath(m_relPath); SanitizePath(m_relPath);
SanitizePath(m_absPath); SanitizePath(m_absPath);
@ -103,8 +125,15 @@ void ProjectPath::assign(const ProjectPath& parentPath, const SystemString& path
#if HECL_UCS2 #if HECL_UCS2
m_utf8AbsPath = WideToUTF8(m_absPath); m_utf8AbsPath = WideToUTF8(m_absPath);
m_utf8RelPath = WideToUTF8(m_relPath); m_utf8RelPath = WideToUTF8(m_relPath);
m_utf8AuxInfo = WideToUTF8(m_auxInfo);
if (m_utf8AuxInfo.size())
m_hash = Hash(m_utf8RelPath + '|' + m_utf8AuxInfo);
else
m_hash = Hash(m_utf8RelPath); m_hash = Hash(m_utf8RelPath);
#else #else
if (m_auxInfo.size())
m_hash = Hash(m_relPath + '|' + m_auxInfo);
else
m_hash = Hash(m_relPath); m_hash = Hash(m_relPath);
#endif #endif
} }
@ -112,15 +141,8 @@ void ProjectPath::assign(const ProjectPath& parentPath, const SystemString& path
#if HECL_UCS2 #if HECL_UCS2
void ProjectPath::assign(const ProjectPath& parentPath, const std::string& path) void ProjectPath::assign(const ProjectPath& parentPath, const std::string& path)
{ {
m_proj = parentPath.m_proj;
std::wstring wpath = UTF8ToWide(path); std::wstring wpath = UTF8ToWide(path);
m_relPath = CanonRelPath(parentPath.m_relPath + _S('/') + wpath); assign(parentPath, wpath);
m_absPath = m_proj->getProjectRootPath().getAbsolutePath() + _S('/') + m_relPath;
SanitizePath(m_relPath);
SanitizePath(m_absPath);
m_utf8AbsPath = WideToUTF8(m_absPath);
m_utf8RelPath = WideToUTF8(m_relPath);
m_hash = Hash(m_utf8RelPath);
} }
#endif #endif