コード例 #1
0
void Map::load(const char *mapFile)
{
	TiXmlDocument XMLdoc(mapFile);
	if (XMLdoc.LoadFile())
	{
		TiXmlElement *e_mapName, *e_width, *e_height, *e_levelTotal, *e_tileDes, *e_tile;

		e_mapName = XMLdoc.FirstChildElement( "mapName" );
		if( e_mapName )
		{
			this->mapName = e_mapName->GetText();
		}
		e_width = XMLdoc.FirstChildElement( "width" );
		if( e_width )
		{
			this->width = atoi( e_width->GetText() );
		}
		e_height = XMLdoc.FirstChildElement( "height" );
		if( e_height )
		{
			this->height = atoi( e_height->GetText() );
		}
		e_levelTotal = XMLdoc.FirstChildElement( "levelTotal" );
		if( e_levelTotal )
		{
			this->levelTotal = atoi( e_levelTotal->GetText() );
		}
		e_tile = XMLdoc.FirstChildElement( "tile" );
		while(  e_tile )
		{
			Tile tmptile;
			tmptile.chipSetName = e_tile->Attribute("chipSetName");
			tmptile.tileID = atoi(e_tile->Attribute("tileID"));
			tmptile.srcX = (float)atof(e_tile->Attribute("srcX"));
			tmptile.srcY = (float)atof(e_tile->Attribute("srcY"));
			tmptile.width = atoi(e_tile->Attribute("width"));
			tmptile.height = atoi(e_tile->Attribute("height"));
			tmptile.rotation = atoi(e_tile->Attribute("rotation"));
			tmptile.level = atoi(e_tile->Attribute("level"));
			tmptile.terrainType = atoi(e_tile->Attribute("terrainType"));
			this->tiles.push_back(tmptile);
			e_tile = e_tile->NextSiblingElement("tile");
		}
		e_tileDes = XMLdoc.FirstChildElement( "tileDes" );
		while(e_tileDes)
		{
			std::pair<unsigned int, std::pair<float, float> > tmptile;
			tmptile.first = atoi( e_tileDes->Attribute("tileID") );
			tmptile.second.first = (float)atof( e_tileDes->Attribute("desX") );
			tmptile.second.second = (float)atof( e_tileDes->Attribute("desY") );
			this->tileDestionations.push_back( tmptile );
			e_tileDes = e_tileDes->NextSiblingElement("tileDes");
		}
	}
}
コード例 #2
0
    uint32 All_RoadSegment::AnalysisSegment()
    {
        uint32 firstSegId = 0;
        
        //open XML
        TiXmlDocument XMLdoc("./config/DE_Airport_ParamConfig.xml");
        if(!XMLdoc.LoadFile())
	    {
		    cout<<"fail to load config file"<<endl;
		    return 0;
	    }

        TiXmlElement* root = XMLdoc.RootElement();
	    TiXmlElement* segment;
        //segnumber
	    segment = root->FirstChildElement();
        segmentnum = stringToNum<uint32>(segment->GetText());
        segment = segment->NextSiblingElement();

        int index = -1;
        int insert_idex;
        while(NULL != segment)
        {
            RoadSegment *p_seg_t = new RoadSegment;
            //segID
            TiXmlElement* nextElement = segment->FirstChildElement();
		    p_seg_t->segId = stringToNum<uint16>(nextElement->GetText());
            if(-1 == index)//first segment
            {firstSegId = p_seg_t->segId;}
            //segType
            nextElement = nextElement->NextSiblingElement();
		    p_seg_t->segType = stringToNum<uint32>(nextElement->GetText());
            //lanenum
            nextElement = nextElement->NextSiblingElement();
		    p_seg_t->laneNum = stringToNum<uint32>(nextElement->GetText());
            //lineNum
            nextElement = nextElement->NextSiblingElement();
		    p_seg_t->lineNum = stringToNum<uint32>(nextElement->GetText());
            //gpspoint number
            nextElement = nextElement->NextSiblingElement();
            p_seg_t->pointNum = stringToNum<uint32>(nextElement->GetText());
            
            //point element
            index = p_seg_t->pointNum;
            while(index)
            {
                Segmentpoint *p_point_t = new Segmentpoint;
                index--;
                nextElement = nextElement->NextSiblingElement();
                TiXmlElement* pointElement = nextElement->FirstChildElement();
                //point ID
                p_point_t->pointId = stringToNum<uint32>(pointElement->GetText());
                pointElement = pointElement->NextSiblingElement();
                //point type
                p_point_t->point_type = stringToNum<uint32>(pointElement->GetText());
                pointElement = pointElement->NextSiblingElement();
                //connect segmentID
                p_point_t->conn_segId = stringToNum<uint32>(pointElement->GetText());
                pointElement = pointElement->NextSiblingElement();
                //gps 
                p_point_t->point.lat = stringToNum<double>(pointElement->GetText());
                pointElement = pointElement->NextSiblingElement();
                p_point_t->point.lon = stringToNum<double>(pointElement->GetText());
                pointElement = pointElement->NextSiblingElement();

                //inert lane and sort
                insert_idex = p_seg_t->insertPoint(p_point_t);
                p_seg_t->_segpoint.insert(p_seg_t->_segpoint.begin()+insert_idex , *p_point_t);
            }
            //check gps point
            if(!p_seg_t->CheckPointId())
                return false;

            //lane element
            index = p_seg_t->laneNum;
            while(index)
            {
                Segmentlane *p_lane_t = new Segmentlane;
                index--;
                nextElement = nextElement->NextSiblingElement();
                TiXmlElement* laneElement = nextElement->FirstChildElement();
                //laneID
                p_lane_t->laneId = stringToNum<uint32>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                //start position
                p_lane_t->start_pos.lat = stringToNum<double>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                p_lane_t->start_pos.lon = stringToNum<double>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                //stop position
                p_lane_t->end_pos.lat = stringToNum<double>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                p_lane_t->end_pos.lon = stringToNum<double>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                //direction
                p_lane_t->derection = stringToNum<uint32>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                //merge left 
                p_lane_t->merge_left = stringToNum<uint32>(laneElement->GetText()); 
                laneElement = laneElement->NextSiblingElement();
                //merge right
                p_lane_t->merge_right = stringToNum<uint32>(laneElement->GetText()); 
                laneElement = laneElement->NextSiblingElement();
                //left line
                p_lane_t->leftlineID = stringToNum<uint32>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                //right line
                p_lane_t->rightlineID = stringToNum<uint32>(laneElement->GetText());
                laneElement = laneElement->NextSiblingElement();
                
                //inert lane and sort
                insert_idex = p_seg_t->insertLane(p_lane_t);
                p_seg_t->_seglane.insert(p_seg_t->_seglane.begin()+insert_idex , *p_lane_t);
            }
            //check lane
            if(!p_seg_t->CheckLaneId())
                return false;

            //line element
            index = p_seg_t->lineNum;
            while(index)
            {
                Segmentline *p_line_t = new Segmentline;
                index--;
                nextElement = nextElement->NextSiblingElement();
                TiXmlElement* lineElement = nextElement->FirstChildElement();
                //line ID
                p_line_t->lineId = stringToNum<uint32>(lineElement->GetText());
                lineElement = lineElement->NextSiblingElement();
                //line type
                p_line_t->linetype = stringToNum<uint32>(lineElement->GetText());
                lineElement = lineElement->NextSiblingElement();
                //connection segID
                p_line_t->connSegID = stringToNum<uint32>(lineElement->GetText());
                lineElement = lineElement->NextSiblingElement();
                //connection lineID 
                p_line_t->connLineID = stringToNum<uint32>(lineElement->GetText());
                lineElement = lineElement->NextSiblingElement();

                //insert line and sort
                insert_idex = p_seg_t->insertLine(p_line_t);
                p_seg_t->_segline.insert(p_seg_t->_segline.begin()+insert_idex , *p_line_t);
            }
            //check line
            if(!p_seg_t->CheckLineId())
                return false;

            //insert segment and sort
            insert_idex = insertSegment(p_seg_t);
            _roadsegment.insert(_roadsegment.begin()+insert_idex , *p_seg_t);

            //point to next segmen 
		    segment = segment->NextSiblingElement();
        }

        //check segment
        if(!CheckSegmentID())
            return false;

        return firstSegId;
    }