open_toontown_panda3d/panda/src/builder/builderProperties.cxx

129 lines
4.0 KiB
C++

// Filename: builderProperties.cxx
// Created by: drose (17Sep97)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001, 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://www.panda3d.org/license.txt .
//
// To contact the maintainers of this program write to
// panda3d@yahoogroups.com .
//
////////////////////////////////////////////////////////////////////
#include "builderProperties.h"
////////////////////////////////////////////////////////////////////
// Function: BuilderProperties::Ordering operator
// Access: Public
// Description: Defines an arbitrary ordering among different
// properties, and groups identical sets of properties
// together. This operator is used for the more
// important task of grouping BuilderBuckets together;
// see the comments for the similar function in
// builderBucket.cxx.
////////////////////////////////////////////////////////////////////
bool BuilderProperties::
operator < (const BuilderProperties &other) const {
int sv1 = sort_value();
int sv2 = other.sort_value();
if (sv1 != sv2) {
return sv1 < sv2;
}
if (_coplanar_threshold != other._coplanar_threshold) {
return _coplanar_threshold < other._coplanar_threshold;
}
if (_max_tfan_angle != other._max_tfan_angle) {
return _max_tfan_angle < other._max_tfan_angle;
}
if (_min_tfan_tris != other._min_tfan_tris) {
return _min_tfan_tris < other._min_tfan_tris;
}
if (_show_normals) {
if (_normal_scale != other._normal_scale) {
return _normal_scale < other._normal_scale;
}
if (_normal_color != other._normal_color) {
return _normal_color < other._normal_color;
}
}
return false;
}
////////////////////////////////////////////////////////////////////
// Function: BuilderPrimTempl::output
// Access: Public
// Description: Outputs the properties meaningfully.
////////////////////////////////////////////////////////////////////
void BuilderProperties::
output(ostream &out) const {
if (_mesh) {
out << "T-Mesh using Mesher\n";
if (_show_tstrips) {
out << "Color individual tristrips\n";
} else if (_show_qsheets) {
out << "Color individual quadsheets\n";
} else if (_show_quads) {
out << "Color individual quads\n";
}
if (_retesselate_coplanar) {
out << "Retesselate coplanar triangles when needed; threshold = "
<< _coplanar_threshold << "\n";
}
}
if (_subdivide_polys) {
out << "Subdivide polygons into tris.\n";
}
if (_consider_fans) {
out << "Look for possible triangle fans with max per-triangle angle of "
<< _max_tfan_angle << " degrees.\n";
if (_min_tfan_tris==0) {
out << "Do not create tfans";
} else {
out << "Do not create tfans smaller than " << _min_tfan_tris << " tris";
}
if (_unroll_fans) {
out << "; retesselate to tstrips.\n";
} else {
out << ".\n";
}
}
}
////////////////////////////////////////////////////////////////////
// Function: BuilderPrimTempl::sort_value
// Access: Protected
// Description: Returns a number for grouping properties. This is
// used as a helper function to the ordering operator,
// above. It simply collects all the booleans together
// into a single number.
////////////////////////////////////////////////////////////////////
int BuilderProperties::
sort_value() const {
return
((_mesh!=0) << 8) |
((_show_tstrips!=0) << 7) |
((_show_qsheets!=0) << 6) |
((_show_quads!=0) << 5) |
((_show_normals!=0) << 4) |
((_retesselate_coplanar!=0) << 3) |
((_unroll_fans!=0) << 2) |
((_subdivide_polys!=0) << 1) |
((_consider_fans!=0) << 0);
}