AssoAndrea

TextureFactory

May 2nd, 2022
1,262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. UObject* UMyFactory::ParseTexture(UObject* InParent, const FName& InName,const FString& Filename, EObjectFlags Flags)
  2. {
  3.     int W, H;
  4.     TArray<FString> Lines;
  5.     TArray<FVector> ControlPoint;
  6.     ControlPoint.SetNumZeroed(4);
  7.     FFileHelper::LoadFileToStringArray(Lines, *Filename);
  8.     for (const FString& Line : Lines)
  9.     {
  10.         TArray<FString> Tokens;
  11.         Line.ParseIntoArray(Tokens, TEXT(" "), true);
  12.         if (Tokens[0] == "Width")
  13.         {
  14.             W = FCString::Atoi(*Tokens[1]);
  15.         }
  16.         else if (Tokens[0] == "Height")
  17.         {
  18.             H = FCString::Atoi(*Tokens[1]);
  19.         }
  20.         else if (Tokens[0] == "P1")
  21.         {
  22.             TArray<FString> Coord;
  23.             Tokens[1].ParseIntoArray(Coord, TEXT(","), true);
  24.             ControlPoint[0] = FVector(FCString::Atoi(*(Coord[0])), FCString::Atoi(*(Coord[1])),0);
  25.         }
  26.         else if (Tokens[0] == "P2")
  27.         {
  28.             TArray<FString> Coord;
  29.             Tokens[1].ParseIntoArray(Coord, TEXT(","), true);
  30.             ControlPoint[2] = FVector(FCString::Atoi(*(Coord[0])), FCString::Atoi(*(Coord[1])),0);
  31.         }
  32.         else if (Tokens[0] == "C1")
  33.         {
  34.             TArray<FString> Coord;
  35.             Tokens[1].ParseIntoArray(Coord, TEXT(","), true);
  36.             ControlPoint[1] = FVector(FCString::Atoi(*(Coord[0])), FCString::Atoi(*(Coord[1])), 0);
  37.         }
  38.         else if (Tokens[0] == "C2")
  39.         {
  40.             TArray<FString> Coord;
  41.             Tokens[1].ParseIntoArray(Coord, TEXT(","), true);
  42.             ControlPoint[3] = FVector(FCString::Atoi(*(Coord[0])), FCString::Atoi(*(Coord[1])), 0);
  43.         }
  44.     }
  45.     TArray<FVector> BeizerPoint;
  46.     FVector::EvaluateBezier(ControlPoint.GetData(),700, BeizerPoint);
  47.     TArray<FColor>Pixels;
  48.     Pixels.AddZeroed(H * W);
  49.     FCreateTexture2DParameters Params;
  50.     for(const FVector& Point : BeizerPoint)
  51.     {
  52.         int X = FMath::RoundToInt(Point.X);
  53.         int Y = FMath::RoundToInt(Point.Y);
  54.         if (X >= 0 && X < W && Y >= 0 && Y < H)
  55.         {
  56.             Pixels[Y * W + X] = FColor(255, 0, 0, 255);
  57.         }
  58.     }
  59.     return FImageUtils::CreateTexture2D(W, H, Pixels, InParent, InName.ToString(), Flags, Params);
  60.    
  61.    
  62. }
Advertisement
Add Comment
Please, Sign In to add comment