Blame view

TubeWidget.py 3.59 KB
9f9f1788   Pavel Govyadinov   clead up version ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  #!/usr/bin/env python3
  # -*- coding: utf-8 -*-
  """
  Created on Mon Aug  5 15:53:16 2019
  
  @author: pavel
  """
  
  """
      Qt wrapper/container class that handles all the top level events and maintains the
      methods necessary to use the QT signals and slots API.
  """
  
  from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
  from TubeCanvas import TubeDraw
193cb4c6   Pavel Govyadinov   need this to test
16
17
  import numpy as np
  import trimesh as tm
9f9f1788   Pavel Govyadinov   clead up version ...
18
  
6eb102f5   Pavel Govyadinov   Fixed issue cause...
19
20
  DEBUG = False
  
9f9f1788   Pavel Govyadinov   clead up version ...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  class TubeWidget(QtGui.QWidget):
      sigUpdate = QtCore.pyqtSignal(float, float, float)
      #Initializes the QT wrapper class.
      def __init__(self):
          super(TubeWidget, self).__init__()
          box = QtGui.QVBoxLayout(self)
          self.resize(500,500)
          self.setLayout(box)
          self.canvas = TubeDraw()
          #self.canvas.create_native()
          box.addWidget(self.canvas.native)
          self.camera = [0,0,0]
          self.down = False
  
          self.canvas.events.mouse_press.connect(self.on_mouse_press)
          self.canvas.events.mouse_release.connect(self.on_mouse_release)
          self.canvas.events.mouse_move.connect(self.on_mouse_move)
          self.canvas.events.mouse_wheel.connect(self.on_mouse_wheel)
  
          #self.show()
  
      #Handles the mouse release event
      def on_mouse_release(self, event):
          self.down=False
          self.sendCameraInfo()
  
      #Handles the mouse move event
      def on_mouse_move(self, event):
          if self.down:
              self.sendCameraInfo()
  
2282da38   Pavel Govyadinov   added path select...
52
      #Handles the mouse press events
9f9f1788   Pavel Govyadinov   clead up version ...
53
54
      def on_mouse_press(self, event):
          self.down = True
193cb4c6   Pavel Govyadinov   need this to test
55
56
57
58
59
60
61
          if event.button == 2:
              menu = QtWidgets.QMenu(self)
              NS = menu.addAction('Export Model')
              action = menu.exec_(event.native.globalPos())
              if action == NS:
                  self.save_stl_mesh()
                  
9f9f1788   Pavel Govyadinov   clead up version ...
62
63
64
65
66
67
68
69
70
71
72
  
      #Handles the mouse wheel event
      def on_mouse_wheel(self, event):
          self.sendCameraInfo()
  
      #controls the emit function of the QT class to send a signal to the slot
      #located in the other window.
      def sendCameraInfo(self):
          #self.view = self.canvas.view
          self.camera = self.canvas.camera
          #print("stuff", self.view[3, 0], self.view[3, 1], self.view[3, 2])
6eb102f5   Pavel Govyadinov   Fixed issue cause...
73
74
          if DEBUG:
              print("stuff", self.camera[0], self.camera[1], self.camera[2])
9f9f1788   Pavel Govyadinov   clead up version ...
75
          self.sigUpdate.emit(self.camera[0], self.camera[1], self.camera[2])
6aca1767   Pavel Govyadinov   Added a signal to...
76
77
78
79
80
81
82
          
      """
      Function to receive the signal with the information necessary to visualize
      specific fibers only. With the rest of them being minimized.
      """
      @QtCore.pyqtSlot(list)
      def select(self, x):
2282da38   Pavel Govyadinov   added path select...
83
84
85
86
87
88
          self.canvas.select_edges(x)
  #        for e in x:
  #            if e in self.canvas.edge_dict:    
  #                print(self.canvas.edge_dict[e])
  #            elif (e[1], e[0]) in self.canvas.edge_dict:
  #                print(self.canvas.edge_dict[(e[1], e[0])])
6aca1767   Pavel Govyadinov   Added a signal to...
89
          print("got signal", x)
9f9f1788   Pavel Govyadinov   clead up version ...
90
  
6aca1767   Pavel Govyadinov   Added a signal to...
91
92
93
94
95
96
      """
          Initialization method that connects the slot to the function that handles
          the information being sent.
      """
      def connect(self, signal_object):
          signal_object.select.connect(self.select)
193cb4c6   Pavel Govyadinov   need this to test
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
          
      def save_stl_mesh(self):
          triangles = self.canvas.triangle_data
          caps = self.canvas.cap_data
          points = self.canvas.cylinder_data['a_position']
          colors = self.canvas.cylinder_data['a_fg_color']
          normals = self.canvas.cylinder_data['a_normal']
          
          mesh = tm.Trimesh(vertices=points, faces=np.append(triangles, caps, axis=0),
                            vertex_colors=colors, vertex_normals=normals)
          mesh.export('with_caps.obj')
          mesh.export('with_caps.ply')