inline void AirspaceRenderer::DrawFillCached(Canvas &canvas, Canvas &stencil_canvas, const WindowProjection &projection, const AirspaceRendererSettings &settings, const AirspaceWarningCopy &awc, const AirspacePredicate &visible) { if (awc.GetSerial() != last_warning_serial || !fill_cache.Check(projection)) { last_warning_serial = awc.GetSerial(); Canvas &buffer_canvas = fill_cache.Begin(canvas, projection); if (DrawFill(buffer_canvas, stencil_canvas, projection, settings, awc, visible)) fill_cache.Commit(canvas, projection); else fill_cache.CommitEmpty(); } #ifdef HAVE_ALPHA_BLEND #ifdef HAVE_HATCHED_BRUSH if (settings.transparency && AlphaBlendAvailable()) #endif fill_cache.AlphaBlendTo(canvas, projection, 60); #ifdef HAVE_HATCHED_BRUSH else #endif #endif #ifdef HAVE_HATCHED_BRUSH fill_cache.CopyAndTo(canvas, projection); #endif }
void DrawFill(Canvas &canvas) const { assert(remaining == 0); #ifdef ENABLE_OPENGL unsigned start = 0; const RasterPoint *points = &this->points[0]; for (auto i = fans.begin(), end = fans.end(); i != end; ++i) { i->DrawFill(points, start); start += i->size; } #else const RasterPoint *points = &this->points[0]; for (auto i = fans.begin(), end = fans.end(); i != end; ++i) { i->DrawFill(canvas, points); points += i->size; } #endif }
void ContourColorDlg::OnBnClickedOk() { UpdateData( TRUE ); // 获取图层名称 CString layer; if( !GetLayer( layer ) ) { MessageBox( _T( "没有选择包含等值线的图层" ) ); return; } AcGeDoubleArray zValues; AcArray<COLORREF> colors; int n = m_colorList.GetItemCount(); for( int i = 0; i < n; i++ ) { ColorListItemData* pData = ( ColorListItemData* )m_colorList.GetItemData( i ); zValues.append( pData->z ); colors.append( pData->rgb ); } // 删除最后一个z值 zValues.removeLast(); // 删除color list上的附加数据 DeleteColorListItemDatas(); // 获取图层上的等值线信息图元 AcDbObjectId objId = GetContourInfoOnLayer( layer ); SetContourInfo( objId, zValues, colors, m_bFillColor ); // 获取边界坐标数据 AcGePoint3dArray bounds; GetBoundaryPoints( bounds ); if( bounds.isEmpty() ) { MessageBox( _T( "请添加一个闭合的井田边界" ) ); return; } // 获取点集数据 AcGePoint3dArray datas; GetContourDatas( objId, datas ); //assert((colors.length()-zValues.length()) == 1); // 绘制填充 DrawFill( layer, bounds, datas, zValues, colors, m_bFillColor ); OnOK(); }
void MapPainterAgg::DrawArea(const Projection& projection, const MapParameter& parameter, const MapPainter::AreaData& area) { agg::path_storage path; if (!area.clippings.empty()) { rasterizer->filling_rule(agg::fill_even_odd); } else { rasterizer->filling_rule(agg::fill_non_zero); } path.move_to(coordBuffer->buffer[area.transStart].GetX(), coordBuffer->buffer[area.transStart].GetY()); for (size_t i=area.transStart+1; i<=area.transEnd; i++) { path.line_to(coordBuffer->buffer[i].GetX(), coordBuffer->buffer[i].GetY()); } path.close_polygon(); rasterizer->add_path(path); if (!area.clippings.empty()) { for (std::list<PolyData>::const_iterator c=area.clippings.begin(); c!=area.clippings.end(); c++) { const PolyData &data=*c; agg::path_storage clipPath; clipPath.move_to(coordBuffer->buffer[data.transStart].GetX(), coordBuffer->buffer[data.transStart].GetY()); for (size_t i=data.transStart+1; i<=data.transEnd; i++) { clipPath.line_to(coordBuffer->buffer[i].GetX(), coordBuffer->buffer[i].GetY()); } clipPath.close_polygon(); rasterizer->add_path(clipPath); } } DrawFill(projection, parameter, *area.fillStyle, path); }
void MapPainterAgg::DrawSymbol(const Projection& projection, const MapParameter& parameter, const Symbol& symbol, double x, double y) { double minX; double minY; double maxX; double maxY; double centerX; double centerY; symbol.GetBoundingBox(minX,minY,maxX,maxY); centerX=maxX-minX; centerY=maxY-minY; for (std::list<DrawPrimitiveRef>::const_iterator p=symbol.GetPrimitives().begin(); p!=symbol.GetPrimitives().end(); ++p) { DrawPrimitive* primitive=p->Get(); if (dynamic_cast<PolygonPrimitive*>(primitive)!=NULL) { PolygonPrimitive* polygon=dynamic_cast<PolygonPrimitive*>(primitive); FillStyleRef style=polygon->GetFillStyle(); agg::path_storage path; for (std::list<Coord>::const_iterator pixel=polygon->GetCoords().begin(); pixel!=polygon->GetCoords().end(); ++pixel) { if (pixel==polygon->GetCoords().begin()) { path.move_to(x+projection.ConvertWidthToPixel(pixel->x-centerX), y+projection.ConvertWidthToPixel(maxY-pixel->y-centerY)); } else { path.line_to(x+projection.ConvertWidthToPixel(pixel->x-centerX), y+projection.ConvertWidthToPixel(maxY-pixel->y-centerY)); } } path.close_polygon(); rasterizer->add_path(path); DrawFill(projection, parameter, *style, path); } else if (dynamic_cast<RectanglePrimitive*>(primitive)!=NULL) { RectanglePrimitive* rectangle=dynamic_cast<RectanglePrimitive*>(primitive); FillStyleRef style=rectangle->GetFillStyle(); agg::path_storage path; double xPos=x+projection.ConvertWidthToPixel(rectangle->GetTopLeft().x-centerX); double yPos=y+projection.ConvertWidthToPixel(maxY-rectangle->GetTopLeft().y-centerY); double width=projection.ConvertWidthToPixel(rectangle->GetWidth()); double height=projection.ConvertWidthToPixel(rectangle->GetHeight()); path.move_to(xPos,yPos); path.line_to(xPos+width,yPos); path.line_to(xPos+width,yPos+height); path.line_to(xPos,yPos+height); path.close_polygon(); rasterizer->add_path(path); DrawFill(projection, parameter, *style, path); } else if (dynamic_cast<CirclePrimitive*>(primitive)!=NULL) { CirclePrimitive* circle=dynamic_cast<CirclePrimitive*>(primitive); FillStyleRef style=circle->GetFillStyle(); agg::path_storage path; double radius=projection.ConvertWidthToPixel(circle->GetRadius()); agg::ellipse ellipse(x+projection.ConvertWidthToPixel(circle->GetCenter().x-centerX), y+projection.ConvertWidthToPixel(maxY-circle->GetCenter().y-centerY), radius, radius); path.concat_path(ellipse); rasterizer->add_path(path); DrawFill(projection, parameter, *style, path); } } }
int pacman_exec( int fdfb, int fdrc, int fdlcd, char *cfgfile ) { struct timeval tv; int x; int jumplevel=-1; if ( FBInitialize( 720, 576, 8, fdfb ) < 0 ) return -1; setup_colors(); if ( RcInitialize( fdrc ) < 0 ) return -1; InitLevel( 0 ); while( doexit != 3 ) { MazeInitialize(); DrawMaze( ); /* 0 = all */ DrawFill(); DrawGhosts( ); DrawPac( ); MazePig(); doexit=0; while( !doexit ) { tv.tv_sec = 0; #ifdef HAVE_DREAMBOX_HARDWARE tv.tv_usec = 8000; #else tv.tv_usec = 1000; #endif x = select( 0, 0, 0, 0, &tv ); /* 10ms pause */ MovePac( ); MoveGhosts( ); DrawGhosts( ); DrawPac( ); #if defined(USEX) || defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif RcGetActCode( ); CheckGhosts( ); } if ( doexit != 3 ) { actcode=0xee; if ( score ) DrawScore(); if ( !gametime ) DrawGameOver(); #if defined(USEX) || defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif doexit=0; jumplevel=-1; while(( actcode != RC_OK ) && !doexit ) { tv.tv_sec = 0; tv.tv_usec = 100000; x = select( 0, 0, 0, 0, &tv ); /* 100ms pause */ RcGetActCode( ); if ( actcode == RC_HELP ) { while( realcode != 0xee ) RcGetActCode( ); actcode=0xee; while(( actcode == 0xee ) && !doexit ) { tv.tv_sec = 0; tv.tv_usec = 100000; x = select( 0, 0, 0, 0, &tv ); /* 100ms pause */ RcGetActCode( ); } if ( actcode <= RC_9 ) { jumplevel=actcode; actcode=RC_OK; } } } if ( gametime ) NextLevel(); else InitLevel( jumplevel ); } } Fx2StopPig(); /* fx2 */ /* buffer leeren, damit neutrino nicht rumspinnt */ realcode = RC_0; while( realcode != 0xee ) { tv.tv_sec = 0; tv.tv_usec = 300000; x = select( 0, 0, 0, 0, &tv ); /* 300ms pause */ RcGetActCode( ); } RcClose(); FBClose(); return 0; }