www.pudn.com > sancedit.rar > ControlDialog.cpp
// TestDialog.cpp : implementation file
//
#include "stdafx.h"
#include "MapGen.h"
#include "OgreFrameWork.h"
#include "ControlDialog.h"
#include "OgreXMLPrerequisites.h"
#include "OgreStringConverter.h"
#pragma once
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#undef THIS_FILE
//static char THIS_FILE[] = __FILE__;
//#endif
/////////////////////////////////////////////////////////////////////////////
// CControlDialog dialog
CControlDialog::CControlDialog(CWnd* pParent /*=NULL*/)
: CDialog(CControlDialog::IDD, pParent)
{
m_Edit = NULL;
m_bInit = FALSE;
m_NumberOfNodes = 0;
m_SelectedNodeName[0] = 0;
//{{AFX_DATA_INIT(CControlDialog)
//}}AFX_DATA_INIT
}
void CControlDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CControlDialog)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CControlDialog, CDialog)
//{{AFX_MSG_MAP(CControlDialog)
ON_WM_SIZE()
ON_NOTIFY(TVN_SELCHANGED, IDC_EDIT2, OnSelchangedEdit2)
ON_BN_CLICKED(IDC_ROTATE, OnRotate)
ON_BN_CLICKED(IDC_POSITION, OnPosition)
ON_BN_CLICKED(IDC_SCALE, OnScale)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CControlDialog message handlers
void CControlDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(!m_bInit)
return;
CRect TopHalf;
GetClientRect(TopHalf);
TopHalf.bottom = TopHalf.bottom / 2;
TopHalf.DeflateRect(5,5);
CRect BottomHalf;
GetClientRect(BottomHalf);
BottomHalf.top = BottomHalf.bottom / 2;
BottomHalf.DeflateRect(5,5);
m_Edit = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
m_Edit->MoveWindow(TopHalf);
//IDC_BOTTOM_FRAME
CRect BottomFrame;
CPoint Delta;
GetDlgItem(IDC_BOTTOM_FRAME)->GetWindowRect(BottomFrame);
CRect buttonrect;
GetDlgItem(IDC_DELETE)->GetWindowRect(buttonrect);
Delta.x = buttonrect.left - BottomFrame.left;
Delta.y = buttonrect.top - BottomFrame.top;
char str[128];
sprintf(str,"%d %d",Delta.x,Delta.y);
// AfxMessageBox(str);
RECT rc;
GetDlgItem(IDC_DELETE)->GetClientRect(&rc);
//GetDlgItem(IDC_DELETE)->MoveWindow(Delta.x,Delta.y + BottomHalf.top,rc.right,rc.bottom);
// GetDlgItem(IDC_DELETE)->MoveWindow(0+Delta.x,BottomHalf.top+Delta.y,rc.right,rc.bottom);
}
CControlDialog* CControlDialog::m_Inst = NULL;
BOOL CControlDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_Inst = this;
CRect sz;
GetClientRect(sz);
sz.DeflateRect(5,5);
/* m_bInit = TRUE;
m_Edit = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
HTREEITEM i1 = m_Edit->InsertItem("Root 1");
m_Edit->InsertItem("Branch 1", i1);
m_Edit->InsertItem("Branch 2", i1);
m_Edit->InsertItem("Branch 3", i1);
HTREEITEM i2 = m_Edit->InsertItem("Root 2");
m_Edit->InsertItem("Branch 1", i2);
m_Edit->InsertItem("Branch 2", i2);
m_Edit->InsertItem("Branch 3", i2);
HTREEITEM i3 = m_Edit->InsertItem("Root 3");
m_Edit->InsertItem("Branch 1", i3);
m_Edit->InsertItem("Branch 2", i3);
m_Edit->InsertItem("Branch 3", i3);
*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CControlDialog::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
bool CControlDialog::IsUniqueEntityNode(char *entityName,char *nodeName) {
int i;
for (i = 0; i < m_NumberOfNodes; i++)
{
if (m_vNodeCollection[i].isactive)
{
if (strcmpi(m_vNodeCollection[i].nodename,nodeName) == 0)
{
return false;
}
if (strcmpi(m_vNodeCollection[i].entityname,entityName) == 0)
{
return false;
}
}
}
return true;
}
bool CControlDialog::AddNode(char *meshFile,char *entityName,char *nodeName)
{
if (IsUniqueEntityNode(entityName,nodeName) == false) return false;
COgreFrameWork::GetInstance()->PlaceMeshAtCamera(meshFile,entityName,nodeName);
nodeinfo_struct nodeinfo;
strcpy(nodeinfo.meshfile,meshFile);
strcpy(nodeinfo.entityname,entityName);
strcpy(nodeinfo.nodename,nodeName);
nodeinfo.isactive = true;
m_NumberOfNodes++;
m_vNodeCollection.push_back(nodeinfo);
m_Edit = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
HTREEITEM i1 = m_Edit->InsertItem(nodeName);
m_Edit->SelectItem(i1);
return true;
}
void CControlDialog::OnSelchangedEdit2(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
HTREEITEM hItem = pTree->GetSelectedItem();
CString selectedNode = pTree->GetItemText(hItem);
// AfxMessageBox(selectedNode);
strcpy(m_SelectedNodeName,(LPCTSTR)selectedNode);
// update fields in dialog
char str[128];
float pos[3];
COgreFrameWork::GetInstance()->GetNodePosition(m_SelectedNodeName,pos);
sprintf(str,"X: %3.3f",pos[0]);
GetDlgItem(IDC_STATIC_TX)->SetWindowText(str);
sprintf(str,"Y: %3.3f",pos[1]);
GetDlgItem(IDC_STATIC_TY)->SetWindowText(str);
sprintf(str,"Z: %3.3f",pos[2]);
GetDlgItem(IDC_STATIC_TZ)->SetWindowText(str);
float scale[3];
COgreFrameWork::GetInstance()->GetNodeScale(m_SelectedNodeName,scale);
sprintf(str,"X: %3.3f",scale[0]);
GetDlgItem(IDC_STATIC_SX)->SetWindowText(str);
sprintf(str,"Y: %3.3f",scale[1]);
GetDlgItem(IDC_STATIC_SY)->SetWindowText(str);
sprintf(str,"Z: %3.3f",scale[2]);
GetDlgItem(IDC_STATIC_SZ)->SetWindowText(str);
COgreFrameWork::GetInstance()->HighLight(m_SelectedNodeName,true);
GetDlgItem(IDC_STATIC_NODENAME)->SetWindowText(m_SelectedNodeName);
int index = CollectionIndexFromName(m_SelectedNodeName);
GetDlgItem(IDC_STATIC_MESHFILE)->SetWindowText(m_vNodeCollection[index].meshfile);
*pResult = 0;
}
void CControlDialog::OnRotate()
{
// TODO: Add your control notification handler code here
m_eEditMode = eROTATE;
CButton *radio;
radio = (CButton *)GetDlgItem(IDC_RADIO1);
radio->SetCheck(1);
radio = (CButton *)GetDlgItem(IDC_RADIO2);
radio->SetCheck(0);
radio = (CButton *)GetDlgItem(IDC_RADIO3);
radio->SetCheck(0);
}
void CControlDialog::OnPosition()
{
// TODO: Add your control notification handler code here
m_eEditMode = eTRANSLATE;
CButton *radio;
radio = (CButton *)GetDlgItem(IDC_RADIO1);
radio->SetCheck(0);
radio = (CButton *)GetDlgItem(IDC_RADIO2);
radio->SetCheck(1);
radio = (CButton *)GetDlgItem(IDC_RADIO3);
radio->SetCheck(0);
}
void CControlDialog::OnScale()
{
// TODO: Add your control notification handler code here
m_eEditMode = eSCALE;
CButton *radio;
radio = (CButton *)GetDlgItem(IDC_RADIO1);
radio->SetCheck(0);
radio = (CButton *)GetDlgItem(IDC_RADIO2);
radio->SetCheck(0);
radio = (CButton *)GetDlgItem(IDC_RADIO3);
radio->SetCheck(1);
}
void CControlDialog::OnDelete()
{
// find the selected node
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
HTREEITEM hItem = pTree->GetSelectedItem();
if (hItem == NULL) {
AfxMessageBox("Select a Node from the tree to delete");
return;
}
CString selectedNode = pTree->GetItemText(hItem);
char *pStr = (char *)(LPCTSTR)selectedNode;
int nindex = CollectionIndexFromName(pStr);
if (nindex < 0) {
AfxMessageBox("Node not found");
return;
}
// set the node in the collection as not active
m_vNodeCollection[nindex].isactive = false;
// delete the node from the scene manager in ogre
COgreFrameWork::GetInstance()->DeleteNode(pStr);
// delete the item from the tree
pTree->DeleteItem(hItem);
}
int CControlDialog::CollectionIndexFromName(char *nodeName)
{
int i;
for (i = 0; i < m_NumberOfNodes; i++)
{
if (m_vNodeCollection[i].isactive)
{
if (strcmpi(m_vNodeCollection[i].nodename,nodeName) == 0)
{
return i;
}
}
}
return -1;
}
bool CControlDialog::SaveFile(LPCTSTR filename)
{
FILE *outfile;
outfile = fopen(filename,"wt");
if (outfile == NULL) return false;
int i;
for (i = 0; i < m_NumberOfNodes; i++)
{
if (m_vNodeCollection[i].isactive)
{
fprintf(outfile,"%s\n",m_vNodeCollection[i].nodename);
fprintf(outfile,"%s\n",m_vNodeCollection[i].entityname);
fprintf(outfile,"%s\n",m_vNodeCollection[i].meshfile);
char *ptrNodeName = m_vNodeCollection[i].nodename;
float q[4];
float pos[3];
float scale[3];
COgreFrameWork::GetInstance()->GetNodePosition(ptrNodeName,pos);
COgreFrameWork::GetInstance()->GetNodeQuaternion(ptrNodeName,q);
COgreFrameWork::GetInstance()->GetNodeScale(ptrNodeName,scale);
fprintf(outfile,"%f %f %f %f\n",q[0],q[1],q[2],q[3]); // quaternion
fprintf(outfile,"%f %f %f\n",pos[0],pos[1],pos[2]); // position
fprintf(outfile,"%f %f %f\n",scale[0],scale[1],scale[2]); // scale
}
}
fclose(outfile);
return true;
}
void CControlDialog::Serialize(CArchive &ar)
{
int i;
char str[256];
CFile *cfile = ar.GetFile();
if (ar.IsStoring())
{
//ExportXMLScene(ar);
return;
sprintf(str,"%d\r\n",m_NumberOfNodes);
ar.WriteString(str);
for (i = 0; i < m_NumberOfNodes; i++) {
if (m_vNodeCollection[i].isactive) {
sprintf(str,"%s\r\n",m_vNodeCollection[i].nodename);
ar.WriteString(str);
sprintf(str,"%s\r\n",m_vNodeCollection[i].entityname);
ar.WriteString(str);
sprintf(str,"%s\r\n",m_vNodeCollection[i].meshfile);
ar.WriteString(str);
char *ptrNodeName = m_vNodeCollection[i].nodename;
float q[4];
float pos[3];
float scale[3];
COgreFrameWork::GetInstance()->GetNodePosition(ptrNodeName,pos);
COgreFrameWork::GetInstance()->GetNodeQuaternion(ptrNodeName,q);
COgreFrameWork::GetInstance()->GetNodeScale(ptrNodeName,scale);
sprintf(str,"%f %f %f\r\n",pos[0],pos[1],pos[2]); // position
ar.WriteString(str);
sprintf(str,"%f %f %f %f\r\n",q[0],q[1],q[2],q[3]); // quaternion
ar.WriteString(str);
sprintf(str,"%f %f %f\r\n",scale[0],scale[1],scale[2]); // scale
ar.WriteString(str);
}
}
}
else
{
return;
// first delete all nodes currently in scene
for (i = 0; i < m_NumberOfNodes; i++) {
if (m_vNodeCollection[i].isactive) {
COgreFrameWork::GetInstance()->DeleteNode(m_vNodeCollection[i].nodename);
}
}
m_NumberOfNodes = 0;
m_vNodeCollection.clear();
// delete the items from the tree
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
pTree->DeleteAllItems();
// TODO: add loading code here
char nodename[256];
char entityname[256];
char meshfile[256];
int number_of_nodes;
ar.ReadString(str,255);
sscanf(str,"%d",&number_of_nodes);
for (i = 0; i < number_of_nodes; i++) {
ar.ReadString(str,255);
sscanf(str,"%s",nodename);
ar.ReadString(str,255);
sscanf(str,"%s",entityname);
ar.ReadString(str,255);
sscanf(str,"%s",meshfile);
AddNode(meshfile,entityname,nodename);
float q[4];
float pos[3];
float scale[3];
ar.ReadString(str,255);
sscanf(str,"%f %f %f",&pos[0],&pos[1],&pos[2]);
ar.ReadString(str,255);
sscanf(str,"%f %f %f %f",&q[0],&q[1],&q[2],&q[3]);
ar.ReadString(str,255);
sscanf(str,"%f %f %f",&scale[0],&scale[1],&scale[2]);
COgreFrameWork::GetInstance()->SetNodePosition(nodename,pos);
COgreFrameWork::GetInstance()->SetNodeQuaternion(nodename,q);
COgreFrameWork::GetInstance()->SetNodeScale(nodename,scale);
}
}
}
void CControlDialog::ExportXMLScene(char *filename)
{
int i;
char str[256];
//CFile *cfile = ar.GetFile();
//char filename[FILENAME_MAX];
//strcpy(filename,cfile->GetFileName());
//ar.Abort();
sprintf(str,"%d",m_NumberOfNodes);
TiXmlDocument* mXMLDoc;
mXMLDoc = new TiXmlDocument();
if(mXMLDoc==NULL)
return;
mXMLDoc->InsertEndChild(TiXmlElement("scene"));
TiXmlElement* rootNode = mXMLDoc->RootElement();
TiXmlElement* objects_Node =
rootNode->InsertEndChild(TiXmlElement("objects"))->ToElement();
objects_Node->SetAttribute("numberof", m_NumberOfNodes);
for (i = 0; i < m_NumberOfNodes; i++) {
if (m_vNodeCollection[i].isactive) {
TiXmlElement* objectNode =
objects_Node->InsertEndChild(TiXmlElement("object"))->ToElement();
sprintf(str,"%s",m_vNodeCollection[i].nodename);
objectNode->SetAttribute("name", str);
TiXmlElement* nodeName1 =
objectNode->InsertEndChild(TiXmlElement("node"))->ToElement();
nodeName1->SetAttribute("name", str);
sprintf(str,"%s",m_vNodeCollection[i].entityname);
TiXmlElement* nodeName2 =
objectNode->InsertEndChild(TiXmlElement("entity"))->ToElement();
nodeName2->SetAttribute("name", str);
sprintf(str,"%s",m_vNodeCollection[i].meshfile);
TiXmlElement* nodeName3 =
objectNode->InsertEndChild(TiXmlElement("meshfile"))->ToElement();
nodeName3->SetAttribute("name", str);
char *ptrNodeName = m_vNodeCollection[i].nodename;
float q[4];
float pos[3];
float scale[3];
COgreFrameWork::GetInstance()->GetNodePosition(ptrNodeName,pos);
COgreFrameWork::GetInstance()->GetNodeQuaternion(ptrNodeName,q);
COgreFrameWork::GetInstance()->GetNodeScale(ptrNodeName,scale);
TiXmlElement* quaternionNode =
objectNode->InsertEndChild(TiXmlElement("quaternion"))->ToElement();
sprintf(str,"%f",q[0]);
quaternionNode->SetAttribute("x", str);
sprintf(str,"%f",q[1]);
quaternionNode->SetAttribute("y", str);
sprintf(str,"%f",q[2]);
quaternionNode->SetAttribute("z", str);
sprintf(str,"%f",q[3]);
quaternionNode->SetAttribute("w", str);
TiXmlElement* positionNode =
objectNode->InsertEndChild(TiXmlElement("position"))->ToElement();
sprintf(str,"%f",pos[0]);
positionNode->SetAttribute("x", str);
sprintf(str,"%f",pos[1]);
positionNode->SetAttribute("y", str);
sprintf(str,"%f",pos[2]);
positionNode->SetAttribute("z", str);
TiXmlElement* scaleNode =
objectNode->InsertEndChild(TiXmlElement("scale"))->ToElement();
sprintf(str,"%f",scale[0]);
scaleNode->SetAttribute("x", str);
sprintf(str,"%f",scale[1]);
scaleNode->SetAttribute("y", str);
sprintf(str,"%f",scale[2]);
scaleNode->SetAttribute("z", str);
}
}
mXMLDoc->SaveFile(filename);
//delete mXMLDoc;
}
bool CControlDialog::importXMLScene(char *filename)
{
int i;
char str[256];
// first delete all nodes currently in scene
for (i = 0; i < m_NumberOfNodes; i++)
{
if (m_vNodeCollection[i].isactive)
{
COgreFrameWork::GetInstance()->DeleteNode(m_vNodeCollection[i].nodename);
}
}
m_NumberOfNodes = 0;
m_vNodeCollection.clear();
// delete the items from the tree
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
pTree->DeleteAllItems();
////////////////////////////////////////////////////////////////
/*
//////////////////////////////////////////////////
// open the xml scene file
TiXmlDocument* mXMLDoc;
mXMLDoc = new TiXmlDocument(filename);
mXMLDoc->LoadFile();
TiXmlElement* sceneNode;
TiXmlElement* objectsNode;
TiXmlElement* rootElem = mXMLDoc->RootElement();
sceneNode = rootElem->FirstChildElement("scene");
//if (sceneNode == NULL) return false;
// TODO: add loading code here
char nodename[256];
char entityname[256];
char meshfile[256];
int number_of_nodes;
objectsNode = rootElem->FirstChildElement("objects");
if (objectsNode == NULL) return false;
number_of_nodes = StringConverter::parseInt(objectsNode->Attribute("numberof"));
for (TiXmlElement* smElem = objectsNode->FirstChildElement();
smElem != 0; smElem = smElem->NextSiblingElement())
{
// get the node name, entity name, and meshfile name
TiXmlElement* node = smElem->FirstChildElement("node");
TiXmlElement* entity = smElem->FirstChildElement("entity");
TiXmlElement* meshfile = smElem->FirstChildElement("meshfile");
strcpy(nodename,node->Attribute("name"));
AddNode((char*)meshfile->Attribute("name"),(char*)entity->Attribute("name"),nodename);
float q[4];
float pos[3];
float s[3];
// set the position of the node
TiXmlElement* position = smElem->FirstChildElement("position");
pos[0] = StringConverter::parseReal(position->Attribute("x"));
pos[1] = StringConverter::parseReal(position->Attribute("y"));
pos[2] = StringConverter::parseReal(position->Attribute("z"));
// set the quaternion of the node
TiXmlElement* quaternion = smElem->FirstChildElement("quaternion");
q[0] = StringConverter::parseReal(quaternion->Attribute("x"));
q[1] = StringConverter::parseReal(quaternion->Attribute("y"));
q[2] = StringConverter::parseReal(quaternion->Attribute("z"));
q[3] = StringConverter::parseReal(quaternion->Attribute("w"));
// set the scale of the node
TiXmlElement* scale = smElem->FirstChildElement("scale");
s[0] = StringConverter::parseReal(scale->Attribute("x"));
s[1] = StringConverter::parseReal(scale->Attribute("y"));
s[2] = StringConverter::parseReal(scale->Attribute("z"));
// send these values to Ogre
COgreFrameWork::GetInstance()->SetNodePosition(nodename,pos);
COgreFrameWork::GetInstance()->SetNodeQuaternion(nodename,q);
COgreFrameWork::GetInstance()->SetNodeScale(nodename,s);
}
*/
TiXmlDocument* mXMLDoc;
mXMLDoc = new TiXmlDocument(filename);
mXMLDoc->LoadFile();
TiXmlElement* sceneNode;
TiXmlElement* objectsNode;
TiXmlElement* rootElem = mXMLDoc->RootElement();
sceneNode = rootElem->FirstChildElement("scene");
//if (sceneNode == NULL) return false;
// TODO: add loading code here
SceneNode *pEnt;
char nodename[256];
char entityname[256];
char meshfilename[256];
int number_of_nodes;
Entity *ent;
objectsNode = rootElem->FirstChildElement("objects");
if (objectsNode == NULL) return false;
number_of_nodes = StringConverter::parseInt(objectsNode->Attribute("numberof"));
// printf("ÓÐ%d¸ö½Úµã\n",number_of_nodes);
for (TiXmlElement* smElem = objectsNode->FirstChildElement();
smElem != 0; smElem = smElem->NextSiblingElement())
{
// get the node name, entity name, and meshfile name
TiXmlElement* node = smElem->FirstChildElement("node");
TiXmlElement* entity = smElem->FirstChildElement("entity");
TiXmlElement* meshfile = smElem->FirstChildElement("meshfile");
strcpy(nodename,node->Attribute("name"));
strcpy(entityname,entity->Attribute("name"));
strcpy(meshfilename,meshfile->Attribute("name"));
// printf(nodename);
// printf(":\n");
AddNode((char*)meshfile->Attribute("name"),(char*)entity->Attribute("name"),nodename);
float q[4];
float pos[3];
float s[3];
// set the position of the node
TiXmlElement* position = smElem->FirstChildElement("position");
pos[0] = StringConverter::parseReal(position->Attribute("x"));
pos[1] = StringConverter::parseReal(position->Attribute("y"));
pos[2] = StringConverter::parseReal(position->Attribute("z"));
// set the quaternion of the node
TiXmlElement* quaternion = smElem->FirstChildElement("quaternion");
q[0] = StringConverter::parseReal(quaternion->Attribute("x"));
q[1] = StringConverter::parseReal(quaternion->Attribute("y"));
q[2] = StringConverter::parseReal(quaternion->Attribute("z"));
q[3] = StringConverter::parseReal(quaternion->Attribute("w"));
// set the scale of the node
TiXmlElement* scale = smElem->FirstChildElement("scale");
s[0] = StringConverter::parseReal(scale->Attribute("x"));
s[1] = StringConverter::parseReal(scale->Attribute("y"));
s[2] = StringConverter::parseReal(scale->Attribute("z"));
// send these values to Ogre
// cOgreFramework::GetInstance()->SetNodePosition(nodename,pos);
// cOgreFramework::GetInstance()->SetNodeQuaternion(nodename,q);
// cOgreFramework::GetInstance()->SetNodeScale(nodename,s);
}
return true;
}
/* check for multiple instances of the node name given... if there are
multiple instances then inc instance number and modify nodename */
void CControlDialog::incNodeInstance(char *nodeName)
{
int i;
char snumber[256];
int highest_number = 0;
for (i = 0; i < m_NumberOfNodes; i++) {
if (m_vNodeCollection[i].isactive) {
if (strncmp(m_vNodeCollection[i].nodename,nodeName,strlen(nodeName)) == 0) {
// nodename found
// if these two nodes are identical then add a number 1 to the node name
if (strlen(nodeName) == strlen(m_vNodeCollection[i].nodename)) {
strcat(nodeName,"1");
return;
}
strcpy(snumber,&m_vNodeCollection[i].nodename[strlen(nodeName)]);
int j;
for (j = 0; j < strlen(snumber); j++) {
if (isdigit(snumber[j]) == 0) snumber[j] = 0;
}
int current_instance = atoi(snumber);
if (highest_number < current_instance) highest_number = current_instance;
}
}
}
if (highest_number != 0)
{
sprintf(snumber,"%d",highest_number+1);
strcat(nodeName,snumber);
} else
{
// node name not found so make nodename with a 1 added on the end of the name,
// this will be the first
strcat(nodeName,"1");
}
}
void CControlDialog::ClearScene()
{
int i;
char str[256];
// first delete all nodes currently in scene
for (i = 0; i < m_NumberOfNodes; i++)
{
if (m_vNodeCollection[i].isactive)
{
COgreFrameWork::GetInstance()->DeleteNode(m_vNodeCollection[i].nodename);
}
}
m_NumberOfNodes = 0;
m_vNodeCollection.clear();
// delete the items from the tree
CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_EDIT2);
pTree->DeleteAllItems();
}