www.pudn.com > sybase_dblib4.zip > Entities.pas


unit Entities; 
interface 
uses classes; 
 
type 
  SybObjectname = string[30]; 
 
type TLinks = class(TObject) 
  public 
    From_Entity  :SybObjectname; 
    From_Field   :SybObjectname; 
    From_X       :Integer; 
    From_Y       :Integer; 
    Real_From_X  :Integer; 
    Real_From_Y  :Integer; 
    To_Entity    :SybObjectname; 
    To_Field     :SybObjectname; 
    To_X         :Integer; 
    To_Y         :Integer; 
    Real_To_X    :Integer; 
    Real_To_Y    :Integer; 
  end; 
   
var EntityList       :TList; 
    linklist         :TList; 
    oldlinklist      :TList; 
 
    First_Entity     :byte; 
    first_link       :byte; 
 
    linking          :boolean; 
    lnk_from_entity  :SybObjectname; 
    lnk_from_field   :SybObjectname; 
    lnk_from_X       :Integer; 
    lnk_from_Y       :Integer; 
    lnk_to_entity    :SybObjectname; 
    lnk_to_field     :SybObjectname; 
    lnk_to_X         :Integer; 
    lnk_to_Y         :Integer; 
 
    function online(where_x,where_y :integer; var real_from_x, 
                                                  real_from_y, 
                                                  real_to_x, 
                                                  real_to_y:integer):boolean; 
    function check_online(x1,y1,x2,y2,x,y :integer):boolean; 
 
implementation 
 
function online(where_x,where_y :integer; var real_from_x, 
                                              real_from_y, 
                                              real_to_x, 
                                              real_to_y:integer):boolean; 
var i      :integer; 
    x1,x2, 
    y1,y2  :integer; 
begin 
  result:=false; 
  if linklist = nil then 
    exit; 
  for i:=0 to linklist.count-1 do 
  begin 
    x1:=tlinks(linklist[i]).real_from_x; 
    x2:=tlinks(linklist[i]).real_to_x; 
    y1:=tlinks(linklist[i]).real_from_y; 
    y2:=tlinks(linklist[i]).real_to_y; 
    real_from_x:=x1; 
    real_from_y:=y1; 
    real_to_x:=x2; 
    real_to_y:=y2; 
 
    result:=check_online(x1,y1,x2,y2,where_x,where_y); 
    if result then 
      exit; 
  end; 
end; 
 
function check_online(x1,y1,x2,y2,x,y :integer):boolean; 
var c,m   :real; 
begin 
  result:=false; 
 
  m:= (y2 - y1) / (x2 - x1); 
  c:=y1 - (m * x1); 
 
  result:= (abs(((m * x) + c)-y) <= 20) 
         and (((x>=x1) and (x<=x2)) 
           or ((x>=x2) and (x<=x1))) 
         and (((y>=y1) and (y<=y2)) 
           or ((y>=y2) and (y<=y1))); 
end; 
 
end.