Ejemplo n.º 1
0
bool ESceneAIMapTools::Export(LPCSTR path)
{
//.?	if (!RealUpdateSnapList()) return false;
	if (!Valid()) return false;

    // calculate bbox
    Fbox bb;		CalculateNodesBBox(bb);

    AnsiString fn	= AnsiString(path)+"build.aimap";
    
    // export
    IWriter* F		= FS.w_open(fn.c_str());

    if (F){
        F->open_chunk	(E_AIMAP_CHUNK_VERSION);
        F->w_u16		(E_AIMAP_VERSION);
        F->close_chunk	();

        F->open_chunk	(E_AIMAP_CHUNK_BOX);
        F->w			(&bb,sizeof(bb));
        F->close_chunk	();

        F->open_chunk	(E_AIMAP_CHUNK_PARAMS);
        F->w			(&m_Params,sizeof(m_Params));
        F->close_chunk	();

        EnumerateNodes	();
        F->open_chunk	(E_AIMAP_CHUNK_NODES);
        F->w_u32		(m_Nodes.size());
        for (AINodeIt it=m_Nodes.begin(); it!=m_Nodes.end(); it++){
            u32 			id;
            u16 			pl;
            NodePosition 	np;
    
            id = (*it)->n1?(u32)(*it)->n1->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n2?(u32)(*it)->n2->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n3?(u32)(*it)->n3->idx:InvalidNode;  	F->w(&id,3);
            id = (*it)->n4?(u32)(*it)->n4->idx:InvalidNode;  	F->w(&id,3);
            pl = pvCompress ((*it)->Plane.n);	 				F->w_u16(pl);
            PackPosition	(np,(*it)->Pos,bb,m_Params); 	F->w(&np,sizeof(np));
        }
        F->close_chunk	();

        FS.w_close		(F);
		return true;
    }
	return false;
}
Ejemplo n.º 2
0
bool ESceneAIMapTool::RealUpdateSnapList()
{
	m_Flags.set					(flUpdateSnapList,FALSE);
	fraLeftBar->UpdateSnapList	();
    Fbox nodes_bb;				CalculateNodesBBox(nodes_bb);
	if (!GetSnapList()->empty()){
        Fbox bb,snap_bb;		Scene->GetBox(snap_bb,*GetSnapList());
        if (nodes_bb.is_valid()) bb.merge(snap_bb,nodes_bb); else bb.set(snap_bb);
        if (!m_AIBBox.similar(bb)){
            m_AIBBox.set		(bb);
            hash_Clear		   	();
		    hash_FillFromNodes 	();
        }
	    return true;
    }else{
    	m_AIBBox.set			(nodes_bb);
        hash_Clear		   		();
        hash_FillFromNodes 		();
        return false;
    }
}