If you download a Kitware-generated package of aevaCMB or CMB, it will come with a
pvpython executable (in
aevaCMB.app/Contents/bin on macos, in
bin/pvpython on linux, and in
bin/pvpython.exe on windows). You can use this python interpreter as you would any other; the difference is that it sets up the paths so that CMB plugins can be loaded.
Loading an SMTK resource
You can run
pvpython on the command line and do things like load SMTK files. The script below will load the example data that comes in the aevaCMB package and print a list of surfaces.
First, we import the
paraview.simple module so we can load plugins and the smtk modules needed for operations:
import paraview.simple import smtk import smtk.attribute import smtk.model import smtk.operation import smtk.plugin # Some files included in the aevaCMB download: aevaPluginPath = '/path/to/smtkAEVASessionPlugin.so' aevaExamplePath='/path/to/femur_acl_tibia.smtk'
Now load aeva functionality:
# Load the aeva "session" plugin. # This plugin provides aeva with a resource type and operations. paraview.simple.LoadPlugin(aevaPluginPath) # Create an operation manager (a registry of operations) opMgr = smtk.operation.Manager.create() # It is empty by default: opMgr.availableOperations() # Tell the SMTK plugin system to populate the manager: smtk.plugin.registerPluginsTo(opMgr) opMgr.availableOperations() # Returns a long list including smtk::session::aeva::Read
Create an SMTK operation to read the example data, set the filename, and run it:
readOp = opMgr.createOperation('smtk::session::aeva::Read') readOp.parameters().findFile('filename').setValue(aevaExamplePath) res = readOp.operate() # Check that the operation succeeded: res.findInt('outcome').value() == int(smtk.operation.Operation.SUCCEEDED) # Should return True
Finally, we can get information from the operation result and ask the resource about its components:
# Get the resource created by the Read operation. rsrc = res.findResource('resource').value(0) # rsrc now holds an aeva resource whose components # include the 3 models in the file (femur, tibia, and ACL). # We can get a list of all the components: rsrc.find('*') # or just the surfaces: faces = rsrc.find('face') # We can print their names names = [x.name() for x in faces] names.sort() print('\n'.join(names)) # Should print: # ACL_FMB_insertion # ACL_TBB_insertion # FMB_ACL_insertion # TBB_ACL_insertion # face 5 # face 6 # face 7
Fancier queries are available and described in the SMTK documentation.
Once you have components of interest, you can create additional operations to select regions, add attributes, and export your processed data.