blob: e1c4ac5f8d4065079c8aef9ee308c533db438cf8 (
about) (
plain)
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
|
#include "glob.hh"
#include "string.hh"
#include "molecule.hh"
#include "symbol.hh"
Box
Atom::extent() const
{
Box b( sym->dim);
b.translate(off);
return b;
}
Atom::Atom(const Symbol * s)
{
sym=s;
}
String
Atom::TeXstring() const
{
// whugh.. Hard coded...
String s("\\raise");
s+= String(off.y * VERT_TO_PT)+"pt\\hbox to 0pt{\\kern ";
s+= String(off.x * HOR_TO_PT) + "pt";
s+= sym->tex + "\\hss}";
return s;
}
/****************************************************************/
String
Molecule::TeXstring() const
{
String s;
for(Cursor<Atom> c(ats); c.ok(); c++)
s+=(*c).TeXstring();
return s;
}
Box
Molecule::extent() const
{
Box b;
for(Cursor<Atom> c(ats); c.ok(); c++)
b.unite((*c).extent());
return b;
}
void
Molecule::translate(Offset o)
{
for(Cursor<Atom> c(ats); c.ok(); c++)
(*c).translate(o);
}
void
Molecule::add(const Molecule &m)
{
for (Cursor<Atom> c(m.ats); c.ok(); c++) {
Atom a(c);
ats.bottom().add(a);
}
}
void
Molecule::add_right(const Molecule &m)
{
Real xof=extent().x.max - m.extent().x.min;
Molecule toadd(m);
toadd.translate(Offset(xof, 0.0));
add(toadd);
}
void
Molecule::add_left(const Molecule &m)
{
Real xof=extent().x.min - m.extent().x.max;
Molecule toadd(m);
toadd.translate(Offset(xof, 0.0));
add(toadd);
}
void
Molecule::add_top(const Molecule &m)
{
Real yof=extent().y.max - m.extent().y.min;
Molecule toadd(m);
toadd.translate(Offset(0,yof));
add(toadd);
}
void
Molecule::add_bot(const Molecule &m)
{
Real yof=extent().y.min- m.extent().y.max;
Molecule toadd(m);
toadd.translate(Offset(0,yof));
add(toadd);
}
|