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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
"""
/*
* Header.py 1.0
* Implementa un mini lenguaje de bloques para crear
* cabeceras con fancyhdr
*
* Copyright (C) Manuel Gutierrez Algaba, 2000
*
* This program is free software; you can redistribute it and/or modif
y
* it under the terms of the GNU General Public License as published b
y
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
"""
class Bloque:
def __init__(self, y, x, inicio_y = 0, inicio_x = 0):
"""
y : altura
x : anchura
"""
self.y = y
self.x = x
self.inicio_y = inicio_y
self.inicio_x = inicio_x
self.lista_bloques=[]
self.caracteres_anyadidos = []
def genera_bloque(self):
print "\\psline{-}" + self.escribe_coordenadas(
(self.inicio_x, self.inicio_y),
(self.inicio_x, self.inicio_y + self.y),
(self.inicio_x+self.x, self.inicio_y+ self.y),
(self.inicio_x+self.x, self.inicio_y),
(self.inicio_x, self.inicio_y) )
self.genera_escritura()
for i in self.lista_bloques:
i.genera_bloque()
def escribe_coordenadas(self, *args):
dev = ""
for i in args:
dev = dev + str(i) + " "
return dev
def anyade(self, un_bloque):
self.lista_bloques.append(un_bloque)
return un_bloque
def tamanyo_x(self, factor):
return Bloque(self.y, factor * self.x, self.inicio_y, self.inicio_x)
def tamanyo_y(self, factor):
return Bloque(self.y * factor, self.x, self.inicio_y, self.inicio_x)
def lado(self, alt, long):
if alt != "inf" and alt!= "sup" and alt!="cent":
raise "Mala 'altitud'"
if long != "izq" and long!= "der" and long!="cent":
raise "Mala 'longitud'"
t = Bloque(self.y, self.x, self.inicio_y, self.inicio_x)
if alt == "sup":
t.inicio_y = self.y
if alt == "cent":
t.inicio_y = self.y / 2
if long == "der":
t.inicio_x = self.x
if long == "cent":
t.inicio_x = self.x / 2
return t
def traslada_x(self, x ):
self.inicio_x = self.inicio_x + x
for i in self.lista_bloques:
i.traslada_x(x)
def traslada_y(self, y):
self.inicio_y = self.inicio_y + y
for i in self.lista_bloques:
i.traslada_y(y)
def escribe_hacia(self, pos_x, pos_y, escribir):
"""
pos = numero fraccionario
"""
if pos_x >= 1.0 or pos_x < 0:
raise "Pos_x debe ser fraccionario y positivo"
if pos_y >= 1.0 or pos_y < 0:
raise "Pos_y debe ser fraccionario y positivo"
self.caracteres_anyadidos.append((pos_x, pos_y, escribir))
def genera_escritura(self):
for i in self.caracteres_anyadidos:
print "\\rput"+ self.escribe_coordenadas(( i[0] *( self.x - self.inicio_x) + self.inicio_x, self.inicio_y + i[1]* (self.y - self.inicio_y))) + "{" + i[2] + "}"
if __name__=='__main__':
b = Bloque(3,4)
c= b.anyade(b.lado("inf","der").tamanyo_y(0.5).tamanyo_x(3))
b.escribe_hacia(0.12, 0.1, "Alphaville")
d = b.anyade(c.lado("sup", "izq"))
b.traslada_x(-3)
b.genera_bloque()
|