Browsing Plugin Paths
d_schmidt last edited by
Hello, I'm looking for a way to get the filepaths from the Preferences -> Plugins -> Search Paths menu. I have a circumstance where one plugin needs to know where another plugin is installed so I want to be able to check those remote paths, but I can't figure out how to access the parameter.
GetWorldContainer() doesn't seem to contain this parameter but it does others, so I'm not sure where to go from here.
zipit last edited by zipit
preference data is often even for native c4d features implemented as a
PreferenceDataplugin. You have to access that plugin then. To get there you can drag and drop description elements into the python command line, delete the
__getitem__()part (the stuff in brackets), and get the
__repr__of the object. With that you can figure out the plugin ID of the corresponding
BasePluginand then access your values.
For your case as a script example:
import c4d from c4d import plugins # Welcome to the world of Python def main(): # Search for a plugin ID with a known str __repr__ of a BasePlugin. We got from the console: # Drag and drop: Plugins[c4d.PREF_PLUGINS_PATHS] # >>> Plugins # <c4d.BaseList2D object called 'Plugins/Plugins' with ID 35 at 0x0000028FE8157A50> pid, op = None, plugins.GetFirstPlugin() while op: if 'Plugins/Plugins' in str(op): pid = op.GetID() break op = op.GetNext() print "pid:", pid # Use that ID op = plugins.FindPlugin(pid) if op: print op[c4d.PREF_PLUGINS_PATHS] # we know the enum from the console # Execute main() if __name__=='__main__': main()
You can use then that Plugin ID in cpp to do the last part (
Use that ID) there.
m_magalhaes last edited by m_magalhaes
thanks @zipit for the answer.
@d_schmidt, please, don't forget to mark your thread as a question and mark it as solved once it is. That help us :)
Instead of getting the preferences, you can use GetModulePaths. It returns all module paths configured through g_modulePath, g_additionalModulePath and user preferences. Including Corelibs and Plugins default directories.
You can have information on Application manual
// Returns all module paths configured through g_modulePath, g_additionalModulePath and user preferences. // include corelibs and plugins default directory. const maxon::BaseArray<maxon::Url> myPluginPaths = maxon::Application::GetModulePaths() iferr_return; for (auto plugPath : myPluginPaths) DiagnosticOutput("plugins path @", plugPath);
If you do know the plugin ID, you can also use this kind of code.
const maxon::Int32 plugin_ID = 1038235; BasePlugin* myPlugin = FindPlugin(plugin_ID, PLUGINTYPE::ANY); if (myPlugin == nullptr) return maxon::NullptrError(MAXON_SOURCE_LOCATION); const Filename myPluginPath = myPlugin->GetFilename(); const maxon::String directory = myPluginPath.GetDirectory().GetString(); DiagnosticOutput("directory of plugin @ is @", plugin_ID, directory);
d_schmidt last edited by
Thank you both for the replies! Between both of them I have exactly what I need, thanks.