324 lines
12 KiB
Plaintext
324 lines
12 KiB
Plaintext
// Filename: builderAttribTempl.I
|
|
// Created by: drose (17Sep97)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d-general@lists.sourceforge.net .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::Constructor
|
|
// Access: Public
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT>::
|
|
BuilderAttribTempl() {
|
|
_flags = 0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::Copy constructor
|
|
// Access: Public
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT>::
|
|
BuilderAttribTempl(const BuilderAttribTempl ©) {
|
|
(*this) = copy;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::Copy assignment operator
|
|
// Access: Public
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
operator = (const BuilderAttribTempl<VT, NT, TT, CT> ©) {
|
|
_normal = copy._normal;
|
|
_color = copy._color;
|
|
_pixel_size = copy._pixel_size;
|
|
_flags = copy._flags;
|
|
|
|
return *this;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::clear
|
|
// Access: Public
|
|
// Description: Resets the attribute flags to their original, empty
|
|
// state--where no attributes have been applied.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
clear() {
|
|
_flags = 0;
|
|
return *this;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::has_normal
|
|
// Access: Public
|
|
// Description: Returns true if the attribute has a normal.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
has_normal() const {
|
|
return (_flags & BAF_normal)!=0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::get_normal
|
|
// Access: Public
|
|
// Description: Returns the attribute's normal. It is an error to
|
|
// call this without first verifying that has_normal() is
|
|
// true.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE TYPENAME BuilderAttribTempl<VT, NT, TT, CT>::NType BuilderAttribTempl<VT, NT, TT, CT>::
|
|
get_normal() const {
|
|
nassertr(has_normal(), _normal);
|
|
return _normal;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::set_normal
|
|
// Access: Public
|
|
// Description: Resets the attribute's normal.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
set_normal(const NType &n) {
|
|
_flags |= BAF_normal;
|
|
_normal = n;
|
|
return *this;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::clear_normal
|
|
// Access: Public
|
|
// Description: Removes the attribute's normal.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
clear_normal() {
|
|
_flags &= ~BAF_normal;
|
|
return *this;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::has_color
|
|
// Access: Public
|
|
// Description: Returns true if the attribute has a color.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
has_color() const {
|
|
return (_flags & BAF_color)!=0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::get_color
|
|
// Access: Public
|
|
// Description: Returns the attribute's color. It is an error to
|
|
// call this without first verifying that has_color() is
|
|
// true.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE TYPENAME BuilderAttribTempl<VT, NT, TT, CT>::CType BuilderAttribTempl<VT, NT, TT, CT>::
|
|
get_color() const {
|
|
nassertr(has_color(), _color);
|
|
return _color;
|
|
}
|
|
|
|
template <class VT, class NT, class TT, class CT>
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::set_color
|
|
// Access: Public
|
|
// Description: Resets the attribute's color.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
set_color(const CType &c) {
|
|
_flags |= BAF_color;
|
|
_color = c;
|
|
return *this;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::clear_color
|
|
// Access: Public
|
|
// Description: Removes the attribute's color.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
clear_color() {
|
|
_flags &= ~BAF_color;
|
|
return *this;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::has_pixel_size
|
|
// Access: Public
|
|
// Description: Returns true if the attribute has a pixel_size.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
has_pixel_size() const {
|
|
return (_flags & BAF_pixel_size)!=0;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::get_pixel_size
|
|
// Access: Public
|
|
// Description: Returns the attribute's pixel_size. It is an error to
|
|
// call this without first verifying that has_pixel_size() is
|
|
// true.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE float BuilderAttribTempl<VT, NT, TT, CT>::
|
|
get_pixel_size() const {
|
|
nassertr(has_pixel_size(), _pixel_size);
|
|
return _pixel_size;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::set_pixel_size
|
|
// Access: Public
|
|
// Description: Resets the attribute's pixel_size.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
set_pixel_size(float s) {
|
|
_flags |= BAF_pixel_size;
|
|
_pixel_size = s;
|
|
return *this;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::clear_pixel_size
|
|
// Access: Public
|
|
// Description: Removes the attribute's pixel_size.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE BuilderAttribTempl<VT, NT, TT, CT> &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
clear_pixel_size() {
|
|
_flags &= ~BAF_pixel_size;
|
|
return *this;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::operator ==
|
|
// Access: Public
|
|
// Description: Assigns an ordering to the vertices. This is used by
|
|
// the Mesher to group identical vertices. This assumes
|
|
// that all vertices in the locus of consideration will
|
|
// share the same state: with or without normals,
|
|
// texcoords, etc.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
operator == (const BuilderAttribTempl<VT, NT, TT, CT> &other) const {
|
|
return compare_to(other) == 0;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::operator !=
|
|
// Access: Public
|
|
// Description: Assigns an ordering to the vertices. This is used by
|
|
// the Mesher to group identical vertices. This assumes
|
|
// that all vertices in the locus of consideration will
|
|
// share the same state: with or without normals,
|
|
// texcoords, etc.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
operator != (const BuilderAttribTempl<VT, NT, TT, CT> &other) const {
|
|
return !operator == (other);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::operator <
|
|
// Access: Public
|
|
// Description: Assigns an ordering to the vertices. This is used by
|
|
// the Mesher to group identical vertices. This assumes
|
|
// that all vertices in the locus of consideration will
|
|
// share the same state: with or without normals,
|
|
// texcoords, etc.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
INLINE bool BuilderAttribTempl<VT, NT, TT, CT>::
|
|
operator < (const BuilderAttribTempl<VT, NT, TT, CT> &other) const {
|
|
return compare_to(other) < 0;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::compare_to
|
|
// Access: Public
|
|
// Description: Returns a number less than zero if this object sorts
|
|
// before the indicated object, greater than zero if it
|
|
// sorts after, and zero if the objects are equivalent.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
int BuilderAttribTempl<VT, NT, TT, CT>::
|
|
compare_to(const BuilderAttribTempl<VT, NT, TT, CT> &other) const {
|
|
if (has_normal()) {
|
|
int normal_compare = builder_compare(_normal, other._normal);
|
|
if (normal_compare != 0) {
|
|
return normal_compare;
|
|
}
|
|
}
|
|
|
|
if (has_color()) {
|
|
int color_compare = builder_compare(_color, other._color);
|
|
if (color_compare != 0) {
|
|
return color_compare;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: BuilderAttribTempl::output
|
|
// Access: Public
|
|
// Description: Formats the attribs for output in some sensible way.
|
|
////////////////////////////////////////////////////////////////////
|
|
template <class VT, class NT, class TT, class CT>
|
|
ostream &BuilderAttribTempl<VT, NT, TT, CT>::
|
|
output(ostream &out) const {
|
|
if (this!=NULL) {
|
|
if (has_normal()) {
|
|
out << " normal " << get_normal();
|
|
}
|
|
|
|
if (has_color()) {
|
|
out << " color " << get_color();
|
|
}
|
|
}
|
|
return out;
|
|
}
|