Thursday, 23 July 2009

Implementando automated linked objects con Delphi parte III

Bueno, continuando con la misma línea de ayer, esta vez he hecho un par de cambios que determinan que las conexiones o enlaces también son objetos. De ésta manera al seleccionar un enlace este se marca como seleccionado y nos aparecen sus propiedades aún muy austeras pero la base ya está fabricada. Los cambios más importantes de diseño radican en la modificación de la clase TLinkPainter que ahora recoge los datos de TConnector que éste es el que recoge los puntos de la conexión. Si observamos el diagrama de diseño obtenemos:

Como podéis observar en el diagrama, ahora existe TConector que tiene una lista de vértices. Éstos vértices son los puntos de conexión creados por el Controlador. Una vez tengo la lista de los puntos, o sea que he calculado los vectores de conexión entre líneas, los puedo enviar al TLinkPainter para que los dibuje sobre el canvas. La modificación es importante ya que he eliminado parte importante del TLinkPainter ya que éste solo dibujaba líneas sobre el canvas y ahora es un "objeto".

Si observamos la aplicación, nos aparecen las propiedades del enlace de la siguiente manera:

Ahora, al hacer click sobre una de las cajas o sobre la línea de unión, podemos reconocer el objeto que tenemos bajo el mouse. Aquí os dejo la última versión de la aplicación ThundaxGeometricLinks v1.0.0 build 36.

Aquí os dejo también la definición de la clase TConnector:




type
TVertexList = class(TObjectList)
protected
function GetItem(Index: Integer): TVertex; overload;
procedure SetItem(Index: Integer; AObject: TVertex);
public
property Items[Index: Integer]: TVertex read GetItem write SetItem; default;
end;

TConnector = class(TPersistent)
private
vertexList: TVertexList;
Fcolor: TColor;
FPenWidth: integer;
FSelectedColor: TColor;
FSelected: boolean;
procedure Setcolor(const Value: TColor);
procedure SetPenWidth(const Value: integer);
procedure SetSelected(const Value: boolean);
procedure SetSelectedColor(const Value: TColor);
published
property color: TColor read Fcolor write Setcolor;
property PenWidth: integer read FPenWidth write SetPenWidth;
property SelectedColor: TColor read FSelectedColor write SetSelectedColor;
public
property Selected: boolean read FSelected write SetSelected;
constructor Create(color: TColor; SelectedColor: TColor);
procedure Add(vertex: TVertex);
function isInside(vertex: TVertex): boolean;
procedure EmptyList();
destructor Destroy(); override;
end;





Palabras de búsqueda:
Connect two objects.
Draw line between two points
Draw connector
  • Enlaces de interés:
Computational Geometry.
Algorithmic Geometry.

0 comments:

Post a Comment