最近在做android app cfg的项目,最终是要输出一个cfg图的。这里,我搜罗了一番之后,选择了mindfusion的库,应该还有许多其他的库,这个库我觉得使用比较简单,也很直观,支持的语言也多,参考资料也比较丰富,基本参考官方给的文档,相关的效果都能够轻松的实现。
库的官方网址:mindfusion
这里稍微总结一下在项目中用到的几个功能,其实这些功能在给的官方例子中也都有的,很方便,看看就知道怎么用了。
diagram.LinkHeadShape = ArrowHeads.PointerArrow; //设置连线箭头的类型, 这里设置的是程序流图箭头。
GlassEffect effect = new GlassEffect(); //设置结点的玻璃效果
effect.Type = GlassEffectType.Type4;
effect.GlowColor = Colors.Black;
diagram.NodeEffects.Add(effect);
var diagramNode = diagram.Factory.CreateShapeNode(bounds);
nodeMap[node.Attribute("id").Value] = diagramNode;
diagramNode.Text = node.Attribute("name").Value;
//--调整结点大小以显示全部内容,必须放在设置了内容值之后。有的时候结点的内容比较多,设置单一的bound放不下,fit就可以搞定了。
diagramNode.ResizeToFitText(FitSize.KeepRatio);
diagramNode.TextAlignment = TextAlignment.Left;
ShapeNode s2 = (ShapeNode)nodeMap["0"]; //起点位置是绿色
s2.Brush = Brushes.LightGreen;
//连接两个结点
DiagramLink dl = diagram.Factory.CreateDiagramLink(
nodeMap[link.Attribute("origin").Value],
nodeMap[link.Attribute("target").Value] );
dl.AddLabel(link.Attribute("label").Value + "--" + logShow); //设置link的颜色
//这是非常方便的一个功能,自动布局结点。
var layout = new MindFusion.Diagramming.Wpf.Layout.DecisionLayout();//这种模式,使得布局的结点可以是标准的控制流图形式。
layout.StartNode = nodeMap["0"];
layout.Arrange(diagram); //自动布局结点
上一张图:
如果有相关需求的小伙伴们,可以快快行动哟~