Ejemplo n.º 1
0
	def update_rects(self):
		if not self.paths:
			# this should never happen...
			self.coord_rect = self.bounding_rect = Rect(0, 0, 0, 0)
			return

		rect = self.paths[0].accurate_rect()
		for path in self.paths[1:]:
			rect = UnionRects(rect, path.accurate_rect())
		self.coord_rect = rect
		if self.properties.HasLine():
			rect = self.add_arrow_rects(rect)
			self.bounding_rect = rect.grown(self.properties.GrowAmount())
		else:
			self.bounding_rect = rect
Ejemplo n.º 2
0
	def ObjectChanged(self, obj):
		if self.properties.ObjectChanged(obj):
			rect = self.bounding_rect
			self.del_lazy_attrs()
			self.document.AddClearRect(UnionRects(rect, self.bounding_rect))
			self.issue_changed()
			return 1
		return 0
Ejemplo n.º 3
0
 def end_compound_path(self):
     paths = tuple(self.compound_path)
     self.compound_path = None
     if paths:
         # XXX ugly
         if self.gradient_geo:
             rect = paths[0].accurate_rect()
             for path in paths[1:]:
                 rect = UnionRects(rect, path.accurate_rect())
             self.gradient_rect = rect
         else:
             self.gradient_rect = None
         getattr(self, self.compound_render)()
         GenericLoader.bezier(self, paths=paths)
Ejemplo n.º 4
0
 def update_rects(self):
     trafo = self.trafo
     start = trafo.offset()
     # On some systems, atan2 can raise a ValueError if both
     # parameters are 0. In that case, the actual value the of angle
     # is not important since in the computation of p below, the
     # coordinate depending on the angle will always be 0 because
     # both trafo coefficients are 0. So set the angle to 0 in case
     # of an exception.
     try:
         phi1 = atan2(trafo.m12, trafo.m11)
     except ValueError:
         phi1 = 0
     try:
         phi2 = atan2(trafo.m22, trafo.m21)
     except ValueError:
         phi2 = 0
     p = Point(trafo.m11 * cos(phi1) + trafo.m12 * sin(phi1),
               trafo.m21 * cos(phi2) + trafo.m22 * sin(phi2))
     self.coord_rect = r = Rect(start + p, start - p)
     if self.properties.HasLine():
         width = self.properties.line_width
         r = r.grown(width / 2 + 1)
         # add the bounding boxes of arrows
         if self.arc_type == ArcArc:
             pi2 = pi / 2
             arrow1 = self.properties.line_arrow1
             if arrow1 is not None:
                 pos = trafo(Polar(1, self.start_angle))
                 dir = trafo.DTransform(Polar(1, self.start_angle - pi2))
                 r = UnionRects(r, arrow1.BoundingRect(pos, dir, width))
             arrow2 = self.properties.line_arrow2
             if arrow2 is not None:
                 pos = trafo(Polar(1, self.end_angle))
                 dir = trafo.DTransform(Polar(1, self.end_angle + pi2))
                 r = UnionRects(r, arrow2.BoundingRect(pos, dir, width))
     self.bounding_rect = r