diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-05-22 15:56:19 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-05-22 16:15:41 +0200 |
commit | 1dd84fc4674141449c78f6c5838e2254c5a28f35 (patch) | |
tree | 581129ffd9b1df710b64cc3f88140261b4ed1c64 /avmedia | |
parent | d466f926f8dc07ec23efa5807fff35a0b6dd4146 (diff) |
collada2gltf: fix URL problems
collada2gltf does not handle Windows pathes, the used COLLADABU::URI
class can't parse native Windows pathes so call COLLADA2GLTFWriter
with URL only.
Other problems:
collada2gltf uses the URL path for creating/opening files,
instead of native ones.
collada2gltf initializes _outputFilePath member in different way,
sometimes as an URL path, sometimes as a native one, but handle it
on the same way(as an URL).
Change-Id: I104182653c07e7dcf6fc5b6e32c7031d59246b84
Diffstat (limited to 'avmedia')
-rw-r--r-- | avmedia/source/framework/modeltools.cxx | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/avmedia/source/framework/modeltools.cxx b/avmedia/source/framework/modeltools.cxx index c3fa11ef8d0b..a7237d585c5f 100644 --- a/avmedia/source/framework/modeltools.cxx +++ b/avmedia/source/framework/modeltools.cxx @@ -152,28 +152,36 @@ bool Embed3DModel( const uno::Reference<frame::XModel>& xModel, const bool bIsKMZ = rSourceURL.endsWithIgnoreAsciiCase(".kmz"); if (bIsDAE || bIsKMZ) { - OUString sName; - ::utl::LocalFileHelper::ConvertPhysicalNameToURL(::utl::TempFile::CreateTempName(), sName); - // remove .tmp extension - sName = sName.copy(0, sName.getLength() - 4); - const INetURLObject aSourceURLObj(rSourceURL); - std::string sSourcePath = OUStringToOString( aSourceURLObj.getFSysPath(INetURLObject::FSYS_DETECT), RTL_TEXTENCODING_UTF8 ).getStr(); - std::shared_ptr <GLTF::GLTFAsset> asset(new GLTF::GLTFAsset()); - asset->setInputFilePath(sSourcePath); + asset->setInputFilePath(OUStringToOString( rSourceURL, RTL_TEXTENCODING_UTF8 ).getStr()); if (bIsKMZ) { - std::string strDaeFilePath = GLTF::Kmz2Collada()(asset->getInputFilePath()); + // KMZ converter needs a system path + const INetURLObject aSourceURLObj(rSourceURL); + const std::string sSourcePath = + OUStringToOString( aSourceURLObj.getFSysPath(INetURLObject::FSYS_DETECT), RTL_TEXTENCODING_UTF8 ).getStr(); + const std::string strDaeFilePath = GLTF::Kmz2Collada()(sSourcePath); if (strDaeFilePath == "") return false; - asset->setInputFilePath(strDaeFilePath); + + // DAE converter needs URL + OUString sDaeFilePath; + ::utl::LocalFileHelper::ConvertPhysicalNameToURL( + OStringToOUString(OString(strDaeFilePath.c_str()), RTL_TEXTENCODING_UTF8 ), sDaeFilePath); + asset->setInputFilePath(OUStringToOString( sDaeFilePath, RTL_TEXTENCODING_UTF8 ).getStr()); } - asset->setBundleOutputPath(OUStringToOString( sName, RTL_TEXTENCODING_UTF8 ).getStr()); + + OUString sOutput; + ::utl::LocalFileHelper::ConvertPhysicalNameToURL(::utl::TempFile::CreateTempName(), sOutput); + // remove .tmp extension + sOutput = sOutput.copy(0, sOutput.getLength()-4); + asset->setBundleOutputPath(OUStringToOString( sOutput, RTL_TEXTENCODING_UTF8 ).getStr()); + GLTF::COLLADA2GLTFWriter writer(asset); writer.write(); // Path to the .json file created by COLLADA2GLTFWriter - sSource = sName + "/" + GetFilename(sName) + ".json"; + sSource = sOutput + "/" + GetFilename(sOutput) + ".json"; } #endif |