public void PerformLayout(IDiagram diagram) { if (diagram.DiagramItems == null || diagram.DiagramItems.Count == 0) { return; } diagram.Padding = new Thickness(); var endpointLayout = new EndpointItemLayout(diagram); var handlerLayout = new HandlerLayout(diagram); var endpointTimelineLayout = new EndpointTimelineLayout(diagram); var arrowLayout = new ArrowLayout(diagram, endpointLayout); var processRouteLayout = new ProcessRouteLayout(diagram); foreach (var item in diagram.DiagramItems) { var endpoint = item as EndpointItem; if (endpoint != null) { endpointLayout.Position(endpoint); continue; } var handler = item as Handler; if (handler != null) { handlerLayout.Position(handler); continue; } var timeline = item as EndpointTimeline; if (timeline != null) { endpointTimelineLayout.Position(timeline); continue; } var arrow = item as Arrow; if (arrow != null) { arrowLayout.Position(arrow); } var route = item as MessageProcessingRoute; if (route != null) { processRouteLayout.Position(route); } } }