1 """Various blob shapes to represent generic interactions."""
2
3 from pyx import *
4 import math
5
6 from diagrams import FeynDiagram
7 from points import Point
8 from utils import Visible
9
10
11
12 -class Blob(Point, Visible):
13 "Base class for all blob-like objects in Feynman diagrams"
15 raise Exception("Blobs are an abstract base class: you can't make them!")
16
18 self.strokestyles = [strokestyle]
19 return self
20
22 self.strokestyles = []
23 return self
24
26 self.fillstyles = [fillstyle]
27 return self
28
30 self.fillstyles = []
31 return self
32
34 self.trafos.append(trafo)
35 return self
36
38 self.trafos = []
39 return self
40
48
49
50
51
52
54 "A circular blob"
55 blobshape = "circle"
56
57 - def __init__(self,
58 x = None, y = None,
59 center = None,
60 radius = None,
61 fill = [color.rgb.white],
62 stroke = [color.rgb.black],
63 points = None):
64 if radius:
65 self.radius = float(radius)
66 else:
67 raise Exception("No (or zero) radius specified for blob.")
68
69 if x != None and y != None:
70 self.setXY(x, y)
71 elif center != None:
72 self.setXY(center.getX(), center.getY())
73 else:
74 raise Exception("No center specified for blob.")
75
76 self.setPoints(points)
77 self.fillstyles = fill
78 self.strokestyles = stroke
79 self.trafos = []
80
81 FeynDiagram.currentDiagram.add(self)
82
84 return path.circle(self.getX(), self.getY(), self.radius)
85
86 - def draw(self, canvas):
87 canvas.fill(self.getPath(), [color.rgb.white])
88 canvas.fill(self.getPath(), self.fillstyles)
89 canvas.stroke(self.getPath(), self.strokestyles)
90
91
92
94 "An elliptical blob"
95 blobshape = "ellipse"
96
97 - def __init__(self,
98 x = None, y = None,
99 center = None,
100 xradius = None, yradius = None,
101 fill = [color.rgb.white],
102 stroke = [color.rgb.black],
103 points = None):
104
105 if x != None and y != None:
106 self.setXY(x, y)
107 elif center != None:
108 self.setXY(center.getX(), center.getY())
109 else:
110 raise Exception("No center specified for blob.")
111
112 if xradius:
113 self.setXRadius(xradius)
114 elif yradius:
115 self.setXRadius(yradius)
116 else:
117 raise Exception("No viable candidate for x-radius")
118
119 if yradius:
120 self.setYRadius(yradius)
121 elif xradius:
122 self.setYRadius(xradius)
123 else:
124 raise Exception("No viable candidate for y-radius")
125
126 self.setPoints(points)
127 self.fillstyles = fill
128 self.strokestyles = stroke
129 self.trafos = []
130
131
132 FeynDiagram.currentDiagram.add(self)
133
134
136 return self.xrad
137
138
140 self.xrad = float(xrad)
141 return self
142
143
145 return self.yrad
146
147
149 self.yrad = float(yrad)
150 return self
151
152
155
156
161
162
164 ucircle = path.circle(self.xpos, self.ypos, 1.0)
165 mytrafo = trafo.scale(self.xrad, self.yrad, self.xpos, self.ypos)
166 epath = ucircle.transformed(mytrafo)
167 return epath
168
169
170 - def draw(self, canvas):
171 canvas.fill(self.getPath(), [color.rgb.white])
172 canvas.fill(self.getPath(), self.fillstyles)
173
174 canvas.stroke(self.getPath(), self.strokestyles)
175
176
177
178 NamedBlob = {
179 "circle" : Circle,
180 "ellipse" : Ellipse
181 }
182