#testing in Blender 3.6.5 on pc
#launching blender from command line - so can see print output
& "C:\Program Files\Blender Foundation\Blender 3.6\blender.exe"
#exporting a cube to usd
#first select cube in viewport
import bpy
bpy.ops.wm.usd_export(filepath="C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_test.usda", selected_objects_only=True)
#importing a cube usd
import bpy
#bpy.ops.wm.usd_import(filepath="//usdFiles\\cube_test.usda", relative_path=True)
bpy.ops.wm.usd_import(filepath="C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_test.usda")
#using usd api to print all prims in cube usda
from pxr import Usd
filePath = "C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_test.usda"
stage = Usd.Stage.Open(filePath)
print([x for x in stage.Traverse()])
#[Usd.Prim(</Cube>), Usd.Prim(</Cube/Cube>), Usd.Prim(</_materials>), Usd.Prim(</_materials/Material>), Usd.Prim(</_materials/Material/Principled_BSDF>)]
#using usd api to change color of cube
import bpy
from pxr import Usd
sourceFilePath = "C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_test.usda"
destinationFilePath = "C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_green_test.usda"
stage = Usd.Stage.Open(sourceFilePath)
materialPrim = stage.GetPrimAtPath('/_materials/Material/Principled_BSDF') #got path from earlier printing of all prims in stage
print(materialPrim)
print(materialPrim.GetPropertyNames())
#['info:id', 'info:implementationSource', 'inputs:clearcoat', 'inputs:clearcoatRoughness', 'inputs:diffuseColor', 'inputs:emissiveColor', 'inputs:ior', 'inputs:metallic', 'inputs:opacity', 'inputs:roughness', 'inputs:specular', 'outputs:surface']
diffuseAttr = materialPrim.GetAttribute('inputs:diffuseColor')
print(diffuseAttr.Get())
#(0.8, 0.8, 0.8)
#set color to green
diffuseAttr.Set( (0.0, 1.0, 0.0) )
print(stage.GetRootLayer().ExportToString())
#save to different file path
stage.GetRootLayer().Export(destinationFilePath)
#in a new blender scene import the newly colored cube
import bpy
destinationFilePath = "C:\\Users\\Nathaniel\\Documents\\blender_projects\\miscTesting\\usdTesting\\usdFiles\\cube_green_test.usda"
bpy.ops.wm.usd_import(filepath=destinationFilePath)
#inspired by Usd Tutorials in openusd dot org