亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ve.pas

?? 圖論算法
?? PAS
字號:
unit VE;

interface
uses Messages, Windows, SysUtils, Classes,Dialogs,Controls, Forms, Menus,
     Graphics,grapoint,anyline,ctlpoint;

type
  TEdge = class;
  TVertex = class
    PointControl:TGraphPoint;

    NeighbourVertex:Tlist;
    NeighbourEdge  :Tlist;
    owner : Tform;
    considervisible:boolean;
    isVirtual:boolean;
    isDelete:boolean;
    ConnectiveDegree:integer; //when isDelete is true , <=2

    constructor Create(theOwner:Tform;theleft,thetop:integer;thelabel:integer);
    destructor Destroy;override;

    function isNeighbourVertex(p:Tvertex):Boolean;
    function isNeighbourEdge(p:TEdge):Boolean;
    function isConsiderVisibleNV(p:Tvertex):boolean;
    function getConsiderVisibleNE(p:TVertex):Tedge;
    function NEConsiderVisible(theindex:integer):boolean;
    function NEHignlightlook(theindex:integer):boolean;

//    procedure setNeighbourVertex(p:Tvertex);
    function getlabelno:integer;
    function getNeighbourcount:integer;
    function getNeighbourVertex(theindex:integer):Tvertex;
    function getNeighbourEdge(theindex:integer):TEdge;
    function visibleNeighbourcount:integer;
//    function NV(theindex:integer):Tvertex;
//    function NE(theindex:integer):TEdge;

    property labelno:integer read getlabelno;
    property Neighbourcount:integer read getNeighbourcount;
    property NV[index:integer]:Tvertex read getNeighbourVertex;
    property NE[index:integer]:TEdge   read getNeighbourEdge;

    procedure removeNeighbourVertex(p:Tvertex);
    procedure load(reader:Treader);
    procedure save(writer:Twriter);
  end;

  TEdge = class
    edgecontrol:Tanyline;
    owner : Tform;

    XVertex,YVertex:TVertex;
    Controlpointpos:array[1..6] of Tpoint;
    ControlpointNum:integer;

    Considervisible:boolean;
    highlightlook:boolean;
    isCurve:Boolean;

    constructor Create(theOwner:Tform;theXvertex,theYvertex:TVertex); //edgecontrol created in it
    destructor Destroy; override;

    procedure redraw;
    procedure drawControlPoint;
    function addControlPoint:boolean;
    procedure restoretoLine;
    procedure colorwidth(thecolor:Tcolor;theWidth:integer);

    procedure load(reader:Treader);
    procedure save(writer:Twriter);
  end;

implementation
uses FForm;

constructor TVertex.Create(theOwner:Tform;theleft,thetop:integer;thelabel:integer);
begin
  owner := theowner;
  considervisible := true;
  isVirtual := false;
  isDelete := false;
  if owner <> nil then
  begin
  PointControl := TGraphPoint.create(Owner);
  PointControl.parent := Owner;
  PointControl.left := theleft;
  PointControl.top  := thetop;
  PointControl.pointlabel := thelabel;
  PointControl.vertex := self;

  PointControl.onMousedown := TFindForm(Owner).GraphPointMouseDown;
  PointControl.onMouseMove := TFindForm(Owner).GraphPointMouseMove;
  PointControl.onMouseUp := TFindForm(Owner).GraphPointMouseUp;
  PointControl.onDragOver := TFindForm(Owner).GraphPointDragover;
  PointControl.onDragDrop := TFindForm(Owner).GraphPointDragDrop;
  PointControl.PopupMenu := TFindForm(Owner).GraphPointPopupmenu;

  PointControl.bringtofront;
  end
  else isVirtual := true;

  NeighbourVertex := Tlist.create;
  NeighbourEdge   := Tlist.create;

//pointControl create

end;

destructor TVertex.Destroy;
begin
  if owner <> nil then
     pointControl.free;
  NeighbourVertex.free;
  NeighbourEdge.free;
end;

function TVertex.isNeighbourVertex(p:Tvertex):Boolean;
begin
  if NeighbourVertex.indexof(p) = -1 then result := False else result := True;
end;

function TVertex.isNeighbourEdge(p:TEdge):Boolean;
begin
  if NeighbourEdge.indexof(p) = -1 then result := False else result := True;
end;

function TVertex.isConsiderVisibleNV(p:Tvertex):boolean;
var pindex:integer;
begin
  result := false;
  pindex := NeighbourVertex.indexof(p) ;
  if (pindex > -1 ) and TEdge(NeighbourEdge[pindex]).Considervisible then
     result := true;
end;

function TVertex.NEConsiderVisible(theindex:integer):boolean;
begin
  result := NE[theindex].Considervisible;
end;

function TVertex.NEHignlightlook(theindex:integer):boolean;
begin
  result := NE[theindex].highlightlook;
end;

function TVertex.getNeighbourVertex(theindex:integer):Tvertex;
begin
  result := Tvertex(NeighbourVertex.items[theindex-1]);
end;

function TVertex.getNeighbourEdge(theindex:integer):TEdge;
begin
  result := TEdge(NeighbourEdge.items[theindex-1]);
end;

{
function TVertex.NE(theindex:integer):TEdge;
begin
  result := TEdge(NeighbourEdge.items[theindex-1]);
end;
}

function TVertex.getConsiderVisibleNE(p:TVertex):Tedge;
var pindex:integer;
begin
  result := nil;
  pindex := NeighbourVertex.indexof(p);
  if (pindex > -1 ) and TEdge(NeighbourEdge[pindex]).Considervisible then
     result := NeighbourEdge[pindex];
end;

function TVertex.getlabelno:integer;
begin
  result := PointControl.pointlabel;
end;

function TVertex.getNeighbourcount:integer;
begin
  result := NeighbourVertex.count;
end;

function TVertex.visibleNeighbourcount:integer; //if neighbour vertex is visible, not edge ,because some vertex have been delete temporarily
var i:integer;
begin
  result := NeighbourVertex.count;
  for i := 0 to NeighbourVertex.count -1 do
    if not Tvertex(NeighbourVertex[i]).considervisible then
       result := result - 1 ;
end ;

procedure TVertex.removeNeighbourVertex(p:Tvertex);
var pindex:integer;
begin
  pindex := NeighbourVertex.indexof(p);
  NeighbourVertex.delete(pindex);
  NeighbourEdge.delete(pindex);
  NeighbourVertex.pack;
  NeighbourEdge.pack;
end;

procedure TVertex.load(reader:Treader);
var i:integer;
    thevertexCount:integer;
    theindex:integer;
begin
  PointControl.left := reader.readinteger;
  PointControl.top  := reader.readinteger;
  PointControl.fillcolor := reader.readinteger;
  PointControl.pointlabel := reader.readinteger;
  thevertexCount := reader.readinteger;
  for i := 0 to theVertexCount - 1 do
    begin
      theindex := reader.readinteger;
      NeighbourVertex.add(VertexList.items[theindex]);
    end;
  for i := 0 to theVertexCount - 1 do
    begin
      theindex := reader.readinteger;
      NeighbourEdge.add(EdgeList.items[theindex]);
    end;
end;

procedure TVertex.save(writer:Twriter);
var i:integer;
begin
  writer.writeinteger(PointControl.left);
  writer.writeinteger(PointControl.top);
  writer.writeinteger(PointControl.fillcolor);
  writer.writeinteger(PointControl.pointlabel);
  writer.writeinteger(NeighbourVertex.count);
  for i := 0 to NeighbourVertex.count - 1 do
    writer.writeinteger(VertexList.indexof(NeighbourVertex.items[i]));
  for i := 0 to NeighbourEdge.count - 1 do
    writer.writeinteger(EdgeList.indexof(NeighbourEdge.items[i]));
end;


constructor TEdge.Create(theOwner:Tform;theXvertex,theYvertex:TVertex);
begin
    owner := theowner;
    if theXvertex = nil then exit;

    XVertex := theXvertex;
    YVertex := theYvertex;
    if owner <> nil then
    begin
    edgecontrol := Tanyline.create(Owner);
    edgecontrol.parent := Owner;
    edgecontrol.align := alClient;
    edgecontrol.drawby([XVertex.pointControl.Centerpoint,YVertex.pointControl.Centerpoint]);
    edgecontrol.Sendtoback;
    controlpointNum := 1;
    Controlpointpos[1] := edgecontrol.getmidpoint;
    end;
    Considervisible := True;
    highlightlook := False;
    isCurve := False;

    XVertex.NeighbourVertex.add(YVertex);
    YVertex.NeighbourVertex.add(XVertex);
    XVertex.NeighbourEdge.add(self);
    YVertex.NeighbourEdge.add(self);
end;

destructor  TEdge.Destroy;
begin
  if owner <> nil then
     edgecontrol.free;
end;

procedure TEdge.redraw;
var i,j:integer;
    thepoints:array[1..8] of Tpoint;
begin
  if not isCurve then
     begin
       edgecontrol.drawby([XVertex.pointControl.Centerpoint,YVertex.pointControl.Centerpoint]);
       Controlpointpos[1] := edgecontrol.getmidpoint;
       ControlpointNum:= 1;
     end
  else
     begin
       thepoints[1] := XVertex.pointControl.Centerpoint;
       j := 2;
       for i := 1 to ControlpointNum do
         begin
           thepoints[j] := Controlpointpos[i];
           inc(j);
         end;
       thepoints[j] := YVertex.pointControl.Centerpoint;
       edgecontrol.drawby(slice(thepoints,j));
     end;
end;

procedure TEdge.drawControlPoint;
var theControlpoint:TControlpoint;
    i:integer;
begin
  for i := 1 to ControlpointNum do
    begin
      thecontrolpoint := Tcontrolpoint.create(owner);
      thecontrolpoint.parent := owner;
      thecontrolpoint.left := controlpointpos[i].X - 3;
      thecontrolpoint.top  := controlpointpos[i].Y - 3;
      thecontrolpoint.controledge := self;
      thecontrolpoint.orderno := i;
      thecontrolpoint.onMousedown := TFindForm(Owner).controlpointMouseDown;
      thecontrolpoint.onMouseMove := TFindForm(Owner).controlpointMouseMove;
      thecontrolpoint.onMouseUp := TFindForm(Owner).controlpointMouseUp;
      thecontrolpoint.onDblClick := TFindForm(Owner).controlpointDblClick;
      thecontrolpoint.popupmenu := TFindForm(Owner).ControlpointPopupMenu;
      Controlpointlist.add(thecontrolpoint);
    end;
end;

function TEdge.addControlPoint:boolean;
var theControlpoint:Tcontrolpoint;
begin
  result := false;
  if ControlpointNum < 6 then
    begin
      inc(ControlpointNum);
      controlpointpos[ControlpointNum] := edgeControl.getmidpoint;
      thecontrolpoint := Tcontrolpoint.create(owner);
      thecontrolpoint.parent := owner;
      thecontrolpoint.left := controlpointpos[ControlpointNum].X - 3;
      thecontrolpoint.top  := controlpointpos[ControlpointNum].Y - 3;
      thecontrolpoint.controledge := self;
      thecontrolpoint.orderno := ControlpointNum;
      thecontrolpoint.onMousedown := TFindForm(Owner).controlpointMouseDown;
      thecontrolpoint.onMouseMove := TFindForm(Owner).controlpointMouseMove;
      thecontrolpoint.onMouseUp := TFindForm(Owner).controlpointMouseUp;
      thecontrolpoint.onDblClick := TFindForm(Owner).controlpointDblClick;
      thecontrolpoint.popupmenu := TFindForm(Owner).ControlpointPopupMenu;
      Controlpointlist.add(thecontrolpoint);
      result := true;
    end
  else
    showmessage('At most 6 control point!');
end;

procedure TEdge.restoretoLine;
begin
  iscurve := false;
  redraw;
end;

procedure TEdge.colorwidth(thecolor:Tcolor;theWidth:integer);
begin
  EdgeControl.LineWidth := thewidth ;
  EdgeControl.Color := thecolor;
end;

procedure TEdge.load(reader:Treader);
var theindex:integer;
    i :integer;
begin
  theindex := reader.readinteger;
  XVertex := Tvertex(VertexList.items[theindex]);
  theindex := reader.readinteger;
  YVertex := Tvertex(VertexList.items[theindex]);
  ControlpointNum := reader.readinteger;
  for i := 1 to ControlpointNum do
    begin
      Controlpointpos[i].X := reader.readinteger;
      Controlpointpos[i].Y := reader.readinteger;
    end;
  edgecontrol := Tanyline.create(Owner);
  edgecontrol.parent := Owner;
  edgecontrol.align := alClient;
  isCurve := reader.readboolean;
  edgecontrol.linewidth := reader.readinteger;
  edgecontrol.color := reader.readinteger;
  redraw;
  edgecontrol.Sendtoback;

  Considervisible := reader.readboolean;
  highlightlook := reader.readboolean;
end;

procedure TEdge.save(writer:Twriter);
var i:integer;
begin
  writer.writeinteger(VertexList.indexof(XVertex));
  writer.writeinteger(VertexList.indexof(YVertex));
  writer.writeinteger(ControlpointNum);
  for i := 1 to ControlpointNum do
    begin
      writer.writeinteger(Controlpointpos[i].X);
      writer.writeinteger(Controlpointpos[i].Y);
    end;
  writer.writeboolean(isCurve);
  writer.writeinteger(edgecontrol.linewidth);
  writer.writeinteger(edgecontrol.color);

  writer.writeboolean(Considervisible);
  writer.writeboolean(highlightlook);
end;


end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品一区二区三区久久久久久| 日韩一区二区三区视频在线| 欧美午夜寂寞影院| 日韩精品一区二区三区视频播放 | 亚洲柠檬福利资源导航| 韩国中文字幕2020精品| 欧美精品色综合| 自拍偷拍欧美激情| 国产在线精品国自产拍免费| 欧美三级视频在线| 一区二区三区四区中文字幕| 成人免费高清在线| 久久精品日韩一区二区三区| 午夜不卡在线视频| 欧美三级在线看| 老司机精品视频一区二区三区| 不卡一区二区中文字幕| 久久久99精品久久| 国产美女娇喘av呻吟久久| 欧美成人精品二区三区99精品| 亚洲一区电影777| 日本高清不卡aⅴ免费网站| 国产精品久久久一本精品| 国产精品资源在线| 2020国产精品自拍| 国产自产高清不卡| 国产视频一区二区三区在线观看| 激情亚洲综合在线| 久久先锋资源网| 九九**精品视频免费播放| 欧美一区二区三区四区久久| 三级欧美韩日大片在线看| 欧美喷水一区二区| 日韩黄色一级片| 精品少妇一区二区三区| 国产麻豆视频一区二区| 久久九九99视频| 高清国产午夜精品久久久久久| 国产精品网站在线| 不卡的av网站| 亚洲国产日韩a在线播放| 成人精品鲁一区一区二区| 欧美激情一区二区三区在线| 91丨porny丨国产| 亚洲高清中文字幕| 日韩精品中文字幕在线一区| 国产精品自拍毛片| 亚洲三级久久久| 欧美精品在欧美一区二区少妇| 三级在线观看一区二区| 欧美精品一区二区三区视频| 国产精品99久久久久久宅男| 自拍偷拍国产亚洲| 欧美日韩国产综合视频在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品盗摄一区二区三区| 成人国产精品视频| 亚洲丰满少妇videoshd| 26uuu色噜噜精品一区| 成人av午夜影院| 爽好多水快深点欧美视频| 久久综合久久综合九色| 91蜜桃在线免费视频| 日韩国产在线一| 国产午夜亚洲精品午夜鲁丝片| 在线欧美日韩国产| 国产资源在线一区| 夜夜精品浪潮av一区二区三区| 4438x亚洲最大成人网| 不卡视频在线看| 免费一级欧美片在线观看| 国产精品国产三级国产aⅴ原创| 欧美日韩一区二区三区不卡| 国产精选一区二区三区| 亚洲bdsm女犯bdsm网站| 国产免费成人在线视频| 91精品在线免费| 91网站视频在线观看| 九九热在线视频观看这里只有精品| 亚洲视频一区二区在线| 成人小视频免费在线观看| 成人av网在线| 久久精品国产99久久6| 亚洲老司机在线| 久久久久久影视| 欧美日韩色综合| 成人自拍视频在线观看| 美女视频网站久久| 午夜精品福利久久久| 日韩美女视频一区二区| 中文字幕久久午夜不卡| 欧美xxxx在线观看| 欧美视频一区在线| 99国产精品久久久久| 国产成人综合网站| 看片网站欧美日韩| 日韩av电影天堂| 亚洲123区在线观看| 亚洲激情网站免费观看| 国产精品传媒在线| 国产精品网站在线播放| 久久精品一二三| 亚洲精品在线电影| 日韩欧美中文字幕公布| 欧美日韩不卡视频| 欧美三级日韩三级国产三级| 在线视频一区二区三| 色综合一个色综合| 一本到不卡免费一区二区| 色婷婷av一区二区三区大白胸| 99久久久无码国产精品| 成人av动漫网站| 一本色道亚洲精品aⅴ| 色综合天天综合网国产成人综合天 | 国产mv日韩mv欧美| 国产乱国产乱300精品| 精品一区二区在线视频| 精品一区在线看| 国产风韵犹存在线视精品| 国产精品综合av一区二区国产馆| 国产在线不卡一区| 国产激情视频一区二区三区欧美| 国产成人精品午夜视频免费| 成人视屏免费看| 在线观看视频一区二区欧美日韩| 在线精品视频一区二区| 欧美日本视频在线| 日韩欧美国产电影| 国产色综合久久| 亚洲天堂成人网| 午夜婷婷国产麻豆精品| 麻豆传媒一区二区三区| 国产福利一区二区三区视频在线| www.一区二区| 欧美偷拍一区二区| 欧美zozozo| 国产精品国产精品国产专区不片| 一区二区三国产精华液| 亚洲一区二区中文在线| 日韩精品亚洲专区| 国产一区二区免费视频| 91成人看片片| 日韩欧美高清在线| 国产精品美女www爽爽爽| 亚洲一区二区三区四区的| 男人的j进女人的j一区| 丰满放荡岳乱妇91ww| 欧洲av在线精品| 精品国产91亚洲一区二区三区婷婷| 国产精品另类一区| 五月婷婷另类国产| 福利一区福利二区| 欧美日韩不卡一区| 中文字幕永久在线不卡| 国产精品911| 欧美日韩一级视频| 欧美经典一区二区三区| 视频一区在线视频| 成人免费看的视频| 欧美v国产在线一区二区三区| 日韩理论片中文av| 国产精品主播直播| 欧美一区二区黄| 亚洲欧美成aⅴ人在线观看| 极品少妇xxxx精品少妇| 91久久久免费一区二区| 久久久久久久久久电影| 日本少妇一区二区| 色哟哟国产精品| 国产精品妹子av| 国产一区在线观看视频| 欧美人狂配大交3d怪物一区| 国产精品毛片无遮挡高清| 日韩精品一二区| 日本高清不卡视频| 综合av第一页| av男人天堂一区| 久久久久久免费网| 捆绑调教美女网站视频一区| 色婷婷综合久久| 最新日韩在线视频| 国产成a人亚洲精| 久久精品无码一区二区三区| 麻豆成人久久精品二区三区小说| 欧美视频在线一区二区三区| 成人欧美一区二区三区白人| 成人午夜又粗又硬又大| 久久精品日韩一区二区三区| 狠狠色丁香久久婷婷综合_中 | 91蝌蚪国产九色| 欧美国产精品劲爆| 国产精品一区一区三区| 精品国产在天天线2019| 久久99精品国产.久久久久久| 日韩一区二区精品在线观看| 五月婷婷欧美视频| 日韩一区二区三区三四区视频在线观看 | 亚洲综合免费观看高清在线观看| 91在线一区二区| 亚洲黄色免费网站|