Commit 2bc6d3620136f408317b788d150ad5a442d7b97b
1 parent
4e26411d
Exists in
master
and in
26 other branches
Created a method to draw circles
Showing
2 changed files
with
68 additions
and
45 deletions
Show diff stats
invesalius/data/measures.py
| ... | ... | @@ -570,24 +570,19 @@ class LinearMeasure(object): |
| 570 | 570 | canvas: the canvas it's being drawn. |
| 571 | 571 | """ |
| 572 | 572 | coord = vtk.vtkCoordinate() |
| 573 | - lines = [] | |
| 573 | + points = [] | |
| 574 | 574 | for p in self.points: |
| 575 | 575 | coord.SetValue(p) |
| 576 | 576 | cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer) |
| 577 | - cy = -cy | |
| 578 | - lines.append((cx, cy)) | |
| 579 | - path = gc.CreatePath() | |
| 580 | - path.AddCircle(cx, cy, 2.5) | |
| 581 | - gc.StrokePath(path) | |
| 582 | - gc.FillPath(path) | |
| 583 | - | |
| 584 | - if len(lines) > 1: | |
| 585 | - for (p0, p1) in zip(lines[:-1:], lines[1::]): | |
| 577 | + canvas.draw_circle((cx, cy), 2.5) | |
| 578 | + points.append((cx, cy)) | |
| 579 | + | |
| 580 | + if len(points) > 1: | |
| 581 | + for (p0, p1) in zip(points[:-1:], points[1::]): | |
| 586 | 582 | canvas.draw_line(p0, p1) |
| 587 | 583 | |
| 588 | 584 | txt = u"%.3f mm" % self.GetValue() |
| 589 | - # gc.DrawText(txt, *lines[0]) | |
| 590 | - canvas.draw_text_box(txt, (lines[0][0], -lines[0][1])) | |
| 585 | + canvas.draw_text_box(txt, (points[0][0], points[0][1])) | |
| 591 | 586 | |
| 592 | 587 | def GetNumberOfPoints(self): |
| 593 | 588 | return len(self.points) |
| ... | ... | @@ -832,52 +827,45 @@ class AngularMeasure(object): |
| 832 | 827 | gc: is a wx.GraphicsContext |
| 833 | 828 | canvas: the canvas it's being drawn. |
| 834 | 829 | """ |
| 830 | + | |
| 835 | 831 | coord = vtk.vtkCoordinate() |
| 836 | - lines = [] | |
| 832 | + points = [] | |
| 837 | 833 | for p in self.points: |
| 838 | - print p | |
| 839 | 834 | coord.SetValue(p) |
| 840 | 835 | cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer) |
| 841 | - cy = -cy | |
| 842 | - lines.append((cx, cy)) | |
| 843 | - path = gc.CreatePath() | |
| 844 | - path.AddCircle(cx, cy, 2.5) | |
| 845 | - gc.StrokePath(path) | |
| 846 | - gc.FillPath(path) | |
| 836 | + canvas.draw_circle((cx, cy), 2.5) | |
| 837 | + points.append((cx, cy)) | |
| 847 | 838 | |
| 848 | - if len(lines) > 1: | |
| 849 | - path = gc.CreatePath() | |
| 850 | - | |
| 851 | - for (p0, p1) in zip(lines[:-1:], lines[1::]): | |
| 839 | + if len(points) > 1: | |
| 840 | + for (p0, p1) in zip(points[:-1:], points[1::]): | |
| 852 | 841 | canvas.draw_line(p0, p1) |
| 853 | 842 | |
| 854 | - if len(lines) == 3: | |
| 843 | + if len(points) == 3: | |
| 855 | 844 | txt = u"%.3f° / %.3f°" % (self.GetValue(), 360.0 - self.GetValue()) |
| 856 | 845 | |
| 857 | - path = gc.CreatePath() | |
| 846 | + # path = gc.CreatePath() | |
| 858 | 847 | |
| 859 | - c = np.array(lines[1]) | |
| 860 | - v0 = np.array(lines[0]) - c | |
| 861 | - v1 = np.array(lines[2]) - c | |
| 848 | + # c = np.array(lines[1]) | |
| 849 | + # v0 = np.array(lines[0]) - c | |
| 850 | + # v1 = np.array(lines[2]) - c | |
| 862 | 851 | |
| 863 | - s0 = np.linalg.norm(v0) | |
| 864 | - s1 = np.linalg.norm(v1) | |
| 852 | + # s0 = np.linalg.norm(v0) | |
| 853 | + # s1 = np.linalg.norm(v1) | |
| 865 | 854 | |
| 866 | - a0 = np.arctan2(v0[1] , v0[0]) | |
| 867 | - a1 = np.arctan2(v1[1] , v1[0]) | |
| 855 | + # a0 = np.arctan2(v0[1] , v0[0]) | |
| 856 | + # a1 = np.arctan2(v1[1] , v1[0]) | |
| 868 | 857 | |
| 869 | - if (a1 - a0) % (np.pi*2) < (a0 - a1) % (np.pi*2): | |
| 870 | - sa = a0 | |
| 871 | - ea = a1 | |
| 872 | - else: | |
| 873 | - sa = a1 | |
| 874 | - ea = a0 | |
| 858 | + # if (a1 - a0) % (np.pi*2) < (a0 - a1) % (np.pi*2): | |
| 859 | + # sa = a0 | |
| 860 | + # ea = a1 | |
| 861 | + # else: | |
| 862 | + # sa = a1 | |
| 863 | + # ea = a0 | |
| 875 | 864 | |
| 876 | - path.AddArc((c[0], c[1]), min(s0, s1), sa, ea) | |
| 877 | - gc.StrokePath(path) | |
| 865 | + # path.AddArc((c[0], c[1]), min(s0, s1), sa, ea) | |
| 866 | + # gc.StrokePath(path) | |
| 878 | 867 | |
| 879 | - # gc.DrawText(txt, *lines[0]) | |
| 880 | - canvas.draw_text_box(txt, (lines[0][0], -lines[0][1])) | |
| 868 | + canvas.draw_text_box(txt, (points[0][0], points[0][1])) | |
| 881 | 869 | |
| 882 | 870 | def GetNumberOfPoints(self): |
| 883 | 871 | return self.number_of_points | ... | ... |
invesalius/data/viewer_slice.py
| ... | ... | @@ -241,13 +241,48 @@ class CanvasRendererCTX: |
| 241 | 241 | return None |
| 242 | 242 | gc = self.gc |
| 243 | 243 | |
| 244 | + p0x, p0y = pos0 | |
| 245 | + p1x, p1y = pos1 | |
| 246 | + | |
| 247 | + p0y = -p0y | |
| 248 | + p1y = -p1y | |
| 249 | + | |
| 244 | 250 | pen = wx.Pen(wx.Colour(*colour), width, wx.SOLID) |
| 245 | 251 | gc.SetPen(pen) |
| 246 | 252 | |
| 247 | 253 | path = gc.CreatePath() |
| 248 | - path.MoveToPoint(*pos0) | |
| 249 | - path.AddLineToPoint(*pos1) | |
| 254 | + path.MoveToPoint(p0x, p0y) | |
| 255 | + path.AddLineToPoint(p1x, p1y) | |
| 256 | + gc.StrokePath(path) | |
| 257 | + | |
| 258 | + def draw_circle(self, center, radius, width=2, line_colour=(255, 0, 0, 128), fill_colour=(0, 0, 0, 0)): | |
| 259 | + """ | |
| 260 | + Draw a circle centered at center with the given radius. | |
| 261 | + | |
| 262 | + Params: | |
| 263 | + center: (x, y) position. | |
| 264 | + radius: float number. | |
| 265 | + width: line width. | |
| 266 | + line_colour: RGBA line colour | |
| 267 | + fill_colour: RGBA fill colour. | |
| 268 | + """ | |
| 269 | + if self.gc is None: | |
| 270 | + return None | |
| 271 | + gc = self.gc | |
| 272 | + | |
| 273 | + pen = wx.Pen(wx.Colour(*line_colour), width, wx.SOLID) | |
| 274 | + gc.SetPen(pen) | |
| 275 | + | |
| 276 | + brush = wx.Brush(wx.Colour(*fill_colour)) | |
| 277 | + gc.SetBrush(brush) | |
| 278 | + | |
| 279 | + cx, cy = center | |
| 280 | + cy = -cy | |
| 281 | + | |
| 282 | + path = gc.CreatePath() | |
| 283 | + path.AddCircle(cx, cy, 2.5) | |
| 250 | 284 | gc.StrokePath(path) |
| 285 | + gc.FillPath(path) | |
| 251 | 286 | |
| 252 | 287 | |
| 253 | 288 | def draw_text_box(self, text, pos, font=None, txt_colour=(255, 255, 255), bg_colour=(128, 128, 128, 128), border=5): | ... | ... |