Results 1 to 2 of 2

Thread: Plugin problems

  1. #1
    Join Date
    Jul 2007
    Location
    Ottawa, Canada
    Posts
    930
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default Plugin problems

    This is the plugin file. This function is supposed to take all the touching points and group them into ATPAs... But the problem is, is that it outputs it like a tpa instead. It will list every single point instead of a list of every tpa... Even though the type is a atpa

    IF ANYONE CAN ACTUALLY UNDERSTAND THIS PLEASE HELP! (benland lol)

    yes i tested this in scar, it works perfectly (just a tad slow )

    SCAR Code:
    //SCAR Plugin. Created for SCAR Divi by Kaitnieks & Freddy1990
    //Check "Accessable SCAR Functions.txt" for which functions you can call from SCAR
    library TestPlugin;

    uses
      FastShareMem,
      SysUtils,
      Classes,
      Windows,
      Graphics;

    {$R *.res}

    type
      TPointArray = array of TPoint;
      T2DPointArray = array of TPointArray;
      TBoolArray = array of boolean;
      T2DBoolArray = array of TBoolArray;


    //---------------------------------------
    // Functions to be called from SCAR

    //demonstration of procedure

    function TPATo2DBoolean(TPA : TPointArray; SizeX, SizeY : Integer) : T2DBoolArray;
    var i : integer;
    begin
      SetLength(result, SizeX + 2);
      for i := 0 to SizeX + 1 do
        SetLength(Result[i], SizeY + 2);
      for i := 0 to High(TPA) do
        result[TPA[i].x][TPA[i].y] := true;
    end;

    function PointLeft(Bools : T2DBoolArray) : TPoint;
    var i, j : integer;
    begin
      for i := 0 to High(Bools) do
        for j := 0 to High(Bools[i]) do
          if Bools[i][j] then
          begin
            result.x := i;
            result.y := j;
            exit;
          end;
      result.x := -1;
      result.y := -1;
    end;

    function ConnectedPoints2(TPA1 : TPointArray; StartX, StartY, SizeX, SizeY : Integer) : T2DPointArray; stdcall;
    var IsPoint : T2DBoolArray;
        j, k : integer;
        TPA2 : TPointArray;
    begin
      IsPoint := TPATo2DBoolean(TPA1, SizeX, SizeY);
      SetLength(TPA2, 1);
      k := 0;
      if Length(TPA1) > 0 then
      begin
      TPA2[0] := PointLeft(IsPoint);
      repeat
        k := k + 1;
        SetLength(Result, k);
        IsPoint[TPA2[0].x- StartX][TPA2[0].y - StartY] := false;
              for j := 0 to high(TPA2) do
              begin
                if IsPoint[TPA2[j].x+1 - StartX][TPA2[j].y - StartY] then
                begin
                  IsPoint[TPA2[j].x+1 - StartX][TPA2[j].y - StartY] := false;
                  SetLength(TPA2, Length(TPA2)+1);
                  TPA2[high(TPA2)].x := TPA2[j].x + 1;
                  TPA2[high(TPA2)].y := TPA2[j].y;
                end;
                if IsPoint[TPA2[j].x-1 - StartX][TPA2[j].y - StartY] then
                begin
                  IsPoint[TPA2[j].x-1 - StartX][TPA2[j].y - StartY] := false;
                  SetLength(TPA2, Length(TPA2)+1);
                  TPA2[high(TPA2)].x := TPA2[j].x - 1;
                  TPA2[high(TPA2)].y := TPA2[j].y;
                end;
                if IsPoint[TPA2[j].x - StartX][TPA2[j].y+1 - StartY] then
                begin
                  IsPoint[TPA2[j].x - StartX][TPA2[j].y+1 - StartY] := false;
                  SetLength(TPA2, Length(TPA2)+1);
                  TPA2[high(TPA2)].x := TPA2[j].x;
                  TPA2[high(TPA2)].y := TPA2[j].y + 1;
                end;
                if IsPoint[TPA2[j].x - StartX][TPA2[j].y-1 - StartY] then
                begin
                  IsPoint[TPA2[j].x - StartX][TPA2[j].y-1 - StartY] := false;
                  SetLength(TPA2, Length(TPA2)+1);
                  TPA2[high(TPA2)].x := TPA2[j].x;
                  TPA2[high(TPA2)].y := TPA2[j].y - 1;
                end;
              end;
        Result[k-1] := TPA2;
        SetLength(TPA2, 1);
        TPA2[0] := PointLeft(IsPoint);
      until (TPA2[0].x = -1) and (TPA2[0].y = -1)
      end;
    end;
    //********************************
    //  Change this accordingly to your function count

    function GetFunctionCount(): Integer; stdcall; export;
    begin
      Result := 1;
    end;

    //*******************************
    //  Change this accordingly to your function definitions

    function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall;
    begin
      case x of
        0:
          begin
            ProcAddr := @ConnectedPoints2;
            StrPCopy(ProcDef, 'function ConnectedPoints2(TPA1 : TPointArray; StartX, StartY, SizeX, SizeY : Integer) : T2DPointArray;');
          end;
      else
        x := -1;
      end;
      Result := x;
    end;

    //***************************
    // Don't change below this
    exports GetFunctionCount;
    exports GetFunctionInfo;
    end.
    ~ Metagen

  2. #2
    Join Date
    Jul 2007
    Location
    Ottawa, Canada
    Posts
    930
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Bump -.- Cmon guys!
    ~ Metagen

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •