示例#1
0
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();
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
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();
}
示例#5
0
//----------------------------------------------------
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;
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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;
}
示例#9
0
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());
}