1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#!/usr/bin/env python3
# Python module to feed Asymptote with commands
# (modified from gnuplot.py)
from subprocess import *
class asy:
def __init__(self):
self.session = Popen(['asy','-quiet','-inpipe=0','-outpipe=2'],stdin=PIPE)
self.help()
def send(self, cmd):
self.session.stdin.write(bytes(cmd+'\n','utf-8'))
self.session.stdin.flush()
def size(self, size):
self.send("size(%d);" % size)
def draw(self, str):
self.send("draw(%s);" % str)
def fill(self, str):
self.send("fill(%s);" % str)
def clip(self, str):
self.send("clip(%s);" % str)
def label(self, str):
self.send("label(%s);" % str)
def shipout(self, str):
self.send("shipout(\"%s\");" % str)
def erase(self):
self.send("erase();")
def help(self):
print("Asymptote session is open. Available methods are:")
print(" help(), size(int), draw(str), fill(str), clip(str), label(str), shipout(str), send(str), erase()")
def __del__(self):
print("closing Asymptote session...")
self.send('quit');
self.session.stdin.close();
self.session.wait()
if __name__=="__main__":
g=asy()
g.size(200)
g.draw('unitcircle')
g.send('draw(unitsquare)')
g.fill('unitsquare,blue')
g.clip('unitcircle')
g.label('"$O$",(0,0),SW')
input('press ENTER to continue')
g.erase()
del g
|