Skip to content
Snippets Groups Projects
Commit f396735c authored by Daniel Brown's avatar Daniel Brown
Browse files

fixed some various bits with the gui. can specify exact kat executable when creating kat object now

parent fb0c2cb4
No related branches found
No related tags found
No related merge requests found
...@@ -34,6 +34,14 @@ class xaxis(Command): ...@@ -34,6 +34,14 @@ class xaxis(Command):
def __init__(self, kat, scale, limits, comp, param, steps): def __init__(self, kat, scale, limits, comp, param, steps):
if scale == "lin":
scale = Scale.linear
elif scale == "log":
scale = Scale.logarithmic
elif isinstance(scale, str):
# else we have a string but not a recognisable one
raise exceptions.ValueError("scale argument '{0}' is not valid, must be 'lin' or 'log'".format(scale))
if scale != Scale.linear and scale != Scale.logarithmic: if scale != Scale.linear and scale != Scale.logarithmic:
raise exceptions.ValueError("scale is not Scale.linear or Scale.logarithmic") raise exceptions.ValueError("scale is not Scale.linear or Scale.logarithmic")
......
...@@ -144,7 +144,7 @@ class mirror(Component): ...@@ -144,7 +144,7 @@ class mirror(Component):
def getQGraphicsItem(self): def getQGraphicsItem(self):
if self._svgItem == None: if self._svgItem == None:
self._svgItem = ComponentQGraphicsItem(":/resources/mirror_flat.svg",self self._svgItem = ComponentQGraphicsItem(":/resources/mirror_flat.svg",self
,[(-20,0,self.node1),(20,0,self.node2)]) ,[(-4,15,self.node1),(14,15,self.node2)])
return self._svgItem return self._svgItem
...@@ -215,7 +215,8 @@ class laser(Component): ...@@ -215,7 +215,8 @@ class laser(Component):
def getQGraphicsItem(self): def getQGraphicsItem(self):
if self._svgItem == None: if self._svgItem == None:
self._svgItem = ComponentQGraphicsItem(":/resources/laser.svg",self,[(70,0,self.node)]) self._svgItem = ComponentQGraphicsItem(":/resources/laser.svg",
self,[(65,25,self.node)])
return self._svgItem return self._svgItem
...@@ -56,13 +56,15 @@ class katRun(object): ...@@ -56,13 +56,15 @@ class katRun(object):
class kat(object): class kat(object):
def __init__(self): def __init__(self, katexe=""):
self.scene = None # scene object for GUI
self.__components = {} self.__components = {}
self.__detectors = {} self.__detectors = {}
self.__commands = {} self.__commands = {}
self.__gui = None self.__gui = None
self.nodes = NodeNetwork(self) self.nodes = NodeNetwork(self)
self.__katexe = katexe
# Various # Various
self.__phase = None self.__phase = None
...@@ -91,25 +93,31 @@ class kat(object): ...@@ -91,25 +93,31 @@ class kat(object):
data from the simulation run. data from the simulation run.
""" """
r = katRun()
r.katScript = "".join(self.generateKatScript())
if len(self.__katexe) == 0:
# Get the environment variable for where Finesse is stored # Get the environment variable for where Finesse is stored
self.__finesse_dir = os.environ.get('FINESSE_DIR') self.__finesse_dir = os.environ.get('FINESSE_DIR')
if self.__finesse_dir == None : if self.__finesse_dir == None :
raise MissingFinesseEnvVar() raise MissingFinesseEnvVar()
kat_exec = os.path.join(self.__finesse_dir,'kat.exe')
r = katRun() else:
r.katScript = "".join(self.generateKatScript()) kat_exec = self.__katexe
# check if kat file exists and it is executable by user
if not (os.path.isfile(kat_exec) and os.access(kat_exec, os.X_OK)):
raise MissingFinesse()
# create a kat file which we will write the script into
katfile = tempfile.TemporaryFile(suffix=".kat") katfile = tempfile.TemporaryFile(suffix=".kat")
katfile.writelines(r.katScript) katfile.writelines(r.katScript)
katfile.flush() katfile.flush()
kat_exec = os.path.join(self.__finesse_dir,'kat.exe')
if not (os.path.isfile(kat_exec) and os.access(kat_exec, os.X_OK)):
raise MissingFinesse()
kat_exec = "{0} {1}".format(kat_exec, katfile.name) kat_exec = "{0} {1}".format(kat_exec, katfile.name)
p=subprocess.Popen(kat_exec, p=subprocess.Popen(kat_exec,
...@@ -118,12 +126,14 @@ class kat(object): ...@@ -118,12 +126,14 @@ class kat(object):
[out,err] = p.communicate() [out,err] = p.communicate()
# get the version number
ix = out.find('build ') + 6 ix = out.find('build ') + 6
ix2 = out.find(')',ix) ix2 = out.find(')',ix)
r.katVersion = out[ix:ix2] r.katVersion = out[ix:ix2]
r.runDateTime = datetime.datetime.now() r.runDateTime = datetime.datetime.now()
# if something has gone wrong, print err regardless
if p.returncode != 0: if p.returncode != 0:
print err print err
return None return None
......
...@@ -32,7 +32,7 @@ class SpaceQGraphicsItem(QGraphicsLineItem): ...@@ -32,7 +32,7 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
item = QGraphicsTextItem(self.__space.name, self) item = QGraphicsTextItem(self.__space.name, self)
rect = item.boundingRect() rect = item.boundingRect()
item.setPos(-0.5*rect.width(),-0.5*rect.height()) item.setPos(-0.5*rect.width(),0*rect.height())
self.refresh() self.refresh()
...@@ -43,12 +43,10 @@ class SpaceQGraphicsItem(QGraphicsLineItem): ...@@ -43,12 +43,10 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
self.__n1 = NodeQGraphicItem(nodes[0],0,0,-nsize/2,-nsize/2,nsize,nsize,self) self.__n1 = NodeQGraphicItem(nodes[0],0,0,-nsize/2,-nsize/2,nsize,nsize,self)
self.__n1.setPen(QPen(Qt.black)) self.__n1.setPen(QPen(Qt.black))
x1 = self.__n1.x
y1 = self.__n1.y
conn = nodes[0].amIConnected(self.__space) conn = nodes[0].amIConnected(self.__space)
if conn[0]: if conn[0]:
if conn[1] != None:
self.__n1.setVisible(False) self.__n1.setVisible(False)
# now check if a connected component was returned too # now check if a connected component was returned too
if conn[1] != None: if conn[1] != None:
...@@ -59,18 +57,19 @@ class SpaceQGraphicsItem(QGraphicsLineItem): ...@@ -59,18 +57,19 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
x1 = itm.x() + itm.nodedx[conn[2]][0] x1 = itm.x() + itm.nodedx[conn[2]][0]
y1 = itm.y() + itm.nodedx[conn[2]][1] y1 = itm.y() + itm.nodedx[conn[2]][1]
else: else:
self.__n1.setVisible(True)
self.__n1.setBrush(QBrush(Qt.red)) self.__n1.setBrush(QBrush(Qt.red))
x1 = 0
y1 = 0
if self.__n2 == None: if self.__n2 == None:
self.__n2 = NodeQGraphicItem(nodes[1],0,0,-nsize/2,-nsize/2,nsize,nsize,self) self.__n2 = NodeQGraphicItem(nodes[1],0,0,-nsize/2,-nsize/2,nsize,nsize,self)
self.__n2.setPen(QPen(Qt.black)) self.__n2.setPen(QPen(Qt.black))
x2 = self.__n2.x
y2 = self.__n2.y
conn = nodes[1].amIConnected(self.__space) conn = nodes[1].amIConnected(self.__space)
if conn[0]: if conn[0]:
if conn[1] != None:
self.__n2.setVisible(False) self.__n2.setVisible(False)
# now check if a connected component was returned too # now check if a connected component was returned too
if conn[1] != None: if conn[1] != None:
...@@ -81,11 +80,25 @@ class SpaceQGraphicsItem(QGraphicsLineItem): ...@@ -81,11 +80,25 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
x2 = itm.x() + itm.nodedx[conn[2]][0] x2 = itm.x() + itm.nodedx[conn[2]][0]
y2 = itm.y() + itm.nodedx[conn[2]][1] y2 = itm.y() + itm.nodedx[conn[2]][1]
else: else:
self.__n2.setVisible(True)
self.__n2.setBrush(QBrush(Qt.red)) self.__n2.setBrush(QBrush(Qt.red))
p = self.__n2.pos()
x2 = -p.x()
y2 = -p.y()
self.setLine(x1,y1,x2,y2) p = QPointF((x1-x2)*0.5,(y1-y2)*0.5)
self.setPen(QPen(Qt.red, 3)) self.setPos(x1 - p.x(), y1 - p.y())
# if the nodes are visible then reposition them in the
# component reference frame
if self.__n1.isVisible():
self.__n1.setPos(QPointF(p.x(),p.y()))
if self.__n2.isVisible():
self.__n2.setPos(QPointF(p.x()+x2-x1, p.y()+y2-y1))
self.setLine(p.x(), p.y(), p.x()+x2-x1, p.y()+y2-y1)
self.setPen(QPen(Qt.red, 3))
class ComponentQGraphicsItem(QGraphicsSvgItem): class ComponentQGraphicsItem(QGraphicsSvgItem):
...@@ -120,7 +133,5 @@ class ComponentQGraphicsItem(QGraphicsSvgItem): ...@@ -120,7 +133,5 @@ class ComponentQGraphicsItem(QGraphicsSvgItem):
if conn[0] and isinstance(conn[1], pykat.components.space): if conn[0] and isinstance(conn[1], pykat.components.space):
conn[1].getQGraphicsItem().refresh() conn[1].getQGraphicsItem().refresh()
return QGraphicsSvgItem.itemChange(self, change, value) return QGraphicsSvgItem.itemChange(self, change, value)
\ No newline at end of file
...@@ -27,22 +27,21 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow): ...@@ -27,22 +27,21 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
self.setupUi(self) self.setupUi(self)
self.graphicsView = pyKatGraphicsView(self.centralwidget) self.graphicsView = pyKatGraphicsView(self.centralwidget)
self.graphicsView.setObjectName("graphicsView") self.graphicsView.setObjectName("graphicsView")
self.graphicsView.setViewportUpdateMode(QGraphicsView.FullViewportUpdate)
self.gridLayout.addWidget(self.graphicsView, 0, 0, 1, 1) self.gridLayout.addWidget(self.graphicsView, 0, 0, 1, 1)
# create a new scene # create a new scene
self.__scene = QGraphicsScene() if kat.scene == None:
self.graphicsView.setRenderHint(QtGui.QPainter.Antialiasing) kat.scene = pyKatGraphicsScene()
brush = QBrush()
brush.setStyle(Qt.CrossPattern)
brush.setColor(QColor(230,230,230))
self.__scene.setBackgroundBrush(brush)
self.actionExport_to_SVG.triggered.connect(lambda: self.exportToSVG()) self.__scene = kat.scene
self.actionClose.triggered.connect(lambda: self.close)
# add scene to the graphics view # add scene to the graphics view
self.graphicsView.setScene(self.__scene) self.graphicsView.setScene(self.__scene)
self.graphicsView.setRenderHint(QtGui.QPainter.Antialiasing)
self.actionExport_to_SVG.triggered.connect(lambda: self.exportToSVG())
self.actionClose.triggered.connect(lambda: self.close)
self._kat = kat self._kat = kat
...@@ -65,7 +64,7 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow): ...@@ -65,7 +64,7 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
# svg rendering. Important to make sure when rendering to # svg rendering. Important to make sure when rendering to
# svg file that it is in a vector format. Gradients however # svg file that it is in a vector format. Gradients however
# don't work... # don't work...
#itm.setCacheMode(QGraphicsItem.NoCache) itm.setCacheMode(QGraphicsItem.NoCache)
self.__scene.addItem(itm) self.__scene.addItem(itm)
def exportToSVG(self): def exportToSVG(self):
...@@ -83,6 +82,33 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow): ...@@ -83,6 +82,33 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
self.statusbar.showMessage("Complete: Saved to 'output.svg'") self.statusbar.showMessage("Complete: Saved to 'output.svg'")
class pyKatGraphicsScene(QGraphicsScene):
def drawBackground(self, painter, rect):
size = 10
painter.setPen(QPen(QColor(200,200,255,255),0.5))
start = round(rect.top(), size)
if start > rect.top():
start =- size
y = start - size
while y < rect.bottom():
y += size
painter.drawLine(rect.left(),y, rect.right(), y)
start = round(rect.left(), size)
if start > rect.left():
start =- size
y = start - size
while y < rect.right():
y += size
painter.drawLine(y, rect.top(), y, rect.bottom())
class pyKatGraphicsView(QGraphicsView): class pyKatGraphicsView(QGraphicsView):
def __init__(self,val): def __init__(self,val):
QGraphicsView.__init__(self,val) QGraphicsView.__init__(self,val)
...@@ -130,6 +156,14 @@ class pyKatGraphicsView(QGraphicsView): ...@@ -130,6 +156,14 @@ class pyKatGraphicsView(QGraphicsView):
self.__selected_item = item self.__selected_item = item
self.__prev_pt = pt self.__prev_pt = pt
elif isinstance(item, NodeQGraphicItem):
if item == None:
self.__selected_item = None
self.__prev_pt = None
else:
if isinstance(item.parentItem(),SpaceQGraphicsItem):
self.__selected_item = item
self.__prev_pt = pt
def mouseReleaseEvent(self, ev): def mouseReleaseEvent(self, ev):
self.__selected_item = None self.__selected_item = None
...@@ -148,6 +182,8 @@ class pyKatGraphicsView(QGraphicsView): ...@@ -148,6 +182,8 @@ class pyKatGraphicsView(QGraphicsView):
#item.moveBy(pt.x()-pt_.x(), pt.y()-pt_.y()) #item.moveBy(pt.x()-pt_.x(), pt.y()-pt_.y())
# then snap to some integer value # then snap to some integer value
snap = 10.0 snap = 10.0
item.setPos(int(round(pt.x()/snap)*snap),int(round(pt.y()/snap)*snap)) item.setPos(int(round(pt.x()/snap)*snap),int(round(pt.y()/snap)*snap))
self.__prev_pt = pt self.__prev_pt = pt
......
...@@ -12,12 +12,12 @@ ...@@ -12,12 +12,12 @@
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="61.6875" width="31.691147"
height="46.09375" height="23.680061"
id="svg2" id="svg2"
version="1.1" version="1.1"
inkscape:version="0.48.2 r9819" inkscape:version="0.48.4 r9939"
sodipodi:docname="photodiode_green.svg"> sodipodi:docname="laser.svg">
<defs <defs
id="defs4"> id="defs4">
<radialGradient <radialGradient
...@@ -175,9 +175,9 @@ ...@@ -175,9 +175,9 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="0.7" inkscape:zoom="2.8"
inkscape:cx="251.20165" inkscape:cx="-12.108973"
inkscape:cy="360.64339" inkscape:cy="61.791231"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="false" showgrid="false"
...@@ -206,9 +206,9 @@ ...@@ -206,9 +206,9 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(-222.10571,-761.33936)"> transform="translate(-237.10206,-772.54371)">
<g <g
transform="matrix(-1,0,0,-1,283.79321,807.43311)" transform="matrix(-0.51373694,0,0,-0.51373694,268.79321,796.22377)"
id="g5721" id="g5721"
i:layer="yes" i:layer="yes"
i:dimmedPercent="50" i:dimmedPercent="50"
......
...@@ -12,10 +12,11 @@ kat = finesse.kat() ...@@ -12,10 +12,11 @@ kat = finesse.kat()
laser(kat,'l1','n1',1) laser(kat,'l1','n1',1)
space(kat,'s1','n1','n2',1) space(kat,'s1','n1','n2',1)
mirror(kat,'m1','n2','n3',0.8,0.2) mirror(kat,'m1','n2','n3',R=0.8,T=0.2)
space(kat,'s2','n3','n4',1) space(kat,'s2','n3','n4',L=1)
mirror(kat,'m2','n4','n5',0.7,0.3) mirror(kat,'m2','n4','n5',R=0.7,T=0.3)
cavity(kat, 'cav1','m1','n3','m2','n4') cavity(kat, 'cav1','m1','n3','m2','n4')
space(kat,'s3','n5','n6',L=1)
photodiode(kat,'pd_cav','n4') photodiode(kat,'pd_cav','n4')
photodiode(kat,'pd_ref','n2') photodiode(kat,'pd_ref','n2')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment