void UReporterBase::DrawTriangle(UCanvas* Canvas, const FVector2D& Vertex1, const FVector2D& Vertex2, const FVector2D& Vertex3, const FLinearColor& Color) { FVector2D DummyTexCoord; FCanvasTriangleItem TriItem( ToScreenSpace(Vertex1, Canvas), ToScreenSpace(Vertex2, Canvas), ToScreenSpace(Vertex3, Canvas ), GWhiteTexture ); TriItem.SetColor( Color ); Canvas->DrawItem( TriItem ); }
void FCanvasItemTestbed::Draw( class FViewport* Viewport, class FCanvas* Canvas ) { bTestState = !bTestState; if( !bShowTestbed ) { return; } // A little ott for a testbed - but I wanted to draw several lines to ensure it worked :) if( TestLine.bTestSet == false ) { TestLine.bTestSet = true; TestLine.LineStart.X = FMath::FRandRange( 0.0f, Viewport->GetSizeXY().X ); TestLine.LineStart.Y = FMath::FRandRange( 0.0f, Viewport->GetSizeXY().Y ); TestLine.LineEnd.X = FMath::FRandRange( 0.0f, Viewport->GetSizeXY().X ); TestLine.LineEnd.Y = FMath::FRandRange( 0.0f, Viewport->GetSizeXY().Y ); TestLine.LineMove.X = FMath::FRandRange( 0.0f, 32.0f ); TestLine.LineMove.Y = FMath::FRandRange( 0.0f, 32.0f ); TestLine.LineMove2.X = FMath::FRandRange( 0.0f, 32.0f ); TestLine.LineMove2.Y = FMath::FRandRange( 0.0f, 32.0f ); } else { TestLine.LineStart += TestLine.LineMove; TestLine.LineEnd += TestLine.LineMove2; if( TestLine.LineStart.X < 0 ) { TestLine.LineMove.X = -TestLine.LineMove.X; } if( TestLine.LineStart.Y < 0 ) { TestLine.LineMove.Y = -TestLine.LineMove.Y; } if( TestLine.LineEnd.X < 0 ) { TestLine.LineMove2.X = -TestLine.LineMove2.X; } if( TestLine.LineEnd.Y < 0 ) { TestLine.LineMove2.Y = -TestLine.LineMove2.Y; } if( TestLine.LineStart.X > Viewport->GetSizeXY().X ) { TestLine.LineMove.X = -TestLine.LineMove.X; } if( TestLine.LineStart.Y > Viewport->GetSizeXY().Y ) { TestLine.LineMove.Y = -TestLine.LineMove.Y; } if( TestLine.LineEnd.X > Viewport->GetSizeXY().X ) { TestLine.LineMove2.X = -TestLine.LineMove2.X; } if( TestLine.LineEnd.Y > Viewport->GetSizeXY().Y ) { TestLine.LineMove2.Y = -TestLine.LineMove2.Y; } } // Text float CenterX = 0.0f; float YTest = 16.0f; FCanvasTextItem TextItem( FVector2D( CenterX, YTest ), LOCTEXT( "stringhere", "String Here" ), GEngine->GetSmallFont(), FLinearColor::Red ); TextItem.Draw( Canvas ); // Shadowed text TextItem.Position.Y += TextItem.DrawnSize.Y; TextItem.Scale.X = 2.0f; TextItem.EnableShadow( FLinearColor::Green, FVector2D( 2.0f, 2.0f ) ); TextItem.Text = LOCTEXT( "Scaled String here", "Scaled String here" ); TextItem.Draw( Canvas ); TextItem.DisableShadow(); TextItem.Position.Y += TextItem.DrawnSize.Y;; TextItem.Text = LOCTEXT( "CenterdStringhere", "CenterdStringhere" ); TextItem.Scale.X = 1.0f; TextItem.bCentreX = true; TextItem.Draw( Canvas ); // Outlined text TextItem.Position.Y += TextItem.DrawnSize.Y; TextItem.Text = LOCTEXT( "ScaledCentredStringhere", "Scaled Centred String here" ); TextItem.OutlineColor = FLinearColor::Black; TextItem.bOutlined = true; TextItem.Scale = FVector2D( 2.0f, 2.0f ); TextItem.SetColor( FLinearColor::Green ); TextItem.Text = LOCTEXT( "ScaledCentredOutlinedStringhere", "Scaled Centred Outlined String here" ); TextItem.Draw( Canvas ); // a line FCanvasLineItem LineItem( TestLine.LineStart, TestLine.LineEnd ); LineItem.Draw( Canvas ); // some boxes FCanvasBoxItem BoxItem( FVector2D( 88.0f, 88.0f ), FVector2D( 188.0f, 188.0f ) ); BoxItem.SetColor( FLinearColor::Yellow ); BoxItem.Draw( Canvas ); BoxItem.SetColor( FLinearColor::Red ); BoxItem.Position = FVector2D( 256.0f, 256.0f ); BoxItem.Draw( Canvas ); BoxItem.SetColor( FLinearColor::Blue ); BoxItem.Position = FVector2D( 6.0f, 6.0f ); BoxItem.Size = FVector2D( 48.0f, 96.0f ); BoxItem.Draw( Canvas ); // Triangle FCanvasTriangleItem TriItem( FVector2D( 48.0f, 48.0f ), FVector2D( 148.0f, 48.0f ), FVector2D( 48.0f, 148.0f ), GWhiteTexture ); TriItem.Draw( Canvas ); // Triangle list TArray< FCanvasUVTri > TriangleList; FCanvasUVTri SingleTri; SingleTri.V0_Pos = FVector2D( 128.0f, 128.0f ); SingleTri.V1_Pos = FVector2D( 248.0f, 108.0f ); SingleTri.V2_Pos = FVector2D( 100.0f, 348.0f ); SingleTri.V0_UV = FVector2D::ZeroVector; SingleTri.V1_UV = FVector2D::ZeroVector; SingleTri.V2_UV = FVector2D::ZeroVector; TriangleList.Add( SingleTri ); SingleTri.V0_Pos = FVector2D( 348.0f, 128.0f ); SingleTri.V1_Pos = FVector2D( 448.0f, 148.0f ); SingleTri.V2_Pos = FVector2D( 438.0f, 308.0f ); TriangleList.Add( SingleTri ); FCanvasTriangleItem TriItemList( TriangleList, GWhiteTexture ); TriItemList.SetColor( FLinearColor::Red ); TriItemList.Draw( Canvas ); // FCanvasNGonItem NGon( FVector2D( 256.0f, 256.0f ), FVector2D( 256.0f, 256.0f ), 6, GWhiteTexture, FLinearColor::White ); // NGon.Draw( Canvas ); // // FCanvasNGonItem NGon2( FVector2D( 488, 666.0f ), FVector2D( 256.0f, 256.0f ), 16, GWhiteTexture, FLinearColor::Green ); // NGon2.Draw( Canvas ); // Texture UTexture* SelectedTexture = GEditor->GetSelectedObjects()->GetTop<UTexture>(); if( SelectedTexture ) { // Plain tex FCanvasTileItem TileItem( FVector2D( 128.0f,128.0f ), SelectedTexture->Resource, FLinearColor::White ); TileItem.Draw( Canvas ); TileItem.Size = FVector2D( 32.0f,32.0f ); TileItem.Position = FVector2D( 16.0f,16.0f ); TileItem.Draw( Canvas ); // UV TileItem.Size = FVector2D( 64.0f,64.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( 1.0f, 1.0f ); TileItem.Position = FVector2D( 256.0f,16.0f ); TileItem.Draw( Canvas ); // UV TileItem.Size = FVector2D( 64.0f,64.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( 1.0f, -1.0f ); TileItem.Position = FVector2D( 356.0f,16.0f ); TileItem.Draw( Canvas ); // UV TileItem.Size = FVector2D( 64.0f,64.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( -1.0f, 1.0f ); TileItem.Position = FVector2D( 456.0f,16.0f ); TileItem.Draw( Canvas ); // UV TileItem.Size = FVector2D( 64.0f,64.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( -1.0f, -1.0f ); TileItem.Position = FVector2D( 556.0f,16.0f ); TileItem.Draw( Canvas ); // Rotate top/left pivot TileItem.Size = FVector2D( 96.0f,96.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( 1.0f, 1.0f ); TileItem.Position = FVector2D( 400.0f,264.0f ); TileItem.Rotation.Yaw = TestLine.Testangle; TileItem.Draw( Canvas ); // Rotate center pivot TileItem.Size = FVector2D( 128.0f, 128.0f ); TileItem.UV0 = FVector2D( 0.0f, 0.0f ); TileItem.UV1 = FVector2D( 1.0f, 1.0f ); TileItem.Position = FVector2D( 600.0f,264.0f ); TileItem.Rotation.Yaw = 360.0f - TestLine.Testangle; TileItem.PivotPoint = FVector2D( 0.5f, 0.5f ); TileItem.Draw( Canvas ); TestLine.Testangle = FMath::Fmod( TestLine.Testangle + 2.0f, 360.0f ); // textured tri FCanvasTriangleItem TriItemTex( FVector2D( 48.0f, 48.0f ), FVector2D( 148.0f, 48.0f ), FVector2D( 48.0f, 148.0f ), FVector2D( 0.0f, 0.0f ), FVector2D( 1.0f, 0.0f ), FVector2D( 0.0f, 1.0f ), SelectedTexture->Resource ); TriItem.Texture = GWhiteTexture; TriItemTex.Draw( Canvas ); // moving tri (only 1 point moves !) TriItemTex.Position = TestLine.LineStart; TriItemTex.Draw( Canvas ); } }