void WorkspacePanel::OnEdit(wxCommandEvent& event) { wxTreeItemId selId = mTreeCtrl->GetSelection(); if(isMaterial(selId)) { MaterialController* mc = getMaterial(selId); EditorManager* editorManager = EditorManager::getSingletonPtr(); Editor* editor = editorManager->findEditor(mc->getMaterial()->getName().c_str()); Editor* editorMat = editorManager->findEditor(Ogre::String(mc->getMaterial()->getName() + ".material").c_str()); if(editor != NULL) { editorManager->setActiveEditor(editor); } else if(editorMat != NULL) { editorManager->setActiveEditor(editorMat); } else { MaterialSerializer* ms = new MaterialSerializer(); ms->queueForExport(mc->getMaterial(), true); String script = ms->getQueuedAsString(); MaterialScriptEditor* materialEditor = new MaterialScriptEditor(editorManager->getEditorNotebook(), wxID_ANY); wxString name = mc->getMaterial()->getName().c_str(); name += wxT(".material"); materialEditor->setName(name); materialEditor->SetText(script); editorManager->openEditor(materialEditor); } } }
void WorkspacePanel::OnAddMaterial(wxCommandEvent& event) { wxFileDialog * openDialog = new wxFileDialog(this, wxT("Add a Material"), wxEmptyString, wxEmptyString, wxT("Material Files (*.material)|*.material|All Files (*.*)|*.*")); if(openDialog->ShowModal() == wxID_OK) { wxString path = openDialog->GetPath(); if(path.EndsWith(wxT(".material"))) { wxTreeItemId selId = mTreeCtrl->GetSelection(); if(isProject(selId)) { Project* project = getProject(selId); MaterialScriptEditor* editor = new MaterialScriptEditor(EditorManager::getSingletonPtr()->getEditorNotebook()); editor->loadFile(path); int index = (int)path.find_last_of('\\'); if(index == -1) index = (int)path.find_last_of('/'); editor->setName((index != -1) ? path.substr(index + 1, path.Length()) : path); EditorManager::getSingletonPtr()->openEditor(editor); Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName("Ogre/Earring"); project->addMaterial(mat); } } } }
void MaterialEditorFrame::OnFileOpen(wxCommandEvent& event) { wxFileDialog * openDialog = new wxFileDialog(this, wxT("Choose a file to open"), wxEmptyString, wxEmptyString, wxT("All Ogre Files (*.material;*.mesh;*.program;*.cg;*.vert;*.frag)|*.material;*.mesh;*.program;*.cg;*.vert;*.frag|Material Files (*.material)|*.material|Mesh Files (*.mesh)|*.mesh|Program Files (*.program)|*.program|Cg Files (*.cg)|*.cg|GLSL Files(*.vert; *.frag)|*.vert;*.frag|All Files (*.*)|*.*")); if(openDialog->ShowModal() == wxID_OK) { wxString path = openDialog->GetPath(); if(path.EndsWith(wxT(".material")) || path.EndsWith(wxT(".program"))) { MaterialScriptEditor* editor = new MaterialScriptEditor(EditorManager::getSingletonPtr()->getEditorNotebook()); editor->loadFile(path); int index = (int)path.find_last_of('\\'); if(index == -1) index = (int)path.find_last_of('/'); editor->setName((index != -1) ? path.substr(index + 1, path.Length()) : path); EditorManager::getSingletonPtr()->openEditor(editor); } else if(path.EndsWith(wxT(".cg"))) { CgEditor* editor = new CgEditor(EditorManager::getSingletonPtr()->getEditorNotebook()); editor->loadFile(path); int index = (int)path.find_last_of('\\'); if(index == -1) index = (int)path.find_last_of('/'); editor->setName((index != -1) ? path.substr(index + 1, path.Length()) : path); EditorManager::getSingletonPtr()->openEditor(editor); } else if(path.EndsWith(wxT(".mesh"))) { Ogre::SceneManager *sceneMgr = wxOgre::getSingleton().getSceneManager(); Ogre::Camera *camera = wxOgre::getSingleton().getCamera(); if(mEntity) { sceneMgr->getRootSceneNode()->detachObject(mEntity); sceneMgr->destroyEntity(mEntity); mEntity = 0; } static int meshNumber = 0; Ogre::String meshName = Ogre::String("Mesh") + Ogre::StringConverter::toString(meshNumber++); int index = (int)path.find_last_of('\\'); if(index == -1) index = (int)path.find_last_of('/'); wxString mesh = (index != -1) ? path.substr(index + 1, path.Length()) : path; mEntity = sceneMgr->createEntity(meshName, mesh.GetData()); sceneMgr->getRootSceneNode()->attachObject(mEntity); Ogre::AxisAlignedBox box = mEntity->getBoundingBox(); Ogre::Vector3 minPoint = box.getMinimum(); Ogre::Vector3 maxPoint = box.getMaximum(); Ogre::Vector3 size = box.getSize(); wxOgre::getSingleton().setZoomScale(max(size.x, max(size.y, size.z))); wxOgre::getSingleton().resetCamera(); Ogre::Vector3 camPos; camPos.x = minPoint.x + (size.x / 2.0); camPos.y = minPoint.y + (size.y / 2.0); Ogre::Real width = max(size.x, size.y); camPos.z = (width / tan(camera->getFOVy().valueRadians())) + size.z / 2; wxOgre::getSingleton().getCamera()->setPosition(camPos); wxOgre::getSingleton().getCamera()->lookAt(0,0,0); wxOgre::getSingleton().getLight()->setPosition(maxPoint * 2); } } }