#include "box.hh"
#include "axes.hh"
#include "direction.hh"
-#include "protected-scm.hh"
#include "cons.hh"
//#define ATOM_SMOB
/** a group of individually translated symbols. You can add molecules
- to the top, to the right, etc. */
+ to the top, to the right, etc.
+
+ Dimension behavior:
+
+ Empty molecules have empty dimensions. If add_at_edge is used to
+ init the molecule, we assume that
+ DIMENSIONS = (Interval(0,0),Interval(0,0)
+
+*/
class Molecule {
#ifdef ATOM_SMOB
SCM atom_list_;
Cons<Atom> *atom_list_;
#endif
friend class Paper_outputter;
+
public:
Box dim_;
Molecule();
~Molecule();
- void add_at_edge (Axis a, Direction d, const Molecule &m, Real padding);
+ /**
+ Set dimensions to empty, or to (Interval(0,0),Interval(0,0) */
+ void set_empty (bool);
+ void add_at_edge (Axis a, Direction d, const Molecule &m, Real padding);
+ void add_atom (Atom const *a);
void add_molecule (Molecule const &m);
void translate (Offset);
- void do_center (Axis);
+
+ /**
+ align D direction in axis A.
+
+ If D == CENTER, then move the dimension(A).center() to (0,0)
+
+ Else, move so dimension(A)[D] == 0.0
+
+ */
+ void align_to (Axis a, Direction d);
void translate_axis (Real,Axis);
+
- void add_atom (Atom const *a);
/// how big is #this#?
Box extent() const;
Interval extent (Axis) const;