*** empty log message ***

This commit is contained in:
David Rose 2001-02-22 01:49:34 +00:00
parent ae5974dabc
commit 2e840cf2a7
6 changed files with 211 additions and 11 deletions

View File

@ -242,3 +242,17 @@ string_to_double(const string &str, double &result) {
result = string_to_double(str, tail);
return tail.empty();
}
////////////////////////////////////////////////////////////////////
// Function: string_to_float
// Description: Another flavor of string_to_float(), this one
// returns true if the string is a perfectly valid
// number (and sets result to that value), or false
// otherwise.
////////////////////////////////////////////////////////////////////
bool
string_to_float(const string &str, float &result) {
string tail;
result = string_to_double(str, tail);
return tail.empty();
}

View File

@ -40,6 +40,7 @@ EXPCL_PANDA int string_to_int(const string &str, string &tail);
EXPCL_PANDA bool string_to_int(const string &str, int &result);
EXPCL_PANDA double string_to_double(const string &str, string &tail);
EXPCL_PANDA bool string_to_double(const string &str, double &result);
EXPCL_PANDA bool string_to_float(const string &str, float &result);
// Convenience function to make a string from anything that has an
// ostream operator.

View File

@ -60,7 +60,7 @@ private:
Filename _output_image_filename;
Filename _input_font_filename;
bool _got_output_size;
Colord _fg, _bg;
Colorf _fg, _bg;
bool _use_alpha;
int _output_xsize, _output_ysize, _output_zsize;
double _buffer_pixels;

View File

@ -0,0 +1,149 @@
// Filename: eggTextureCards.cxx
// Created by: drose (21Feb01)
//
////////////////////////////////////////////////////////////////////
#include "eggTextureCards.h"
#include <eggGroup.h>
#include <eggVertexPool.h>
#include <eggVertex.h>
#include <eggTexture.h>
#include <eggPolygon.h>
////////////////////////////////////////////////////////////////////
// Function: EggTextureCards::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
EggTextureCards::
EggTextureCards() : EggWriter(true, true) {
set_program_description
("egg-texture-cards generates an egg file consisting of several "
"square polygons, one for each texture name that appears on the "
"command line.\n\n"
"This is a handy thing to have for importing texture images through "
"egg-palettize, even when those textures do not appear on any real "
"geometry; it can also be used for creating a lot of simple polygons "
"for rendering click buttons and similar interfaces.");
clear_runlines();
add_runline("[opts] texture [texture ...] output.egg");
add_runline("[opts] -o output.egg texture [texture ...]");
add_runline("[opts] texture [texture ...] >output.egg");
add_option
("g", "left,right,bottom,top", 0,
"Specifies the geometry of each polygon. The default is a unit polygon "
"centered on the origin: -0.5,0.5,-0.5,0.5. Polygons are always created "
"on the X-Y plane.",
&EggTextureCards::dispatch_double_quad, NULL, &_polygon_geometry[0]);
add_option
("c", "r,g,b[,a]", 0,
"Specifies the color of each polygon. The default is white: 1,1,1,1.",
&EggTextureCards::dispatch_color, NULL, &_polygon_color[0]);
_polygon_geometry.set(-0.5, 0.5, -0.5, 0.5);
_polygon_color.set(1.0, 1.0, 1.0, 1.0);
}
////////////////////////////////////////////////////////////////////
// Function: EggTextureCards::handle_args
// Access: Protected, Virtual
// Description: Does something with the additional arguments on the
// command line (after all the -options have been
// parsed). Returns true if the arguments are good,
// false otherwise.
////////////////////////////////////////////////////////////////////
bool EggTextureCards::
handle_args(ProgramBase::Args &args) {
if (!check_last_arg(args)) {
return false;
}
if (args.empty()) {
nout << "No texture names specified on the command line.\n";
return false;
}
_texture_names.insert(_texture_names.end(), args.begin(), args.end());
return true;
}
////////////////////////////////////////////////////////////////////
// Function: EggTextureCards::run
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
void EggTextureCards::
run() {
// First, create an enclosing group and a vertex pool with four
// vertices. We can use the same four vertices on all polygons.
EggGroup *group = new EggGroup();
_data.add_child(group);
EggVertexPool *vpool = new EggVertexPool("vpool");
group->add_child(vpool);
//
// 1 4
//
//
// 2 3
//
EggVertex *v1 = vpool->make_new_vertex
(LPoint3d(_polygon_geometry[0], _polygon_geometry[3], 0.0));
EggVertex *v2 = vpool->make_new_vertex
(LPoint3d(_polygon_geometry[0], _polygon_geometry[2], 0.0));
EggVertex *v3 = vpool->make_new_vertex
(LPoint3d(_polygon_geometry[1], _polygon_geometry[2], 0.0));
EggVertex *v4 = vpool->make_new_vertex
(LPoint3d(_polygon_geometry[1], _polygon_geometry[3], 0.0));
v1->set_uv(TexCoordd(0.0, 1.0));
v2->set_uv(TexCoordd(0.0, 0.0));
v3->set_uv(TexCoordd(1.0, 0.0));
v4->set_uv(TexCoordd(1.0, 1.0));
// Now, create a texture reference and a polygon for each texture.
// We don't really care whether the texture files actually exist at
// this point yet.
vector_string::const_iterator ti;
for (ti = _texture_names.begin(); ti != _texture_names.end(); ++ti) {
Filename filename = (*ti);
string name = filename.get_basename_wo_extension();
EggTexture *tref = new EggTexture(name, filename);
group->add_child(tref);
// Each polygon gets placed in its own sub-group. This will make
// pulling them out by name at runtime possible.
EggGroup *sub_group = new EggGroup(name);
group->add_child(sub_group);
EggPolygon *poly = new EggPolygon();
sub_group->add_child(poly);
poly->set_texture(tref);
poly->set_color(_polygon_color);
poly->add_vertex(v1);
poly->add_vertex(v2);
poly->add_vertex(v3);
poly->add_vertex(v4);
}
// Done!
_data.write_egg(get_output());
}
int main(int argc, char *argv[]) {
EggTextureCards prog;
prog.parse_command_line(argc, argv);
prog.run();
return 0;
}

View File

@ -0,0 +1,36 @@
// Filename: eggTextureCards.h
// Created by: drose (21Feb01)
//
////////////////////////////////////////////////////////////////////
#ifndef EGGTEXTURECARDS_H
#define EGGTEXTURECARDS_H
#include <pandatoolbase.h>
#include <eggWriter.h>
#include <luse.h>
////////////////////////////////////////////////////////////////////
// Class : EggTextureCards
// Description : Generates an egg file featuring a number of polygons,
// one for each named texture. This is a support
// program for getting textures through egg-palettize.
////////////////////////////////////////////////////////////////////
class EggTextureCards : public EggWriter {
public:
EggTextureCards();
protected:
virtual bool handle_args(Args &args);
public:
void run();
LVecBase4d _polygon_geometry;
Colorf _polygon_color;
vector_string _texture_names;
};
#endif

View File

@ -707,12 +707,12 @@ dispatch_double_quad(const string &opt, const string &arg, void *var) {
// Access: Protected, Static
// Description: Standard dispatch function for an option that takes a
// color, either as r,g,b or as r,g,b,a. The data
// pointer is to an array of four doubles, e.g. a
// Colord.
// pointer is to an array of four floats, e.g. a
// Colorf.
////////////////////////////////////////////////////////////////////
bool ProgramBase::
dispatch_color(const string &opt, const string &arg, void *var) {
double *ip = (double *)var;
float *ip = (float *)var;
vector_string words;
tokenize(arg, words, ",");
@ -720,16 +720,16 @@ dispatch_color(const string &opt, const string &arg, void *var) {
bool okflag = false;
if (words.size() == 4) {
okflag =
string_to_double(words[0], ip[0]) &&
string_to_double(words[1], ip[1]) &&
string_to_double(words[2], ip[2]) &&
string_to_double(words[3], ip[3]);
string_to_float(words[0], ip[0]) &&
string_to_float(words[1], ip[1]) &&
string_to_float(words[2], ip[2]) &&
string_to_float(words[3], ip[3]);
} else if (words.size() == 3) {
okflag =
string_to_double(words[0], ip[0]) &&
string_to_double(words[1], ip[1]) &&
string_to_double(words[2], ip[2]);
string_to_float(words[0], ip[0]) &&
string_to_float(words[1], ip[1]) &&
string_to_float(words[2], ip[2]);
ip[3] = 1.0;
}