问:在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。
问题持续更新中。
本文到此结束,感谢你的阅读~