56#include "DrawModes.hh"
132 void name(
const std::string& _name) {
137 const std::string&
name()
const {
145 bool propertyBased()
const {
150 DrawModeProperties& properties() {
162typedef std::vector< DrawModeInternal > VecDrawModes;
166static VecDrawModes registeredDrawModes_;
178envMapped_(_envMapping),
179primitive_(_primitive),
180lightStage_(_lightStage),
181colorSource_(_colorSource),
182texcoordSource_(_texcoordSource),
183normalSource_(_normalSource)
188DrawMode::DrawMode(
size_t _index)
191 if ( _index >= modeFlags_.size() ) {
192 std::cerr <<
"Illegal drawMode specification from unsigned int. This should not be a bitset!!!" << std::endl;
194 modeFlags_.set(_index);
200DrawMode::DrawMode() {
205DrawMode::DrawMode(
const ModeFlagSet& _flags) :
212DrawMode DrawMode::getFromDescription(std::string _description)
216 std::istringstream f(_description);
218 while (std::getline(f, s,
'+')) {
219 VecDrawModes::const_iterator modeIter, modeEnd( registeredDrawModes_.end() );
220 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter ) {
221 if(modeIter->name() == s) {
222 val |= modeIter->id();
232DrawMode::operator bool()
const {
233 return( modeFlags_ !=
NONE.modeFlags_ );
268bool DrawMode::operator==(
const DrawMode& _mode)
const {
269 return modeFlags_ == _mode.modeFlags_;
273bool DrawMode::operator!=(
const DrawMode& _mode2 )
const {
274 return (modeFlags_ != _mode2.modeFlags_);
277DrawMode& DrawMode::operator++() {
278 if ( modeFlags_.count() != 1 ) {
279 std::cerr <<
"Operator ++ for drawMode which is not atomic!!" << std::endl;
287DrawMode DrawMode::operator&(
const DrawMode& _mode)
const {
288 DrawMode andMode = DrawMode(modeFlags_ & _mode.modeFlags_);
296 for (
int i = (
int)andMode.getNumLayers() - 1; i >= 0; --i)
298 int layerIndex = _mode.getLayerIndex(andMode.getLayer(i));
301 andMode.removeLayer(i);
307DrawMode& DrawMode::operator|=(
const DrawMode& _mode2 ) {
308 modeFlags_ |= _mode2.modeFlags_;
310 for (
unsigned int i = 0; i < _mode2.getNumLayers(); ++i)
318DrawMode& DrawMode::operator&=(
const DrawMode& _mode2 ) {
319 modeFlags_ &= _mode2.modeFlags_;
324 int layerIndex2 = _mode2.getLayerIndex(
getLayer(i));
335DrawMode DrawMode::operator|(
const DrawMode& _mode2 )
const {
336 DrawMode combined = DrawMode( modeFlags_ | _mode2.modeFlags_ );
343 for (
unsigned int i = 0; i < _mode2.getNumLayers(); ++i)
344 combined.addLayer(_mode2.getLayer(i));
349DrawMode DrawMode::operator^(
const DrawMode& _mode2 )
const {
351 DrawMode xorMode = DrawMode( modeFlags_ ^ _mode2.modeFlags_ );
357 std::vector<const DrawModeProperties*> tmpLayers;
363 const DrawModeProperties* curProps =
getLayer(i);
366 tmpLayers.push_back(curProps);
371 for (
unsigned int i = 0; i < _mode2.getNumLayers(); ++i)
373 const DrawModeProperties* curProps = _mode2.getLayer(i);
375 if (!curProps)
continue;
382 for (
unsigned int k = 0; addToVec && k < tmpLayers.size(); ++k)
384 if (!memcmp(tmpLayers[k], curProps,
sizeof(DrawModeProperties)))
387 tmpLayers.erase(tmpLayers.begin() + k);
393 tmpLayers.push_back(curProps);
399 if (tmpLayers.empty())
401 xorMode.removeLayer(0u);
408 xorMode.setDrawModeProperties(tmpLayers[0]);
409 for (
unsigned int i = 1; i < tmpLayers.size(); ++i)
410 xorMode.addLayer(tmpLayers[i]);
418DrawMode DrawMode::operator~( )
const {
419 return( DrawMode(~modeFlags_) );
425 if ( modeFlags_.count() == 1 ) {
426 for (
size_t i = 0 ; i < modeFlags_.size() ; ++i )
436 std::string text(
"");
438 VecDrawModes::const_iterator modeIter, modeEnd( registeredDrawModes_.end() );
439 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter )
441 if( (*
this) & modeIter->id() )
443 if (!text.empty()) text +=
"+";
444 text += modeIter->name();
455 modeFlags_ = (modeFlags_ | _filter.modeFlags_) ^ _filter.modeFlags_;
457 for (
unsigned int i = 0; i < _filter.
getNumLayers(); ++i)
472 modeFlags_ = (modeFlags_ ^ _mode.modeFlags_);
484std::vector< DrawMode >
487 std::vector< DrawMode > draw_mode_ids;
489 VecDrawModes::const_iterator modeIter, modeEnd( registeredDrawModes_.end() );
490 for( modeIter = registeredDrawModes_.begin();
493 if( (*
this) & modeIter->id() )
494 draw_mode_ids.push_back( modeIter->id() );
496 return draw_mode_ids;
503 return(modeFlags_.count() == 1 );
512 return (*
this) & _atomicDrawMode;
518 return (modeFlags_.size() );
567 for (
unsigned int i = 0; i <
layers_.size(); ++i)
569 for (
unsigned int k = i+1; k <
layers_.size(); ++k)
587 for (
unsigned int k = 0; k <
layers_.size(); ++k)
589 if (
layers_[k].primitive() == PRIMITIVE_POINT)
603 if (!_prop)
return -1;
605 for (
unsigned int i = 0; i <
layers_.size(); ++i)
618 for (
unsigned int i = 0; i <
layers_.size(); ++i)
620 if (
layers_[i].primitive() == _type )
631 static bool initialized_ =
false;
636 registeredDrawModes_.clear();
758 VecDrawModes::iterator modeIter, modeEnd( registeredDrawModes_.end() );
760 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter ) {
761 if( _name == modeIter->name() ) {
762 return modeIter->id();
768 registeredDrawModes_.push_back(
DrawModeInternal( _name, firstFreeID_ , _propertyBased) );
771 return registeredDrawModes_[ registeredDrawModes_.size() - 1 ].id();
782 VecDrawModes::iterator modeIter, modeEnd( registeredDrawModes_.end() );
784 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter ) {
785 if( _name == modeIter->name() ) {
786 modeIter->properties() = _properties;
800 VecDrawModes::const_iterator modeIter, modeEnd( registeredDrawModes_.end() );
802 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter )
804 if( _name == modeIter->name() )
806 return modeIter->id();
817 VecDrawModes::const_iterator modeIter, modeEnd( registeredDrawModes_.end() );
819 for( modeIter = registeredDrawModes_.begin(); modeIter != modeEnd; ++modeIter )
821 if( _name == modeIter->name() )
Definition of a draw mode.
DrawModeInternal(const std::string &_name, const DrawMode &_id, const bool _propertyBased=false)
DrawModeProperties properties_
The properties associated with this DrawMode.
std::string name_
Human Readable Name.
void name(const std::string &_name)
Set the name of the DrawMode.
const std::string & name() const
Get the name of the DrawMode.
bool propertyBased_
Flag if the DrawMode is property based.
DrawMode id_
The id of the DrawMode.
DrawModeProperties stores a set of properties that defines, how to render an object.
void addLayer(const DrawModeProperties *_props)
add another layer on top of this drawmode
void combine(DrawMode _mode)
combine with another drawmode
size_t getIndex() const
get an index of the current drawMode
void filter(DrawMode _filter)
filter out one drawmode
std::string description() const
int getLayerIndexByPrimitive(DrawModePrimitive _type) const
search for layer with specified primitive
const DrawModeProperties * getLayer(unsigned int _i) const
returns the property set at layer i
std::vector< DrawMode > getAtomicDrawModes() const
Separates this drawMode into a list of all separate atomic draw modes.
size_t maxModes() const
Get the number of maximum Modes which could be handled by the current implementation.
bool removeLayer(unsigned int _i)
remove layer at index i
bool containsAtomicDrawMode(const DrawMode &_atomicDrawMode) const
Check whether an Atomic DrawMode is active in this draw Mode.
bool isAtomic() const
Check if this is an atomic draw Mode.
const DrawModeProperties * getDrawModeProperties() const
returns the base properties of this draw mode
bool checkConsistency() const
checks consistency of property layers
void setDrawModeProperties(const DrawModeProperties *_props)
set the base properties of this draw mode
int getLayerIndex(const DrawModeProperties *_prop) const
returns layer index of a property, -1 if not in list
std::vector< DrawModeProperties > layers_
size_t getNumLayers() const
returns the layer count
DrawMode SOLID_SMOOTH_SHADED
draw smooth shaded (Gouraud shaded) faces (requires halfedge normals)
DrawModeLightStage
Lighting stage of a mesh: unlit, smooth, phong.
DrawMode UNUSED
marks the last used ID
DrawMode SOLID_PHONG_SHADED
draw phong shaded faces
DrawMode HALFEDGES
draw halfedges
DrawMode SOLID_ENV_MAPPED
draw environment mapped
DrawMode SOLID_3DTEXTURED_SHADED
draw smooth shaded textured faces
DrawMode SOLID_POINTS_COLORED_SHADED
draw faces, but use Gouraud shading to interpolate vertex colors
DrawMode SOLID_FACES_COLORED_SMOOTH_SHADED
draw smooth shaded and colored faces (requires vertex normals and face colors)
DrawMode POINTS_COLORED
draw colored, but not lighted points (requires point colors)
bool drawModeExists(const std::string &_name)
Check if the given draw mode exists.
DrawMode HALFEDGES_COLORED
draw halfedges with colors (without shading)
DrawMode SOLID_TEXTURED_SHADED
draw smooth shaded textured faces
DrawMode SOLID_2DTEXTURED_FACE
draw per halfedge textured faces
DrawMode SOLID_2DTEXTURED_FACE_SHADED
draw per halfedge textured faces
DrawMode SOLID_FACES_COLORED
draw colored, but not lighted faces using face colors
const DrawMode & getDrawMode(const std::string &_name)
Get a custom DrawMode.
DrawMode DEFAULT
use the default (global) draw mode and not the node's own.
DrawModeColorSource
Source of Primitive Colors.
DrawMode SOLID_FACES_COLORED_FLAT_SHADED
draw flat shaded and colored faces (requires face normals and colors)
DrawMode WIREFRAME
draw wireframe
DrawMode CELLS_COLORED
draw cells with colors (without shading)
DrawModeTexCoordSource
Source of Texture Coordinates.
DrawMode HIDDENLINE
draw hidden line (2 rendering passes needed)
DrawMode SOLID_FACES_COLORED_2DTEXTURED_FACE_SMOOTH_SHADED
draw per halfedge texture faces modulated with face colors with smooth shading
DrawMode POINTS
draw unlighted points using the default base color
DrawMode getDrawModeFromIndex(unsigned int _index)
given an index of an atomic draw mode, return the drawmode
DrawMode POINTS_SHADED
draw shaded points (requires point normals)
DrawMode SOLID_1DTEXTURED
draw textured faces
DrawMode EDGES_COLORED
draw edges with colors (without shading)
DrawMode NONE
not a valid draw mode
DrawMode SOLID_POINTS_COLORED
draw colored, but not lighted faces using interpolated vertex colors
DrawMode SOLID_3DTEXTURED
draw textured faces
DrawMode SOLID_SMOOTH_SHADED_FEATURES
draw smooth shaded (Gouraud shaded) faces (requires halfedge normals)
DrawModeNormalSource
Source of Normals.
void initializeDefaultDrawModes(void)
const DrawMode & addDrawMode(const std::string &_name, bool _propertyBased)
Add a custom DrawMode.
DrawMode SOLID_TEXTURED
draw textured faces
DrawMode SOLID_1DTEXTURED_SHADED
draw smooth shaded textured faces
DrawMode SOLID_FLAT_SHADED
draw flat shaded faces (requires face normals)
DrawModePrimitive
Primitive mode of a mesh.
Namespace providing different geometric functions concerning angles.