Blame view

src/ParamOutputImpl/Plot/Scatter/XYPlotNode.cc 2.52 KB
fbe3c2bb   Benjamin Renard   First commit
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
/*
 * XYPlotNode.cc
 *
 *  Created on: Dec 6, 2013
 *      Author: amdadev
 */

#include "XYPlotNode.hh"
#include "PlotLogger.hh"
#include "PanelPlotNodeRegistry.hh"
#include "XYPlot.hh"
#include "AxesNode.hh"
#include "AdditionalObjectsNode.hh"
#include "PlotLegendNode.hh"

namespace plot {

const std::string XYPlotNode::NODENAME = XYPLOT_NODENAME;

std::string XYPlotNode::_key = PanelPlotNodeRegistry::getInstance().addElement(
		NODENAME, boost::shared_ptr<XYPlotNode>(new XYPlotNode()));

XYPlotNode::XYPlotNode() :
		AbstractPanelPlotNode() {
	getChildList()["legends"] = AMDA::XMLConfigurator::NodeCfgSPtr(
				new PlotLegendNode());
	getChildList()["params"] = AMDA::XMLConfigurator::NodeCfgSPtr(
			new XYPlotParamsNode<XYPlot>());
	getChildList()["axes"] = AMDA::XMLConfigurator::NodeCfgSPtr(new AxesNode());
	getChildList()["additionalObjects"] = AMDA::XMLConfigurator::NodeCfgSPtr(new AdditionalObjectsNode());
}

XYPlotNode::~XYPlotNode() {
}

boost::shared_ptr<PanelPlotOutput> XYPlotNode::proceed(xmlNodePtr pNode_,
		PlotOutput* plotManager_, Panel* panel_) {

	LOG4CXX_DEBUG(gLogger, "XYPlotNode::proceed");
	boost::shared_ptr<XYPlot> plot(
			new XYPlot(plotManager_->getParameterManager(),
					boost::shared_ptr<Panel>(panel_)));

	// Copy default pages values for the panel if not already specified
	if (panel_->_leftMargin == -1)
		panel_->_leftMargin = panel_->_page->_defaultXYPlotLeftMargin;
	if (panel_->_rightMargin == -1)
		panel_->_rightMargin = panel_->_page->_defaultXYPlotRightMargin;
	if (panel_->_topMargin == -1)
		panel_->_topMargin = panel_->_page->_defaultXYPlotTopMargin;
	if (panel_->_bottomMargin == -1)
		panel_->_bottomMargin = panel_->_page->_defaultXYPlotBottomMargin;

	if (panel_->_preferedWidth == -1)
		panel_->_preferedWidth = panel_->_page->_defaultXYPlotWidth;
	if (panel_->_preferedHeight == -1)
		panel_->_preferedHeight = panel_->_page->_defaultXYPlotHeight;

	// -- read isotropic attribute
	xmlChar* value;

	value = xmlGetProp(pNode_, (const xmlChar *) "isotropic");
	if (value) {
		std::string strValue((const char*) value);
		std::transform(strValue.begin(), strValue.end(), strValue.begin(),
				::tolower);
		std::istringstream is(strValue);
		bool isIsotropic;
		is >> std::boolalpha >> isIsotropic;
		plot->_isIsotropic = isIsotropic;
		xmlFree(value);
	}

	AMDA::Parameters::CfgContext context;
	context.push<PanelPlotOutput*>(plot.get());
	context.push<XYPlot*>(plot.get());
	context.push<Panel*>(panel_);
	AMDA::XMLConfigurator::NodeGrpCfg::proceed(pNode_, context);

	return plot;
}

} /* namespace plot */