void __fastcall TfrmObjectList::InitListBox() { tvItems->IsUpdating = true; tvItems->Items->Clear(); cur_cls = LTools->CurrentClassID(); for(SceneToolsMapPairIt it=Scene->FirstTools(); it!=Scene->LastTools(); it++){ ESceneCustomOTools* ot = dynamic_cast<ESceneCustomOTools*>(it->second); if (ot&&((cur_cls==OBJCLASS_DUMMY)||(it->first==cur_cls))){ if (it->first==OBJCLASS_DUMMY) continue; TElTreeItem* node = FindFolderByType(it->first); if (!node) node = AddFolder(it->first); VERIFY(node); ObjectList& lst = ot->GetObjects(); if (OBJCLASS_GROUP==it->first){ for(ObjectIt _F = lst.begin();_F!=lst.end();_F++){ TElTreeItem* grp_node = AddObject(node,(*_F)->Name,(void*)(*_F)); ObjectList& grp_lst = ((CGroupObject*)(*_F))->GetObjects(); for (ObjectIt _G=grp_lst.begin(); _G!=grp_lst.end(); _G++) AddObject(grp_node,(*_G)->Name,(void*)(*_F)); } }else{ for(ObjectIt _F = lst.begin();_F!=lst.end();_F++) AddObject(node,(*_F)->Name,(void*)(*_F)); } } } tvItems->Sort (true); tvItems->IsUpdating = false; UpdateState(); tvItems->FullExpand (); obj_count = Scene->ObjCount(); }
CCustomObject *EScene::RayPickObject(float nearest_dist, const Fvector& start, const Fvector& direction, ObjClassID classfilter, SRayPickInfo* pinf, ObjectList* from_list) { if(!valid()) return 0; CCustomObject *nearest_object = 0; if (from_list){ for(ObjectIt _F=from_list->begin();_F!=from_list->end();_F++) if((*_F)->Visible()&&(*_F)->RayPick(nearest_dist,start,direction,pinf)) nearest_object = (*_F); }else{ if (classfilter==OBJCLASS_DUMMY){ CCustomObject *obj = 0; SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt&&mt->RayPick(obj,nearest_dist,start,direction,pinf)) nearest_object = obj; } }else{ ESceneCustomOTools* mt = GetOTools(classfilter); if (mt) mt->RayPick(nearest_object,nearest_dist,start,direction,pinf); } } return nearest_object; }
CCustomObject* EScene::FindObjectByName( LPCSTR name, CCustomObject* pass_object ) { CCustomObject* object = 0; SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt&&(0!=(object=mt->FindObjectByName(name,pass_object)))) return object; } return 0; }
int EScene::GetQueryObjects(ObjectList& lst, ObjClassID classfilter, int iSel, int iVis, int iLock) { if (classfilter==OBJCLASS_DUMMY){ SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt) mt->GetQueryObjects(lst, iSel, iVis, iLock); } }else{ ESceneCustomOTools* mt = GetOTools(classfilter); if (mt) mt->GetQueryObjects(lst, iSel, iVis, iLock); } return lst.size(); }
//---------------------------------------------------- CCustomObject* EScene::FindObjectByName( LPCSTR name, ObjClassID classfilter ) { CCustomObject* object = 0; if (classfilter==OBJCLASS_DUMMY){ SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt&&(0!=(object=mt->FindObjectByName(name)))) return object; } }else{ ESceneCustomOTools* mt = GetOTools(classfilter); VERIFY(mt); if (mt&&(0!=(object=mt->FindObjectByName(name)))) return object; } return object; }
int EScene::FrustumPick( const CFrustum& frustum, ObjClassID classfilter, ObjectList& ol ) { int count = 0; if (classfilter==OBJCLASS_DUMMY){ SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt) count+=mt->FrustumPick(ol,frustum); } }else{ ESceneCustomOTools* mt = GetOTools(classfilter); if (mt) count+=mt->FrustumPick(ol,frustum); } return count; }
int EScene::SpherePick( const Fvector& center, float radius, ObjClassID classfilter, ObjectList& ol ) { int count = 0; if (classfilter==OBJCLASS_DUMMY){ SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt) count+=mt->SpherePick(ol,center, radius); } }else{ ESceneCustomOTools* mt = GetOTools(classfilter); if (mt) count+=mt->SpherePick(ol,center, radius); } return count; }
bool EScene::FindDuplicateName() { // find duplicate name SceneToolsMapPairIt _I = m_SceneTools.begin(); SceneToolsMapPairIt _E = m_SceneTools.end(); for (; _I!=_E; _I++){ ESceneCustomOTools* mt = dynamic_cast<ESceneCustomOTools*>(_I->second); if (mt){ ObjectList& lst = mt->GetObjects(); for(ObjectIt _F = lst.begin();_F!=lst.end();_F++) if (FindObjectByName((*_F)->Name, *_F)){ ELog.DlgMsg(mtError,"Duplicate object name already exists: '%s'",(*_F)->Name); return true; } } } return false; }
void EScene::GenObjectName( ObjClassID cls_id, char *buffer, const char* pref ) { ESceneCustomOTools* ot = GetOTools(cls_id); VERIFY(ot); AnsiString result = FHelper.GenerateName(pref&&pref[0]?pref:ot->ClassName(),4,fastdelegate::bind<TFindObjectByName>(this,&EScene::FindObjectByNameCB),true,true); strcpy (buffer,result.c_str()); }