Commit fc5abcbd6748c2650a15fd25a06eb677f325073e

Authored by tatiana
1 parent b6d22243

ADD: Export task panel - still need to fix icons

Showing 1 changed file with 206 additions and 4 deletions   Show diff stats
invesalius/gui/task_exporter.py
@@ -17,10 +17,212 @@ @@ -17,10 +17,212 @@
17 # detalhes. 17 # detalhes.
18 #-------------------------------------------------------------------------- 18 #--------------------------------------------------------------------------
19 19
  20 +import os
  21 +import sys
  22 +
20 import wx 23 import wx
21 - 24 +import wx.lib.hyperlink as hl
  25 +import wx.lib.platebtn as pbtn
  26 +import wx.lib.pubsub as ps
  27 +
  28 +import constants as const
  29 +import project as proj
  30 +
  31 +BTN_PICTURE = wx.NewId()
  32 +BTN_SURFACE = wx.NewId()
  33 +BTN_REPORT = wx.NewId()
  34 +BTN_REQUEST_RP = wx.NewId()
  35 +
  36 +WILDCARD_SAVE_3D = "Inventor (*.iv)|*.iv|"\
  37 + "Renderman (*.rib)|*.rib|"\
  38 + "STL (*.stl)|*.stl|"\
  39 + "VRML (*.vrml)|*.vrml|"\
  40 + "Wavefront (*.obj)|*.obj"
  41 +INDEX_TO_TYPE_3D = {0: const.FILETYPE_IV,
  42 + 1: const.FILETYPE_RIB,
  43 + 2: const.FILETYPE_STL,
  44 + 3: const.FILETYPE_VRML,
  45 + 4: const.FILETYPE_OBJ}
  46 +INDEX_TO_EXTENSION = {0: "iv",
  47 + 1: "rib",
  48 + 2: "stl",
  49 + 3: "vrml",
  50 + 4: "obj"}
  51 +
  52 +WILDCARD_SAVE_2D = "BMP (*.bmp)|*.bmp|"\
  53 + "JPEG (*.jpg)|*.jpg|"\
  54 + "PNG (*.png)|*.png|"\
  55 + "PostScript (*.ps)|*.ps|"\
  56 + "Povray (*.pov)|*.pov|"\
  57 + "TIFF (*.tiff)|*.tiff"
  58 +INDEX_TO_TYPE_2D = {0: const.FILETYPE_BMP,
  59 + 1: const.FILETYPE_JPG,
  60 + 2: const.FILETYPE_PNG,
  61 + 3: const.FILETYPE_PS,
  62 + 4: const.FILETYPE_POV,
  63 + 5: const.FILETYPE_OBJ}
  64 +
  65 +
22 class TaskPanel(wx.Panel): 66 class TaskPanel(wx.Panel):
23 def __init__(self, parent): 67 def __init__(self, parent):
24 - wx.Panel.__init__(self, parent, pos=wx.Point(0, 50), size=wx.Size(256, 120))  
25 - self.SetBackgroundColour(wx.Colour(221, 221, 221, 255))  
26 -  
27 \ No newline at end of file 68 \ No newline at end of file
  69 + wx.Panel.__init__(self, parent)
  70 +
  71 + inner_panel = InnerTaskPanel(self)
  72 +
  73 + sizer = wx.BoxSizer(wx.HORIZONTAL)
  74 + sizer.Add(inner_panel, 1, wx.EXPAND | wx.GROW | wx.BOTTOM | wx.RIGHT |
  75 + wx.LEFT, 7)
  76 + sizer.Fit(self)
  77 +
  78 + self.SetSizer(sizer)
  79 + self.Update()
  80 + self.SetAutoLayout(1)
  81 +
  82 +class InnerTaskPanel(wx.Panel):
  83 +
  84 + def __init__(self, parent):
  85 + wx.Panel.__init__(self, parent)
  86 + self.SetBackgroundColour(wx.Colour(255,255,255))
  87 + self.SetAutoLayout(1)
  88 +
  89 + # Counter for projects loaded in current GUI
  90 +
  91 + # Fixed hyperlink items
  92 + tooltip = wx.ToolTip("Export InVesalius screen to a image file")
  93 + link_export_picture = hl.HyperLinkCtrl(self, -1,
  94 + "Export picture...")
  95 + link_export_picture.SetUnderlines(False, False, False)
  96 + link_export_picture.SetColours("BLACK", "BLACK", "BLACK")
  97 + link_export_picture.SetToolTip(tooltip)
  98 + link_export_picture.AutoBrowse(False)
  99 + link_export_picture.UpdateLink()
  100 + link_export_picture.Bind(hl.EVT_HYPERLINK_LEFT,
  101 + self.OnLinkExportPicture)
  102 +
  103 + tooltip = wx.ToolTip("Export 3D surface")
  104 + link_export_surface = hl.HyperLinkCtrl(self, -1,"Export 3D surface...")
  105 + link_export_surface.SetUnderlines(False, False, False)
  106 + link_export_surface.SetColours("BLACK", "BLACK", "BLACK")
  107 + link_export_surface.SetToolTip(tooltip)
  108 + link_export_surface.AutoBrowse(False)
  109 + link_export_surface.UpdateLink()
  110 + link_export_surface.Bind(hl.EVT_HYPERLINK_LEFT,
  111 + self.OnLinkExportSurface)
  112 +
  113 + tooltip = wx.ToolTip("Request rapid prototyping services")
  114 + link_request_rp = hl.HyperLinkCtrl(self,-1,"Request rapid prototyping...")
  115 + link_request_rp.SetUnderlines(False, False, False)
  116 + link_request_rp.SetColours("BLACK", "BLACK", "BLACK")
  117 + link_request_rp.SetToolTip(tooltip)
  118 + link_request_rp.AutoBrowse(False)
  119 + link_request_rp.UpdateLink()
  120 + link_request_rp.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkRequestRP)
  121 +
  122 + tooltip = wx.ToolTip("Open report tool...")
  123 + link_report = hl.HyperLinkCtrl(self,-1,"Open report tool...")
  124 + link_report.SetUnderlines(False, False, False)
  125 + link_report.SetColours("BLACK", "BLACK", "BLACK")
  126 + link_report.SetToolTip(tooltip)
  127 + link_report.AutoBrowse(False)
  128 + link_report.UpdateLink()
  129 + link_report.Bind(hl.EVT_HYPERLINK_LEFT, self.OnLinkReport)
  130 +
  131 +
  132 + # Image(s) for buttons
  133 + BMP_IMPORT = wx.Bitmap("../icons/file_import.png", wx.BITMAP_TYPE_PNG)
  134 +
  135 + bmp_list = [BMP_IMPORT]
  136 + for bmp in bmp_list:
  137 + bmp.SetWidth(25)
  138 + bmp.SetHeight(25)
  139 +
  140 + # Buttons related to hyperlinks
  141 + button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT
  142 +
  143 + button_picture = pbtn.PlateButton(self, BTN_PICTURE, "",
  144 + BMP_IMPORT, style=button_style)
  145 + button_surface = pbtn.PlateButton(self, BTN_SURFACE, "", BMP_IMPORT,
  146 + style=button_style)
  147 + button_request_rp = pbtn.PlateButton(self, BTN_REQUEST_RP, "",
  148 + BMP_IMPORT, style=button_style)
  149 + button_report = pbtn.PlateButton(self, BTN_REPORT, "",
  150 + BMP_IMPORT,
  151 + style=button_style)
  152 +
  153 + # When using PlaneButton, it is necessary to bind events from parent win
  154 + self.Bind(wx.EVT_BUTTON, self.OnButton)
  155 +
  156 + # Tags and grid sizer for fixed items
  157 + flag_link = wx.EXPAND|wx.GROW|wx.LEFT|wx.TOP
  158 + flag_button = wx.EXPAND | wx.GROW
  159 +
  160 + fixed_sizer = wx.FlexGridSizer(rows=3, cols=2, hgap=2, vgap=0)
  161 + fixed_sizer.AddGrowableCol(0, 1)
  162 + fixed_sizer.AddMany([ (link_export_picture, 1, flag_link, 3),
  163 + (button_picture, 0, flag_button),
  164 + (link_export_surface, 1, flag_link, 3),
  165 + (button_surface, 0, flag_button),
  166 + (link_report, 0, flag_link, 3),
  167 + (button_report, 0, flag_button),
  168 + (link_request_rp, 1, flag_link, 3),
  169 + (button_request_rp, 0, flag_button)])
  170 +
  171 + # Add line sizers into main sizer
  172 + main_sizer = wx.BoxSizer(wx.VERTICAL)
  173 + main_sizer.Add(fixed_sizer, 0, wx.GROW|wx.EXPAND)
  174 +
  175 + # Update main sizer and panel layout
  176 + self.SetSizer(main_sizer)
  177 + self.Fit()
  178 + self.sizer = main_sizer
  179 +
  180 + def OnLinkExportPicture(self, evt=None):
  181 + pass
  182 +
  183 +
  184 + def OnLinkExportSurface(self, evt=None):
  185 + project = proj.Project()
  186 + if sys.platform == 'win32':
  187 + project_name = project.name
  188 + else:
  189 + project_name = project.name+".stl"
  190 +
  191 + if project.surface_dict:
  192 +
  193 + dlg = wx.FileDialog(None,
  194 + "Export 3D surface", # title
  195 + "", # directory
  196 + project_name, # filename
  197 + WILDCARD_SAVE_3D,
  198 + wx.SAVE|wx.OVERWRITE_PROMPT)
  199 + dlg.SetFilterIndex(2) # default is STL
  200 +
  201 + if dlg.ShowModal() == wx.ID_OK:
  202 + filetype_index = dlg.GetFilterIndex()
  203 + filetype = INDEX_TO_TYPE_3D[filetype_index]
  204 + filename = dlg.GetPath()
  205 + extension = INDEX_TO_EXTENSION[filetype_index]
  206 + if sys.platform != 'win32':
  207 + if filename.split(".")[-1] != extension:
  208 + filename = filename + "."+ extension
  209 + ps.Publisher().sendMessage('Export surface to file',
  210 + (filename, filetype))
  211 + else:
  212 + print "Nao tem superficie, nao podemos exportar"
  213 +
  214 + def OnLinkRequestRP(self, evt=None):
  215 + pass
  216 +
  217 + def OnLinkReport(self, evt=None):
  218 + pass
  219 +
  220 + def OnButton(self, evt):
  221 + id = evt.GetId()
  222 + if id == BTN_PICTURE:
  223 + self.OnLinkExportPicture()
  224 + elif id == BTN_SURFACE:
  225 + self.OnLinkExportSurface()
  226 + elif id == BTN_REPORT:
  227 + self.OnLinkReport()
  228 + else: #elif id == BTN_REQUEST_RP:
  229 + self.OnLinkRequestRP()