How can i set custom Databases paths in prefs with python?



  • Hi
    I have a python startup plugin that sets texture paths in Prefs>File Assets! with SetGlobalTexturePaths(...) for all workstations and render slaves. Is there a similar method for setting custom paths for node material Asset Databases (below the File Assets field) ?
    c5385534-5590-4fa6-a08b-fd3c08bbfab2-image.png

    Any help appreciated.

    -b



  • Hello,

    these paths are accessed with a preference plugin. You can access that plugin:

    plugin = c4d.plugins.FindPlugin(1040566)
    
    paths = plugin[c4d.PREF_DATABASE_PATHS]
    
    # print paths
    print(paths)
    
    # add a path
    paths = paths + "\n" + "X:\someting" 
    plugin[c4d.PREF_DATABASE_PATHS] = paths
    
    c4d.EventAdd()
    

    best wishes,
    Sebastian



  • Thanks! Ill try that.

    Regards
    Bonsak



  • So im trying to get this to work inside our startup plugin. I can set new database paths but i cant read the existing ones. So im constantly overwriting the paths field.

    import c4d
    import os, sys
    
    def PluginMessage(id, data):	
    	if id == c4d.C4DPL_PROGRAM_STARTED:
    		try: 
    			# Get plugin object
    			plugin = c4d.plugins.FindPlugin(1040566)
    			# Print plugin object
    			print('Plugin {}').format(plugin)
    
    			# Get existing paths
    			dbPaths = plugin[c4d.PREF_DATABASE_PATHS]
    			# Print existing paths
    			print('Existing DB paths {}').format(dbPaths)
    
    			# Set new paths
    			dbPaths = dbPaths + "\n" + "S:/_3D_Central/Maxon/Racecar-Assets-Redshift" 
    			plugin[c4d.PREF_DATABASE_PATHS] = dbPaths
    
    			# Print new paths
    			print('New DB paths {}').format(dbPaths)
    
    		except KeyError: 
    			sys.exit(1)
    

    print('Existing DB paths {}').format(dbPaths) doesnt print anyting even though there are entries in the Databases field.
    Am i doing something wrong?

    Regards
    Bonsak



  • Hello,

    this particular preferences plugin only loads its data when needed. To trigger that, you can call GetDescription() which will internally load the data.

    plugin.GetDescription(c4d.DESCFLAGS_DESC_0)
    
    # Get existing paths
    dbPaths = plugin[c4d.PREF_DATABASE_PATHS]
    

    best wishes,
    Sebastian



  • Thanks! Works like a charm!

    -b


Log in to reply