graphics/LD_Objects.py
changeset 213 4931959ea256
parent 180 3b0d3ea35ee5
child 231 fc2d6cbb8b39
--- a/graphics/LD_Objects.py	Wed Jun 04 17:48:26 2008 +0200
+++ b/graphics/LD_Objects.py	Mon Jun 23 18:48:49 2008 +0200
@@ -563,13 +563,8 @@
         Graphic_Element.Draw(self, dc)
         dc.SetPen(wx.BLACK_PEN)
         dc.SetBrush(wx.BLACK_BRUSH)
-        # Draw two rectangles for representing the contact
-        dc.DrawRectangle(self.Pos.x, self.Pos.y, 2, self.Size[1] + 1)
-        dc.DrawRectangle(self.Pos.x + self.Size[0] - 1, self.Pos.y, 2, self.Size[1] + 1)
-        # Draw contact name
-        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - self.NameSize[0]) / 2,
-                self.Pos.y - (self.NameSize[1] + 2))
-        # Draw the modifier symbol in the middle of contact
+        
+        # Compiling contact type modifier symbol
         typetext = ""
         if self.Type == CONTACT_REVERSE:
             typetext = "/"
@@ -577,9 +572,26 @@
             typetext = "P"
         elif self.Type == CONTACT_FALLING:
             typetext = "N"
+        
+        if getattr(dc, "printing", False):
+            name_size = dc.GetTextExtent(self.Name)
+            if typetext != "":
+                type_size = dc.GetTextExtent(typetext)
+        else:
+            name_size = self.NameSize
+            if typetext != "":
+                type_size = self.TypeSize
+        
+        # Draw two rectangles for representing the contact
+        dc.DrawRectangle(self.Pos.x, self.Pos.y, 2, self.Size[1] + 1)
+        dc.DrawRectangle(self.Pos.x + self.Size[0] - 1, self.Pos.y, 2, self.Size[1] + 1)
+        # Draw contact name
+        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - name_size[0]) / 2,
+                self.Pos.y - (name_size[1] + 2))
+        # Draw the modifier symbol in the middle of contact
         if typetext != "":
-            dc.DrawText(typetext, self.Pos.x + (self.Size[0] - self.TypeSize[0]) / 2 + 1,
-                    self.Pos.y + (self.Size[1] - self.TypeSize[1]) / 2)
+            dc.DrawText(typetext, self.Pos.x + (self.Size[0] - type_size[0]) / 2 + 1,
+                    self.Pos.y + (self.Size[1] - type_size[1]) / 2)
         # Draw input and output connectors
         self.Input.Draw(dc)
         self.Output.Draw(dc)
@@ -793,15 +805,8 @@
         Graphic_Element.Draw(self, dc)
         dc.SetPen(wx.Pen(wx.BLACK, 2, wx.SOLID))
         dc.SetBrush(wx.TRANSPARENT_BRUSH)
-        # Draw a two circle arcs for representing the coil
-        dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, 135, 225)
-        dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, -45, 45)
-        dc.SetPen(wx.BLACK_PEN)
-        dc.DrawPoint(self.Pos.x + 1, self.Pos.y + self.Size[1] / 2 + 1)
-        # Draw coil name
-        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - self.NameSize[0]) / 2,
-                self.Pos.y - (self.NameSize[1] + 2))
-        # Draw the modifier symbol in the middle of coil
+        
+        # Compiling coil type modifier symbol 
         typetext = ""
         if self.Type == COIL_REVERSE:
             typetext = "/"
@@ -809,9 +814,37 @@
             typetext = "S"
         elif self.Type == COIL_RESET:
             typetext = "R"
+        
+        if getattr(dc, "printing", False) and not isinstance(dc, wx.PostScriptDC):
+            # Draw an clipped ellipse for representing the coil
+            clipping_box = dc.GetClippingBox()
+            dc.SetClippingRegion(self.Pos.x - 1, self.Pos.y, self.Size[0] + 2, self.Size[1] + 1)
+            dc.DrawEllipse(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1)
+            dc.DestroyClippingRegion()
+            if clipping_box != (0, 0, 0, 0):
+                dc.SetClippingRegion(*clipping_box)
+            name_size = dc.GetTextExtent(self.Name)
+            if typetext != "":
+                type_size = dc.GetTextExtent(typetext)
+        else:
+            # Draw a two ellipse arcs for representing the coil
+            dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, 135, 225)
+            dc.DrawEllipticArc(self.Pos.x, self.Pos.y - int(self.Size[1] * (sqrt(2) - 1.) / 2.) + 1, self.Size[0], int(self.Size[1] * sqrt(2)) - 1, -45, 45)
+            # Draw a point to avoid hole in left arc
+            if not getattr(dc, "printing", False):
+                dc.SetPen(wx.BLACK_PEN)
+                dc.DrawPoint(self.Pos.x + 1, self.Pos.y + self.Size[1] / 2 + 1)
+            name_size = self.NameSize
+            if typetext != "":
+                type_size = self.TypeSize
+            
+        # Draw coil name
+        dc.DrawText(self.Name, self.Pos.x + (self.Size[0] - name_size[0]) / 2,
+                self.Pos.y - (name_size[1] + 2))
+        # Draw the modifier symbol in the middle of coil
         if typetext != "":
-            dc.DrawText(typetext, self.Pos.x + (self.Size[0] - self.TypeSize[0]) / 2 + 1,
-                    self.Pos.y + (self.Size[1] - self.TypeSize[1]) / 2)
+            dc.DrawText(typetext, self.Pos.x + (self.Size[0] - type_size[0]) / 2 + 1,
+                    self.Pos.y + (self.Size[1] - type_size[1]) / 2)
         # Draw input and output connectors
         self.Input.Draw(dc)
         self.Output.Draw(dc)