fix: contrast formulation cause leak of high value fix: empty series_id cause fail to read chore: restructure folder chore!: change layer vars BREAKING CHANGE: not support 4.1 any more
198 lines
7.2 KiB
Python
198 lines
7.2 KiB
Python
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)
|