OpenCOVER
coSensor.h
Go to the documentation of this file.
1/* This file is part of COVISE.
2
3 You can use it under the terms of the GNU Lesser General Public License
4 version 2.1 or later, see lgpl-2.1.txt.
5
6 * License: LGPL 2+ */
7
8#ifndef CO_SENSOR_H
9#define CO_SENSOR_H
10
24#include <util/DLinkList.h>
25#include <util/coExport.h>
26#include <osg/Vec3>
31
32namespace osg
33{
34class Node;
35class MatrixTransform;
36}
37
38class PLUGIN_UTILEXPORT coSensor
39{
40protected:
41 osg::Node *node;
42 int active; // status of the sensor, active = 1 as long as pointer intersects node
43 float threshold;
47 vrui::coCombinedButtonInteraction *interaction = nullptr;
48
49public:
50 enum
51 {
52 NONE = 0,
57 HAND
58 };
60 virtual ~coSensor();
61
62 // this method is called if intersection just started
63 // and should be overloaded
64 virtual void activate();
65
66 // should be overloaded, is called if intersection finishes
67 virtual void disactivate();
68
69 // enable intersection testing, default is enabled
70 virtual void enable();
71
72 // disable intersection testing
73 virtual void disable();
74
75 virtual int getType();
76 virtual void calcDistance(){};
77 virtual float getDistance()
78 {
79 return (sqrt(sqrDistance));
80 };
81 virtual void setThreshold(float d)
82 {
83 threshold = d * d;
84 };
85 virtual void update();
86 virtual void setButtonSensitive(int s);
87 osg::Node *getNode()
88 {
89 return node;
90 };
91};
92
93class PLUGIN_UTILEXPORT coPickSensor : public coSensor, public vrui::coAction
94{
95public:
96 osg::Vec3 hitPoint; // last hitPoint in world coordinates
97
101
102 virtual int hit(vrui::vruiHit *hit);
103 virtual void miss();
105 virtual ~coPickSensor();
106 virtual void update();
107 virtual int getType();
108};
109
110class PLUGIN_UTILEXPORT coSensorList : public covise::DLinkList<coSensor *>
111{
112public:
114 void update();
115};
116#endif
Definition: coClusterStat.h:29
Definition: coSensor.h:39
virtual void update()
virtual void disable()
float threshold
Definition: coSensor.h:43
virtual void disactivate()
@ TOUCH
Definition: coSensor.h:54
@ PICK
Definition: coSensor.h:56
@ PROXIMITY
Definition: coSensor.h:53
@ ISECT
Definition: coSensor.h:55
virtual float getDistance()
Definition: coSensor.h:77
int buttonSensitive
Definition: coSensor.h:45
coSensor(osg::Node *n, vrui::coInteraction::InteractionType type=vrui::coInteraction::ButtonA, vrui::coInteraction::InteractionPriority priority=vrui::coInteraction::Medium)
osg::Node * node
Definition: coSensor.h:41
virtual int getType()
virtual void setThreshold(float d)
Definition: coSensor.h:81
virtual void enable()
virtual ~coSensor()
int active
Definition: coSensor.h:42
virtual void setButtonSensitive(int s)
osg::Node * getNode()
Definition: coSensor.h:87
virtual void calcDistance()
Definition: coSensor.h:76
int enabled
Definition: coSensor.h:46
virtual void activate()
float sqrDistance
Definition: coSensor.h:44
Definition: coSensor.h:94
bool hitActive
Definition: coSensor.h:98
virtual int hit(vrui::vruiHit *hit)
virtual void miss()
bool hitWasActive
Definition: coSensor.h:99
virtual int getType()
virtual ~coPickSensor()
virtual void update()
coPickSensor(osg::Node *n, vrui::coInteraction::InteractionType type=vrui::coInteraction::ButtonA, vrui::coInteraction::InteractionPriority priority=vrui::coInteraction::Medium)
vrui::OSGVruiNode * vNode
Definition: coSensor.h:100
osg::Vec3 hitPoint
Definition: coSensor.h:96
Definition: coSensor.h:111
Definition: coAction.h:26
Definition: coCombinedButtonInteraction.h:22
InteractionType
Definition: coInteraction.h:45
@ ButtonA
Definition: coInteraction.h:46
InteractionPriority
Definition: coInteraction.h:34
@ Medium
Definition: coInteraction.h:38
Definition: vruiHit.h:21
Definition: OSGVruiNode.h:21