新手使用MindFusion.Diagramming for WinForms中常见问题集锦(二)

本文整理了用户常见图序列化和导出问题,希望对您有所帮助~

问:在v5中的Diagram.LoadFromXml中是否已经改进了XML反序列化速度?

答:版本5使用DOM API和版本4使用线性序列化,因此在V5中XML序列化速度稍慢,但您会注意到它只有大量项目(数千个)。此外,版本5序列化保存了共享节点映像的单个副本,因此使用映像时新版本中的XML序列化速度要快得多。我们已经完成了400个节点和400个链接的一些测试:

V4.3.1,没有图像:文件加载一秒钟

V5.0,没有图像:文件加载一秒钟

V4.3.1,包含10张图像:文件加载12秒

V5.0,有10个图像:文件加载2秒

上次测试的每个图像都分配给40个节点。在这种情况下,版本5中的速度更好,因为共享图像的字节被编码并保存一次; 而版本4为每个节点保存一个单独的副本,然后在加载时解码400个图像副本。

问: Diagram.LoadFromXml可以读取使用以前版本的XmlWriter类创建的XML字符串吗?

答:旧的XML格式仍然支持阅读; 实际上,您必须使用LoadFromString方法来加载XML字符串。

问:在v5中,获取文档的LoadFromXml重载与获取字符串的重载之间是否存在性能差异?

答:后者在从字符串内容创建XmlDocument对象后调用前者。

问:是否可以将图表转换为位图文件?

答:调用Diagram.CreateImage方法,然后调用Image.Save方法。

问:我正在尝试创建一个自定义拖放图标,以便在屏幕上拖动形状时显示。有没有办法将flowChart形状动态转换为图像?

答:使用Graphics.FromImage创建图形对象。要在Graphics实例上绘制形状,请创建临时节点,设置其形状,然后调用ShapeNode.Draw方法。Flowcharter示例项目中显示了类似的方法,其中列表框中的图标表示Flowchart.NET形状。

问:如何将图表导出到emf文件?

答:使用以下代码:

using (FileStream stream = new FileStream(
@"C:\temp.wmf", FileMode.Create))
{
Graphics g = CreateGraphics();
IntPtr hDC = g.GetHdc();
Metafile metafile = new Metafile(stream, hDC);
g.ReleaseHdc(hDC);
g.Dispose(); IGraphics gMeta = new GdiGraphics(
Graphics.FromImage(metafile));

diagram.Draw(gMeta, new RenderOptions(),
diagram.Bounds, false);

gMeta.Dispose();

metafile.Dispose();
}
IGraphics和GdiGraphics在MindFusion.Drawing命名空间中定义。

问:我可以将选择的项目保存到文件中吗?

答:使用CopySelection和PasteSelection方法将所选项目复制到第二个Diagram实例,并调用Diagram.SaveToFile方法将它们保存到文件中。

问: FlowChart.NET可以读取我的数据库模式并为其生成ER图吗?

答:不可以。您应该通过ADO.NET阅读架构,并使用CreateTableNode和CreateDiagramLink方法以编程方式生成图表。

问:我有一个SQL表,其中包含一些包含多列中的状态和连接信息的条目。我已经导入了节点。现在我想组织连接。你有一些提示我应该选择哪种方式吗?

答:要创建连接,请在创建节点时将数据库中的节点ID分配给ShapeNode.Tag属性。在链接记录上运行第二个循环,对于节点的每个相关节点ID,调用CreateDiagramLink(node,Diagram.FindNode(relatedID))。如果您已使用标签存储其他信息,请将关系保存在Hashtable中。要排列图表,请使用一些布局算法类,例如LayeredLayout。


问题持续更新中。
本文到此结束,感谢你的阅读~

新手使用MindFusion.Diagramming for WinForms中常见问题集锦(二)

上一篇:delphi xe6 JSON 测试


下一篇:C#获取屏幕工作区大小