PyBullet fileIOPlugin: don't add equal fileIO interface twice (based on identical fileIOType and pathPrefix)
loadBullet goes through fileIOPlugin
This commit is contained in:
@@ -10198,30 +10198,43 @@ bool PhysicsServerCommandProcessor::processLoadBulletCommand(const struct Shared
|
||||
//btBulletWorldImporter* importer = new btBulletWorldImporter(m_data->m_dynamicsWorld);
|
||||
btMultiBodyWorldImporter* importer = new btMultiBodyWorldImporter(m_data->m_dynamicsWorld);
|
||||
|
||||
const char* prefix[] = {"", "./", "./data/", "../data/", "../../data/", "../../../data/", "../../../../data/"};
|
||||
int numPrefixes = sizeof(prefix) / sizeof(const char*);
|
||||
char relativeFileName[1024];
|
||||
FILE* f = 0;
|
||||
bool found = false;
|
||||
|
||||
for (int i = 0; !f && i < numPrefixes; i++)
|
||||
CommonFileIOInterface* fileIO = m_data->m_pluginManager.getFileIOInterface();
|
||||
b3AlignedObjectArray<char> buffer;
|
||||
buffer.reserve(1024);
|
||||
if (fileIO)
|
||||
{
|
||||
sprintf(relativeFileName, "%s%s", prefix[i], clientCmd.m_fileArguments.m_fileName);
|
||||
f = fopen(relativeFileName, "rb");
|
||||
if (f)
|
||||
char fileName[1024];
|
||||
int fileId = -1;
|
||||
found = fileIO->findResourcePath(clientCmd.m_fileArguments.m_fileName, fileName, 1024);
|
||||
if (found)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
fileId = fileIO->fileOpen(fileName,"rb");
|
||||
}
|
||||
if (fileId>=0)
|
||||
{
|
||||
int size = fileIO->getFileSize(fileId);
|
||||
if (size>0)
|
||||
{
|
||||
buffer.resize(size);
|
||||
int actual = fileIO->fileRead(fileId,&buffer[0],size);
|
||||
if (actual != size)
|
||||
{
|
||||
b3Warning("image filesize mismatch!\n");
|
||||
buffer.resize(0);
|
||||
} else
|
||||
{
|
||||
found=true;
|
||||
}
|
||||
}
|
||||
fileIO->fileClose(fileId);
|
||||
}
|
||||
}
|
||||
if (f)
|
||||
{
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
if (found)
|
||||
if (found && buffer.size())
|
||||
{
|
||||
bool ok = importer->loadFile(relativeFileName);
|
||||
bool ok = importer->loadFileFromMemory(&buffer[0], buffer.size());
|
||||
if (ok)
|
||||
{
|
||||
int numRb = importer->getNumRigidBodies();
|
||||
|
||||
Reference in New Issue
Block a user