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 + -
显示快捷键?