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).
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.
Dan
hello,
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);
Cheers Manuel
Hi,
preference data is often even for native c4d features implemented as a PreferenceData plugin. 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 BasePlugin and then access your values.
PreferenceData
__getitem__()
__repr__
BasePlugin
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.
Use that ID
Cheers, zipit
Thank you both for the replies! Between both of them I have exactly what I need, thanks.