Commit 121e33b4adcd1413c5014f5916ece3aeaa981a89

Authored by Renan Matsuda
1 parent 0eeb3ff4
Exists in master

ICP matrix send in a queue

invesalius/data/bases.py
... ... @@ -264,9 +264,9 @@ def flip_x_m(point):
264 264 return point_rot
265 265  
266 266 def transform_icp(m_img, m_icp):
267   - coord_img = np.hstack((flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]]), 1.)).reshape([4, 1])
  267 + coord_img = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]])
268 268 m_img[0, -1], m_img[1, -1], m_img[2, -1], _ = m_icp @ coord_img
269   - m_img[0, -1], m_img[1, -1], m_img[2, -1] = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]])
  269 + m_img[0, -1], m_img[1, -1], m_img[2, -1], _ = flip_x_m([m_img[0, -1], m_img[1, -1], m_img[2, -1]])
270 270  
271 271 return m_img
272 272  
... ...
invesalius/data/coordinates.py
... ... @@ -259,7 +259,7 @@ def DebugCoord(trk_init, trck_id, ref_mode):
259 259 coord4 = np.array([uniform(*dx), uniform(*dx), uniform(*dx),
260 260 uniform(*dt), uniform(*dt), uniform(*dt)])
261 261  
262   - sleep(0.05)
  262 + sleep(0.15)
263 263  
264 264 # coord1 = np.array([uniform(1, 200), uniform(1, 200), uniform(1, 200),
265 265 # uniform(-180.0, 180.0), uniform(-180.0, 180.0), uniform(-180.0, 180.0)])
... ...
invesalius/data/coregistration.py
... ... @@ -216,7 +216,7 @@ class CoordinateCorregistrate(threading.Thread):
216 216  
217 217  
218 218 class CoordinateCorregistrateNoObject(threading.Thread):
219   - def __init__(self, ref_mode_id, trck_info, coreg_data, coord_queue, view_tracts, coord_tracts_queue, event, sle, icp = None, m_icp = None):
  219 + def __init__(self, ref_mode_id, trck_info, coreg_data, coord_queue, view_tracts, coord_tracts_queue, event, sle, icp_queue):
220 220 threading.Thread.__init__(self, name='CoordCoregNoObject')
221 221 self.ref_mode_id = ref_mode_id
222 222 self.trck_info = trck_info
... ... @@ -226,16 +226,9 @@ class CoordinateCorregistrateNoObject(threading.Thread):
226 226 self.coord_tracts_queue = coord_tracts_queue
227 227 self.event = event
228 228 self.sle = sle
229   - self.m_icp = m_icp
230   - self.icp = icp
231   -
232   - def __bind_events(self):
233   - Publisher.subscribe(self.UpdateICP, 'Update ICP matrix')
234   -
235   - def UpdateICP(self, m_icp, flag):
236   - print('oi')
237   - self.m_icp = m_icp
238   - self.icp = flag
  229 + self.icp_queue = icp_queue
  230 + self.icp = None
  231 + self.m_icp = None
239 232  
240 233 def run(self):
241 234 trck_info = self.trck_info
... ... @@ -246,13 +239,19 @@ class CoordinateCorregistrateNoObject(threading.Thread):
246 239 # print('CoordCoreg: event {}'.format(self.event.is_set()))
247 240 while not self.event.is_set():
248 241 try:
  242 + if self.icp_queue.empty():
  243 + None
  244 + else:
  245 + self.icp, self.m_icp = self.icp_queue.get_nowait()
249 246 # print(f"Set the coordinate")
  247 + print(self.icp, self.m_icp)
250 248 coord_raw = dco.GetCoordinates(trck_init, trck_id, trck_mode)
251 249 coord, m_img = corregistrate_dynamic(coreg_data, coord_raw, self.ref_mode_id, [self.icp, self.m_icp])
252 250 # print("Coord: ", coord)
253 251 m_img_flip = m_img.copy()
254 252 m_img_flip[1, -1] = -m_img_flip[1, -1]
255   - print(self.icp)
  253 +
  254 + #print(icp)
256 255 if self.icp:
257 256 m_img = bases.transform_icp(m_img, self.m_icp)
258 257  
... ... @@ -261,6 +260,8 @@ class CoordinateCorregistrateNoObject(threading.Thread):
261 260 if self.view_tracts:
262 261 self.coord_tracts_queue.put_nowait(m_img_flip)
263 262  
  263 + if not self.icp_queue.empty():
  264 + self.icp_queue.task_done()
264 265 # The sleep has to be in both threads
265 266 sleep(self.sle)
266 267 except queue.Full:
... ...
invesalius/gui/task_navigator.py
... ... @@ -308,10 +308,10 @@ class NeuronavigationPanel(wx.Panel):
308 308 self.obj_reg = None
309 309 self.obj_reg_status = False
310 310 self.track_obj = False
311   - self.m_icp = None
312 311 self.event = threading.Event()
313 312  
314 313 self.coord_queue = QueueCustom(maxsize=1)
  314 + self.icp_queue = QueueCustom(maxsize=1)
315 315 # self.visualization_queue = QueueCustom(maxsize=1)
316 316 self.trigger_queue = QueueCustom(maxsize=1)
317 317 self.coord_tracts_queue = QueueCustom(maxsize=1)
... ... @@ -689,6 +689,7 @@ class NeuronavigationPanel(wx.Panel):
689 689 self.icp = False
690 690 dcr.CoordinateCorregistrateNoObject.icp = False
691 691  
  692 + self.icp_queue.put_nowait([self.icp, self.m_icp])
692 693 print(self.icp, self.m_icp)
693 694 Publisher.sendMessage("Update ICP matrix", m_icp=self.m_icp, flag=self.icp)
694 695  
... ... @@ -701,7 +702,7 @@ class NeuronavigationPanel(wx.Panel):
701 702 # initialize jobs list
702 703 jobs_list = []
703 704 vis_components = [self.trigger_state, self.view_tracts]
704   - vis_queues = [self.coord_queue, self.trigger_queue, self.tracts_queue]
  705 + vis_queues = [self.coord_queue, self.trigger_queue, self.tracts_queue, self.icp_queue]
705 706  
706 707 nav_id = btn_nav.GetValue()
707 708 if not nav_id:
... ... @@ -815,7 +816,7 @@ class NeuronavigationPanel(wx.Panel):
815 816 jobs_list.append(dcr.CoordinateCorregistrateNoObject(self.ref_mode_id, tracker_mode, coreg_data,
816 817 self.coord_queue,
817 818 self.view_tracts, self.coord_tracts_queue,
818   - self.event, self.sleep_nav))
  819 + self.event, self.sleep_nav, self.icp_queue))
819 820  
820 821 if not errors:
821 822 #TODO: Test the trigger thread
... ... @@ -1937,7 +1938,7 @@ class UpdateNavigationScene(threading.Thread):
1937 1938  
1938 1939 threading.Thread.__init__(self, name='UpdateScene')
1939 1940 self.trigger_state, self.view_tracts = vis_components
1940   - self.coord_queue, self.trigger_queue, self.tracts_queue = vis_queues
  1941 + self.coord_queue, self.trigger_queue, self.tracts_queue, self.icp_queue = vis_queues
1941 1942 self.sle = sle
1942 1943 self.event = event
1943 1944  
... ...