Commit a39e606a8dbf1414b4333a0aa64555f8c1dc285a
1 parent
5072564a
Exists in
rotvol
Showing the cross
Showing
1 changed file
with
57 additions
and
0 deletions
Show diff stats
invesalius/data/styles.py
@@ -1414,10 +1414,15 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle): | @@ -1414,10 +1414,15 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle): | ||
1414 | 1414 | ||
1415 | self.viewer = viewer | 1415 | self.viewer = viewer |
1416 | 1416 | ||
1417 | + self.line1 = None | ||
1418 | + self.line2 = None | ||
1419 | + | ||
1417 | self.AddObserver("KeyPressEvent", self.OnKeyPress) | 1420 | self.AddObserver("KeyPressEvent", self.OnKeyPress) |
1421 | + self.viewer.slice_data.renderer.AddObserver("StartEvent", self.OnUpdate) | ||
1418 | 1422 | ||
1419 | def SetUp(self): | 1423 | def SetUp(self): |
1420 | self.viewer.slice_.current_mask.is_shown = False | 1424 | self.viewer.slice_.current_mask.is_shown = False |
1425 | + self.draw_lines() | ||
1421 | Publisher.sendMessage('Reload actual slice') | 1426 | Publisher.sendMessage('Reload actual slice') |
1422 | 1427 | ||
1423 | def OnKeyPress(self, evt, obj): | 1428 | def OnKeyPress(self, evt, obj): |
@@ -1447,6 +1452,58 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle): | @@ -1447,6 +1452,58 @@ class ReorientImageInteractorStyle(DefaultInteractorStyle): | ||
1447 | self.viewer.slice_.current_mask.clear_history() | 1452 | self.viewer.slice_.current_mask.clear_history() |
1448 | Publisher.sendMessage('Reload actual slice') | 1453 | Publisher.sendMessage('Reload actual slice') |
1449 | 1454 | ||
1455 | + def OnUpdate(self, obj, evt): | ||
1456 | + w, h = self.viewer.slice_data.renderer.GetSize() | ||
1457 | + | ||
1458 | + center = self.viewer.slice_data.actor.GetCenter() | ||
1459 | + coord = vtk.vtkCoordinate() | ||
1460 | + coord.SetValue(center) | ||
1461 | + x, y = coord.GetComputedDisplayValue(self.viewer.slice_data.renderer) | ||
1462 | + | ||
1463 | + self.line1.SetPoint1(0, y, 0) | ||
1464 | + self.line1.SetPoint2(w, y, 0) | ||
1465 | + self.line1.Update() | ||
1466 | + | ||
1467 | + self.line2.SetPoint1(x, 0, 0) | ||
1468 | + self.line2.SetPoint2(x, h, 0) | ||
1469 | + self.line2.Update() | ||
1470 | + | ||
1471 | + def _create_line(self, x0, y0, x1, y1, color): | ||
1472 | + line = vtk.vtkLineSource() | ||
1473 | + line.SetPoint1(x0, y0, 0) | ||
1474 | + line.SetPoint2(x1, y1, 0) | ||
1475 | + | ||
1476 | + coord = vtk.vtkCoordinate() | ||
1477 | + coord.SetCoordinateSystemToDisplay() | ||
1478 | + | ||
1479 | + mapper = vtk.vtkPolyDataMapper2D() | ||
1480 | + mapper.SetTransformCoordinate(coord) | ||
1481 | + mapper.SetInputConnection(line.GetOutputPort()) | ||
1482 | + mapper.Update() | ||
1483 | + | ||
1484 | + actor = vtk.vtkActor2D() | ||
1485 | + actor.SetMapper(mapper) | ||
1486 | + actor.GetProperty().SetLineWidth(2.0) | ||
1487 | + actor.GetProperty().SetColor(color) | ||
1488 | + | ||
1489 | + self.viewer.slice_data.renderer.AddActor(actor) | ||
1490 | + | ||
1491 | + return line | ||
1492 | + | ||
1493 | + def draw_lines(self): | ||
1494 | + if self.viewer.orientation == 'AXIAL': | ||
1495 | + color1 = (0, 1, 0) | ||
1496 | + color2 = (0, 0, 1) | ||
1497 | + elif self.viewer.orientation == 'CORONAL': | ||
1498 | + color1 = (1, 0, 0) | ||
1499 | + color2 = (0, 0, 1) | ||
1500 | + elif self.viewer.orientation == 'SAGITAL': | ||
1501 | + color1 = (1, 0, 0) | ||
1502 | + color2 = (0, 1, 0) | ||
1503 | + | ||
1504 | + self.line1 = self._create_line(0, 0.5, 1, 0.5, color1) | ||
1505 | + self.line2 = self._create_line(0.5, 0, 0.5, 1, color2) | ||
1506 | + | ||
1450 | 1507 | ||
1451 | def get_style(style): | 1508 | def get_style(style): |
1452 | STYLES = { | 1509 | STYLES = { |