|
From: vrecion <pav...@sy...> - 2005-02-23 09:07:52
|
Yeah ZOrder will be usefull.
Pavel
_____
From: ext...@li...
[mailto:ext...@li...] On Behalf Of Marco
Wobben
Sent: Wednesday, February 23, 2005 9:46 AM
To: ext...@li...
Subject: [Extgraph-developer] TSimplegraph.DrawObjectOrder
Hi guys,
My first real need and adjustment to the code is the being able to influence
the drawing order of the GraphObjects. For this to work I've done the
following:
* Introduced a new TDrawObjectOrder enumeration (ooZOrder,
ooLinksFirst, ooNodesFirst)
* Added a published property DrawObjectOrder (default value
ooLinksFirst for backward compatible behaviour)
* Rewritten the TSimpleGraph.Draw method a little.
Below is a small snippet to show you how this influences the drawing of
GraphObjects, you can compare it to the existing code in this method which
always draws links first and the other objects on top of that. However this
ignores the ZOrder and the need for it to happen the other way around (as it
does in my case).
Hope to write about more changes I've made and add even more usable changes
soon...
Regards,
Marco.
procedure TSimpleGraph.Draw(Canvas: TCanvas);
var
I: Integer;
(* MW *)
procedure DrawObjects(aType: TDrawObjects);
var
i: integer;
begin
for I := 0 to Objects.Count - 1 do
with Objects[I] do
if (aType = doAll) or
(IsLink and (aType = doLinks)) or
(not IsLink and (aType = doNodes)) then
Draw(Canvas);
end;
begin
(* MW *)
case DrawObjectOrder of
ooNodesFirst: DrawObjects(doNodes);
ooLinksFirst: DrawObjects(doLinks);
end;
if Linking and ((State = gsMoveLink) or
((CommandMode = cmLinkNodes) and (FirstNodeOfLink <> nil))) then
begin
Canvas.Pen.Mode := pmNot;
Canvas.Pen.Width := 1;
Canvas.Pen.Style := psSolid;
DefaultLinkClass.DrawDraft(Canvas,
Rect(StartPoint.X, StartPoint.Y, StopPoint.X, StopPoint.Y));
end;
(* MW *)
case DrawObjectOrder of
ooNodesFirst: DrawObjects(doLinks);
ooLinksFirst: DrawObjects(doNodes);
else
DrawObjects(doAll);
end;
if Linking and (CommandMode = cmLinkNodes) and (FirstNodeOfLink <> nil)
then
...
...
|