mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 01:07:51 -04:00
add -extra option
This commit is contained in:
parent
0810adaa2c
commit
f62de075c8
@ -24,6 +24,7 @@
|
|||||||
#include "sourceTextureImage.h"
|
#include "sourceTextureImage.h"
|
||||||
#include "pnmTextMaker.h"
|
#include "pnmTextMaker.h"
|
||||||
#include "pnmTextGlyph.h"
|
#include "pnmTextGlyph.h"
|
||||||
|
#include "eggData.h"
|
||||||
#include "eggGroup.h"
|
#include "eggGroup.h"
|
||||||
#include "eggPoint.h"
|
#include "eggPoint.h"
|
||||||
#include "eggPolygon.h"
|
#include "eggPolygon.h"
|
||||||
@ -31,6 +32,9 @@
|
|||||||
#include "eggVertexPool.h"
|
#include "eggVertexPool.h"
|
||||||
#include "eggVertex.h"
|
#include "eggVertex.h"
|
||||||
#include "string_utils.h"
|
#include "string_utils.h"
|
||||||
|
#include "dcast.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: EggMakeFont::Constructor
|
// Function: EggMakeFont::Constructor
|
||||||
@ -95,6 +99,16 @@ EggMakeFont() : EggWriter(true, false) {
|
|||||||
"the default is the set of ASCII characters.",
|
"the default is the set of ASCII characters.",
|
||||||
&EggMakeFont::dispatch_range, NULL, &_range);
|
&EggMakeFont::dispatch_range, NULL, &_range);
|
||||||
|
|
||||||
|
add_option
|
||||||
|
("extra", "file.egg", 0,
|
||||||
|
"Specifies additional externally-painted glyphs to mix into the "
|
||||||
|
"generated egg file. The named egg file is expected to contain one "
|
||||||
|
"or more groups, each of which is named with the decimal unicode "
|
||||||
|
"number of a character and should contain one polygon. These groups "
|
||||||
|
"are simply copied into the output egg file as if they were generated "
|
||||||
|
"locally. This option may be repeated.",
|
||||||
|
&EggMakeFont::dispatch_vector_string, NULL, &_extra_filenames);
|
||||||
|
|
||||||
add_option
|
add_option
|
||||||
("ppu", "pixels", 0,
|
("ppu", "pixels", 0,
|
||||||
"Specify the pixels per unit. This is the number of pixels in the "
|
"Specify the pixels per unit. This is the number of pixels in the "
|
||||||
@ -161,7 +175,8 @@ EggMakeFont() : EggWriter(true, false) {
|
|||||||
"should contain the string %d or %x (or some variant such as %03d) "
|
"should contain the string %d or %x (or some variant such as %03d) "
|
||||||
"which will be filled in with the Unicode number of each symbol. "
|
"which will be filled in with the Unicode number of each symbol. "
|
||||||
"If it is omitted, the default is based on the name of the egg file. "
|
"If it is omitted, the default is based on the name of the egg file. "
|
||||||
"This has no effect unless -nopal is specified.",
|
"This is used only if -nopal is specified; in the normal case, "
|
||||||
|
"without -nopal, use -pp instead.",
|
||||||
&EggMakeFont::dispatch_string, NULL, &_output_glyph_pattern);
|
&EggMakeFont::dispatch_string, NULL, &_output_glyph_pattern);
|
||||||
|
|
||||||
add_option
|
add_option
|
||||||
@ -389,6 +404,14 @@ run() {
|
|||||||
add_character(ri.get_code());
|
add_character(ri.get_code());
|
||||||
} while (ri.next());
|
} while (ri.next());
|
||||||
|
|
||||||
|
// If there are extra glyphs, pick them up.
|
||||||
|
if (!_extra_filenames.empty()) {
|
||||||
|
vector_string::const_iterator si;
|
||||||
|
for (si = _extra_filenames.begin(); si != _extra_filenames.end(); ++si) {
|
||||||
|
add_extra_glyphs(*si);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_no_palettize) {
|
if (_no_palettize) {
|
||||||
// Ok, no palettize step; just write out the egg file and all of
|
// Ok, no palettize step; just write out the egg file and all of
|
||||||
// the textures.
|
// the textures.
|
||||||
@ -596,6 +619,73 @@ make_tref(PNMTextGlyph *glyph, int character) {
|
|||||||
return tref;
|
return tref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: EggMakeFont::add_extra_glyphs
|
||||||
|
// Access: Private
|
||||||
|
// Description: Reads the indicated filename and adds any numbered
|
||||||
|
// groups into the current egg file.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void EggMakeFont::
|
||||||
|
add_extra_glyphs(const Filename &extra_filename) {
|
||||||
|
PT(EggData) extra_data = new EggData;
|
||||||
|
|
||||||
|
if (!extra_data->read(extra_filename)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_group->steal_children(*extra_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: EggMakeFont::r_add_extra_glyphs
|
||||||
|
// Access: Private
|
||||||
|
// Description: Recursively searches for numbered groups in the
|
||||||
|
// indicated egg file, and copies them to the current
|
||||||
|
// egg file.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void EggMakeFont::
|
||||||
|
r_add_extra_glyphs(EggGroupNode *egg_group) {
|
||||||
|
if (egg_group->is_of_type(EggGroup::get_class_type())) {
|
||||||
|
EggGroup *group = DCAST(EggGroup, egg_group);
|
||||||
|
if (is_numeric(group->get_name())) {
|
||||||
|
EggGroup *new_group = new EggGroup(group->get_name());
|
||||||
|
_group->add_child(new_group);
|
||||||
|
new_group->steal_children(*group);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EggGroupNode::iterator ci;
|
||||||
|
for (ci = egg_group->begin(); ci != egg_group->end(); ++ci) {
|
||||||
|
EggNode *child = (*ci);
|
||||||
|
if (child->is_of_type(EggGroupNode::get_class_type())) {
|
||||||
|
r_add_extra_glyphs(DCAST(EggGroupNode, child));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: EggMakeFont::is_numeric
|
||||||
|
// Access: Private, Static
|
||||||
|
// Description: Returns true if the indicated string is all numeric
|
||||||
|
// digits, false otherwise.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool EggMakeFont::
|
||||||
|
is_numeric(const string &str) {
|
||||||
|
if (str.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
string::const_iterator si;
|
||||||
|
for (si = str.begin(); si != str.end(); ++si) {
|
||||||
|
if (!isdigit(*si)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
EggMakeFont prog;
|
EggMakeFont prog;
|
||||||
prog.parse_command_line(argc, argv);
|
prog.parse_command_line(argc, argv);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "eggTexture.h"
|
#include "eggTexture.h"
|
||||||
#include "pmap.h"
|
#include "pmap.h"
|
||||||
#include "pvector.h"
|
#include "pvector.h"
|
||||||
|
#include "vector_string.h"
|
||||||
|
|
||||||
class PNMTextMaker;
|
class PNMTextMaker;
|
||||||
class PNMTextGlyph;
|
class PNMTextGlyph;
|
||||||
@ -60,11 +61,16 @@ private:
|
|||||||
void make_geom(PNMTextGlyph *glyph, int character);
|
void make_geom(PNMTextGlyph *glyph, int character);
|
||||||
EggTexture *get_tref(PNMTextGlyph *glyph, int character);
|
EggTexture *get_tref(PNMTextGlyph *glyph, int character);
|
||||||
EggTexture *make_tref(PNMTextGlyph *glyph, int character);
|
EggTexture *make_tref(PNMTextGlyph *glyph, int character);
|
||||||
|
void add_extra_glyphs(const Filename &extra_filename);
|
||||||
|
void r_add_extra_glyphs(EggGroupNode *egg_group);
|
||||||
|
static bool is_numeric(const string &str);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Colorf _fg, _bg, _interior;
|
Colorf _fg, _bg, _interior;
|
||||||
bool _got_interior;
|
bool _got_interior;
|
||||||
RangeDescription _range;
|
RangeDescription _range;
|
||||||
|
vector_string _extra_filenames;
|
||||||
double _pixels_per_unit;
|
double _pixels_per_unit;
|
||||||
double _point_size;
|
double _point_size;
|
||||||
double _poly_margin;
|
double _poly_margin;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user