void ESceneGroupTool::SaveSelectedObject() { u32 scnt = SelectionCount(true); if(scnt==0) { ELog.DlgMsg(mtError,"No object(s) selected."); return; }else if(scnt>1) { if(mrYes != ELog.DlgMsg(mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, "Process multiple objects?") ) return; } CGroupObject* obj = 0; // find single selected object for(ObjectIt it=m_Objects.begin(); it!=m_Objects.end(); ++it) { if((*it)->Selected()) { obj = dynamic_cast<CGroupObject*>(*it); xr_string fn; if(scnt==1) { fn = obj->RefName(); if( !EFS.GetSaveName(_groups_,fn) ) return; }else { string_path S; FS.update_path (S, _groups_, obj->RefName()); fn = S; fn += ".group"; } IWriter* W = FS.w_open(fn.c_str()); if (W) { obj->SaveStream (*W); FS.w_close (W); }else ELog.DlgMsg (mtError, "Cant write file [%s]", fn.c_str()); } } }
void ESceneGroupTool::MakeThumbnail() { if (SelectionCount(true)==1) { CGroupObject* object = 0; for (ObjectIt it=m_Objects.begin(); it!=m_Objects.end(); it++) { if ((*it)->Selected()) { object = dynamic_cast<CGroupObject*>(*it); break; } } VERIFY (object); object->Select (false); // save render params Flags32 old_flag = psDeviceFlags; // set render params psDeviceFlags.set (rsStatistic|rsDrawGrid,FALSE); U32Vec pixels; u32 w=512,h=512; if (EDevice.MakeScreenshot (pixels,w,h)) { AnsiString tex_name = ChangeFileExt(object->Name,".thm"); SStringVec lst; ObjectList grp_lst; object->GetObjects (grp_lst); for (ObjectIt it=grp_lst.begin(); it!=grp_lst.end(); ++it) lst.push_back ((*it)->Name); EGroupThumbnail tex (tex_name.c_str(),false); tex.CreateFromData (pixels.begin(),w,h,lst); string_path fn; FS.update_path (fn,_groups_,object->RefName()); strcat (fn,".group"); tex.Save (FS.get_file_age(fn)); }else { ELog.DlgMsg (mtError,"Can't make screenshot."); } object->Select (true); // restore render params psDeviceFlags = old_flag; }else { ELog.DlgMsg (mtError,"Select 1 GroupObject."); } }