File: labelModel.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 239,848 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 93
file content (110 lines) | stat: -rw-r--r-- 2,273 bytes parent folder | download | duplicates (6)
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
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//

#include <BALL/VIEW/MODELS/labelModel.h>
#include <BALL/VIEW/PRIMITIVES/label.h>
#include <BALL/KERNEL/atom.h>
#include <BALL/KERNEL/residue.h>

using namespace std;

namespace BALL
{
	namespace VIEW
	{

		LabelModel::LabelModel()
			: ModelProcessor(),
				font_("Helvetica", 12),
				color_(),
				mode_(ALL_ITEMS),
				nr_objects_(0),
				center_(),
				center_processor_()
		{
		}

		LabelModel::LabelModel(const LabelModel& model)
			: ModelProcessor(model),
				font_(model.font_),
				color_(model.color_),
				mode_(model.mode_),
				nr_objects_(0),
				center_(),
				center_processor_()
		{
		}

		LabelModel::~LabelModel()
		{
			#ifdef BALL_VIEW_DEBUG
				Log.error() << "Destructing object " << this << " of class LabelModel" << std::endl;
			#endif 
		}

		Processor::Result LabelModel::operator() (Composite &composite)
		{
			if (mode_ == ONE_LABEL)
			{
                if (RTTI::isKindOf<Atom>(&composite))
				{
					center_ += (dynamic_cast<Atom*>(&composite))->getPosition();
					nr_objects_ ++;
				}

				return Processor::CONTINUE;
			}


			// create a label for this composite?
			bool do_it = false;

			if (mode_ == ALL_ITEMS)
			{
				do_it = true;
			}
			else if (mode_ == ALL_ATOMS)
			{
                do_it = RTTI::isKindOf<Atom>(&composite);
			}
			else if (mode_ == ALL_RESIDUES)
			{
                do_it = RTTI::isKindOf<Residue>(&composite);
			}

			if (!do_it) return Processor::CONTINUE;

			center_processor_.start();
			composite.apply(center_processor_);
			// create Label and Representation
			Label* label = new Label;
			label->setText(text_);
			label->setColor(color_);
			label->setVertex(center_processor_.getCenter());
			label->setFont(font_);
			label->setComposite(&composite);
			geometric_objects_.push_back(label);

			return Processor::CONTINUE;
		}

		bool LabelModel::createGeometricObjects() 
		{
			if (mode_ != ONE_LABEL || nr_objects_ == 0) return true;

			Label* label = new Label;
			label->setText(text_);
			label->setColor(color_);
			center_ /= nr_objects_;
			label->setVertex(center_);
			label->setFont(font_);
			geometric_objects_.push_back(label);

			nr_objects_ = 0;

			return true;
		}

	} // namespace VIEW
} // namespace BALL