Fraxinus  16.5.0-fx-rc1
An IGT application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ProbeXmlConfigParserImpl.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) 2008-2014, SINTEF Department of Medical Technology
5 All rights reserved.
6 
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9 
10 1. Redistributions of source code must retain the above copyright notice,
11  this list of conditions and the following disclaimer.
12 
13 2. Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16 
17 3. Neither the name of the copyright holder nor the names of its contributors
18  may be used to endorse or promote products derived from this software
19  without specific prior written permission.
20 
21 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 =========================================================================*/
32 
33 #ifndef PROBEXMLCONFIGPARSERIMPL_H_
34 #define PROBEXMLCONFIGPARSERIMPL_H_
35 
36 #include "cxResourceExport.h"
37 
38 #include <ProbeXmlConfigParser.h>
39 
50 class cxResource_EXPORT ProbeXmlConfigParserImpl : public ProbeXmlConfigParser
51 {
52 public:
53  ProbeXmlConfigParserImpl(QString& pathToXml);
54  virtual ~ProbeXmlConfigParserImpl();
55  virtual QString getFileName();
56  virtual void removeConfig(QString scanner, QString probe, QString rtsource, QString configId);
57  virtual void saveCurrentConfig(Configuration config);
58  virtual QStringList getScannerList();
59  virtual QStringList getProbeList(QString scanner);
60  virtual QStringList getRtSourceList(QString scanner, QString probe);
61  virtual QStringList getConfigIdList(QString scanner, QString probe, QString rtSource);
62  virtual Configuration getConfiguration(QString scanner, QString probe, QString rtsource, QString configId);
63 protected:
64  QList<QDomNode> getScannerNodes(QString scanner = "ALL");
65  QList<QDomNode> getProbeNodes(QString scanner, QString probe = "ALL");
66  QList<QDomNode> getRTSourceNodes(QString scanner, QString probe, QString rtSource="ALL");
67  QList<QDomNode> getConfigNodes(QString scanner, QString probe, QString rtsource, QString config="ALL");
68  QList<QDomNode> nodeListToListOfNodes(QDomNodeList list);
69  void addTextElement(QDomElement parent, QString element, QString text);
70 
72 };
73 
74 //------------------------------------------------------------------------------
75 /*
76 http://stackoverflow.com/questions/1709283/how-can-i-sort-a-coordinate-list-for-a-rectangle-counterclockwise
77 
78 I need to sort a coordinate list for a rectangle counterclockwise, and make the north-east corner the first coordinate.
79 
80 solution seems pretty straightforward:
81 
82 >>> import math
83 >>> mlat = sum(x['lat'] for x in l) / len(l)
84 >>> mlng = sum(x['lng'] for x in l) / len(l)
85 >>> def algo(x):
86  return (math.atan2(x['lat'] - mlat, x['lng'] - mlng) + 2 * math.pi) % 2*math.pi
87 
88 >>> l.sort(key=algo)
89 basically, algo normalises the input into the [0, 2pi] space and it would be naturally sorted "counter-clockwise".
90 */
91 
92 //------------------------------------------------------------------------------
93 class cxResource_EXPORT Angular_less
94 {
95 public:
97  {
98  }
99 
101  {
102  return angle(rhs) < angle(lhs);
103  }
104 
106  {
107  double pi = atan(1.0)*4;
108  return fmod( ( ( atan2((double)(pair1.first - mCenter.first), (double)(pair1.second - mCenter.second)) ) + 3*pi/4) , 2*pi);
109  }
111 };
112 
116 #endif /* PROBEXMLCONFIGPARSERIMPL_H_ */
< a easy-to-work-with struct for a specific xml configuration
virtual QStringList getRtSourceList(QString scanner, QString probe)=0
get a list of rt sources for that scanner/probe combo
virtual QStringList getScannerList()=0
get a list of all scanner in the xml
virtual void removeConfig(QString scanner, QString probe, QString rtsource, QString configId)=0
virtual QStringList getProbeList(QString scanner)=0
get a list of all probes for that scanner
virtual QStringList getConfigIdList(QString scanner, QString probe, QString rtSource)=0
get a list of config ids for that scanner/probe/rsource combo
ProbeXmlConfigParser::ColRowPair mCenter
Class that works as a interface to a ProbeCalibConfigs.xml.
virtual Configuration getConfiguration(QString scanner, QString probe, QString rtsource, QString configId)=0
get a easy-to-work-with struct of a specific config
Implementation of abstract interface ProbeXmlConfigParser Interface to ProbeCalibConfigs.xml.
Angular_less(ProbeXmlConfigParser::ColRowPair center)
std::pair< double, double > ColRowPair
int angle(ProbeXmlConfigParser::ColRowPair pair1)
bool operator()(const ProbeXmlConfigParser::ColRowPair &rhs, const ProbeXmlConfigParser::ColRowPair &lhs)
virtual QString getFileName()=0
Helper class for xml files used to store ssc/cx data.
virtual void saveCurrentConfig(Configuration config)=0