From a0f3adda58285a40e315f4b2330cb06d6661fbe3 Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Fri, 7 Aug 2009 20:22:04 +0000 Subject: [PATCH] ADD: Tool to Reposition Actor --- invesalius/constants.py | 2 +- invesalius/data/viewer_volume.py | 27 +++++++++++++++++++++++---- invesalius/gui/default_viewers.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- invesalius/reader/dicom_reader.py | 2 +- 4 files changed, 78 insertions(+), 7 deletions(-) diff --git a/invesalius/constants.py b/invesalius/constants.py index 53d2cb0..ca7e1ed 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -15,7 +15,7 @@ CAM_POSITION = {"AXIAL":(0, 0, 1), "CORONAL":(0, -1, 0), "SAGITAL":(1, 0, 0)} CAM_VIEW_UP = {"AXIAL":(0, 1, 0), "CORONAL":(0, 0, 1), "SAGITAL":(0, 0, 1)} # Camera according to volume's orientation -AXIAL_VOLUME_CAM_VIEW_UP = {"FRONT":(-1,0,1), "BACK":(0,0,1), "RIGHT":(0,0,1),\ +AXIAL_VOLUME_CAM_VIEW_UP = {"FRONT":(0,0,1), "BACK":(0,0,1), "RIGHT":(0,0,1),\ "LEFT":(0,0,1), "TOP":(0,1,0), "BOTTOM":(0,-1,0)} AXIAL_VOLUME_CAM_POSITION = {"FRONT":(0,-1,0), "BACK":(0,1,0), "RIGHT":(-1,0,0),\ "LEFT":(1,0,0), "TOP":(0,0,1), "BOTTOM":(0,0,-1)} diff --git a/invesalius/data/viewer_volume.py b/invesalius/data/viewer_volume.py index 4d56c1b..b48a423 100755 --- a/invesalius/data/viewer_volume.py +++ b/invesalius/data/viewer_volume.py @@ -22,8 +22,8 @@ import sys import wx import vtk from vtk.wx.wxVTKRenderWindowInteractor import wxVTKRenderWindowInteractor - import wx.lib.pubsub as ps +import constants as const class Viewer(wx.Panel): def __init__(self, parent): @@ -67,6 +67,7 @@ class Viewer(wx.Panel): ps.Publisher().subscribe(self.LoadVolume, 'Load volume into viewer') ps.Publisher().subscribe(self.AppendActor,'AppendActor') ps.Publisher().subscribe(self.SetWidgetInteractor, 'Set Widget Interactor') + ps.Publisher().subscribe(self.RepositionActor, 'Reposition Actor') def __bind_events_wx(self): @@ -86,9 +87,7 @@ class Viewer(wx.Panel): volume, colour = pubsub_evt.data self.light = self.ren.GetLights().GetNextItem() self.ren.AddVolume(volume) - #self.ren.SetBackground(colour) - self.ren.ResetCamera() - self.ren.ResetCameraClippingRange() + self.RepositionActor() self.UpdateRender() def ChangeBackgroundColour(self, pubsub_evt): @@ -106,6 +105,26 @@ class Viewer(wx.Panel): self.iren.Render() + def RepositionActor(self, evt_pubsub=None): + + if (evt_pubsub): + position = evt_pubsub.data + else: + position = "FRONT" + + cam = self.ren.GetActiveCamera() + cam.SetFocalPoint(0,0,0) + + xv,yv,zv = const.AXIAL_VOLUME_CAM_VIEW_UP[position] + xp,yp,zp = const.AXIAL_VOLUME_CAM_POSITION[position] + + cam.SetViewUp(xv,yv,zv) + cam.SetPosition(xp,yp,zp) + + self.ren.ResetCameraClippingRange() + self.ren.ResetCamera() + self.iren.Render() + def UpdateRender(self, evt_pubsub=None): self.iren.Render() diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index f8a8256..7ccec99 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -173,7 +173,7 @@ class VolumeViewerCover(wx.Panel): self.SetSizer(sizer) sizer.Fit(self) -#import wx.lib.platebtn as pbtn +import wx.lib.platebtn as pbtn import wx.lib.buttons as btn import wx.lib.pubsub as ps import wx.lib.colourselect as csel @@ -186,10 +186,55 @@ class VolumeToolPanel(wx.Panel): BMP_RAYCASTING.SetWidth(22) BMP_RAYCASTING.SetHeight(22) + BMP_POSITION = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + BMP_POSITION.SetWidth(22) + BMP_POSITION.SetHeight(22) + button_raycasting=btn.GenBitmapToggleButton(self, 1, BMP_RAYCASTING, size=(24,24)) button_raycasting.Bind(wx.EVT_BUTTON, self.OnToggleRaycasting) self.button_raycasting = button_raycasting + menu = wx.Menu() + + FRONT_BMP = wx.Bitmap("../icons/brush_circle.jpg", wx.BITMAP_TYPE_JPEG) + item = wx.MenuItem(menu, 0, "Front") + item.SetBitmap(FRONT_BMP) + + BACK_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + item2 = wx.MenuItem(menu, 1, "Back") + item2.SetBitmap(BACK_BMP) + + TOP_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + item3 = wx.MenuItem(menu, 2, "Top") + item3.SetBitmap(TOP_BMP) + + BOTTOM_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + item4 = wx.MenuItem(menu, 3, "Bottom") + item4.SetBitmap(BOTTOM_BMP) + + RIGHT_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + item5 = wx.MenuItem(menu, 4, "Right") + item5.SetBitmap(RIGHT_BMP) + + LEFT_BMP = wx.Bitmap("../icons/brush_square.jpg", wx.BITMAP_TYPE_JPEG) + item6 = wx.MenuItem(menu, 5, "Left") + item6.SetBitmap(LEFT_BMP) + + self.Bind(wx.EVT_MENU, self.OnMenu) + + menu.AppendItem(item) + menu.AppendItem(item2) + menu.AppendItem(item3) + menu.AppendItem(item4) + menu.AppendItem(item5) + menu.AppendItem(item6) + + button_position = pbtn.PlateButton(self, wx.ID_ANY,"", BMP_POSITION, + style=pbtn.PB_STYLE_SQUARE, size=(24,24)) + + button_position.SetMenu(menu) + self.button_position = button_position + button_colour= csel.ColourSelect(self, 111,colour=(0,0,0),size=(24,24)) button_colour.Bind(csel.EVT_COLOURSELECT, self.OnSelectColour) self.button_colour = button_colour @@ -197,8 +242,15 @@ class VolumeToolPanel(wx.Panel): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(button_colour, 0, wx.ALL, 1) sizer.Add(button_raycasting, 0, wx.ALL, 1) + sizer.Add(button_position, 0, wx.ALL, 1) self.SetSizer(sizer) sizer.Fit(self) + + def OnMenu(self, evt): + values = {0:"FRONT", 1:"BACK", 2:"TOP",\ + 3:"BOTTOM", 4:"RIGHT", 5:"LEFT"} + ps.Publisher().sendMessage('Reposition Actor',\ + values[evt.GetId()]) def OnSelectColour(self, evt): colour = c = [i/255.0 for i in evt.GetValue()] diff --git a/invesalius/reader/dicom_reader.py b/invesalius/reader/dicom_reader.py index 7b94203..f27ce25 100644 --- a/invesalius/reader/dicom_reader.py +++ b/invesalius/reader/dicom_reader.py @@ -109,7 +109,7 @@ def LoadImages(dir_): read.Update() #Resample image in x,y dimension - img = ResampleImage2D(read.GetOutput(), 256) + img = ResampleImage2D(read.GetOutput(), 200) #Stack images in Z axes img_app.AddInput(img) -- libgit2 0.21.2