trpage_nodes.cpp

来自「最新osg包」· C++ 代码 · 共 944 行 · 第 1/2 页

CPP
944
字号
    if ( name && strlen(name) ) {	buf.Add(name);    }    buf.End();	    return true;}// Read layerbool trpgLayer::Read(trpgReadBuffer &buf){    try {	buf.Get(numChild);	if (numChild < 0) throw 1;	buf.Get(id);	if (id < 0) throw 1;	if ( !buf.isEmpty() ) {	    char nm[1024] = {0};	    buf.Get(nm,1024);	    SetName(nm);	}    }    catch (...) {	return false;    }    return isValid();}// Reset functionvoid trpgLayer::Reset(){    numChild = 0;    if ( name ) {	delete [] name;	name = 0;    }}/* Write Transform   Matrix defining the transform with children.*/// ConstructortrpgTransform::trpgTransform(){    name = 0;    Reset();}trpgTransform::~trpgTransform(){    Reset();}// Reset functionvoid trpgTransform::Reset(){    id = -1;    // Note: Is this row major or column major?    m[0][0] = 1; m[0][1] = 0; m[0][2] = 0; m[0][3] = 0;    m[1][0] = 0; m[1][1] = 1; m[1][2] = 0; m[1][3] = 0;    m[2][0] = 0; m[2][1] = 0; m[2][2] = 1; m[2][3] = 0;    m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;    if ( name ) {	delete [] name;	name = 0;    }}// Set functionsvoid trpgTransform::SetMatrix(const float64 *im){    m[0][0] = im[4*0+0]; m[0][1] = im[4*0+1]; m[0][2] = im[4*0+2]; m[0][3] = im[4*0+3];    m[1][0] = im[4*1+0]; m[1][1] = im[4*1+1]; m[1][2] = im[4*1+2]; m[1][3] = im[4*1+3];    m[2][0] = im[4*2+0]; m[2][1] = im[4*2+1]; m[2][2] = im[4*2+2]; m[2][3] = im[4*2+3];    m[3][0] = im[4*3+0]; m[3][1] = im[4*3+1]; m[3][2] = im[4*3+2]; m[3][3] = im[4*3+3];}// Get methodsbool trpgTransform::GetMatrix(float64 *rm) const{    if (!isValid()) return false;    for (int i=0;i<4;i++)	for (int j=0;j<4;j++)	    // Note: is this right?	    rm[i*4+j] = m[i][j];    return true;}// Write transformbool trpgTransform::Write(trpgWriteBuffer &buf){    if (!isValid())	return false;    buf.Begin(TRPG_TRANSFORM);    buf.Add(numChild);    buf.Add(id);    for (int i=0;i<4;i++)	for (int j=0;j<4;j++)	    buf.Add(m[i][j]);    if ( name && strlen(name) ) {	buf.Add(name);    }    buf.End();    return true;}// Read transformbool trpgTransform::Read(trpgReadBuffer &buf){    try {	buf.Get(numChild);	buf.Get(id);	if (numChild < 0) throw 1;	for (int i=0;i<4;i++)	    for (int j=0;j<4;j++)		buf.Get(m[i][j]);	if ( !buf.isEmpty() ) {	    char nm[1024] = {0};	    buf.Get(nm,1024);	    SetName(nm);	}    }    catch (...) {	return false;    }    return isValid();}/* Model Reference   This is just a matrix transform and a model ID.*/// ConstructortrpgModelRef::trpgModelRef(){    Reset();}trpgModelRef::~trpgModelRef(){}// Reset functionvoid trpgModelRef::Reset(){    m[0][0] = 1; m[0][1] = 0; m[0][2] = 0; m[0][3] = 0;    m[1][0] = 0; m[1][1] = 1; m[1][2] = 0; m[1][3] = 0;    m[2][0] = 0; m[2][1] = 0; m[2][2] = 1; m[2][3] = 0;    m[3][0] = 0; m[3][1] = 0; m[3][2] = 0; m[3][3] = 1;    modelRef = -1;}// Set functionsvoid trpgModelRef::SetModel(int id){    modelRef = id;    valid = true;}void trpgModelRef::SetMatrix(const float64 *im){    m[0][0] = im[4*0+0]; m[0][1] = im[4*0+1]; m[0][2] = im[4*0+2]; m[0][3] = im[4*0+3];    m[1][0] = im[4*1+0]; m[1][1] = im[4*1+1]; m[1][2] = im[4*1+2]; m[1][3] = im[4*1+3];    m[2][0] = im[4*2+0]; m[2][1] = im[4*2+1]; m[2][2] = im[4*2+2]; m[2][3] = im[4*2+3];    m[3][0] = im[4*3+0]; m[3][1] = im[4*3+1]; m[3][2] = im[4*3+2]; m[3][3] = im[4*3+3];}// Get methodsbool trpgModelRef::GetModel(int32 &mod) const{    if (!isValid()) return false;    mod = modelRef;    return true;}bool trpgModelRef::GetMatrix(float64 *rm) const{    if (!isValid()) return false;    for (int i=0;i<4;i++)	for (int j=0;j<4;j++)	    // Note: is this right?	    rm[i*4+j] = m[i][j];    return true;}// Write model referencebool trpgModelRef::Write(trpgWriteBuffer &buf){    if (!isValid())	return false;	    buf.Begin(TRPG_MODELREF);    buf.Add(modelRef);    for (int i=0;i<4;i++)	for (int j=0;j<4;j++)	    buf.Add(m[i][j]);    buf.End();    return true;}// Read model referencebool trpgModelRef::Read(trpgReadBuffer &buf){    try {	buf.Get(modelRef);	if (modelRef < 0) 	    throw 1;	for (int i=0;i<4;i++)	    for (int j=0;j<4;j++)		buf.Get(m[i][j]);    }    catch (...) {	return false;    }    valid = true;    return isValid();}/* Attach Node   You'll find one of these in each tile, except for the lowest LOD.   It's basically a group with some extra info that tells you where to attach it.   The ID corresponds to the one in Group and LOD.*/// ConstructortrpgAttach::trpgAttach(){    name = 0;    Reset();}trpgAttach::~trpgAttach(){    Reset();}// Resetvoid trpgAttach::Reset(){    parentID = -1;    childPos = -1;    if ( name ) {	delete [] name;	name = 0;    }}// Parent ID is the node this one gets attached tovoid trpgAttach::SetParentID(int id){    parentID = id;}bool trpgAttach::GetParentID(int &id) const{    if (!isValid()) return false;    id = parentID;    return true;}// Child Position is a unique number of parent// It could be used as an array index, for examplevoid trpgAttach::SetChildPos(int id){    childPos = id;}bool trpgAttach::GetChildPos(int &id) const{    if (!isValid()) return false;    id = childPos;    return true;}// Validity checkbool trpgAttach::isValid() const{    if (parentID < 0 || childPos < 0) return false;    return true;}// Write Attach nodebool trpgAttach::Write(trpgWriteBuffer &buf){    if (!isValid()) return false;    buf.Begin(TRPG_ATTACH);    buf.Add(numChild);    buf.Add(id);    buf.Add(parentID);    buf.Add(childPos);    if ( name && strlen(name) ) {	buf.Add(name);    }    buf.End();    return true;}// Read Attach nodebool trpgAttach::Read(trpgReadBuffer &buf){    try {	buf.Get(numChild);	buf.Get(id);	if (id < 0)  throw 1;	buf.Get(parentID);	if (parentID < 0) throw 1;	buf.Get(childPos);	if (childPos < 0) throw 1;	if ( !buf.isEmpty() ) {	    char nm[1024] = {0};	    buf.Get(nm,1024);	    SetName(nm);	}    }    catch (...) {	return false;    }    return true;}/* ChildRef Node   You'll find in the parent tile one of these for each tile children.   It gives the children grid location and file address.*/// ConstructortrpgChildRef::trpgChildRef(){    Reset();}trpgChildRef::~trpgChildRef(){    Reset();}// Resetvoid trpgChildRef::Reset(){    x = -1;    y = -1;    lod = -1;    addr.file = -1;    addr.offset = -1;}void trpgChildRef::SetTileLoc(int gx,int gy,int glod){    x = gx;    y = gy;    lod = glod;}bool trpgChildRef::GetTileLoc(int &gx,int &gy,int &glod) const{    if (!isValid()) return false;    gx = x;    gy = y;    glod = lod;    return true;}void trpgChildRef::SetTileAddress(const trpgwAppAddress& gAddr){    addr = gAddr;}void trpgChildRef::SetTileAddress(int32 file, int32 offset){    addr.file = file;    addr.offset = offset;}bool trpgChildRef::GetTileAddress(int32& file, int32& offset) const{    if (!isValid()) return false;    file = addr.file;    offset = addr.offset;    return true;}bool trpgChildRef::GetTileAddress(trpgwAppAddress& gAddr) const{    if (!isValid()) return false;    gAddr = addr;    return true;}void trpgChildRef::SetTileZValue( float gZmin, float gZmax){    zmin = gZmin;    zmax = gZmax;}bool trpgChildRef::GetTileZValue( float& gZmin, float& gZmax) const{    if (!isValid()) return false;    gZmin = zmin;    gZmax = zmax;    return true;}// Validity checkbool trpgChildRef::isValid() const{    if (lod < 0) 	return false;    return true;}// Write Attach nodebool trpgChildRef::Write(trpgWriteBuffer &buf){    if (!isValid()) return false;    buf.Begin(TRPG_CHILDREF);    buf.Add(lod);    buf.Add(x);    buf.Add(y);    buf.Add(addr.file);    buf.Add(addr.offset);    buf.Add(zmin);    buf.Add(zmax);    buf.End();    return true;}// Read Attach nodebool trpgChildRef::Read(trpgReadBuffer &buf){    try    {	buf.Get(lod);	if (lod <  0) throw 1;	buf.Get(x);	buf.Get(y);	buf.Get(addr.file);	buf.Get(addr.offset);	buf.Get(zmin);	buf.Get(zmax);      }    catch (...)    {	return false;    }    return true;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?