Fixes for Win32.
This commit is contained in:
parent
0ebf005ac1
commit
73094265c3
@ -149,6 +149,9 @@ Package=<4>
|
|||||||
Begin Project Dependency
|
Begin Project Dependency
|
||||||
Project_Dep_Name Core osgDB
|
Project_Dep_Name Core osgDB
|
||||||
End Project Dependency
|
End Project Dependency
|
||||||
|
Begin Project Dependency
|
||||||
|
Project_Dep_Name Core osgText
|
||||||
|
End Project Dependency
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -83,7 +83,7 @@ osg::Node* createSphereSegment()
|
|||||||
osg::DegreesToRadians(45.0f),
|
osg::DegreesToRadians(45.0f),
|
||||||
60);
|
60);
|
||||||
ss->setAllColors(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
|
ss->setAllColors(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
|
||||||
ss->setPlaneColor(osg::Vec4(0.0f,0.0f,1.0f,0.1f));
|
ss->setSideColor(osg::Vec4(0.0f,0.0f,1.0f,0.1f));
|
||||||
//ss->setDrawMask(SphereSegment::DrawMask(SphereSegment::SPOKES | SphereSegment::EDGELINE));
|
//ss->setDrawMask(SphereSegment::DrawMask(SphereSegment::SPOKES | SphereSegment::EDGELINE));
|
||||||
|
|
||||||
//ss->setUpdateCallback(new MyNodeCallback);
|
//ss->setUpdateCallback(new MyNodeCallback);
|
||||||
|
@ -33,21 +33,21 @@ class OSGSIM_EXPORT ColorRange: public ScalarsToColors
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
/** Constructor for a ColorRange
|
/** Constructor for a ColorRange
|
||||||
@param min minimum scalar value
|
@param min minimum scalar value
|
||||||
@param max maximum scalar value
|
@param max maximum scalar value
|
||||||
@param colors optional range of colors, defaulting to Red-Yellow-Green-Blue-Cyan
|
@param colors optional range of colors, defaulting to Red-Yellow-Green-Blue-Cyan
|
||||||
*/
|
*/
|
||||||
ColorRange(float min, float max, const std::vector<osg::Vec4>& colors = std::vector<osg::Vec4>());
|
ColorRange(float min, float max, const std::vector<osg::Vec4>& colors = std::vector<osg::Vec4>());
|
||||||
|
|
||||||
/** Set the range of colors. */
|
/** Set the range of colors. */
|
||||||
void setColors(const std::vector<osg::Vec4>& colors);
|
void setColors(const std::vector<osg::Vec4>& colors);
|
||||||
|
|
||||||
/** Get the color for a given scalar value. */
|
/** Get the color for a given scalar value. */
|
||||||
osg::Vec4 getColor(float scalar) const;
|
osg::Vec4 getColor(float scalar) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Default assignment and copy construction are OK.
|
// Default assignment and copy construction are OK.
|
||||||
|
|
||||||
std::vector<osg::Vec4> _colors;
|
std::vector<osg::Vec4> _colors;
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,7 @@ class OSGSIM_EXPORT LightPoint
|
|||||||
LightPoint(const osg::Vec3& position,
|
LightPoint(const osg::Vec3& position,
|
||||||
const osg::Vec4& color);
|
const osg::Vec4& color);
|
||||||
|
|
||||||
LightPoint(bool on,
|
LightPoint(bool on,
|
||||||
const osg::Vec3& position,
|
const osg::Vec3& position,
|
||||||
const osg::Vec4& color,
|
const osg::Vec4& color,
|
||||||
float intensity=1.0f,
|
float intensity=1.0f,
|
||||||
@ -55,7 +55,7 @@ class OSGSIM_EXPORT LightPoint
|
|||||||
LightPoint& operator = (const LightPoint& lp);
|
LightPoint& operator = (const LightPoint& lp);
|
||||||
|
|
||||||
|
|
||||||
bool _on;
|
bool _on;
|
||||||
osg::Vec3 _position;
|
osg::Vec3 _position;
|
||||||
osg::Vec4 _color;
|
osg::Vec4 _color;
|
||||||
float _intensity;
|
float _intensity;
|
||||||
@ -64,7 +64,7 @@ class OSGSIM_EXPORT LightPoint
|
|||||||
osg::ref_ptr<Sector> _sector;
|
osg::ref_ptr<Sector> _sector;
|
||||||
osg::ref_ptr<BlinkSequence> _blinkSequence;
|
osg::ref_ptr<BlinkSequence> _blinkSequence;
|
||||||
|
|
||||||
BlendingMode _blendingMode;
|
BlendingMode _blendingMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,9 +53,9 @@ class OSGSIM_EXPORT LightPointNode : public osg::Node
|
|||||||
void removeLightPoint(unsigned int pos);
|
void removeLightPoint(unsigned int pos);
|
||||||
|
|
||||||
|
|
||||||
LightPoint& getLightPoint(unsigned int pos) { return _lightPointList[pos]; }
|
LightPoint& getLightPoint(unsigned int pos) { return _lightPointList[pos]; }
|
||||||
|
|
||||||
const LightPoint& getLightPoint(unsigned int pos) const { return _lightPointList[pos]; }
|
const LightPoint& getLightPoint(unsigned int pos) const { return _lightPointList[pos]; }
|
||||||
|
|
||||||
|
|
||||||
void setLightPointList(const LightPointList& lpl) { _lightPointList=lpl; }
|
void setLightPointList(const LightPointList& lpl) { _lightPointList=lpl; }
|
||||||
|
@ -33,7 +33,7 @@ In summary, the main configurables on the ScalarBar are:
|
|||||||
|
|
||||||
-# The range of scalars represented by the bar, and the colors
|
-# The range of scalars represented by the bar, and the colors
|
||||||
corresponding to this range - these are specified by the
|
corresponding to this range - these are specified by the
|
||||||
ScalarsToColors object.
|
ScalarsToColors object.
|
||||||
-# The number of colors used when rendering the bar geometry -
|
-# The number of colors used when rendering the bar geometry -
|
||||||
this may be thought of as the bar 'density'.
|
this may be thought of as the bar 'density'.
|
||||||
-# The number of text labels to be used when displaying the bar.
|
-# The number of text labels to be used when displaying the bar.
|
||||||
@ -48,167 +48,167 @@ public:
|
|||||||
/** ScalarBar orientation specification. */
|
/** ScalarBar orientation specification. */
|
||||||
enum Orientation{
|
enum Orientation{
|
||||||
HORIZONTAL, ///< a horizontally ascending scalar bar (x-axis)
|
HORIZONTAL, ///< a horizontally ascending scalar bar (x-axis)
|
||||||
VERTICAL ///< a vertically ascending scalar bar (y-axis)
|
VERTICAL ///< a vertically ascending scalar bar (y-axis)
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Users may provide their own ScalarPrinter by deriving from this base class and
|
Users may provide their own ScalarPrinter by deriving from this base class and
|
||||||
overriding the printScalar() method. Users may map the scalar float passed in
|
overriding the printScalar() method. Users may map the scalar float passed in
|
||||||
to any string they wish.
|
to any string they wish.
|
||||||
*/
|
*/
|
||||||
struct ScalarPrinter: public osg::Referenced
|
struct ScalarPrinter: public osg::Referenced
|
||||||
{
|
{
|
||||||
virtual std::string printScalar(float scalar);
|
virtual std::string printScalar(float scalar);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
TextProperties allows users to specify a number of properties for the
|
TextProperties allows users to specify a number of properties for the
|
||||||
text used to display the labels & title on the ScalarBar. Specifiying a character
|
text used to display the labels & title on the ScalarBar. Specifiying a character
|
||||||
size of 0 will cause the ScalarBar to estimate an appropriate size. Note that
|
size of 0 will cause the ScalarBar to estimate an appropriate size. Note that
|
||||||
the attributes are public, and may be set directly.
|
the attributes are public, and may be set directly.
|
||||||
*/
|
*/
|
||||||
struct TextProperties
|
struct TextProperties
|
||||||
{
|
{
|
||||||
std::string _fontFile;
|
std::string _fontFile;
|
||||||
std::pair<int,int> _fontResolution;
|
std::pair<int,int> _fontResolution;
|
||||||
int _characterSize;
|
int _characterSize;
|
||||||
osg::Vec4 _color;
|
osg::Vec4 _color;
|
||||||
|
|
||||||
TextProperties():
|
TextProperties():
|
||||||
_fontFile("fonts/arial.ttf"),
|
_fontFile("fonts/arial.ttf"),
|
||||||
_fontResolution(40,40),
|
_fontResolution(40,40),
|
||||||
_characterSize(0),
|
_characterSize(0),
|
||||||
_color(1.0f,1.0f,1.0f,1.0f)
|
_color(1.0f,1.0f,1.0f,1.0f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Default constructor. */
|
/** Default constructor. */
|
||||||
ScalarBar(): osg::Geode(),
|
ScalarBar(): osg::Geode(),
|
||||||
_numColors(256),
|
_numColors(256),
|
||||||
_numLabels(11),
|
_numLabels(11),
|
||||||
_stc(new ColorRange(0.0f,1.0f)),
|
_stc(new ColorRange(0.0f,1.0f)),
|
||||||
_title("Scalar Bar"),
|
_title("Scalar Bar"),
|
||||||
_orientation(HORIZONTAL),
|
_orientation(HORIZONTAL),
|
||||||
_aspectRatio(0.03),
|
_aspectRatio(0.03),
|
||||||
_sp(new ScalarPrinter)
|
_sp(new ScalarPrinter)
|
||||||
{
|
{
|
||||||
createDrawables();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Construct a ScalarBar with the supplied parameters.
|
|
||||||
@param numColors Specify the number of colors in the scalar bar. Color
|
|
||||||
interpolation occurs where necessary.
|
|
||||||
@param stc The ScalarsToColors defining the range of scalars
|
|
||||||
and the colors they map to.
|
|
||||||
@param title The title to be used when displaying the ScalarBar.
|
|
||||||
Specify "" for no title.
|
|
||||||
@param orientation The orientation of the ScalarBar. @see Orientation.
|
|
||||||
@param apectRatio The aspect ration (y/x) for the displayed bar. Bear in mind you
|
|
||||||
may want to change this if you change the orientation.
|
|
||||||
@param sp A ScalarPrinter object for the ScalarBar. For every displayed
|
|
||||||
ScalarBar label, the scalar value will be passed to the
|
|
||||||
ScalarPrinter object to turn it into a string. Users may
|
|
||||||
override the default ScalarPrinter object to map scalars to
|
|
||||||
whatever strings they wish. @see ScalarPrinter
|
|
||||||
*/
|
|
||||||
ScalarBar(int numColors, int numLabels, ScalarsToColors* stc,
|
|
||||||
const std::string& title,
|
|
||||||
Orientation orientation = HORIZONTAL,
|
|
||||||
float aspectRatio=0.25,
|
|
||||||
ScalarPrinter* sp=new ScalarPrinter):
|
|
||||||
osg::Geode(),
|
|
||||||
_numColors(numColors),
|
|
||||||
_numLabels(numLabels),
|
|
||||||
_stc(stc),
|
|
||||||
_title(title),
|
|
||||||
_orientation(orientation),
|
|
||||||
_aspectRatio(aspectRatio),
|
|
||||||
_sp(sp)
|
|
||||||
{
|
|
||||||
createDrawables();
|
createDrawables();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy constructor */
|
/**
|
||||||
ScalarBar(const ScalarBar& rhs, const osg::CopyOp& co): osg::Geode(rhs,co),
|
Construct a ScalarBar with the supplied parameters.
|
||||||
_numColors(rhs._numColors),
|
@param numColors Specify the number of colors in the scalar bar. Color
|
||||||
_numLabels(rhs._numLabels),
|
interpolation occurs where necessary.
|
||||||
_stc(rhs._stc), // Consider clone for deep copy?
|
@param stc The ScalarsToColors defining the range of scalars
|
||||||
_title(rhs._title),
|
and the colors they map to.
|
||||||
_orientation(rhs._orientation),
|
@param title The title to be used when displaying the ScalarBar.
|
||||||
_aspectRatio(rhs._aspectRatio),
|
Specify "" for no title.
|
||||||
_sp(rhs._sp), // Consider clone for deep copy?
|
@param orientation The orientation of the ScalarBar. @see Orientation.
|
||||||
_textProperties(rhs._textProperties)
|
@param apectRatio The aspect ration (y/x) for the displayed bar. Bear in mind you
|
||||||
{
|
may want to change this if you change the orientation.
|
||||||
}
|
@param sp A ScalarPrinter object for the ScalarBar. For every displayed
|
||||||
|
ScalarBar label, the scalar value will be passed to the
|
||||||
|
ScalarPrinter object to turn it into a string. Users may
|
||||||
|
override the default ScalarPrinter object to map scalars to
|
||||||
|
whatever strings they wish. @see ScalarPrinter
|
||||||
|
*/
|
||||||
|
ScalarBar(int numColors, int numLabels, ScalarsToColors* stc,
|
||||||
|
const std::string& title,
|
||||||
|
Orientation orientation = HORIZONTAL,
|
||||||
|
float aspectRatio=0.25,
|
||||||
|
ScalarPrinter* sp=new ScalarPrinter):
|
||||||
|
osg::Geode(),
|
||||||
|
_numColors(numColors),
|
||||||
|
_numLabels(numLabels),
|
||||||
|
_stc(stc),
|
||||||
|
_title(title),
|
||||||
|
_orientation(orientation),
|
||||||
|
_aspectRatio(aspectRatio),
|
||||||
|
_sp(sp)
|
||||||
|
{
|
||||||
|
createDrawables();
|
||||||
|
}
|
||||||
|
|
||||||
/** Set the number of distinct colours on the ScalarBar. */
|
/** Copy constructor */
|
||||||
void setNumColors(int numColors);
|
ScalarBar(const ScalarBar& rhs, const osg::CopyOp& co): osg::Geode(rhs,co),
|
||||||
|
_numColors(rhs._numColors),
|
||||||
|
_numLabels(rhs._numLabels),
|
||||||
|
_stc(rhs._stc), // Consider clone for deep copy?
|
||||||
|
_title(rhs._title),
|
||||||
|
_orientation(rhs._orientation),
|
||||||
|
_aspectRatio(rhs._aspectRatio),
|
||||||
|
_sp(rhs._sp), // Consider clone for deep copy?
|
||||||
|
_textProperties(rhs._textProperties)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/** Get the number of distinct colours on the ScalarBar. */
|
/** Set the number of distinct colours on the ScalarBar. */
|
||||||
int getNumColors() const;
|
void setNumColors(int numColors);
|
||||||
|
|
||||||
/** Set the number of labels to display along the ScalarBar. There
|
/** Get the number of distinct colours on the ScalarBar. */
|
||||||
will be one label at each end point, and evenly distributed labels
|
int getNumColors() const;
|
||||||
in between. */
|
|
||||||
void setNumLabels(int numLabels);
|
|
||||||
|
|
||||||
/** Get the number of labels displayed along the ScalarBar. */
|
/** Set the number of labels to display along the ScalarBar. There
|
||||||
int getNumLabels() const;
|
will be one label at each end point, and evenly distributed labels
|
||||||
|
in between. */
|
||||||
|
void setNumLabels(int numLabels);
|
||||||
|
|
||||||
|
/** Get the number of labels displayed along the ScalarBar. */
|
||||||
|
int getNumLabels() const;
|
||||||
|
|
||||||
/** Set the ScalarsToColors mapping object for the ScalarBar. */
|
/** Set the ScalarsToColors mapping object for the ScalarBar. */
|
||||||
void setScalarsToColors(ScalarsToColors* stc);
|
void setScalarsToColors(ScalarsToColors* stc);
|
||||||
|
|
||||||
/** Get the ScalarsToColors mapping object from the ScalarBar. */
|
/** Get the ScalarsToColors mapping object from the ScalarBar. */
|
||||||
const ScalarsToColors* getScalarsToColors() const;
|
const ScalarsToColors* getScalarsToColors() const;
|
||||||
|
|
||||||
/** Set the title for the ScalarBar, set "" for no title. */
|
/** Set the title for the ScalarBar, set "" for no title. */
|
||||||
void setTitle(const std::string& title);
|
void setTitle(const std::string& title);
|
||||||
|
|
||||||
/** Get the title for the ScalarBar. */
|
/** Get the title for the ScalarBar. */
|
||||||
std::string getTitle() const;
|
std::string getTitle() const;
|
||||||
|
|
||||||
/** Set the orientation of the ScalarBar. @see Orientation */
|
/** Set the orientation of the ScalarBar. @see Orientation */
|
||||||
void setOrientation(ScalarBar::Orientation orientation);
|
void setOrientation(ScalarBar::Orientation orientation);
|
||||||
|
|
||||||
/** Get the orientation of the ScalarBar. @see Orientation */
|
/** Get the orientation of the ScalarBar. @see Orientation */
|
||||||
ScalarBar::Orientation getOrientation() const;
|
ScalarBar::Orientation getOrientation() const;
|
||||||
|
|
||||||
/** Set the aspect ration (y/x) for the displayed bar. Bear in mind you
|
/** Set the aspect ration (y/x) for the displayed bar. Bear in mind you
|
||||||
may want to change this if you change the orientation. */
|
may want to change this if you change the orientation. */
|
||||||
void setAspectRatio(float aspectRatio);
|
void setAspectRatio(float aspectRatio);
|
||||||
|
|
||||||
/** Get the aspect ration (y/x) for the displayed bar. */
|
/** Get the aspect ration (y/x) for the displayed bar. */
|
||||||
float getAspectRatio() const;
|
float getAspectRatio() const;
|
||||||
|
|
||||||
/** Set a ScalarPrinter object for the ScalarBar. For every displayed
|
/** Set a ScalarPrinter object for the ScalarBar. For every displayed
|
||||||
ScalarBar label, the scalar value will be passed to the ScalarPrinter
|
ScalarBar label, the scalar value will be passed to the ScalarPrinter
|
||||||
object to turn it into a string. Users may override the default ScalarPrinter
|
object to turn it into a string. Users may override the default ScalarPrinter
|
||||||
object to map scalars to whatever strings they wish. @see ScalarPrinter */
|
object to map scalars to whatever strings they wish. @see ScalarPrinter */
|
||||||
void setScalarPrinter(ScalarPrinter* sp);
|
void setScalarPrinter(ScalarPrinter* sp);
|
||||||
|
|
||||||
/** Get the ScalarPrinter object */
|
/** Get the ScalarPrinter object */
|
||||||
const ScalarPrinter* getScalarPrinter() const;
|
const ScalarPrinter* getScalarPrinter() const;
|
||||||
|
|
||||||
/** Set the TextProperties for the labels & title. @see TextProperties */
|
/** Set the TextProperties for the labels & title. @see TextProperties */
|
||||||
void setTextProperties(const TextProperties& tp);
|
void setTextProperties(const TextProperties& tp);
|
||||||
|
|
||||||
/** Get the TextProperties for the labels & title. @see TextProperties */
|
/** Get the TextProperties for the labels & title. @see TextProperties */
|
||||||
const TextProperties& getTextProperties() const;
|
const TextProperties& getTextProperties() const;
|
||||||
|
|
||||||
META_Node(osgSim, ScalarBar);
|
META_Node(osgSim, ScalarBar);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int _numColors;
|
int _numColors;
|
||||||
int _numLabels;
|
int _numLabels;
|
||||||
osg::ref_ptr<ScalarsToColors> _stc;
|
osg::ref_ptr<ScalarsToColors> _stc;
|
||||||
std::string _title;
|
std::string _title;
|
||||||
Orientation _orientation;
|
Orientation _orientation;
|
||||||
float _aspectRatio;
|
float _aspectRatio;
|
||||||
osg::ref_ptr<ScalarPrinter> _sp;
|
osg::ref_ptr<ScalarPrinter> _sp;
|
||||||
TextProperties _textProperties;
|
TextProperties _textProperties;
|
||||||
|
|
||||||
void createDrawables();
|
void createDrawables();
|
||||||
|
|
||||||
|
@ -32,16 +32,16 @@ class OSGSIM_EXPORT ScalarsToColors: public osg::Referenced
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
ScalarsToColors(float scalarMin, float scalarMax);
|
ScalarsToColors(float scalarMin, float scalarMax);
|
||||||
virtual ~ScalarsToColors() {}
|
virtual ~ScalarsToColors() {}
|
||||||
|
|
||||||
/** Get the color for a given scalar value. */
|
/** Get the color for a given scalar value. */
|
||||||
virtual osg::Vec4 getColor(float scalar) const;
|
virtual osg::Vec4 getColor(float scalar) const;
|
||||||
|
|
||||||
/** Get the minimum scalar value. */
|
/** Get the minimum scalar value. */
|
||||||
float getMin() const;
|
float getMin() const;
|
||||||
|
|
||||||
/** Get the maximum scalar value. */
|
/** Get the maximum scalar value. */
|
||||||
float getMax() const;
|
float getMax() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -32,167 +32,167 @@ may be rendered various components switched on or off:
|
|||||||
- The specified area of the sphere surface.
|
- The specified area of the sphere surface.
|
||||||
|
|
||||||
- An edge line around the boundary of the specified area
|
- An edge line around the boundary of the specified area
|
||||||
of the sphere surface.
|
of the sphere surface.
|
||||||
|
|
||||||
- Four <i>spokes</i>, where a spoke is the line from
|
- Four <i>spokes</i>, where a spoke is the line from
|
||||||
the sphere's centre to a corner of the rendered area.
|
the sphere's centre to a corner of the rendered area.
|
||||||
|
|
||||||
- Four planar areas, where the planar areas are formed
|
- Four planar areas, where the planar areas are formed
|
||||||
between the spokes.
|
between the spokes.
|
||||||
|
|
||||||
Caveats:
|
Caveats:
|
||||||
|
|
||||||
- It's worth noting that the line through the sphere's poles is
|
- It's worth noting that the line through the sphere's poles is
|
||||||
parallel to the z axis. This has implications when specifying the
|
parallel to the z axis. This has implications when specifying the
|
||||||
area to be rendered, and specifying areas where the centre of
|
area to be rendered, and specifying areas where the centre of
|
||||||
the rendered area <i>is</i> the Z axis may lead to unexpected
|
the rendered area <i>is</i> the Z axis may lead to unexpected
|
||||||
geometry.
|
geometry.
|
||||||
|
|
||||||
- It's possible to render the whole sphere by specifying elevation
|
- It's possible to render the whole sphere by specifying elevation
|
||||||
and azimuth ranges round the full 360 degrees. When doing
|
and azimuth ranges round the full 360 degrees. When doing
|
||||||
so you may consider switching the planes, spokes, and edge lines
|
so you may consider switching the planes, spokes, and edge lines
|
||||||
off, to avoid rendering artefacts, e.g. the upper and lower
|
off, to avoid rendering artefacts, e.g. the upper and lower
|
||||||
planes will be coincident.
|
planes will be coincident.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
class OSGSIM_EXPORT SphereSegment: public osg::Geode
|
class OSGSIM_EXPORT SphereSegment: public osg::Geode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
DrawMask represents a bit field, the values of which may be OR'ed together
|
DrawMask represents a bit field, the values of which may be OR'ed together
|
||||||
to specify which parts of the sphere segment should be drawn. E.g.
|
to specify which parts of the sphere segment should be drawn. E.g.
|
||||||
\code
|
\code
|
||||||
sphereSegment->setDrawMask(SphereSegment::DrawMask(SphereSegment::SURFACE|SphereSegment::SPOKES));
|
sphereSegment->setDrawMask(SphereSegment::DrawMask(SphereSegment::SURFACE|SphereSegment::SPOKES));
|
||||||
\endcode
|
\endcode
|
||||||
*/
|
*/
|
||||||
enum DrawMask{
|
enum DrawMask{
|
||||||
SURFACE = 0x00000001, ///< Draw the specified area on the sphere's surface
|
SURFACE = 0x00000001, ///< Draw the specified area on the sphere's surface
|
||||||
SPOKES = 0x00000002, ///< Draw the spokes from the sphere's centre to the surface's corners
|
SPOKES = 0x00000002, ///< Draw the spokes from the sphere's centre to the surface's corners
|
||||||
EDGELINE = 0x00000008, ///< Draw the line round the edge of the area on the sphere's surface
|
EDGELINE = 0x00000008, ///< Draw the line round the edge of the area on the sphere's surface
|
||||||
PLANES = 0x00000010, ///< Draw the planes from the sphere's centre to the edge of the sphere's surface
|
SIDES = 0x00000010, ///< Draw the planes from the sphere's centre to the edge of the sphere's surface
|
||||||
ALL = 0xffffffff ///< Draw every part of the sphere segment
|
ALL = 0xffffffff ///< Draw every part of the sphere segment
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/** Default constructor. */
|
/** Default constructor. */
|
||||||
SphereSegment():Geode(),
|
SphereSegment():Geode(),
|
||||||
_centre(0.0f,0.0f,0.0f), _radius(1.0f),
|
_centre(0.0f,0.0f,0.0f), _radius(1.0f),
|
||||||
_azMin(0.0f), _azMax(osg::PI/2.0f),
|
_azMin(0.0f), _azMax(osg::PI/2.0f),
|
||||||
_elevMin(0.0f), _elevMax(osg::PI/2.0f),
|
_elevMin(0.0f), _elevMax(osg::PI/2.0f),
|
||||||
_density(10),
|
_density(10),
|
||||||
_drawMask(DrawMask(ALL))
|
_drawMask(DrawMask(ALL))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Construct by angle ranges. Note that the azimuth 'zero' is the Y axis; specifying
|
Construct by angle ranges. Note that the azimuth 'zero' is the Y axis; specifying
|
||||||
an azimuth range from azMin -osg::PI/2.0f to azMax osg::PI/2.0f will cover the
|
an azimuth range from azMin -osg::PI/2.0f to azMax osg::PI/2.0f will cover the
|
||||||
'top half' of the circle in the XY plane. The elev angles are 'out' of the 'zero'
|
'top half' of the circle in the XY plane. The elev angles are 'out' of the 'zero'
|
||||||
XY plane with +ve angles above the plane, and -ve angles below.
|
XY plane with +ve angles above the plane, and -ve angles below.
|
||||||
@param centre sphere centre
|
@param centre sphere centre
|
||||||
@param radius radius of sphere
|
@param radius radius of sphere
|
||||||
@param azMin azimuth minimum
|
@param azMin azimuth minimum
|
||||||
@param azMin azimuth maximum
|
@param azMin azimuth maximum
|
||||||
@param elevMin elevation minimum
|
@param elevMin elevation minimum
|
||||||
@param elevMax elevation maximum
|
@param elevMax elevation maximum
|
||||||
@param density number of units to divide the azimuth and elevation ranges into
|
@param density number of units to divide the azimuth and elevation ranges into
|
||||||
*/
|
*/
|
||||||
SphereSegment(const osg::Vec3& centre, float radius, float azMin, float azMax,
|
SphereSegment(const osg::Vec3& centre, float radius, float azMin, float azMax,
|
||||||
float elevMin, float elevMax, int density):
|
float elevMin, float elevMax, int density):
|
||||||
Geode(),
|
Geode(),
|
||||||
_centre(centre), _radius(radius),
|
_centre(centre), _radius(radius),
|
||||||
_azMin(azMin), _azMax(azMax),
|
_azMin(azMin), _azMax(azMax),
|
||||||
_elevMin(elevMin), _elevMax(elevMax),
|
_elevMin(elevMin), _elevMax(elevMax),
|
||||||
_density(density),
|
_density(density),
|
||||||
_drawMask(DrawMask(ALL))
|
_drawMask(DrawMask(ALL))
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Construct by vector.
|
Construct by vector.
|
||||||
@param centre sphere centre
|
@param centre sphere centre
|
||||||
@param radius radius of sphere
|
@param radius radius of sphere
|
||||||
@param vec vector pointing from sphere centre to centre point
|
@param vec vector pointing from sphere centre to centre point
|
||||||
of rendered area on sphere surface
|
of rendered area on sphere surface
|
||||||
@param azRange azimuth range in radians (with centre along vec)
|
@param azRange azimuth range in radians (with centre along vec)
|
||||||
@param elevRange elevation range in radians (with centre along vec)
|
@param elevRange elevation range in radians (with centre along vec)
|
||||||
@param density number of units to divide the azimuth and elevation ranges into
|
@param density number of units to divide the azimuth and elevation ranges into
|
||||||
*/
|
*/
|
||||||
SphereSegment(const osg::Vec3& centre, float radius, const osg::Vec3& vec, float azRange,
|
SphereSegment(const osg::Vec3& centre, float radius, const osg::Vec3& vec, float azRange,
|
||||||
float elevRange, int density);
|
float elevRange, int density);
|
||||||
|
|
||||||
/** Copy constructor */
|
/** Copy constructor */
|
||||||
SphereSegment(const SphereSegment& rhs, const osg::CopyOp& co):
|
SphereSegment(const SphereSegment& rhs, const osg::CopyOp& co):
|
||||||
Geode(rhs,co),
|
Geode(rhs,co),
|
||||||
_centre(rhs._centre), _radius(rhs._radius),
|
_centre(rhs._centre), _radius(rhs._radius),
|
||||||
_azMin(rhs._azMin), _azMax(rhs._azMax),
|
_azMin(rhs._azMin), _azMax(rhs._azMax),
|
||||||
_elevMin(rhs._elevMin), _elevMax(rhs._elevMax),
|
_elevMin(rhs._elevMin), _elevMax(rhs._elevMax),
|
||||||
_density(rhs._density),
|
_density(rhs._density),
|
||||||
_drawMask(rhs._drawMask)
|
_drawMask(rhs._drawMask)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Set the centre point of the SphereSegment */
|
/** Set the centre point of the SphereSegment */
|
||||||
void setCentre(const osg::Vec3& c);
|
void setCentre(const osg::Vec3& c);
|
||||||
|
|
||||||
/** Get the centre point of the SphereSegment */
|
/** Get the centre point of the SphereSegment */
|
||||||
const osg::Vec3& getCentre() const;
|
const osg::Vec3& getCentre() const;
|
||||||
|
|
||||||
/** Set the radius of the SphereSegment */
|
/** Set the radius of the SphereSegment */
|
||||||
void setRadius(float r);
|
void setRadius(float r);
|
||||||
|
|
||||||
/** Get the radius of the SphereSegment */
|
/** Get the radius of the SphereSegment */
|
||||||
float getRadius() const;
|
float getRadius() const;
|
||||||
|
|
||||||
/** Set the area of the sphere segment
|
/** Set the area of the sphere segment
|
||||||
|
|
||||||
@param vec vector pointing from sphere centre to centre point
|
@param vec vector pointing from sphere centre to centre point
|
||||||
of rendered area on sphere surface
|
of rendered area on sphere surface
|
||||||
@param azRange azimuth range in radians (with centre along vec)
|
@param azRange azimuth range in radians (with centre along vec)
|
||||||
@param elevRange elevation range in radians (with centre along vec)
|
@param elevRange elevation range in radians (with centre along vec)
|
||||||
*/
|
*/
|
||||||
void setArea(const osg::Vec3& v, float azRange, float elevRange);
|
void setArea(const osg::Vec3& v, float azRange, float elevRange);
|
||||||
|
|
||||||
/** Get the area of the sphere segment
|
/** Get the area of the sphere segment
|
||||||
|
|
||||||
@param vec vector pointing from sphere centre to centre point
|
@param vec vector pointing from sphere centre to centre point
|
||||||
of rendered area on sphere surface (normalized)
|
of rendered area on sphere surface (normalized)
|
||||||
@param azRange azimuth range in radians (with centre along vec)
|
@param azRange azimuth range in radians (with centre along vec)
|
||||||
@param elevRange elevation range in radians (with centre along vec)
|
@param elevRange elevation range in radians (with centre along vec)
|
||||||
*/
|
*/
|
||||||
void getArea(osg::Vec3& v, float& azRange, float& elevRange) const;
|
void getArea(osg::Vec3& v, float& azRange, float& elevRange) const;
|
||||||
|
|
||||||
/** Set the density of the sphere segment */
|
/** Set the density of the sphere segment */
|
||||||
void setDensity(int d);
|
void setDensity(int d);
|
||||||
|
|
||||||
/** Get the density of the sphere segment */
|
/** Get the density of the sphere segment */
|
||||||
int getDensity() const;
|
int getDensity() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Specify the DrawMask.
|
Specify the DrawMask.
|
||||||
@param dm Bitmask specifying which parts of the sphere segment should be drawn.
|
@param dm Bitmask specifying which parts of the sphere segment should be drawn.
|
||||||
@see DrawMask
|
@see DrawMask
|
||||||
*/
|
*/
|
||||||
void setDrawMask(DrawMask dm);
|
void setDrawMask(DrawMask dm);
|
||||||
|
|
||||||
/** Set the color of the surface. */
|
/** Set the color of the surface. */
|
||||||
void setSurfaceColor(const osg::Vec4& c);
|
void setSurfaceColor(const osg::Vec4& c);
|
||||||
|
|
||||||
/** Set the color of the spokes. */
|
/** Set the color of the spokes. */
|
||||||
void setSpokeColor(const osg::Vec4& c);
|
void setSpokeColor(const osg::Vec4& c);
|
||||||
|
|
||||||
/** Set the color of the edge line. */
|
/** Set the color of the edge line. */
|
||||||
void setEdgeLineColor(const osg::Vec4& c);
|
void setEdgeLineColor(const osg::Vec4& c);
|
||||||
|
|
||||||
/** Set the color of the planes. */
|
/** Set the color of the planes. */
|
||||||
void setPlaneColor(const osg::Vec4& c);
|
void setSideColor(const osg::Vec4& c);
|
||||||
|
|
||||||
/** Set color of all components. */
|
/** Set color of all components. */
|
||||||
void setAllColors(const osg::Vec4& c);
|
void setAllColors(const osg::Vec4& c);
|
||||||
|
|
||||||
META_Node(osgSim, SphereSegment)
|
META_Node(osgSim, SphereSegment)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -201,57 +201,57 @@ private:
|
|||||||
void dirtyAllDrawableDisplayLists(); // Force re-calling of gl functions
|
void dirtyAllDrawableDisplayLists(); // Force re-calling of gl functions
|
||||||
void dirtyAllDrawableBounds(); // Force recalculation of bound geometry
|
void dirtyAllDrawableBounds(); // Force recalculation of bound geometry
|
||||||
|
|
||||||
// SphereSegment is actually made up of a number of Drawable classes,
|
// SphereSegment is actually made up of a number of Drawable classes,
|
||||||
// all of which are nested private classes, as declared below. These
|
// all of which are nested private classes, as declared below. These
|
||||||
// classes are defined in the .cpp for minimum visibility and physical
|
// classes are defined in the .cpp for minimum visibility and physical
|
||||||
// coupling. (Reduces time spent compiling! :-)
|
// coupling. (Reduces time spent compiling! :-)
|
||||||
//
|
//
|
||||||
// Each of the nested classes holds a pointer to the SphereSegment
|
// Each of the nested classes holds a pointer to the SphereSegment
|
||||||
// 'parent', which stores the geometry details, and performs any
|
// 'parent', which stores the geometry details, and performs any
|
||||||
// work required. The nested classes are lightweight objects which
|
// work required. The nested classes are lightweight objects which
|
||||||
// just pass the work on.
|
// just pass the work on.
|
||||||
//
|
//
|
||||||
// Why are things done with these sub-Drawables? Alpha-blended
|
// Why are things done with these sub-Drawables? Alpha-blended
|
||||||
// Drawables need to be drawn last, depth sorted, and the various
|
// Drawables need to be drawn last, depth sorted, and the various
|
||||||
// components of a SphereSegment also need to be depth sorted
|
// components of a SphereSegment also need to be depth sorted
|
||||||
// against one another (they may all be drawn with alpha blending).
|
// against one another (they may all be drawn with alpha blending).
|
||||||
// Making these Drawables allows us to get the OSG to depth sort
|
// Making these Drawables allows us to get the OSG to depth sort
|
||||||
// for us.
|
// for us.
|
||||||
|
|
||||||
class Surface;
|
class Surface;
|
||||||
friend class Surface;
|
friend class Surface;
|
||||||
bool Surface_computeBound(osg::BoundingBox&) const;
|
bool Surface_computeBound(osg::BoundingBox&) const;
|
||||||
void Surface_drawImplementation(osg::State&) const;
|
void Surface_drawImplementation(osg::State&) const;
|
||||||
|
|
||||||
class EdgeLine;
|
class EdgeLine;
|
||||||
friend class EdgeLine;
|
friend class EdgeLine;
|
||||||
bool EdgeLine_computeBound(osg::BoundingBox&) const;
|
bool EdgeLine_computeBound(osg::BoundingBox&) const;
|
||||||
void EdgeLine_drawImplementation(osg::State&) const;
|
void EdgeLine_drawImplementation(osg::State&) const;
|
||||||
|
|
||||||
enum BoundaryAngle{MIN,MAX}; // Why here and not in Plane class? Because we can't forward
|
enum BoundaryAngle{MIN,MAX}; // Why here and not in Side class? Because we can't forward
|
||||||
enum PlaneOrientation{AZIM,ELEV}; // declare enums, Plane is in the .cpp, and this is tidier...
|
enum SideOrientation{AZIM,ELEV}; // declare enums, Side is in the .cpp, and this is tidier...
|
||||||
class Plane;
|
class Side;
|
||||||
friend class Plane;
|
friend class Side;
|
||||||
bool Plane_computeBound(osg::BoundingBox&, PlaneOrientation, BoundaryAngle) const;
|
bool Side_computeBound(osg::BoundingBox&, SideOrientation, BoundaryAngle) const;
|
||||||
void Plane_drawImplementation(osg::State&, PlaneOrientation, BoundaryAngle) const;
|
void Side_drawImplementation(osg::State&, SideOrientation, BoundaryAngle) const;
|
||||||
|
|
||||||
class Spoke;
|
class Spoke;
|
||||||
friend class Spoke;
|
friend class Spoke;
|
||||||
bool Spoke_computeBound(osg::BoundingBox&, BoundaryAngle, BoundaryAngle) const;
|
bool Spoke_computeBound(osg::BoundingBox&, BoundaryAngle, BoundaryAngle) const;
|
||||||
void Spoke_drawImplementation(osg::State&, BoundaryAngle, BoundaryAngle) const;
|
void Spoke_drawImplementation(osg::State&, BoundaryAngle, BoundaryAngle) const;
|
||||||
|
|
||||||
// Sphere segment geometry details
|
// Sphere segment geometry details
|
||||||
osg::Vec3 _centre;
|
osg::Vec3 _centre;
|
||||||
float _radius;
|
float _radius;
|
||||||
float _azMin, _azMax, _elevMin, _elevMax;
|
float _azMin, _azMax, _elevMin, _elevMax;
|
||||||
int _density;
|
int _density;
|
||||||
|
|
||||||
// Draw details
|
// Draw details
|
||||||
DrawMask _drawMask;
|
DrawMask _drawMask;
|
||||||
osg::Vec4 _surfaceColor;
|
osg::Vec4 _surfaceColor;
|
||||||
osg::Vec4 _spokeColor;
|
osg::Vec4 _spokeColor;
|
||||||
osg::Vec4 _edgeLineColor;
|
osg::Vec4 _edgeLineColor;
|
||||||
osg::Vec4 _planeColor;
|
osg::Vec4 _planeColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -246,8 +246,8 @@ void ScalarBar::createDrawables()
|
|||||||
// vertical alignment depending on the letters used in the labels. E.g. a 'y' has a dangling tail.
|
// vertical alignment depending on the letters used in the labels. E.g. a 'y' has a dangling tail.
|
||||||
if(_orientation == HORIZONTAL)
|
if(_orientation == HORIZONTAL)
|
||||||
{
|
{
|
||||||
std::vector<osgText::Text*>::iterator maxYIt = max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::Y_AXIS));
|
std::vector<osgText::Text*>::iterator maxYIt = std::max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::Y_AXIS));
|
||||||
for_each(texts.begin(), texts.end(), AlignCentreOnYValue((*maxYIt)->getBound().center().y()));
|
std::for_each(texts.begin(), texts.end(), AlignCentreOnYValue((*maxYIt)->getBound().center().y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. And finally the title
|
// 3. And finally the title
|
||||||
@ -268,7 +268,7 @@ void ScalarBar::createDrawables()
|
|||||||
// Need to move the title above any labels, using maximum y value of the
|
// Need to move the title above any labels, using maximum y value of the
|
||||||
// existing text objects
|
// existing text objects
|
||||||
|
|
||||||
std::vector<osgText::Text*>::iterator maxYIt = max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::Y_AXIS));
|
std::vector<osgText::Text*>::iterator maxYIt = std::max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::Y_AXIS));
|
||||||
|
|
||||||
float titleY;
|
float titleY;
|
||||||
if(maxYIt != texts.end()) titleY = (*maxYIt)->getBound().yMax() * 1.1f;
|
if(maxYIt != texts.end()) titleY = (*maxYIt)->getBound().yMax() * 1.1f;
|
||||||
@ -284,7 +284,7 @@ void ScalarBar::createDrawables()
|
|||||||
// Need to move the title out beyond any labels, using the maximum x value of the
|
// Need to move the title out beyond any labels, using the maximum x value of the
|
||||||
// existing text objects
|
// existing text objects
|
||||||
|
|
||||||
std::vector<osgText::Text*>::iterator maxXIt = max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::X_AXIS));
|
std::vector<osgText::Text*>::iterator maxXIt = std::max_element(texts.begin(), texts.end(), MaxCoordLess(MaxCoordLess::X_AXIS));
|
||||||
|
|
||||||
float titleX;
|
float titleX;
|
||||||
if(maxXIt != texts.end()) titleX = (*maxXIt)->getBound().xMax() * 1.1f;
|
if(maxXIt != texts.end()) titleX = (*maxXIt)->getBound().xMax() * 1.1f;
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user