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,24 +570,19 @@ class LinearMeasure(object): | ||
570 | canvas: the canvas it's being drawn. | 570 | canvas: the canvas it's being drawn. |
571 | """ | 571 | """ |
572 | coord = vtk.vtkCoordinate() | 572 | coord = vtk.vtkCoordinate() |
573 | - lines = [] | 573 | + points = [] |
574 | for p in self.points: | 574 | for p in self.points: |
575 | coord.SetValue(p) | 575 | coord.SetValue(p) |
576 | cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer) | 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 | canvas.draw_line(p0, p1) | 582 | canvas.draw_line(p0, p1) |
587 | 583 | ||
588 | txt = u"%.3f mm" % self.GetValue() | 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 | def GetNumberOfPoints(self): | 587 | def GetNumberOfPoints(self): |
593 | return len(self.points) | 588 | return len(self.points) |
@@ -832,52 +827,45 @@ class AngularMeasure(object): | @@ -832,52 +827,45 @@ class AngularMeasure(object): | ||
832 | gc: is a wx.GraphicsContext | 827 | gc: is a wx.GraphicsContext |
833 | canvas: the canvas it's being drawn. | 828 | canvas: the canvas it's being drawn. |
834 | """ | 829 | """ |
830 | + | ||
835 | coord = vtk.vtkCoordinate() | 831 | coord = vtk.vtkCoordinate() |
836 | - lines = [] | 832 | + points = [] |
837 | for p in self.points: | 833 | for p in self.points: |
838 | - print p | ||
839 | coord.SetValue(p) | 834 | coord.SetValue(p) |
840 | cx, cy = coord.GetComputedDisplayValue(canvas.viewer.slice_data.renderer) | 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 | canvas.draw_line(p0, p1) | 841 | canvas.draw_line(p0, p1) |
853 | 842 | ||
854 | - if len(lines) == 3: | 843 | + if len(points) == 3: |
855 | txt = u"%.3f° / %.3f°" % (self.GetValue(), 360.0 - self.GetValue()) | 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 | def GetNumberOfPoints(self): | 870 | def GetNumberOfPoints(self): |
883 | return self.number_of_points | 871 | return self.number_of_points |
invesalius/data/viewer_slice.py
@@ -241,13 +241,48 @@ class CanvasRendererCTX: | @@ -241,13 +241,48 @@ class CanvasRendererCTX: | ||
241 | return None | 241 | return None |
242 | gc = self.gc | 242 | gc = self.gc |
243 | 243 | ||
244 | + p0x, p0y = pos0 | ||
245 | + p1x, p1y = pos1 | ||
246 | + | ||
247 | + p0y = -p0y | ||
248 | + p1y = -p1y | ||
249 | + | ||
244 | pen = wx.Pen(wx.Colour(*colour), width, wx.SOLID) | 250 | pen = wx.Pen(wx.Colour(*colour), width, wx.SOLID) |
245 | gc.SetPen(pen) | 251 | gc.SetPen(pen) |
246 | 252 | ||
247 | path = gc.CreatePath() | 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 | gc.StrokePath(path) | 284 | gc.StrokePath(path) |
285 | + gc.FillPath(path) | ||
251 | 286 | ||
252 | 287 | ||
253 | def draw_text_box(self, text, pos, font=None, txt_colour=(255, 255, 255), bg_colour=(128, 128, 128, 128), border=5): | 288 | def draw_text_box(self, text, pos, font=None, txt_colour=(255, 255, 255), bg_colour=(128, 128, 128, 128), border=5): |