example for fileIOPlugin.py loading SDF and its assets from a single zipfile,

also show how to disable file caching (used in the fileIOPlugin)
This commit is contained in:
erwincoumans 2018-11-17 14:11:01 -08:00
parent 9e99f5cdbc
commit f9f8d0fbb0
7 changed files with 54 additions and 4 deletions

View File

@ -22,7 +22,7 @@ struct CommonFileIOInterface
virtual bool findResourcePath(const char* fileName, char* resourcePathOut, int resourcePathMaxNumBytes)=0;
virtual char* readLine(int fileHandle, char* destBuffer, int numBytes)=0;
virtual int getFileSize(int fileHandle)=0;
virtual void enableFileCaching(bool enable) = 0;
};
#endif //COMMON_FILE_IO_INTERFACE_H

View File

@ -8004,6 +8004,7 @@ bool PhysicsServerCommandProcessor::processSendPhysicsParametersCommand(const st
if (clientCmd.m_updateFlags & SIM_PARAM_ENABLE_FILE_CACHING)
{
b3EnableFileCaching(clientCmd.m_physSimParamArgs.m_enableFileCaching);
m_data->m_pluginManager.getFileIOInterface()->enableFileCaching(clientCmd.m_physSimParamArgs.m_enableFileCaching!=0);
}
SharedMemoryStatus& serverCmd = serverStatusOut;

View File

@ -283,6 +283,11 @@ struct InMemoryFileIO : public CommonFileIOInterface
}
return 0;
}
virtual void enableFileCaching(bool enable)
{
(void)enable;
}
};
struct WrapperFileIO : public CommonFileIOInterface
@ -292,10 +297,12 @@ struct WrapperFileIO : public CommonFileIOInterface
WrapperFileHandle m_wrapperFileHandles[B3_MAX_FILEIO_INTERFACES];
InMemoryFileIO m_cachedFiles;
bool m_enableFileCaching;
WrapperFileIO()
:CommonFileIOInterface(0,0),
m_numWrapperInterfaces(0)
m_numWrapperInterfaces(0),
m_enableFileCaching(true)
{
for (int i=0;i<B3_MAX_FILEIO_INTERFACES;i++)
{
@ -406,7 +413,10 @@ struct WrapperFileIO : public CommonFileIOInterface
}
//potentially register a zero byte file, or files that only can be read partially
m_cachedFiles.registerFile(fileName,buffer, fileSize);
if (m_enableFileCaching)
{
m_cachedFiles.registerFile(fileName, buffer, fileSize);
}
childFileIO->fileClose(childHandle);
break;
}
@ -525,6 +535,15 @@ struct WrapperFileIO : public CommonFileIOInterface
return numBytes;
}
virtual void enableFileCaching(bool enable)
{
m_enableFileCaching = enable;
if (!enable)
{
m_cachedFiles.clearCache();
}
}
};

View File

@ -252,5 +252,10 @@ struct ZipFileIO : public CommonFileIOInterface
}
return size;
}
virtual void enableFileCaching(bool enable)
{
(void)enable;
}
};

View File

@ -186,6 +186,11 @@ struct b3BulletDefaultFileIO : public CommonFileIOInterface
}
return size;
}
virtual void enableFileCaching(bool enable)
{
(void) enable;
}
};
#endif //B3_BULLET_DEFAULT_FILE_IO_H

View File

@ -0,0 +1,20 @@
import pybullet as p
import time
p.connect(p.GUI)
fileIO = p.loadPlugin("fileIOPlugin")
if (fileIO>=0):
p.executePluginCommand(fileIO, "pickup.zip", [p.AddFileIOAction, p.ZipFileIO])
objs= p.loadSDF("pickup/model.sdf")
dobot =objs[0]
p.changeVisualShape(dobot,-1,rgbaColor=[1,1,1,1])
else:
print("fileIOPlugin is disabled.")
p.setPhysicsEngineParameter(enableFileCaching=False)
while (1):
p.stepSimulation()
time.sleep(1./240.)

Binary file not shown.