import bpy from .bioxelutils.container import get_container_objs_from_selection from .operators.layer import (CombineLabels, SignScalar, FillByLabel, FillByThreshold, FillByRange) from .operators.container import (SaveContainer, LoadContainer, AddPieCutter, AddPlaneCutter, AddCylinderCutter, AddCubeCutter, AddSphereCutter, PickBboxWire, PickMesh, PickVolume) from .operators.io import (ExportVolumetricData, ImportAsLabelLayer, ImportAsScalarLayer) from .operators.misc import (CleanAllCaches, ReLinkNodes, SaveCaches, SaveStagedData) def container_is_selected(): container_objs = get_container_objs_from_selection() return len(container_objs) > 0 class PickFromContainerMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_PICK" bl_label = "Pick from Container" def draw(self, context): layout = self.layout layout.operator(PickMesh.bl_idname) layout.operator(PickVolume.bl_idname) layout.operator(PickBboxWire.bl_idname) class ModifyLayerMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_MODIFY_LAYERS" bl_label = "Modify Layer" def draw(self, context): layout = self.layout layout.operator(SignScalar.bl_idname) layout.operator(FillByThreshold.bl_idname) layout.operator(FillByRange.bl_idname) layout.operator(FillByLabel.bl_idname) layout.operator(CombineLabels.bl_idname) class AddCutterMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_CUTTERS" bl_label = "Add a Cutter to Container" def draw(self, context): layout = self.layout layout.operator(AddPlaneCutter.bl_idname, text="Plane Cutter") layout.operator(AddCylinderCutter.bl_idname, text="Cylinder Cutter") layout.operator(AddCubeCutter.bl_idname, text="Cube Cutter") layout.operator(AddSphereCutter.bl_idname, text="Sphere Cutter") layout.operator(AddPieCutter.bl_idname, text="Pie Cutter") class ImportLayerMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_LAYERS" bl_label = "Import Volumetric Data" def draw(self, context): layout = self.layout layout.operator(ImportAsScalarLayer.bl_idname, text="as Scalar") layout.operator(ImportAsLabelLayer.bl_idname, text="as Label") class BioxelNodesView3DMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_VIEW3D" bl_label = "Bioxel Nodes" def draw(self, context): layout = self.layout is_selected = container_is_selected() layout.operator(ImportAsScalarLayer.bl_idname, text=ImportAsScalarLayer.bl_label+" (Add to)" if is_selected else ImportAsScalarLayer.bl_label+" (Init)") layout.operator(ImportAsLabelLayer.bl_idname, text=ImportAsLabelLayer.bl_label+" (Add to)" if is_selected else ImportAsLabelLayer.bl_label+" (Init)") layout.separator() layout.operator(AddPlaneCutter.bl_idname) layout.operator(AddCylinderCutter.bl_idname) layout.operator(AddCubeCutter.bl_idname) layout.operator(AddSphereCutter.bl_idname) layout.operator(AddPieCutter.bl_idname) layout.separator() layout.operator(PickMesh.bl_idname) layout.operator(PickVolume.bl_idname) layout.operator(PickBboxWire.bl_idname) layout.separator() layout.operator(SaveCaches.bl_idname) class BioxelNodesOutlinerMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_OUTLINER" bl_label = "Bioxel Nodes" def draw(self, context): layout = self.layout is_selected = container_is_selected() layout.operator(ImportAsScalarLayer.bl_idname, text=ImportAsScalarLayer.bl_label+" (Add to)" if is_selected else ImportAsScalarLayer.bl_label+" (Init)") layout.operator(ImportAsLabelLayer.bl_idname, text=ImportAsLabelLayer.bl_label+" (Add to)" if is_selected else ImportAsLabelLayer.bl_label+" (Init)") layout.separator() layout.operator(AddPlaneCutter.bl_idname) layout.operator(AddCylinderCutter.bl_idname) layout.operator(AddCubeCutter.bl_idname) layout.operator(AddSphereCutter.bl_idname) layout.operator(AddPieCutter.bl_idname) layout.separator() layout.operator(PickMesh.bl_idname) layout.operator(PickVolume.bl_idname) layout.operator(PickBboxWire.bl_idname) layout.separator() layout.operator(SaveCaches.bl_idname) layout.separator() layout.operator(SignScalar.bl_idname) layout.operator(FillByThreshold.bl_idname) layout.operator(FillByRange.bl_idname) layout.operator(FillByLabel.bl_idname) layout.operator(CombineLabels.bl_idname) def TOPBAR_FILE_IMPORT(self, context): layout = self.layout is_selected = container_is_selected() layout.separator() layout.menu(ImportLayerMenu.bl_idname, text="Volumetric Data as Bioxel (Add to)" if is_selected else "Volumetric Data as Bioxel (Init)") def TOPBAR_FILE_EXPORT(self, context): layout = self.layout layout.separator() layout.operator(ExportVolumetricData.bl_idname, text="Bioxel Layer (.vdb)") def VIEW3D_OBJECT(self, context): layout = self.layout layout.separator() layout.menu(BioxelNodesView3DMenu.bl_idname, icon="FILE_VOLUME") def OUTLINER_OBJECT(self, context): layout = self.layout layout.separator() layout.menu(BioxelNodesOutlinerMenu.bl_idname, icon="FILE_VOLUME") class BioxelNodesTopbarMenu(bpy.types.Menu): bl_idname = "BIOXELNODES_MT_TOPBAR" bl_label = "Bioxel Nodes" def draw(self, context): layout = self.layout is_selected = container_is_selected() layout.menu(ImportLayerMenu.bl_idname, text=ImportLayerMenu.bl_label+" (Add to)" if is_selected else ImportLayerMenu.bl_label+" (Init)") layout.separator() layout.operator(LoadContainer.bl_idname) layout.operator(SaveContainer.bl_idname) layout.separator() layout.menu(AddCutterMenu.bl_idname) layout.menu(PickFromContainerMenu.bl_idname) layout.separator() layout.operator(SaveStagedData.bl_idname) layout.operator(ReLinkNodes.bl_idname) layout.separator() layout.operator(CleanAllCaches.bl_idname) def TOPBAR(self, context): layout = self.layout layout.menu(BioxelNodesTopbarMenu.bl_idname) def add(): bpy.types.TOPBAR_MT_file_import.append(TOPBAR_FILE_IMPORT) # bpy.types.TOPBAR_MT_file_export.append(TOPBAR_FILE_EXPORT) bpy.types.OUTLINER_MT_object.append(OUTLINER_OBJECT) bpy.types.VIEW3D_MT_object_context_menu.append(VIEW3D_OBJECT) bpy.types.TOPBAR_MT_editor_menus.append(TOPBAR) def remove(): bpy.types.TOPBAR_MT_file_import.remove(TOPBAR_FILE_IMPORT) # bpy.types.TOPBAR_MT_file_export.remove(TOPBAR_FILE_EXPORT) bpy.types.OUTLINER_MT_object.remove(OUTLINER_OBJECT) bpy.types.VIEW3D_MT_object_context_menu.remove(VIEW3D_OBJECT) bpy.types.TOPBAR_MT_editor_menus.remove(TOPBAR)