Exemplo n.º 1
0
void LGraph::Layout(unsigned int number_of_iterations,
                    bool do_transpose,
                    int transpose_range){

        list<pEdge> ReverseEdges;
        FindReverseEdges(ReverseEdges);
	ReverseReverseEdges(ReverseEdges);
        InitRank();
        list<pEdge> LongEdges;
        FindLongEdges(LongEdges);
        AddDummyNodes(LongEdges);
        ReverseEdges.clear();
        order = new Ordering();
        order->order_vector = InitOrder();

        // Number of iterations.
        layouted = true;
        for (unsigned int i = 0; i < number_of_iterations; i++) {

            WeightedMedianHeuristic(i);
            // TODO(Kuzmich(svatoslav1)): make transpose faster. It is too slow for now
            if (do_transpose)
                Transpose(i + transpose_range);
        }

        InitPos(order);
        InitCoordinates(order);
#ifdef DEBUG
        printf("Crossings:%d\n",countCrossing(order));
#endif
}
Exemplo n.º 2
0
void LGraph::Transpose(int max){

        if(!layouted)
            Layout(0,0,0);

        bool improved = true;

        for (int j = 1; j < max; j++){
        improved = true;
        while (improved){
                improved = false;
                for (unsigned int r = 1; r < order->order_vector.size(); r++){
                        for (unsigned int i = 0; order->order_vector[r].size()>j && i < order->order_vector[r].size() - (j+1); i++){
                                pLNode v = order->order_vector[r][i];
                                pLNode w = order->order_vector[r][i+j];
                                InitPos(order);
                                int cross0 = countCrossingOnRank(order, r) +
                                             countCrossingOnRank(order, r-1);
                                v->pos+=j;
                                w->pos-=j;
                                int cross1 = countCrossingOnRank(order, r) +
                                             countCrossingOnRank(order, r-1);
                                if (cross1 < cross0){
                                        improved = true;
                                        order->order_vector[r][i] = w;
                                        order->order_vector[r][i + j] = v;
                                }
                        }
                }
	}

    }
}
Exemplo n.º 3
0
void initGame()
{
    
    livelli=InitPos();
	
    ch_index=InitPers();
    
    return;
}
Exemplo n.º 4
0
void LGraph::WeightedMedianHeuristic(int iter){

    if(!layouted)
        Layout(0,0,0);

        Ordering temp_order;
        temp_order.order_vector = order->order_vector;
        if (iter % 2 == 0) {
                for(unsigned int r = 1; r <= maxrank; r++ ){
                        for(unsigned int i = 0;i < temp_order.order_vector[r].size(); i++) {
                                temp_order.order_vector[r][i]->median =                                
                                        temp_order.order_vector[r][i]->Median(*order,MEDIAN_IN);
			}
                        /// Sort temp_order using ComparePointer comparator
                        sort(temp_order.order_vector[r].begin(),
                                temp_order.order_vector[r].end(),
				ComparePointer); 
		}
        } else {
		for(int r = maxrank - 1; r >= 0; r-- ){			
                        for(unsigned int i = 0;i < temp_order.order_vector[r].size(); i++) {
                                temp_order.order_vector[r][i]->median =
                                        temp_order.order_vector[r][i]->Median(*order,MEDIAN_OUT);
			}
                        sort(temp_order.order_vector[r].begin(),
                                temp_order.order_vector[r].end(),
				ComparePointer);
		}
        }
        InitPos(&temp_order);
        int cross_temp_order = countCrossing(&temp_order);

        InitPos(order);
        int cross_order = countCrossing(order);

        if (cross_temp_order <= cross_order){
                order->order_vector = temp_order.order_vector;
        }
}
Exemplo n.º 5
0
const CUILine* CUILine::CutByLength(CGameFont* pFont, float length, BOOL cut_word)
{
	R_ASSERT(GetSize() > 0);
	// if first sub line is void then delete it

	Position pos;
	InitPos(pos);

	if (!pos.word_1.exist()) // void string
	{
		if (m_subLines[0].m_last_in_line)
		{
			m_subLines.erase(m_subLines.begin());
			return GetEmptyLine();
		}
		else
		{
			m_subLines.erase(m_subLines.begin());
			InitPos(pos);
		}
	}


	float len2w1 = GetLength_inclusiveWord_1(pos, pFont);
//.	* scale; bacause of our fonts not scaled

    if (!pos.word_2.exist())
	{
		if (cut_word && len2w1 > length)
			return CutWord(pFont, length);		
		else
			return Cut2Pos(pos);
	}

	
	float len2w2 = GetLength_inclusiveWord_2(pos, pFont);

	if (len2w1 > length)
	{
		if (cut_word)
            return CutWord(pFont, length);		
		else
            return Cut2Pos(pos);
	}
	else if (len2w1 <= length && len2w2 > length)
	{
		// cut whole first word
		return Cut2Pos(pos);  // all right :)
	}
	else // if (len2w1 > length && len2w2 > length)
	{
		while (IncPos(pos))
		{
			len2w1 = GetLength_inclusiveWord_1(pos, pFont);
			if(!pos.word_2.exist())
			{
				return Cut2Pos(pos);
			}
			len2w2 = GetLength_inclusiveWord_2(pos, pFont);
			if (len2w1 <= length && len2w2 > length)
				return Cut2Pos(pos);
		}
     
		return Cut2Pos(pos, false);
	}

}