OpenSceneGraph 3.6.5
Constraint
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13//osgManipulator - Copyright (C) 2007 Fugro-Jason B.V.
14
15#ifndef OSGMANIPULATOR_CONSTRAINT
16#define OSGMANIPULATOR_CONSTRAINT 1
17
18#include <osgManipulator/Export>
19
20#include <osg/observer_ptr>
21#include <osg/Node>
22#include <osg/Matrix>
23
24namespace osgManipulator {
25
26class MotionCommand;
27class TranslateInLineCommand;
28class TranslateInPlaneCommand;
29class Scale1DCommand;
30class Scale2DCommand;
31class ScaleUniformCommand;
32class Rotate3DCommand;
33
34
35class DraggerCallback : virtual public osg::Object
36{
37 public:
39 osg::Object(true) {}
40
42 osg::Object(org, copyop) {}
43
45
49 virtual bool receive(const MotionCommand&) { return false; }
50 virtual bool receive(const TranslateInLineCommand& command) { return receive((MotionCommand&)command); }
51 virtual bool receive(const TranslateInPlaneCommand& command) { return receive((MotionCommand&)command); }
52 virtual bool receive(const Scale1DCommand& command) { return receive((MotionCommand&)command); }
53 virtual bool receive(const Scale2DCommand& command) { return receive((MotionCommand&)command); }
54 virtual bool receive(const ScaleUniformCommand& command) { return receive((MotionCommand&)command); }
55 virtual bool receive(const Rotate3DCommand& command) { return receive((MotionCommand&)command); }
56};
57
58
60{
61 public:
62
63 virtual bool constrain(MotionCommand&) const { return false; }
64 virtual bool constrain(TranslateInLineCommand& command) const { return constrain((MotionCommand&)command); }
65 virtual bool constrain(TranslateInPlaneCommand& command) const { return constrain((MotionCommand&)command); }
66 virtual bool constrain(Scale1DCommand& command) const { return constrain((MotionCommand&)command); }
67 virtual bool constrain(Scale2DCommand& command) const { return constrain((MotionCommand&)command); }
68 virtual bool constrain(ScaleUniformCommand& command) const { return constrain((MotionCommand&)command); }
69 virtual bool constrain(Rotate3DCommand& command) const { return constrain((MotionCommand&)command); }
70
71protected:
72
74 Constraint(osg::Node& refNode) : _refNode(&refNode) {}
75 virtual ~Constraint() {}
76
77 osg::Node& getReferenceNode() { return *_refNode; }
78 const osg::Node& getReferenceNode() const { return *_refNode; }
79
80 const osg::Matrix& getLocalToWorld() const { return _localToWorld; }
81 const osg::Matrix& getWorldToLocal() const { return _worldToLocal; }
82
84
85 private:
86
88 mutable osg::Matrix _localToWorld;
89 mutable osg::Matrix _worldToLocal;
90};
91
96{
97 public:
98
99 GridConstraint(osg::Node& refNode, const osg::Vec3d& origin, const osg::Vec3d& spacing);
100
101 void setOrigin(const osg::Vec3d& origin) { _origin = origin; }
102 const osg::Vec3d& getOrigin() const { return _origin; }
103
104 void setSpacing(const osg::Vec3d& spacing) { _spacing = spacing; }
105 const osg::Vec3d& getSpacing() const { return _spacing; }
106
107 virtual bool constrain(TranslateInLineCommand& command) const;
108 virtual bool constrain(TranslateInPlaneCommand& command) const;
109 virtual bool constrain(Scale1DCommand& command) const;
110 virtual bool constrain(Scale2DCommand& command) const;
111 virtual bool constrain(ScaleUniformCommand& command) const;
112
113 protected:
114
115 virtual ~GridConstraint() {}
116
117 private:
118
119 osg::Vec3d _origin;
120 osg::Vec3d _spacing;
121 mutable osg::Matrix _startMatrix;
122 mutable osg::Matrix _matrix;
123};
124
125}
126
127#endif
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
Matrixd Matrix
Definition Matrix:27
The osgManipulator library is a NodeKit that extends the core scene graph to support 3D interactive m...
Definition AntiSquish:23
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Base class for all internal nodes in the scene graph.
Definition Node:72
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
Object()
Construct an object.
Definition Object:69
Smart pointer for observed objects, that automatically set pointers to them to null when they are del...
Definition observer_ptr:39
Base class for providing reference counted objects.
Definition Referenced:44
General purpose double triple for use as vertices, vectors and normals.
Definition Vec3d:30
Base class for motion commands that are generated by draggers.
Definition Command:31
Command for translating in a line.
Definition Command:105
Command for translating in a plane.
Definition Command:142
Command for 1D scaling.
Definition Command:183
Command for 2D scaling.
Definition Command:228
Command for uniform 3D scaling.
Definition Command:273
Command for rotation in 3D.
Definition Command:309
virtual bool receive(const MotionCommand &)
Receive motion commands.
Definition Constraint:49
DraggerCallback(const DraggerCallback &org, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition Constraint:41
DraggerCallback()
Definition Constraint:38
virtual bool receive(const Rotate3DCommand &command)
Definition Constraint:55
virtual bool receive(const Scale1DCommand &command)
Definition Constraint:52
virtual bool receive(const TranslateInPlaneCommand &command)
Definition Constraint:51
virtual bool receive(const TranslateInLineCommand &command)
Definition Constraint:50
virtual bool receive(const Scale2DCommand &command)
Definition Constraint:53
META_Object(osgManipulator, DraggerCallback)
virtual bool receive(const ScaleUniformCommand &command)
Definition Constraint:54
const osg::Node & getReferenceNode() const
Definition Constraint:78
Constraint(osg::Node &refNode)
Definition Constraint:74
const osg::Matrix & getWorldToLocal() const
Definition Constraint:81
virtual bool constrain(ScaleUniformCommand &command) const
Definition Constraint:68
virtual bool constrain(Rotate3DCommand &command) const
Definition Constraint:69
virtual bool constrain(Scale2DCommand &command) const
Definition Constraint:67
void computeLocalToWorldAndWorldToLocal() const
Constraint()
Definition Constraint:73
const osg::Matrix & getLocalToWorld() const
Definition Constraint:80
virtual bool constrain(Scale1DCommand &command) const
Definition Constraint:66
virtual bool constrain(TranslateInLineCommand &command) const
Definition Constraint:64
osg::Node & getReferenceNode()
Definition Constraint:77
virtual ~Constraint()
Definition Constraint:75
virtual bool constrain(MotionCommand &) const
Definition Constraint:63
virtual bool constrain(TranslateInPlaneCommand &command) const
Definition Constraint:65
const osg::Vec3d & getSpacing() const
Definition Constraint:105
GridConstraint(osg::Node &refNode, const osg::Vec3d &origin, const osg::Vec3d &spacing)
virtual bool constrain(ScaleUniformCommand &command) const
const osg::Vec3d & getOrigin() const
Definition Constraint:102
virtual bool constrain(TranslateInPlaneCommand &command) const
void setSpacing(const osg::Vec3d &spacing)
Definition Constraint:104
virtual bool constrain(Scale2DCommand &command) const
virtual ~GridConstraint()
Definition Constraint:115
virtual bool constrain(TranslateInLineCommand &command) const
void setOrigin(const osg::Vec3d &origin)
Definition Constraint:101
virtual bool constrain(Scale1DCommand &command) const
#define OSGMANIPULATOR_EXPORT
Definition Export:27

osg logo
Generated at Wed Jul 23 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.