예제 #1
0
void SSLField::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    // The field:
    paintField(painter);
    // The robots
    for (int i = 0; i < detection.robots_blue_size(); i++) 
        paintRobot(painter, detection.robots_blue(i), QColor(0,0,255));
    for (int i = 0; i < detection.robots_yellow_size(); i++) 
        paintRobot(painter, detection.robots_yellow(i), QColor(255,255,0));
    // The ball(s)
    for (int i = 0; i < detection.balls_size(); i++) 
    {
        SSL_DetectionBall ball = detection.balls(i);
        painter->setBrush(QColor(255,128,128));
        painter->setPen(QColor(255,128,128));
        painter->drawEllipse(QPoint(ball.x(),-ball.y()),21,21);
    }
    // Fit field in view
    const QSize size(parentView->size());
    int viewWidth = (field_length+2*goal_depth+2*referee_width)*1.2;
    int viewHeight =(field_width+2*referee_width)*1.2;
    float xScale = float(size.width()) / viewWidth;
    float yScale = float(size.height()) / viewHeight;
    float scale = xScale < yScale ? xScale : yScale;
    parentView->setTransform(QTransform(scale, 0, 0, scale, size.width() / 2., size.height() / 2.));
}
예제 #2
0
/*****************************************************
**
**   BasicVedicChart   ---   paintInternal
**
******************************************************/
void BasicVedicChart::paintInternal( ChartConfig *cfg )
{
	wxArrayInt a;
	BgPalette *palette = (BgPalette*)NULL;

	//printf( "BasicVedicChart::paintInternal markedField %d\n", markedField );

	assert( cfg );
	VedicChartConfig *vconf = getVChartConfig();

	// paint field backgrounds if fields are not marked or zoomed
	if ( ! vconf->palette.IsEmpty() )
	{
		PaletteManager *man = PaletteManager::get();
		palette = man->getPalette( vconf->palette );
		if ( palette )
		{
			painter->setTransparentPen();
			for ( uint i = 0; i < field_count; i++ )
			{
				if (( markedField == i ) && ( markedFieldStatus & CHART_FIELD_STATUS_MARKUP || markedFieldStatus & CHART_FIELD_STATUS_ZOOM )) continue;
				painter->setBrush( palette->getBrush( i ));
				paintField( i );
			}
		}
		else
		{
			wxLogError( wxT( "no palette named '%s', referenced in config named '%s'" ), vconf->palette.c_str(), vconf->name.c_str() );
		}
	}

	setDefaultTextColor();

  painter->setPen( vconf->pen.IsOk() ? vconf->pen : defaultPen  );
	painter->setDefaultBrush();
	drawGrid();
	paintOuterRectangle();

	// draw markup resp. zoomed fields
  painter->setPen( vconf->pen.IsOk() ? vconf->pen : defaultPen  );
	for ( uint i = 0; i < field_count; i++ )
	{
		if (( markedField == i ) && ( markedFieldStatus & CHART_FIELD_STATUS_MARKUP
			|| markedFieldStatus & CHART_FIELD_STATUS_ZOOM  ))
		{

			// geht nicht wenn background gesetzt ist 
			if ( markedFieldStatus & CHART_FIELD_STATUS_MARKUP )
			{
				painter->setBrush( config->colors->chartMarkupBgColor );
			}
			else if ( isChartFieldMarked( i ))
			{
				if ( vconf->markedFields.brush.IsOk() ) painter->setBrush( vconf->markedFields.brush );
				else painter->setBrush( config->colors->sbcMarkedFieldsBgColor );
			}
			else if ( palette )
			{
				painter->setBrush( palette->getBrush( i ));
			}
			else
			{
				// background must be painted inorder to overrride other fields
				//GcWidgetBackground *bg = &vconf->widgetBackground;
				if ( vconf->brush.IsOk() )
				{
					painter->setBrush( vconf->brush );
				}
				else
				{
					painter->setDefaultBrush();
				}
			}
			paintField( i );
		}
	}

	// Draw text items
	for ( uint i = 0; i < field_count; i++ )
	{
		if ( h1set && ! h2set )
		{
			drawFieldText( i, FP_ALL );
		}
		else
		{
			if ( h1set ) drawFieldText( i, FP_INNER );
			if ( h2set ) drawFieldText( i, FP_OUTER );
		}
	}

	// additional rectangle separating the chart
	if ( h1set && h2set )
	{
		painter->setTransparentBrush();

		// maybe Nil in case of SBC
		if ( ! transitrect.isNil() ) painter->drawRectangle( transitrect );
	}

	/*
	printf( "\nmarkedField %d markedFieldStatus CHART_FIELD_STATUS_POS_FULL %d\n", markedField, markedFieldStatus & CHART_FIELD_STATUS_POS_FULL );
	printf( "markedField %d markedFieldStatus CHART_FIELD_STATUS_POS_INNER %d\n", markedField, markedFieldStatus & CHART_FIELD_STATUS_POS_INNER );
	printf( "markedField %d markedFieldStatus CHART_FIELD_STATUS_POS_OUTER %d\n\n", markedField, markedFieldStatus & CHART_FIELD_STATUS_POS_OUTER );
	*/

	if ( markedFieldStatus & CHART_FIELD_STATUS_ALL_ASPECTS )
	{
		for( uint j = 0; j < field_count; j++ )
		{
			for( uint target = 0; target < field_count; target++ )
			{
				paintAspectsForFieldPair( j, target );
			}
		}
	}
	else
	{
		for( uint j = 0; j < field_count; j++ )
		{
			//printf( "markedField %d j %d markedFieldStatus %d\n", markedField, j, markedFieldStatus );
			if (( markedField == j ) && ( markedFieldStatus & CHART_FIELD_STATUS_ASPECTED ))
			{
				for( uint target = 0; target < field_count; target++ )
				{
					paintAspectsForFieldPair( a_red( j + positionOffset, field_count ), target );
				}
			}

			// TODO der unterstützt nicht mehrfache Aspekte nebeneinander
			if (( markedField == j ) && ( markedFieldStatus & CHART_FIELD_STATUS_ASPECTING ))
			{
				for(  int source = 0; source < (int)field_count; source++ )
				{
					paintAspectsForFieldPair( source, a_red( j + positionOffset, field_count ) );
				}
			}
		}
	}
	finishChart();
}