Hola, ya me he puesto a fondo con TsimpleGraph. Voy poco a poco comprendiendo como funciona.
El problema que tengo es que el linkado entre objetos se realiza mediante lineas que parten desde el centro del objeto, no pudiendose definir un punto fijo del objeto para linkarlo a otros.
Mi solucion ha sido crear cada bloque como un rectangulo, y las entradas y salidas tambien como rectangulos mas pequeños. El problema ahora lo tngo a la hora de mover el bloque grande, que no se como hacer que se puedan mover a la vez los pequeños (ademas el bloque grande esta alineado a la cuadricula y los pequeños no). Haber si alguien puede echarme un cable.
Código Delphi
[-]
type
TGraphIn=class(TRectangularNode)
public
procedure init();
end;
TGraphOut=class(TRectangularNode)
procedure init();
end;
TGraphBlock=class(TRectangularNode)
public
nIn,nOut: integer ; vIn: array of TGraphNode;
vOut: array of TGraphNode;
IOHeigth: Integer;
InSelected:integer;
OutSelected:integer;
procedure init();
end;
Type
TGraphLine=class(TGraphLink)
end;
const
FEO_DesactiveIO = 00;
implementation
uses
unit1,unit2;
procedure TGraphBlock.init();
var
I: Integer;
inc: Integer;
bound:Trect;
pt: Tpoint;
begin
self.NodeOptions:=[gnoMovable,gnoShowBackGround];
self.Background.LoadFromFile('./images/sos.jpg');
self.Nin:=3; self.NOut:=4;
self.IOHeigth:=8;
setlength(vIn,nIn);
setlength(vOut,nOut);
inc:=trunc((self.height-NIn*IOHeigth)/(Nin+1)); for I := 0 to nIn - 1 do
begin
pt.X:=left; pt.y:= Top+(i+1)*inc+i*IOHeigth;
bound:= Rect(pt, Point(pt.X+IOHeigth, pt.Y+IOHeigth));
form2.simpleGraph1.SnapToGrid:=False;
vIn[i]:=form2.simpleGraph1.InsertNode(bound,TGraphIn);
form2.simpleGraph1.SnapToGrid:=True;
TGraphIn(vIn[i]).init;
end;
inc:=trunc((self.height-NOut*IOHeigth)/(NOut+1)); for I := 0 to nOut - 1 do
begin
pt.X:=left+width-IOHeigth; pt.y:= Top+(i+1)*inc+i*IOHeigth;
bound:= Rect(pt, Point(pt.X+IOHeigth, pt.Y+IOHeigth));
form2.simpleGraph1.SnapToGrid:=False;
vOut[i]:=form2.simpleGraph1.InsertNode(bound,TGraphIn);
form2.simpleGraph1.SnapToGrid:=True;
TGraphIn(vOut[i]).init;
end;
self.InSelected:=-1;
self.OutSelected:=-1;
end;
procedure TGraphIn.init;
begin
NodeOptions:=[gnoShowBackGround];
end;
procedure TGraphOut.init;
begin
NodeOptions:=[gnoShowBackGround];
end;