source: osgVisual/include/dataIO/visual_dataIO.h @ 157

Last change on this file since 157 was 157, checked in by Torben Dannhauer, 13 years ago
File size: 6.2 KB
Line 
1#pragma once
2/* -*-c++-*- osgVisual - Copyright (C) 2009-2010 Torben Dannhauer
3 *
4 * This library is based on OpenSceneGraph, open source and may be redistributed and/or modified under
5 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
6 * (at your option) any later version.  The full license is in LICENSE file
7 * included with this distribution, and on the openscenegraph.org website.
8 *
9 * osgVisual requires for some proprietary modules a license from the correspondig manufacturer.
10 * You have to aquire licenses for all used proprietary modules.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * OpenSceneGraph Public License for more details.
16*/
17
18#include <osg/Notify>
19#include <osg/Referenced>
20#include <osg/ArgumentParser>
21
22#include <osgViewer/Viewer>
23
24// Cluster
25#ifdef USE_CLUSTER_ASIO_TCP_IOSTREAM
26        #include <dataIO_clusterAsioTcpIostream.h>
27#endif
28#ifdef USE_CLUSTER_ENET
29        #include <dataIO_clusterENet.h>
30#endif
31#ifdef USE_CLUSTER_DUMMY
32        #include <dataIO_clusterDummy.h>
33#endif
34
35
36//ExtLink
37#ifdef USE_EXTLINK_DUMMY
38        #include <dataIO_extLinkDummy.h>
39#endif
40#ifdef USE_EXTLINK_VCL
41        #include <dataIO_extLinkVCL.h>
42#endif
43
44
45// Slot and transportContainer definitions
46#include <dataIO_slot.h>
47#include <dataIO_transportContainer.h>
48
49// XML Parser
50#include <stdio.h>
51#include <libxml/parser.h>
52#include <libxml/tree.h>
53
54// C++ stl libraries
55#include <vector>
56
57
58
59
60namespace osgVisual {
61
62/**
63 * \brief Zentrale Klasse für Datenanbindung des Sichtsystemnodes an das Gesamtsichtsystem bzw. dem Simulator.
64 *
65 * Damit nur eine Klasse instantiiert werden kann, ist diese Klasse als Singleton realisiert.
66 *
67 *
68 * @author Torben Dannhauer
69 * @date  Nov 2009
70 */ 
71class visual_dataIO : public osg::Referenced
72{
73        #include <leakDetection.h>
74private:
75        class dataIO_eventCallback : public osg::NodeCallback
76        {
77        public: 
78                /**
79                 * \brief Constructor, for setting the member variables.
80                 *
81                 * @param viewer_ : Pointer to the viewer.
82                 * @param sceneCamera_ : Pointer to the scene camera.
83                 */ 
84                dataIO_eventCallback(visual_dataIO* dataIO_):dataIO(dataIO_){};
85
86                /**
87                 * \brief This function is execute d as callback during update traversal.
88                 *
89                 */ 
90                virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
91        private:
92                visual_dataIO* dataIO;
93        };
94        osg::ref_ptr<dataIO_eventCallback> eventCallback;
95
96        class dataIO_finalDrawCallback : public osg::Camera::DrawCallback
97        {
98        public:
99                /**
100                 * \brief Constructor
101                 *
102                 */ 
103                dataIO_finalDrawCallback(visual_dataIO* dataIO_):dataIO(dataIO_){};
104               
105                /**
106                 * \brief Operator executed at callback
107                 *
108                 */ 
109                virtual void operator () (const osg::Camera& camera) const;
110        private:
111                visual_dataIO* dataIO;
112        };
113
114        osg::ref_ptr<dataIO_finalDrawCallback> finalDrawCallback;
115
116        /**
117         * \brief Constructor: It is private to prevent creating instances via ptr* = new ..().
118         *
119         */ 
120        visual_dataIO();
121
122        /**
123         * \brief Copy-Constuctor: It is private to prevent getting instances via copying dataIO instance.
124         *
125         * @param cc : Instance to copy from.
126         */ 
127        visual_dataIO(const visual_dataIO& cc);
128
129        /**
130         * \brief This function parses the XML config file for dataIO relevant parameters.
131         *
132         * @return : True if parsing was successful.
133         */ 
134        bool processXMLConfiguration(); 
135
136        /**
137         * \brief Todo: required?
138         *
139         * @return
140         */ 
141        osg::Matrixd calcViewMatrix();
142
143        /**
144         * Pointer to the base class of the extLink implementation.
145         */ 
146        osg::ref_ptr<dataIO_extLink> extLink;
147
148        /**
149         * Pointer to the base class of the cluster implementation.
150         */ 
151        osg::ref_ptr<dataIO_cluster> cluster;
152
153        /**
154         * Referenced pointer to the applications viewer.
155         */ 
156        osg::ref_ptr<osgViewer::Viewer> viewer;
157
158        /**
159         * Referenced pointer transport contained user to transport the set of all slots to all rendering machines.
160         */ 
161        osg::ref_ptr<osgVisual::dataIO_transportContainer> slotContainer;
162
163        /**
164         * List of SLOT variables dataIO provides.
165         */ 
166        std::vector<dataIO_slot*> dataSlots;
167
168        /**
169         * Flag to indicate if dataIO is initialized.
170         */ 
171        bool initialized;
172
173        /**
174         * The eventCallback-class is friend to be able to work with all dataIO members without setters/getters.
175         */ 
176        friend class dataIO_eventCallback;
177
178        /**
179         *  The FinalDrawCallback-class is friend to be able to work with all dataIO members without setters/getters.
180         */ 
181        friend class dataIO_finalDrawCallback;
182
183public:
184        /**
185         * \brief Public destructor to allow singleton cleanup from extern
186         *
187         */ 
188        ~visual_dataIO();
189
190        /**
191         * \brief This function returns an pointer to the singleton instalce of dataIO. If now instance exist, it will be instantiated silently.
192         *
193         * After instantiation, dataIO still needs to bei initiialized to configure working mode etc!
194         *
195         * @return : Pointer to the instance.
196         */ 
197        static visual_dataIO* getInstance();
198
199        void init(osgViewer::Viewer* viewer_,osg::ArgumentParser& arguments_, std::string configFileName);
200        void shutdown();
201        bool isMaster(){if (clusterMode==osgVisual::dataIO_cluster::MASTER) return true; else return false;};
202        bool isSlave(){if (clusterMode==osgVisual::dataIO_cluster::SLAVE) return true; else return false;};
203        bool isStandalone(){if (clusterMode==osgVisual::dataIO_cluster::STANDALONE) return true; else return false;};
204
205// SLOT Access functions
206        void* getSlotPointer(std::string slotName_, osgVisual::dataIO_slot::dataDirection direction_, osgVisual::dataIO_slot::varType variableTyp_ );
207        double getSlotDataAsDouble(std::string variableName_, osgVisual::dataIO_slot::dataDirection direction_ );
208        std::string getSlotDataAsString(std::string variableName_, osgVisual::dataIO_slot::dataDirection direction_ );
209        osgVisual::dataIO_slot* setSlotData(std::string variableName_, osgVisual::dataIO_slot::dataDirection direction_, std::string sValue_ );
210        osgVisual::dataIO_slot* setSlotData(std::string variableName_, osgVisual::dataIO_slot::dataDirection direction_, double value_ );
211
212        int getSlotNum() {return dataSlots.size();}
213
214        osgVisual::dataIO_cluster::clustermode clusterMode;
215};
216
217
218} // END namespace osgVisual
Note: See TracBrowser for help on using the repository browser.