提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:吴园园|2019-09-11 11:24:55.320|阅读 235 次
概述:MindFusion.Diagramming for WinForms是一款能够帮助你轻松创建流程图和示意图的.NET控件,可以自定义设计样式和图表框颜色。本文整理了用户常见的TreeLayout / OrthogonalLayout中的链接问题,希望对您有所帮助。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件;数据库实体关系图表;组织图表;对象层次和关系图表;图表和树。它是基于对象-图表框,表格和箭头类型,将其归类分派给其他并结合成复杂的结构。该控件提供超过预先定义的50多种图表框,如自定义设计样式和对图表框着色等。
点击下载MindFusion.Diagramming for WinForms最新版
Q:TreeLayout和OrthogonalLayout之间的区别是什么?另外你能告诉我OrthognalLayout如何对链接进行排序的代码吗?
A:你应该只为树图使用TreeLayout,否则尝试LayeredLayout或FlowchartLayout。
您可以根据图表类型有选择地应用不同的布局类。例如,检查当前图表是否为树(root的IncomingLinks.Count == 0,对于所有其他节点IncomingLinks.Count == 1),在这种情况下运行TreeLayout,否则为LayeredLayout。调用Arrange后,运行此方法以拉开相同的源和目标之间的链接:
代码:
void PullLinksApart(float padding) { diagram.UpdateRuntimeIndices(); // find repeating links var repeatingLinks = new Dictionary(); foreach (DiagramLink link in diagram.Links) { int k1 = Math.Min(link.Origin.RuntimeIndex, link.Destination.RuntimeIndex); int k2 = Math.Max(link.Origin.RuntimeIndex, link.Destination.RuntimeIndex); int key = diagram.Items.Count * k1 + k2; if (!repeatingLinks.ContainsKey(key)) repeatingLinks[key] = new List(); repeatingLinks[key].Add(link); } // pull them apart foreach (KeyValuePair linkList in repeatingLinks) { int c = 0, numLinks = linkList.Value.Count; if (numLinks < 2) continue; foreach (DiagramLink link in linkList.Value) { for (int p = 0; p < link.ControlPoints.Count; ++p) { PointF point = link.ControlPoints[p]; point.X += padding * c - padding * (numLinks - 1) / 2; link.ControlPoints[p] = point; link.UpdateFromPoints(); } c++; } } }
对于带有圆角链接的布局,您可以使用此处显示的方法。
代码:
private void diagram_LinkCreated(object sender, LinkEventArgs e) { DiagramLinkCollection commonLinks = GetCommonLinks(e.Link.Origin, e.Link.Destination); PointF pt1 = e.Link.ControlPoints[0]; PointF pt2 = e.Link.ControlPoints[e.Link.ControlPoints.Count - 1]; if (commonLinks.Count > 1) { for (int c = 0; c < commonLinks.Count; ++c) { DiagramLink link = commonLinks[c]; link.Style = LinkStyle.Bezier; link.SegmentCount = 1; PointF cp1 = new PointF(pt1.X + 1 * (pt2.X - pt1.X) / 3, pt1.Y + 1 * (pt2.Y - pt1.Y) / 3); PointF cp2 = new PointF(pt1.X + 2 * (pt2.X - pt1.X) / 3, pt1.Y + 2 * (pt2.Y - pt1.Y) / 3); float angle = 0, radius = 0; CarteseanToPolar(pt1, pt2, ref angle, ref radius); int pairOffset = (c / 2 + 1) * 5; if (commonLinks.Count % 2 == 0) { PolarToCartesean(cp1, c % 2 == 0 ? angle - 90 : angle + 90, pairOffset, ref cp1); PolarToCartesean(cp2, c % 2 == 0 ? angle - 90 : angle + 90, pairOffset, ref cp2); if (link.ControlPoints[0] == pt1) { link.ControlPoints[1] = cp1; link.ControlPoints[2] = cp2; } else { link.ControlPoints[1] = cp2; link.ControlPoints[2] = cp1; } link.UpdateFromPoints(); } } } } DiagramLinkCollection GetCommonLinks(DiagramNode node1, DiagramNode node2) { DiagramLinkCollection commonLinks = new DiagramLinkCollection(); foreach (DiagramLink link in node1.OutgoingLinks) if (link.Destination == node2) commonLinks.Add(link); foreach (DiagramLink link in node1.IncomingLinks) if (link.Origin == node2) commonLinks.Add(link); return commonLinks; } void PolarToCartesean(PointF coordCenter, float a, float r, ref PointF dekart) { if (r == 0) { dekart = coordCenter; return; } dekart.X = (float)(coordCenter.X + Math.Cos(a * Math.PI / 180) * r); dekart.Y = (float)(coordCenter.Y - Math.Sin(a * Math.PI / 180) * r); } void CarteseanToPolar(PointF coordCenter, PointF dekart, ref float a, ref float r) { if (coordCenter == dekart) { a = 0; r = 0; return; } float dx = dekart.X - coordCenter.X; float dy = dekart.Y - coordCenter.Y; r = (float)(Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2))); a = (float)(Math.Atan(-dy / dx) * 180 / Math.PI); if (dx < 0) a += 180; }
您可以将LinkCreated代码复制到辅助方法,并为每对节点调用它,并在它们之间有多个链接。
问答持续更新中>>>
MindFusion.Diagramming for WinForms现已加入在线订购,点击此处查看价格~
想要购买MindFusion.Diagramming for WinForms正版授权的朋友欢迎哦~
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
FlowChart.NET是一款能够帮助你轻松创建流程图和示意图的.NET控件,可以自定义设计样式和图表框颜色。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢