彩票走势图

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

翻译|其它|编辑:吴园园|2019-09-06 11:29:12.930|阅读 288 次

概述:MindFusion.Diagramming for WinForms是一款能够帮助你轻松创建流程图和示意图的.NET控件,可以自定义设计样式和图表框颜色。本文整理了用户常见LayeredLayout分区设置问题,希望对您有所帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件;数据库实体关系图表;组织图表;对象层次和关系图表;图表和树。它是基于对象-图表框,表格和箭头类型,将其归类分派给其他并结合成复杂的结构。该控件提供超过预先定义的50多种图表框,如自定义设计样式和对图表框着色等。

点击下载MindFusion.Diagramming for WinForms最新试用版

问:我们根据MindFusion.Diagramming for WinForms给定的连接数据自动布局流程计划,并尝试了各种可用的布局变体,我们选择LayeredLayout作为示例。此外,有必要将流程计划(分别是其节点)划分到某些区域(详情见图一)。想问有没有一种方法可以在LayeredLayout中设置分区。

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

(图一)

答:LayeredLayout中没有内置任何内容来允许分区。您可以尝试使用SwimlaneLayout,或者对LayeredLayout进行一些后期处理,将节点移动到保留布局相对位置的区域,只更改Y:

var ll = new LayeredLayout();
ll.Orientation = MindFusion.Diagramming.Layout.Orientation.Horizontal;
ll.EnforceLinkFlow = true;
ll.Arrange(diagram);
 
var columns = new Dictionary<int, List<DiagramNode>>();
foreach (var node in diagram.Nodes)
{
    if (!ll.Statistics.NodeLayerIndices.ContainsKey(node))
        continue;
    var l = ll.Statistics.NodeLayerIndices[node];
    if (!columns.ContainsKey(l))
        columns[l] = new List<DiagramNode>();
    columns[l].Add(node);
}
 
foreach (var column in columns.Values)
{
    column.Sort((n1, n2) =>
        {
            int area1 = (int)n1.Tag;
            int area2 = (int)n2.Tag;
            int areaComparison = area1.CompareTo(area2);
            if (areaComparison != 0)
                return areaComparison;
            return n1.Bounds.Y.CompareTo(n2.Bounds.Y);
        });
 
    float y = diagram.Bounds.Top + 10;
    for (int i = 0; i < column.Count; i++)
    {
        var node = column[i];
        int area = (int)node.Tag;
        float minAreaY = area * 70; // replace this with your area definitions
        if (y < minAreaY)
            y = minAreaY;
        node.Move(node.Bounds.X, y);
        y += node.Bounds.Height + 10;
    }
}
 
//diagram.RouteAllLinks();

问:在我们实现给定代码之后,将节点移动到所需的通道是完美的。但是在调用diagram.RouteAllLinks()之后发生了一个奇怪的问题。方法。我附上了2张图片,一张是在调用上述方法之前,另一张是之后的。第6节点和第7节点以及第10节点和第11节点之间的节点链路应该相同,但是第10节点和第11节点之间的链路是奇怪的。这是什么原因呢?

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

(图二)

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

(图三)

答:尝试将diagram.LinkRouter设置为GridRouter实例,并在必要时在RoutingOptions中设置更大的弯曲成本。 

问:这解决了这个图上的问题,但在其他一些我再次注意到类似的东西。(详情请看图四和图五)。使用QuickRouter链接按预期绘制,但现在使用GridRouter它很奇怪。我试过操纵TurnCost,CrossingCost,NodeVicinityCost属性但没有帮助。

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

(图四)

MindFusion.Diagramming for WinForms常见问题集锦(六):LayeredLayout分区设置

(图五)

答:也许尝试使用更小的RoutingOptions.GridSize,或者将节点位置和大小与当前大小的多个对齐。第一个链接弯曲将始终是节点占用的网格区域之外的至少一个网格块,添加了RoutingOptions.EndPointsOffset - 如果现在更大,则尝试将后者设置为0。

=====================================================

问答持续更新中>>>

MindFusion.Diagramming for WinForms现已加入在线订购,点击此处查看价格~

想要购买MindFusion.Diagramming for WinForms正版授权的朋友欢迎哦~

850×100.png


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP