Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/09/2008 at 23:55, xxxxxxxx wrote:
User Information: Cinema 4D Version: Platform: Windows ; Language(s) : C++ ;
--------- I want to get full path of texture but follow code fn.GetString() can't get full path. this is my snippet code: void getTextureFileName(string& strOutFileName) { string g_sBaseDir; BaseContainer ctr = GetActiveDocument()->GetAllTextures(); BrowseContainer bc(&ctr); LONG id; GeData *dat; while (bc.GetNext(&id, &dat)) { Filename fn = dat->GetFilename(); String strFilePath; String strFileName( fn.GetString()); strFilePath = strFileName; LONG iLen = strFilePath.GetCStringLen(St8bit)+1; char* pName = bNew CHAR[iLen]; memset(pName,0, sizeof(CHAR)*iLen); strFilePath.GetCString( pName,iLen, St8bit); string strOutName(pName); bDelete(pName); pName = NULL; strOutFileName += strOutName ; strOutFileName += "|"; } }
On 22/09/2008 at 00:30, xxxxxxxx wrote:
Will..not..work.
//Material* mat; BaseChannel* bchan = mat->GetChannel(CHANNEL_COLOR); BaseContainer bdata = bchan->GetData(); Filename fn = bdata.GetFilename(BASECHANNEL_SUGGESTEDFOLDER)+Filename(bdata.GetString(BASECHANNEL_TEXTURE));
The texture image is stored in two places as you see - path and file specifiers.
On 22/09/2008 at 01:42, xxxxxxxx wrote:
//Material* mat; BaseChannel* bchan = mat->GetChannel(CHANNEL_COLOR); BaseContainer bdata = bchan->GetData(); Filename fn = bdata.GetFilename(BASECHANNEL_SUGGESTEDFOLDER)+Filename(bdata.GetString(BASECHANNEL_TEXTURE)); the code Will get nothing. why?
On 22/09/2008 at 15:19, xxxxxxxx wrote:
That is only an example. There is more than CHANNEL_COLOR - like CHANNEL_BUMP, CHANNEL_DISPLACEMENT, CHANNEL_DIFFUSION, etc. etc. etc. And this only can get at the channel texture map not at shaders or deeper in (like fusion layers).
I'm pretty sure that it does indeed work since I use it in my own code. Here are some links:
http://www.plugincafe.com/forum/display_topic_threads.asp?ForumID=4&TopicID;=3212&PagePosition;=29
http://www.plugincafe.com/forum/display_topic_threads.asp?ForumID=4&TopicID;=2775&PagePosition;=61
On 23/09/2008 at 02:37, xxxxxxxx wrote:
thanks robert,my problem was resolved, this is my snippet code: void getTextureFileName(string& strOutFileName) { string g_sBaseDir; BaseMaterial* mat = GetActiveDocument()->GetFirstMaterial();
while(mat) { BaseChannel* pChannel = mat->GetChannel(CHANNEL_COLOR); if (pChannel) { Filename path = pChannel->GetData().GetFilename(BASECHANNEL_SUGGESTEDFOLDER); if(!path.Content()) path = GetActiveDocument()->GetDocumentPath(); Filename file = pChannel->GetData().GetString(BASECHANNEL_TEXTURE); if ( file.GetString().GetCStringLen(St8bit)< 0 || file.GetString().GetCStringLen(St8bit) == 0) { mat = mat->GetNext(); continue; } path = path+file;
String strTexturePath( path.GetString());
LONG iPathLen = strTexturePath.GetCStringLen(St8bit)+1; char* pTextureName = bNew CHAR[iPathLen]; memset(pTextureName,0, sizeof(CHAR)*iPathLen);
strTexturePath.GetCString( pTextureName,iPathLen, St8bit); string strOutTexturePath(pTextureName);
bDelete(pTextureName); pTextureName = NULL; DBG_LOG("strOutTexturePath=%s",strOutTexturePath.c_str()); if ( strOutTexturePath.length() > 0 ) {
if (strOutTexturePath.find(':') != string::npos) {
strOutFileName += strOutTexturePath.c_str();
} else {
Filename filedir = ::GeGetStartupPath();
String strFilePathDir( filedir.GetString());
LONG iPathLen = strFilePathDir.GetCStringLen(St8bit)+1;
char* pDirName = bNew CHAR[iPathLen]; memset(pDirName,0, sizeof(CHAR)*iPathLen);
strFilePathDir.GetCString( pDirName,iPathLen, St8bit); string strOutDirName(pDirName);
bDelete(pDirName); pDirName = NULL; g_sBaseDir = strOutDirName;
strOutFileName += g_sBaseDir.c_str(); strOutFileName += "\";
int Version = GetC4DVersion();
if ( Version < 10000) { strOutFileName += "tex\"; } strOutFileName += strOutTexturePath.c_str(); }
strOutFileName += "|"; //MessageDialog( strOutFileName.c_str() );
} } mat = mat->GetNext();
} if ( strOutFileName.length() > 0) { strOutFileName = strOutFileName.substr(0, strOutFileName.rfind('|'));
} }