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.)); }
/***************************************************** ** ** 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(); }