export to tikz
This commit is contained in:
parent
28355777e1
commit
57fb407dea
188
src/colors.py
Normal file
188
src/colors.py
Normal file
@ -0,0 +1,188 @@
|
||||
# find named color that is closest to rgb values
|
||||
def closest_color(rgb,names):
|
||||
name=""
|
||||
mindist=float('inf')
|
||||
for i in range(len(names)):
|
||||
dist=(rgb[0]-names[i][1])**2+(rgb[1]-names[i][2])**2+(rgb[2]-names[i][3])**2
|
||||
if dist<mindist:
|
||||
name=names[i][0]
|
||||
mindist=dist
|
||||
return name
|
||||
|
||||
|
||||
# color names
|
||||
## This is adapted from the LaTeX xcolor package
|
||||
## which is licensed under the LaTeX Project Public License v1.3c
|
||||
## by Dr. Uwe Kern
|
||||
##
|
||||
xcolor_names=[#
|
||||
["red",1,0,0],#
|
||||
["green",0,1,0],#
|
||||
["blue",0,0,1],#
|
||||
["brown",.75,.5,.25],#
|
||||
["lime",.75,1,0],#
|
||||
["orange",1,.5,0],#
|
||||
["pink",1,.75,.75],#
|
||||
["purple",.75,0,.25],#
|
||||
["teal",0,.5,.5],#
|
||||
["violet",.5,0,.5],#
|
||||
["cyan",0,1,1],#
|
||||
["magenta",1,0,1],#
|
||||
["yellow",1,1,0],#
|
||||
["olive",.5,.5,0],#
|
||||
["black",0,0,0],#
|
||||
["darkgray",.25,.25,.25],#
|
||||
["gray",.5,.5,.5],#
|
||||
["lightgray",.75,.75,.75],#
|
||||
["white",1,1,1],#
|
||||
##
|
||||
["AliceBlue",.94,.972,1],#
|
||||
["AntiqueWhite",.98,.92,.844],#
|
||||
["Aquamarine",.498,1,.83],#
|
||||
["Azure",.94,1,1],#
|
||||
["Beige",.96,.96,.864],#
|
||||
["Bisque",1,.894,.77],#
|
||||
["Black",0,0,0],#
|
||||
["BlanchedAlmond",1,.92,.804],#
|
||||
["Blue",0,0,1],#
|
||||
["BlueViolet",.54,.17,.888],#
|
||||
["Brown",.648,.165,.165],#
|
||||
["BurlyWood",.87,.72,.53],#
|
||||
["CadetBlue",.372,.62,.628],#
|
||||
["Chartreuse",.498,1,0],#
|
||||
["Chocolate",.824,.41,.116],#
|
||||
["Coral",1,.498,.312],#
|
||||
["CornflowerBlue",.392,.585,.93],#
|
||||
["Cornsilk",1,.972,.864],#
|
||||
["Crimson",.864,.08,.235],#
|
||||
["Cyan",0,1,1],#
|
||||
["DarkBlue",0,0,.545],#
|
||||
["DarkCyan",0,.545,.545],#
|
||||
["DarkGoldenrod",.72,.525,.044],#
|
||||
["DarkGray",.664,.664,.664],#
|
||||
["DarkGreen",0,.392,0],#
|
||||
["DarkGrey",.664,.664,.664],#
|
||||
["DarkKhaki",.74,.716,.42],#
|
||||
["DarkMagenta",.545,0,.545],#
|
||||
["DarkOliveGreen",.332,.42,.185],#
|
||||
["DarkOrange",1,.55,0],#
|
||||
["DarkOrchid",.6,.196,.8],#
|
||||
["DarkRed",.545,0,0],#
|
||||
["DarkSalmon",.912,.59,.48],#
|
||||
["DarkSeaGreen",.56,.736,.56],#
|
||||
["DarkSlateBlue",.284,.24,.545],#
|
||||
["DarkSlateGray",.185,.31,.31],#
|
||||
["DarkSlateGrey",.185,.31,.31],#
|
||||
["DarkTurquoise",0,.808,.82],#
|
||||
["DarkViolet",.58,0,.828],#
|
||||
["DeepPink",1,.08,.576],#
|
||||
["DeepSkyBlue",0,.75,1],#
|
||||
["DimGray",.41,.41,.41],#
|
||||
["DimGrey",.41,.41,.41],#
|
||||
["DodgerBlue",.116,.565,1],#
|
||||
["FireBrick",.698,.132,.132],#
|
||||
["FloralWhite",1,.98,.94],#
|
||||
["ForestGreen",.132,.545,.132],#
|
||||
["Gainsboro",.864,.864,.864],#
|
||||
["GhostWhite",.972,.972,1],#
|
||||
["Gold",1,.844,0],#
|
||||
["Goldenrod",.855,.648,.125],#
|
||||
["Gray",.5,.5,.5],#
|
||||
["Green",0,.5,0],#
|
||||
["GreenYellow",.68,1,.185],#
|
||||
["Grey",.5,.5,.5],#
|
||||
["Honeydew",.94,1,.94],#
|
||||
["HotPink",1,.41,.705],#
|
||||
["IndianRed",.804,.36,.36],#
|
||||
["Indigo",.294,0,.51],#
|
||||
["Ivory",1,1,.94],#
|
||||
["Khaki",.94,.9,.55],#
|
||||
["Lavender",.9,.9,.98],#
|
||||
["LavenderBlush",1,.94,.96],#
|
||||
["LawnGreen",.488,.99,0],#
|
||||
["LemonChiffon",1,.98,.804],#
|
||||
["LightBlue",.68,.848,.9],#
|
||||
["LightCoral",.94,.5,.5],#
|
||||
["LightCyan",.88,1,1],#
|
||||
["LightGoldenrod",.933,.867,.51],#
|
||||
["LightGoldenrodYellow",.98,.98,.824],#
|
||||
["LightGray",.828,.828,.828],#
|
||||
["LightGreen",.565,.932,.565],#
|
||||
["LightGrey",.828,.828,.828],#
|
||||
["LightPink",1,.712,.756],#
|
||||
["LightSalmon",1,.628,.48],#
|
||||
["LightSeaGreen",.125,.698,.668],#
|
||||
["LightSkyBlue",.53,.808,.98],#
|
||||
["LightSlateBlue",.518,.44,1],#
|
||||
["LightSlateGray",.468,.532,.6],#
|
||||
["LightSlateGrey",.468,.532,.6],#
|
||||
["LightSteelBlue",.69,.77,.87],#
|
||||
["LightYellow",1,1,.88],#
|
||||
["Lime",0,1,0],#
|
||||
["LimeGreen",.196,.804,.196],#
|
||||
["Linen",.98,.94,.9],#
|
||||
["Magenta",1,0,1],#
|
||||
["Maroon",.5,0,0],#
|
||||
["MediumAquamarine",.4,.804,.668],#
|
||||
["MediumBlue",0,0,.804],#
|
||||
["MediumOrchid",.73,.332,.828],#
|
||||
["MediumPurple",.576,.44,.86],#
|
||||
["MediumSeaGreen",.235,.7,.444],#
|
||||
["MediumSlateBlue",.484,.408,.932],#
|
||||
["MediumSpringGreen",0,.98,.604],#
|
||||
["MediumTurquoise",.284,.82,.8],#
|
||||
["MediumVioletRed",.78,.084,.52],#
|
||||
["MidnightBlue",.098,.098,.44],#
|
||||
["MintCream",.96,1,.98],#
|
||||
["MistyRose",1,.894,.884],#
|
||||
["Moccasin",1,.894,.71],#
|
||||
["NavajoWhite",1,.87,.68],#
|
||||
["Navy",0,0,.5],#
|
||||
["NavyBlue",0,0,.5],#
|
||||
["OldLace",.992,.96,.9],#
|
||||
["Olive",.5,.5,0],#
|
||||
["OliveDrab",.42,.556,.136],#
|
||||
["Orange",1,.648,0],#
|
||||
["OrangeRed",1,.27,0],#
|
||||
["Orchid",.855,.44,.84],#
|
||||
["PaleGoldenrod",.932,.91,.668],#
|
||||
["PaleGreen",.596,.985,.596],#
|
||||
["PaleTurquoise",.688,.932,.932],#
|
||||
["PaleVioletRed",.86,.44,.576],#
|
||||
["PapayaWhip",1,.936,.835],#
|
||||
["PeachPuff",1,.855,.725],#
|
||||
["Peru",.804,.52,.248],#
|
||||
["Pink",1,.752,.796],#
|
||||
["Plum",.868,.628,.868],#
|
||||
["PowderBlue",.69,.88,.9],#
|
||||
["Purple",.5,0,.5],#
|
||||
["Red",1,0,0],#
|
||||
["RosyBrown",.736,.56,.56],#
|
||||
["RoyalBlue",.255,.41,.884],#
|
||||
["SaddleBrown",.545,.27,.075],#
|
||||
["Salmon",.98,.5,.448],#
|
||||
["SandyBrown",.956,.644,.376],#
|
||||
["SeaGreen",.18,.545,.34],#
|
||||
["Seashell",1,.96,.932],#
|
||||
["Sienna",.628,.32,.176],#
|
||||
["Silver",.752,.752,.752],#
|
||||
["SkyBlue",.53,.808,.92],#
|
||||
["SlateBlue",.415,.352,.804],#
|
||||
["SlateGray",.44,.5,.565],#
|
||||
["SlateGrey",.44,.5,.565],#
|
||||
["Snow",1,.98,.98],#
|
||||
["SpringGreen",0,1,.498],#
|
||||
["SteelBlue",.275,.51,.705],#
|
||||
["Tan",.824,.705,.55],#
|
||||
["Teal",0,.5,.5],#
|
||||
["Thistle",.848,.75,.848],#
|
||||
["Tomato",1,.39,.28],#
|
||||
["Turquoise",.25,.88,.815],#
|
||||
["Violet",.932,.51,.932],#
|
||||
["VioletRed",.816,.125,.565],#
|
||||
["Wheat",.96,.87,.7],#
|
||||
["White",1,1,1],#
|
||||
["WhiteSmoke",.96,.96,.96],#
|
||||
["Yellow",1,1,0],#
|
||||
["YellowGreen",.604,.804,.196]#
|
||||
]
|
@ -259,7 +259,7 @@ class Command_prompt(Label):
|
||||
cursor=self.parse_argv()
|
||||
|
||||
# write and edit commands
|
||||
if self.argv[0]=="w" or self.argv[0]=="e":
|
||||
if self.argv[0]=="w" or self.argv[0]=="e" or self.argv[0]=="export":
|
||||
# check that cursor is in first argument
|
||||
if cursor[0]==1:
|
||||
# complete filesystem path
|
||||
@ -307,6 +307,9 @@ class Command_prompt(Label):
|
||||
# edit file
|
||||
if self.argv[0]=="e":
|
||||
self.run_edit(self.argv)
|
||||
# export to file
|
||||
if self.argv[0]=="export":
|
||||
self.run_export(self.argv)
|
||||
# quit
|
||||
if self.argv[0]=="q" or self.argv=="wq":
|
||||
self.app.stop()
|
||||
@ -461,3 +464,21 @@ class Command_prompt(Label):
|
||||
self.app.openfile=argv[1]
|
||||
# update status bar
|
||||
self.app.status_bar.draw()
|
||||
|
||||
# export to file in Tikz format
|
||||
def run_export(self,argv):
|
||||
if len(argv)>2:
|
||||
self.message="error: could not open file: too many arguments -- usage: ':export <path to file>'"
|
||||
return
|
||||
elif len(argv)==1:
|
||||
self.message="error: could not open file: no argument found -- usage: ':export <path to file>'"
|
||||
return
|
||||
|
||||
# check that the file can be edited
|
||||
(ret,self.message)=filecheck.check_edit(argv[1])
|
||||
# error
|
||||
if ret<0:
|
||||
return
|
||||
|
||||
# export
|
||||
self.app.painter.export_tikz(argv[1])
|
||||
|
@ -10,6 +10,8 @@ from polyomino import Square_element
|
||||
|
||||
from tools import remove_fromlist
|
||||
|
||||
import colors
|
||||
|
||||
# painter class
|
||||
class Painter(Widget):
|
||||
|
||||
@ -451,6 +453,36 @@ class Painter(Widget):
|
||||
ff.close()
|
||||
self.draw()
|
||||
|
||||
# export to tikz
|
||||
def export_tikz(self,file):
|
||||
# abort if no particles
|
||||
if len(self.particles)==0:
|
||||
return
|
||||
ff=open(file,"w")
|
||||
|
||||
# header
|
||||
ff.write("\documentclass{standalone}\n")
|
||||
ff.write("\n")
|
||||
ff.write("\\usepackage[svgnames]{xcolor}\n")
|
||||
ff.write("\\usepackage{tikz}\n")
|
||||
ff.write("\\usepackage{jam}\n")
|
||||
ff.write("\n")
|
||||
ff.write("\\begin{document}\n")
|
||||
ff.write("\\begin{tikzpicture}\n")
|
||||
ff.write("\n")
|
||||
|
||||
# write position of particles
|
||||
for particle in self.particles:
|
||||
if type(particle)==Cross:
|
||||
ff.write("\cross{"+colors.closest_color(particle.color,colors.xcolor_names)+"}")
|
||||
ff.write("{{({:05.2f},{:05.2f})}};\n".format(particle.squares[0].pos.x-self.particles[0].squares[0].pos.x,particle.squares[0].pos.y-self.particles[0].squares[0].pos.y))
|
||||
|
||||
ff.write("\\end{tikzpicture}\n")
|
||||
ff.write("\\end{document}\n")
|
||||
ff.write("\n")
|
||||
|
||||
ff.close()
|
||||
|
||||
# set zoom level
|
||||
def set_zoom(self,level):
|
||||
Square_element.size=level*50
|
||||
|
Loading…
Reference in New Issue
Block a user