839 lines
26 KiB
C++
839 lines
26 KiB
C++
/* ************************
|
|
Copyright Terrain Experts Inc.
|
|
Terrain Experts Inc (TERREX) reserves all rights to this source code
|
|
unless otherwise specified in writing by the President of TERREX.
|
|
This copyright may be updated in the future, in which case that version
|
|
supercedes this one.
|
|
-------------------
|
|
Terrex Experts Inc.
|
|
4400 East Broadway #314
|
|
Tucson, AZ 85711
|
|
info@terrex.com
|
|
Tel: (520) 323-7990
|
|
************************
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
/* trpage_print.cpp
|
|
Print out the contents of a TerraPage archive.
|
|
This module provides an example of how to access each of the classes
|
|
within a TerraPage archive.
|
|
*/
|
|
|
|
#include "trpage_print.h"
|
|
|
|
/* ******************************************
|
|
Print Buffer implementation
|
|
The print buffer is a way to dump debugging data out
|
|
to a file (or console). You can make your own subclass
|
|
of trpgPrintBuffer if you have specific needs.
|
|
******************************************
|
|
*/
|
|
|
|
trpgPrintBuffer::trpgPrintBuffer()
|
|
{
|
|
curIndent = 0;
|
|
indentStr[0] = 0;
|
|
}
|
|
|
|
// Increase the current indent
|
|
void trpgPrintBuffer::IncreaseIndent(int amount)
|
|
{
|
|
curIndent+=amount;
|
|
updateIndent();
|
|
}
|
|
|
|
// Decrease the current indent
|
|
void trpgPrintBuffer::DecreaseIndent(int amount)
|
|
{
|
|
curIndent-=amount;
|
|
curIndent = MAX(0,curIndent);
|
|
updateIndent();
|
|
}
|
|
|
|
// Reprint the indent string
|
|
void trpgPrintBuffer::updateIndent()
|
|
{
|
|
int i;
|
|
for (i=0;i<MIN(199,curIndent);i++)
|
|
indentStr[i] = ' ';
|
|
indentStr[i] = 0;
|
|
}
|
|
|
|
// Constructors for File Print Buffer
|
|
|
|
trpgFilePrintBuffer::trpgFilePrintBuffer(FILE *inFp)
|
|
{
|
|
isMine = false;
|
|
fp = inFp;
|
|
valid = true;
|
|
}
|
|
|
|
trpgFilePrintBuffer::trpgFilePrintBuffer(char *file)
|
|
{
|
|
isMine = true;
|
|
fp = fopen(file,"w");
|
|
valid = fp != NULL;
|
|
}
|
|
|
|
// Destructor for File Print Buffer
|
|
|
|
trpgFilePrintBuffer::~trpgFilePrintBuffer()
|
|
{
|
|
if (isMine && fp)
|
|
fclose(fp);
|
|
fp = NULL;
|
|
valid = false;
|
|
}
|
|
|
|
// Print out a line of text
|
|
|
|
bool trpgFilePrintBuffer::prnLine(char *str)
|
|
{
|
|
if (!fp)
|
|
return false;
|
|
|
|
if (str) {
|
|
fprintf(fp,indentStr);
|
|
fprintf(fp,str);
|
|
fprintf(fp,"\n");
|
|
} else
|
|
fprintf(fp,"\n");
|
|
|
|
return true;
|
|
}
|
|
|
|
/* *************************************
|
|
Print Methods for TerraPage constructs
|
|
All the print methods for every TerraPage object that
|
|
is readable/writeable are here. These are used for
|
|
debugging.
|
|
*************************************
|
|
*/
|
|
|
|
/* Print out the header information.
|
|
*/
|
|
bool trpgHeader::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
buf.prnLine("----Archive Header----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"verMinor = %d, verMajor = %d",verMinor,verMajor); buf.prnLine(ls);
|
|
sprintf(ls,"dbVerMinor = %d, dbVerMajor = %d",dbVerMinor,dbVerMajor); buf.prnLine(ls);
|
|
sprintf(ls,"maxGroupID = %d",maxGroupID); buf.prnLine(ls);
|
|
sprintf(ls,"sw = (%f,%f), ne = (%f,%f)",sw.x,sw.y,ne.x,ne.y); buf.prnLine(ls);
|
|
sprintf(ls,"tileType = %d, origin = (%f,%f,%f)",tileType,origin.x,origin.y,origin.z); buf.prnLine(ls);
|
|
|
|
sprintf(ls,"numLods = %d",numLods); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int i=0;i<numLods;i++) {
|
|
sprintf(ls,"tileSize = (%f,%f), lodSizes = (%d,%d), lodRanges = %f",tileSize[i].x,tileSize[i].y,lodSizes[i].x,lodSizes[i].y,lodRanges[i]); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent(2);
|
|
buf.prnLine("");
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out texture environment information
|
|
*/
|
|
bool trpgTextureEnv::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
buf.prnLine("----Texture Environment----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"envMode = %d",envMode); buf.prnLine(ls);
|
|
sprintf(ls,"minFilter = %d, magFilter = %d",minFilter,magFilter); buf.prnLine(ls);
|
|
sprintf(ls,"wrapS = %d, wrapT = %d",wrapS,wrapT); buf.prnLine(ls);
|
|
buf.DecreaseIndent();
|
|
buf.prnLine("");
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out the material information
|
|
*/
|
|
bool trpgMaterial::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
buf.prnLine("----Material----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"isBumpMap = %d",(int)isBump);
|
|
sprintf(ls,"color = (%f,%f,%f)",color.red,color.green,color.blue); buf.prnLine(ls);
|
|
sprintf(ls,"ambient = (%f,%f,%f)",ambient.red,ambient.green,ambient.blue); buf.prnLine(ls);
|
|
sprintf(ls,"diffuse = (%f,%f,%f)",diffuse.red,diffuse.green,diffuse.blue); buf.prnLine(ls);
|
|
sprintf(ls,"specular = (%f,%f,%f)",specular.red,specular.green,specular.blue); buf.prnLine(ls);
|
|
sprintf(ls,"emission = (%f,%f,%f)",emission.red,emission.green,emission.blue); buf.prnLine(ls);
|
|
sprintf(ls,"shininess = %f, shadeModel = %d",shininess,shadeModel); buf.prnLine(ls);
|
|
sprintf(ls,"pointSize = %f, lineWidth = %f",pointSize,lineWidth); buf.prnLine(ls);
|
|
sprintf(ls,"cullMode = %d, alphaFunc = %d",cullMode,alphaFunc); buf.prnLine(ls);
|
|
sprintf(ls,"alpha = %f, alphaRef = %f",alpha,alphaRef); buf.prnLine(ls);
|
|
sprintf(ls,"autoNormal = %d",autoNormal); buf.prnLine(ls);
|
|
sprintf(ls,"numTile = %d",numTile); buf.prnLine(ls);
|
|
sprintf(ls,"numTex = %d",numTex); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int i=0;i<numTex;i++) {
|
|
sprintf(ls,"texID[%d] = %d",i,texids[i]); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
texEnvs[i].Print(buf);
|
|
buf.DecreaseIndent();
|
|
}
|
|
buf.DecreaseIndent(2);
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out the material tables.
|
|
*/
|
|
bool trpgMatTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
buf.prnLine("----Material Table----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"numTable = %d",numTable); buf.prnLine(ls);
|
|
sprintf(ls,"numMat = %d",numMat); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int j=0;j<numTable;j++) {
|
|
sprintf(ls,"----Sub Table %d----",j); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int i=0;i<numMat;i++) {
|
|
const trpgMaterial *mat;
|
|
sprintf(ls,"Material %d",i); buf.prnLine(ls);
|
|
mat = (const_cast<trpgMatTable *>(this))->GetMaterialRef(j,i);
|
|
mat->Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
}
|
|
buf.DecreaseIndent(2);
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out texture.
|
|
*/
|
|
bool trpgTexture::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Texture----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"mode = %d, type = %d",mode,type); buf.prnLine(ls);
|
|
sprintf(ls,"Name = %s",name); buf.prnLine(ls);
|
|
sprintf(ls,"useCount = %d",useCount); buf.prnLine(ls);
|
|
sprintf(ls,"sizeX = %d, sizeY = %d",sizeX,sizeY); buf.prnLine(ls);
|
|
sprintf(ls,"ismipmap = %d",isMipmap); buf.prnLine(ls);
|
|
sprintf(ls,"addr.file = %d, addr.offset = %d",addr.file,addr.offset); buf.prnLine(ls);
|
|
buf.DecreaseIndent();
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out texture table
|
|
*/
|
|
bool trpgTexTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Texture Table----");
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<texList.size();i++) {
|
|
sprintf(ls,"Texture %d",i); buf.prnLine(ls);
|
|
texList[i].Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out model table
|
|
*/
|
|
bool trpgModelTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Model Table----");
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<models.size();i++) {
|
|
sprintf(ls,"Model %d",i); buf.prnLine(ls);
|
|
models[i].Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out a model
|
|
*/
|
|
bool trpgModel::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Model----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"type = %d",type); buf.prnLine(ls);
|
|
if (name) {
|
|
sprintf(ls,"name = %s",name); buf.prnLine(ls);
|
|
}
|
|
sprintf(ls,"diskRef = %d",(int)diskRef), buf.prnLine(ls);
|
|
sprintf(ls,"useCount = %d",useCount); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out a tile header
|
|
*/
|
|
bool trpgTileHeader::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Tile Header----");
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"matList size = %d",matList.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
unsigned int i;
|
|
for (i=0;i<matList.size();i++) {
|
|
sprintf(ls,"matList[%d] = %d",i,matList[i]); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
sprintf(ls,"modelList size = %d",modelList.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<modelList.size();i++) {
|
|
sprintf(ls,"modelList[%d] = %d",i,modelList[i]); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
sprintf(ls,"local material list size = %d",locMats.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<locMats.size();i++)
|
|
locMats[i].Print(buf);
|
|
buf.DecreaseIndent();
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out color info
|
|
*/
|
|
bool trpgColorInfo::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Color Info----");
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"type = %d, bind = %d",type,bind); buf.prnLine(ls);
|
|
sprintf(ls,"colorData size = %d",data.size());
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<data.size();i++) {
|
|
sprintf(ls,"color[%d] = (%f,%f,%f)",i,data[i].red,data[i].blue,data[i].green); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent(2);
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out tex data info
|
|
*/
|
|
bool trpgTexData::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Tex Data----");
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"bind = %d",bind); buf.prnLine(ls);
|
|
if (floatData.size()) {
|
|
sprintf(ls,"tex coords (float) = %d",floatData.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<floatData.size()/2;i++) {
|
|
sprintf(ls,"tex coord[%d] = (%f,%f)",i,floatData[i*2+0],floatData[i*2+1]); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
} else {
|
|
if (doubleData.size()) {
|
|
sprintf(ls,"tex coords (double) = %d",doubleData.size());
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<doubleData.size()/2;i++) {
|
|
sprintf(ls,"tex coord[%d] = (%f,%f)",i,doubleData[i*2+0],doubleData[i*2+1]), buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
}
|
|
}
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out geometry data
|
|
*/
|
|
bool trpgGeometry::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Geometry Node----");
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"Material size = %d",materials.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
ls[0] = 0;
|
|
unsigned int i;
|
|
for (i=0;i<materials.size();i++) {
|
|
char locStr[100];
|
|
sprintf(locStr,"%d ",materials[i]);
|
|
strcat(ls,locStr);
|
|
}
|
|
buf.prnLine(ls);
|
|
buf.DecreaseIndent();
|
|
|
|
sprintf(ls,"primType = %d, numPrim = %d",primType,numPrim); buf.prnLine(ls);
|
|
sprintf(ls,"primLength size = %d",primLength.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
ls[0] = 0;
|
|
for (i=0;i<primLength.size();i++) {
|
|
char locStr[100];
|
|
sprintf(locStr,"%d ",primLength[i]);
|
|
strcat(ls,locStr);
|
|
}
|
|
buf.prnLine(ls);
|
|
buf.DecreaseIndent();
|
|
|
|
if (vertDataFloat.size()) {
|
|
sprintf(ls,"vert data (float) length = %d",vertDataFloat.size());
|
|
buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<vertDataFloat.size();i++) {
|
|
sprintf(ls,"(%f, %f, %f)",vertDataFloat[3*i],vertDataFloat[3*i+1],vertDataFloat[3*i+2]);
|
|
buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
} else {
|
|
if (vertDataDouble.size()) {
|
|
sprintf(ls,"vert data (double) length = %d",vertDataDouble.size());
|
|
buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<vertDataDouble.size();i++) {
|
|
sprintf(ls,"(%f, %f, %f)",vertDataDouble[3*i],vertDataDouble[3*i+1],vertDataDouble[3*i+2]);
|
|
buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
}
|
|
}
|
|
|
|
sprintf(ls,"normBind = %d",normBind); buf.prnLine(ls);
|
|
|
|
if (normDataFloat.size()) {
|
|
sprintf(ls,"norm data (float) length = %d",normDataFloat.size());
|
|
buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<normDataFloat.size()/3;i++) {
|
|
sprintf(ls,"(%f, %f, %f)",normDataFloat[3*i],normDataFloat[3*i+1],normDataFloat[3*i+2]);
|
|
buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
} else {
|
|
if (normDataDouble.size()) {
|
|
sprintf(ls,"norm data (double) length = %d",normDataDouble.size());
|
|
buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<normDataDouble.size()/3;i++) {
|
|
sprintf(ls,"(%f, %f, %f)",normDataDouble[3*i],normDataDouble[3*i+1],normDataDouble[3*i+2]);
|
|
buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
}
|
|
}
|
|
|
|
sprintf(ls,"color info size = %d",colors.size()); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<colors.size();i++) {
|
|
colors[i].Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
sprintf(ls,"tex data size = %d",texData.size());
|
|
buf.IncreaseIndent();
|
|
for (i=0;i<texData.size();i++) {
|
|
texData[i].Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
// Note: Do edge flags
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print group info
|
|
*/
|
|
bool trpgGroup::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Group Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d, numChild = %d",id,numChild); buf.prnLine(ls);
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print Attach info
|
|
*/
|
|
bool trpgAttach::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Attach Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d, parentID = %d, childPos = %d",id,parentID,childPos); buf.prnLine(ls);
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print billboard info
|
|
*/
|
|
bool trpgBillboard::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Billboard Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d, type = %d, mode = %d",id,type,mode); buf.prnLine(ls);
|
|
sprintf(ls,"center = (%f,%f,%f)",center.x,center.y,center.z); buf.prnLine(ls);
|
|
sprintf(ls,"axis = (%f,%f,%f)",axis.x,axis.y,axis.z); buf.prnLine(ls);
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print LOD info
|
|
*/
|
|
bool trpgLod::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----LOD Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d",id); buf.prnLine(ls);
|
|
sprintf(ls,"numRange (hint) = %d",numRange); buf.prnLine(ls);
|
|
sprintf(ls,"switchIn = %f, switchOut = %f, width = %f",switchIn,switchOut,width); buf.prnLine(ls);
|
|
sprintf(ls,"center = (%f,%f,%f)",center.x,center.y,center.z);
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
sprintf(ls,"rangeIndex = %d",rangeIndex); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print Layer info
|
|
*/
|
|
bool trpgLayer::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Layer Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d",id); buf.prnLine(ls);
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print Transform
|
|
*/
|
|
bool trpgTransform::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Transform Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"id = %d",id); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int i=0;i<4;i++) {
|
|
sprintf(ls,"%f %f %f %f",m[i][0],m[i][1],m[i][2],m[i][3]);
|
|
buf.prnLine(ls);
|
|
}
|
|
sprintf(ls,"name = %s", name ? name : "noname" ); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent(2);
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print Model Reference
|
|
*/
|
|
bool trpgModelRef::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Model Reference Node----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"modelRef = %d",modelRef); buf.prnLine(ls);
|
|
buf.IncreaseIndent();
|
|
for (int i=0;i<4;i++) {
|
|
sprintf(ls,"%f %f %f %f",m[i][0],m[i][1],m[i][2],m[i][3]);
|
|
buf.prnLine(ls);
|
|
}
|
|
|
|
buf.DecreaseIndent(2);
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Tile Table Print
|
|
*/
|
|
bool trpgTileTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Tile Table----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"mode = %d",mode); buf.prnLine(ls);
|
|
sprintf(ls,"numLod = %d",lodInfo.size()); buf.prnLine(ls);
|
|
for (unsigned int i=0;i<lodInfo.size();i++) {
|
|
const LodInfo &li = lodInfo[i];
|
|
sprintf(ls,"LOD %d, numX = %d, numY = %d",i,li.numX,li.numY); buf.prnLine(ls);
|
|
buf.prnLine("File ID, Offset, Zmin, Zmax");
|
|
buf.IncreaseIndent();
|
|
for (unsigned int j=0;j<li.addr.size();j++) {
|
|
sprintf(ls,"%d %d %f %f",li.addr[j].file,li.addr[j].offset,li.elev_min[j],li.elev_max[j]); buf.prnLine(ls);
|
|
}
|
|
buf.DecreaseIndent();
|
|
}
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Local Material Print
|
|
*/
|
|
bool trpgLocalMaterial::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Local Material Definition----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"baseMat = %d",baseMat); buf.prnLine(ls);
|
|
sprintf(ls,"(sx,sy) -> (ex,ey) = (%d,%d) -> (%d,%d)",sx,sy,ex,ey); buf.prnLine(ls);
|
|
sprintf(ls,"dest (width,height) = (%d,%d)",destWidth,destHeight); buf.prnLine(ls);
|
|
sprintf(ls,"addr (file,offset) = (%d,%d)",addr.file,addr.offset); buf.prnLine(ls);
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Light Attribute Print
|
|
*/
|
|
bool trpgLightAttr::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
const char* strType[] = {"Raster","Calligraphic","RASCAL"};
|
|
const char* strDirect[] = {"Omnidirectional","Bidirectional","Unidirectional"};
|
|
const char* strQuality[] = {"Off","Low","Medium","High","Undefined"};
|
|
|
|
buf.prnLine("----Light Attribute----");
|
|
buf.IncreaseIndent();
|
|
sprintf(ls,"type = %s",strType[(int)(data.type)]); buf.prnLine(ls);
|
|
sprintf(ls,"directionality = %s",strDirect[(int)(data.directionality)]);buf.prnLine(ls);
|
|
sprintf(ls,"front color (RGB) = %.2lf, %.2lf, %.2lf",
|
|
data.frontColor.red, data.frontColor.green,data.frontColor.blue ); buf.prnLine(ls);
|
|
sprintf(ls,"front intensity = %.2lf", data.frontIntensity ); buf.prnLine(ls);
|
|
sprintf(ls,"back color (RGB) = %.2lf, %.2lf, %.2lf",
|
|
data.backColor.red, data.backColor.green,data.backColor.blue ); buf.prnLine(ls);
|
|
sprintf(ls,"back intensity = %.2lf", data.backIntensity ); buf.prnLine(ls);
|
|
sprintf(ls,"normal (xyz) = %.2lf,%.2lf,%.2lf",
|
|
data.normal.x,data.normal.y,data.normal.z ); buf.prnLine(ls);
|
|
sprintf(ls,"smc = %d",data.smc); buf.prnLine(ls);
|
|
sprintf(ls,"fid = %d",data.fid); buf.prnLine(ls);
|
|
sprintf(ls,"visible at DAY = %s",
|
|
(data.flags & trpgLightAttr::trpg_Day ? "yes" : "no") ); buf.prnLine(ls);
|
|
sprintf(ls,"visible at DUSK = %s",
|
|
(data.flags & trpgLightAttr::trpg_Dusk ? "yes" : "no") ); buf.prnLine(ls);
|
|
sprintf(ls,"visible at NIGHT = %s",
|
|
(data.flags & trpgLightAttr::trpg_Night ? "yes" : "no") ); buf.prnLine(ls);
|
|
sprintf(ls,"enable directionality = %s",
|
|
(data.flags & trpgLightAttr::trpg_Directional ? "yes" : "no" )); buf.prnLine(ls);
|
|
sprintf(ls,"enable back color = %s",
|
|
(data.flags & trpgLightAttr::trpg_BackColor ? "yes" : "no" )); buf.prnLine(ls);
|
|
sprintf(ls,"horizontal lobe angle = %.2lf",data.horizontalLobeAngle); buf.prnLine(ls);
|
|
sprintf(ls,"vertical lobe angle = %.2lf",data.verticalLobeAngle); buf.prnLine(ls);
|
|
sprintf(ls,"lobe roll angle = %.2lf",data.lobeRollAngle); buf.prnLine(ls);
|
|
sprintf(ls,"lobe falloff = %.2lf",data.lobeFalloff); buf.prnLine(ls);
|
|
sprintf(ls,"ambient intensity = %.2lf",data.ambientIntensity); buf.prnLine(ls);
|
|
sprintf(ls,"reflective only = %s",
|
|
(data.flags & trpgLightAttr::trpg_Reflective ? "yes" : "no") ); buf.prnLine(ls);
|
|
sprintf(ls,"quality = %s", strQuality[(int)(data.quality)]); buf.prnLine(ls);
|
|
sprintf(ls,"significance for RASCAL lights = %.2lf",
|
|
data.rascalSignificance ); buf.prnLine(ls);
|
|
sprintf(ls,"calligraphic draw order = %d",
|
|
data.calligraphicAttr.drawOrder ); buf.prnLine(ls);
|
|
sprintf(ls,"calligraphic lights maximum defocus = %f",
|
|
data.calligraphicAttr.maxDefocus ); buf.prnLine(ls);
|
|
sprintf(ls,"calligraphic lights minimum defocus = %f",
|
|
data.calligraphicAttr.minDefocus ); buf.prnLine(ls);
|
|
sprintf(ls,"randomize intensity = %s",
|
|
strQuality[(int)(data.randomIntensity)]); buf.prnLine(ls);
|
|
sprintf(ls,"performer perspective mode = %s",
|
|
(data.flags & trpgLightAttr::trpg_Perspective ? "yes" : "no" ) ); buf.prnLine(ls);
|
|
sprintf(ls,"performer fade = %s",
|
|
(data.flags & trpgLightAttr::trpg_Fade ? "yes" : "no" ) ); buf.prnLine(ls);
|
|
sprintf(ls,"performer fog punch = %s",
|
|
(data.flags & trpgLightAttr::trpg_FogPunch ? "yes" : "no" ) ); buf.prnLine(ls);
|
|
sprintf(ls,"performer range mode enable Z buffer = %s",
|
|
(data.flags & trpgLightAttr::trpg_ZBuffer ? "yes" : "no" ) ); buf.prnLine(ls);
|
|
sprintf(ls,"performer maximum pixel size = %.2lf",
|
|
data.performerAttr.maxPixelSize ); buf.prnLine(ls);
|
|
sprintf(ls,"performer minimum pixel size = %.2lf",
|
|
data.performerAttr.minPixelSize ); buf.prnLine(ls);
|
|
sprintf(ls,"performer actual size = %.2lf",
|
|
data.performerAttr.actualSize ); buf.prnLine(ls);
|
|
sprintf(ls,"performer transparent pixel size = %.2lf",
|
|
data.performerAttr.transparentPixelSize ); buf.prnLine(ls);
|
|
sprintf(ls,"performer transparent falloff exponent = %.2lf",
|
|
data.performerAttr.transparentFallofExp ); buf.prnLine(ls);
|
|
sprintf(ls,"performer transparent scale = %.2lf",
|
|
data.performerAttr.transparentScale ); buf.prnLine(ls);
|
|
sprintf(ls,"performer transparent clamp = %.2lf",
|
|
data.performerAttr.transparentClamp ); buf.prnLine(ls);
|
|
sprintf(ls,"performer fog scale = %.2lf",
|
|
data.performerAttr.fogScale ); buf.prnLine(ls);
|
|
sprintf(ls,"animation period = %.2lf",data.animationAttr.period); buf.prnLine(ls);
|
|
sprintf(ls,"animation phase delay = %.2lf",
|
|
data.animationAttr.phaseDelay ); buf.prnLine(ls);
|
|
sprintf(ls,"animation time on = %.2lf",data.animationAttr.timeOn); buf.prnLine(ls);
|
|
sprintf(ls,"animation vector (ijk) = %.2lf, %.2lf, %.2lf",
|
|
data.animationAttr.vector.x,data.animationAttr.vector.y,
|
|
data.animationAttr.vector.z); buf.prnLine(ls);
|
|
sprintf(ls,"animation - flashing = %s",
|
|
(data.flags & trpgLightAttr::trpg_Flashing ? "yes" : "no" )); buf.prnLine(ls);
|
|
sprintf(ls,"animation - rotating = %s",
|
|
(data.flags & trpgLightAttr::trpg_Rotating ? "yes" : "no" )); buf.prnLine(ls);
|
|
sprintf(ls,"animation - counter clockwise = %s",
|
|
(data.flags & trpgLightAttr::trpg_ClockWise ? "yes" : "no" )); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out light table
|
|
*/
|
|
bool trpgLightTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Light Table----");
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<lightList.size();i++) {
|
|
sprintf(ls,"Light %d",i); buf.prnLine(ls);
|
|
lightList[i].Print(buf);
|
|
}
|
|
buf.DecreaseIndent();
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out a light node
|
|
*/
|
|
|
|
bool trpgLight::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Light----");
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"Light Index = %d",index); buf.prnLine(ls);
|
|
sprintf(ls,"# Light Locations = %d",lightPoints.size() ); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
|
|
buf.prnLine();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out a single range
|
|
*/
|
|
|
|
bool trpgRange::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.IncreaseIndent();
|
|
|
|
sprintf(ls,"category = %s, subCategory = %s",category,subCategory); buf.prnLine(ls);
|
|
sprintf(ls,"inLod = %f, outLod = %f",inLod,outLod); buf.prnLine(ls);
|
|
sprintf(ls,"priority = %d",priority); buf.prnLine(ls);
|
|
|
|
buf.DecreaseIndent();
|
|
|
|
return true;
|
|
}
|
|
|
|
/* Print out the whole range table
|
|
*/
|
|
|
|
bool trpgRangeTable::Print(trpgPrintBuffer &buf) const
|
|
{
|
|
char ls[1024];
|
|
|
|
buf.prnLine("----Range Table----");
|
|
buf.IncreaseIndent();
|
|
for (unsigned int i=0;i<rangeList.size();i++) {
|
|
sprintf(ls,"----Range %d----",i); buf.prnLine(ls);
|
|
rangeList[i].Print(buf);
|
|
}
|
|
|
|
buf.DecreaseIndent();
|
|
|
|
return true;
|
|
}
|