vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CableEditor.h
Go to the documentation of this file.
1 #ifndef _EDITOR_H_
2 #define _EDITOR_H_
3 
5 
6 #include <vrecko/PluginManager.h>
7 #include <vrecko/World.h>
9 #include <vrecko/Scene.h>
10 
11 #include <vrecko/ReaderWriter.h>
12 #include <helpers/XercesXMLUtils.h>
13 #include <xercesc/parsers/XercesDOMParser.hpp>
14 
15 #include <osg/Group>
16 #include <osg/Geode>
17 #include <osg/Geometry>
18 #include <osg/Shape>
19 #include <osg/ShapeDrawable>
20 #include <osg/Node>
21 
22 #include <osgDB/WriteFile>
23 
24 #include <iostream>
25 #include <sstream>
26 #include <vector>
27 #include <cmath>
28 #include <fstream>
29 #include <iomanip>
30 //#include <limits>
31 
33 
34 using namespace vrecko;
35 
36 namespace AP_CableEditor {
37 
38 #define CE_RADIUS_ADJUSTMENT 0.9
39 #define CE_RADIUS_RANGE_FROM 0.0
40 #define CE_RADIUS_RANGE_TO 2.0
41 
43 {
44  public:
45  CableEditor();
46  virtual ~CableEditor();
47  virtual void update(void);
48 
49  //otestuje pole cablePointers a vrati true pokud objekt je kabelem
50  bool isCable(unsigned int pEoID);
51 
52  //vytvori kruznici v ose YZ (rotace kolem X)
53  osg::ref_ptr<osg::Vec3Array> createCircle(unsigned int steps);
54 
55  protected:
56  //slouzi k nastaveni ID kabelu - pouze informacni ucely
57  unsigned int cableID;
58  unsigned int selectedCableId;
60 
61  //urcuje jestli jsme ve stavu kdy se body pridavaji pouze kliknutim leveho tlacitka mysi
63 
64  //urcuje jestli mazeme koule klikanim
66 
67  //priznak jestli vkladame bod mezi 2 existujici body - zapina vypocet polohy v update()
69 
70  //urcuje kam se bude vkladat novy bod - nastavuje se v update a vklada se v processButtonRelease
71  unsigned int insertIndex;
72  osg::Vec3f newPoint;
73 
74  //ukazatel na prave aktivni abilitu kabelu (v dobe aktivace - pokud byl vybran kabel)
76 
77  //zakladni polomer kabelu pro jemnejsi nastaveni polomeru (pricita se "jemnejsi" hodnota) a nastavuje zpatky kabelu
79 
80  //Pokud jsme ve stavu vkladani kontrolniho bodu mezi 2 body obsahuje kouli znazornujici polohu nove vkladaneho bodu
82 
83  //Umisteni souboru pro ukladani/nacitani kabelu
84  std::string cablesFile;
85  std::string shapesFile;
86  std::string objFileDest;
87 
88  std::vector<osg::ref_ptr<osg::Vec3Array>> loadedShapes;
89  std::vector<osg::ref_ptr<osg::Vec3Array>> predefinedShapes;
90 
91  std::list<EnvironmentObject *> cablePointers;
92 
93 
94  // ------------------------------ Funkce -----------------------------------------
95 
96  void Init();
97  void preInit();
98 
99  virtual bool initialize(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *parameters = NULL);
100 
101  virtual void fillDefaultInfo();
102  virtual bool activate();
103  virtual void deactivate();
104  virtual void menuItemClicked(const char* itemID);
105  virtual void menuSliderChanged(const char* sliderID, float sliderPos);
106  virtual void processButtonRelease(CABUTTONEVENT* eventData);
107 
108  bool makeMenu();
109 
110  //k zadanemu EnvironmentObjectu vrati jeho abilitu pokud je to platny EO - test pole cablePointers
111  Cable *getCableAbility(unsigned int EoId, bool notify = false);
112 
113  //Vytvori "obalku" (prazdny EnvironentObject) a abilitu Cable, kterou priradi tomuto objektu
114  EnvironmentObject *createEoAbility( bool addToWorld = true );
115 
116  //Nacte tvary ze souboru do pole loadedShapes z umisteni definovanem v XML souboru
117  void loadShapes();
118 
119  //Nacte kabely ze souboru definovanem v XML a vlozi je do sceny
120  //nesmi byt volano driv nez je nastaven ukazatel na svet
121  void loadCables();
122 
123  //Ulozi kabel do souboru definovanem v XML (soubor prida na konec, neprepisuje)
124  void saveCable( std::ofstream &outputFile, Cable *cable );
125 
126  //zapise do souboru s kabely informace jak spravne definovat kabely (soubor prepise)
127  void writeInfo( std::ofstream &outputFile );
128 
129  //reakce na smazani kabelu - odebrani ze seznamu kabelu
130  virtual int processNotification(BaseClass *sender, unsigned long notificationType,
131  void *notificationData);
132 };
133 }
134 
135 #endif