JavaScript图中以编程方式平移和缩放

MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件;数据库实体关系图表;组织图表;对象层次和关系图表;图表和树。它是基于对象-图表框,表格和箭头类型,将其归类分派给其他并结合成复杂的结构。该控件提供超过预先定义的50多种图表框,如自定义设计样式和对图表框着色等。MindFusion.Diagramming for WinForms现已加入在线订购,Standard Single Developer版本原价2848现在抢购立享优惠只需2345,立即查看详情>>

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

我们将构建一个包含50个随机节点的图,并以编程方式缩放和平移该图。这是最终图的屏幕截图:
在这里插入图片描述

我们将针对JavaScript使用MindFusion图表库。

一.项目设置

我们添加了对MindFusion.Diagramming.js和MindFusion.Common.js文件的引用。我们还添加了对另一个名为MouseEvents.js的文件的引用。这是我们的代码隐藏文件。

在网页的正文中,我们创建一个Canvas元素,并为其分配一个ID。这很重要,因为我们将在代码中引用Canvas

style="width: 100%; height: 100%; overflow: auto;"> This page requires a browser that supports HTML 5 Canvas element.

二.图表设置

在我们称为MouseEvents.js的代码隐藏文件中,我们使用DOMContentLoaded事件初始化该图。

document.addEventListener(“DOMContentLoaded”, function ().addEventListener(“DOMContentLoaded”, function ()
{{
// create a Diagram component that wraps the “diagram_canvas” canvas// create a Diagram component that wraps the “diagram_canvas” canvas
diagram = MindFusion.AbstractionLayer.createControl(Diagram, null, null, null, document.getElementById(“diagram_canvas”));= MindFusion.AbstractionLayer.createControl(Diagram, null, null, null, document.getElementById(“diagram_canvas”));
diagram.setBounds(new Rect(5, 5, 2000, 1000));.setBounds(new Rect(5, 5, 2000, 1000));
我们使用AbstractionLayer类的createControl方法创建Diagram类的实例。所述的setBounds方法确定图表的绘图区域的尺寸。如果此大小大于“画布”的大小,该图将自动显示滚动条。请注意,只有当图的区域大于画布时,我们才可以使用平移。

我们使用Diagram类的一些设置来自定义应用程序:

diagram.setDefaultShape(“ Rectangle”);。setDefaultShape (“ Rectangle” );
diagram.setRouteLinks(true);。setRouteLinks (true );
diagram.setRoundedLinks(true);。setRoundedLinks (true );
diagram.setShowGrid(false);。setShowGrid (false );
链接将被路由和舍入,并且不会渲染网格。

三.图表项目

我们使用Factory类的createShapeNode方法创建图节点。该工厂类作为一个实例,可通过在getFactory()方法: 对(VAR I = 0;我<50; i ++在)

{{
    var colorIndex = Math.floor(Math.random() * 3);  var colorIndex = Math.floor(Math.random() * 3);  
    var shape = diagram.getFactory().createShapeNode(new Rect(136, 36, 20, 10));var shape = diagram.getFactory().createShapeNode(new Rect(136, 36, 20, 10));
    shape.setBrush({ type: 'SolidBrush', color: colors[colorIndex] });.setBrush({ type: 'SolidBrush', color: colors[colorIndex] });
    if(i % 3   == 0)if(i % 3   == 0)
        shape.setShape('Ellipse');.setShape('Ellipse');
    else else 
        shape.setShape('Rectangle');.setShape('Rectangle');
    if( i % 7 == 0)if( i % 7 == 0)
    {{
        shape.setBounds(new Rect(136, 36, 16, 8)); .setBounds(new Rect(136, 36, 16, 8)); 
    }}

    shape.setText("Node " + (i + 1).toString());.setText("Node " + (i + 1).toString());
    shape.setTextColor("white");.setTextColor("white");
}}

我们将第三个形状制作为Ellipse,然后根据随机原理从三个画笔中选择一个画笔,并在数组中对其进行初始化。每个第七个形状都稍小一些–由setBounds方法设置,该方法以Rect作为参数,该尺寸略小于创建形状节点时使用的Rect实例。
节点之间的连接器是使用Factory的createDiagramLink方法创建的。我们循环遍历所有50个节点,并将每个节点与图节点集合中随机抽取的节点连接。该集合可通过Diagram类的节点属性获得:

diagram.nodes.forEach(function(node).nodes.forEach(function(node)
{{
var nodeIndex = Math.floor(Math.random() * 50); var nodeIndex = Math.floor(Math.random() * 50);

var node2 = diagram.nodes[nodeIndex];var node2 = diagram.nodes[nodeIndex];
var link = diagram.getFactory().createDiagramLink(node, node2);var link = diagram.getFactory().createDiagramLink(node, node2);
link.setHeadShape("Circle");.setHeadShape("Circle");

})})
我们通过setHeadShape方法自定义链接的外观。我们选择“圆形”形状作为每个链接的头部。
我们创建了具有相同边界的图表项目,这意味着它们彼此重叠。排列它们的最佳方法是使用JsDiagram提供的一种自动布局算法。它们是MindFusion.Graphs命名空间的成员–您可以检查其余部分。在我们的示例中,我们选择了LayeredLayout,它提供了很好的结果。我们将其方向设置为LayoutDirection。我们还设置了一些其他属性来调节节点距离,层距离等:

var layout = new MindFusion.Graphs.LayeredLayout(); layout = new MindFusion.Graphs.LayeredLayout();
layout.direction = MindFusion.Graphs.LayoutDirection.LeftToRight;.direction = MindFusion.Graphs.LayoutDirection.LeftToRight;
layout.siftingRounds = 0;.siftingRounds = 0;
layout.nodeDistance = 8;.nodeDistance = 8;
layout.layerDistance = 8;.layerDistance = 8;
diagram.arrange(layout);.arrange(layout);
所有布局都适用通过的安排法图,是以布局的一个实例作为参数。

四.平移和缩放

我们将通过处理标准DOM事件来实现平移和缩放。第一个是“ wheel”事件,我们将其附加到图表canvas元素:

var dgrm = document.getElementById(‘diagram_canvas’); dgrm = document.getElementById(‘diagram_canvas’);

dgrm.addEventListener(‘wheel’, function(e).addEventListener(‘wheel’, function(e)
{{
var zoom = diagram.getZoomFactor();var zoom = diagram.getZoomFactor();
zoom -= e.deltaY / 10;-= e.deltaY / 10;
if (zoom > 10)if (zoom > 10)
diagram.setZoomFactor(zoom);.setZoomFactor(zoom);

e.preventDefault(); // do not scroll.preventDefault(); // do not scroll

});});
我们使用Diagram的getZoomFactor和setZoomFactor方法来操纵缩放比例。缩放步骤是基于事件args的deltaY值计算的。您可以通过除以较小或较大的数字来命令缩放量。重要的是,我们在事件参数上调用preventDefault(),以超过画布对wheel事件的默认响应。
通过处理Canvas的mousedown和mouseup DOM事件来实现平移。

/* events fired on the draggable target */
dgrm.addEventListener(‘mousedown’, function(e).addEventListener(‘mousedown’, function(e)
{{
if( e.ctrlKey)if( e.ctrlKey)
diagram.setBehavior(MindFusion.Diagramming.Behavior.Pan);.setBehavior(MindFusion.Diagramming.Behavior.Pan);

}, false);}, false);

dgrm.addEventListener(‘mouseup’, function(e).addEventListener(‘mouseup’, function(e)
{{
if( e.ctrlKey)if( e.ctrlKey)
diagram.setBehavior(MindFusion.Diagramming.Behavior.LinkShapes);.setBehavior(MindFusion.Diagramming.Behavior.LinkShapes);

}, false);}, false);
如果要平移图,我们只需使用setBehavior方法更改图的行为即可。这些选项是“ 行为”枚举的成员。当用户单击图并按下Ctrl键时,我们将图的行为更改为“ Pan”。当鼠标抬起但按下Ctrl键时,我们将行为放回LinkShapes。这是默认行为,用鼠标拖动可创建新形状,而在现有的DiagramShape -s 之间拖动则创建DiagramLink -s。
这样我们的样品就准备好了。

关于JavaScript绘图:此本地JavaScript库为开发人员提供了创建和自定义任何类型的图,决策树,流程图,类层次结构,图,家谱树,BPMN图等的能力。该控件提供了丰富的事件集,众多的自定义选项,动画,图形操作,样式和主题。您有100多个预定义节点,表节点和15多种自动布局算法。通过https://mindfusion.eu/javascript-diagram.html了解有关JavaScript制图的更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的ployly库是一种强大的可视化工具,它可以帮助用户实现各种绘图功能。在信号处理中,绘制脉冲响应图是一项重要的任务,因为它可以让用户清晰地了解信号系统的性质和行为。 在Python中,使用ployly库绘制脉冲响应图非常简单。首先,需要导入相关的模块,如plotly.graph_objs和plotly.offline。然后,可以定义不同的信号系统,并通过函数计算出相应的脉冲响应序列。最后,使用plotly.offline.plot()函数将序列绘制为图形即可。 绘制脉冲响应图时,除了脉冲响应本身,还可以添加各种其他的元素,如横轴和纵轴的标签、标题、图例等,以便更好地展示信号系统的性质和行为。 总之,Python中的ployly库提供了丰富的绘图工具,可以轻松地绘制脉冲响应图,从而帮助用户了解信号系统的性质和行为。 ### 回答2: Python是一种高级编程语言,拥有许多强大的库和框架,使得它成为许多数据科学家和工程师喜爱的编程语言。其中,plotly库是一个交互式数据可视化库,它可以利用Python和Javascript绘制出美观、高效的图表。在Python中,使用plotly库绘制脉冲响应图的过程如下: 首先,需要安装plotly库,可以使用pip install plotly命令来安装。然后创建一个图表对象,可以使用figure()函数,其中可以设置图表的大小、标题等属性。接着,创建一个trace对象,这个对象表示脉冲响应图中的一条线,可以使用Scatter()函数来创建,其中需要传入x和y轴数据。x轴表示时间,y轴表示脉冲响应,可以根据自己的数据来填充。然后将这个trace对象添加到图表对象中,可以使用add_trace()函数。最后,设置一些其他的图表属性,如坐标轴标签,布局等。调用plot()函数来显示并保存这个图表。 在绘制脉冲响应图时,还可以通过使用plotly的交互式功能来增强可视化效果。例如,可以添加鼠标悬停提示、缩放平移等功能。这些交互式功能可以让用户更加深入地了解数据,并更方便地与数据进行互动。 总体来说,使用plotly库绘制脉冲响应图非常简单,只需几行代码就可以完成。同时,由于plotly库强大的交互式功能,可以让用户轻松地探索和分析数据。因此,它是绘制高质量数据可视化图表的重要工具之一。 ### 回答3: Python中的Plotly是一种开源可视化库,它可以帮助用户在互动式图表上创建简单而又美观的图表。对于绘制脉冲响应图而言,Plotly提供了丰富的工具和功能。 要绘制脉冲响应图,首先要导入Plotly库。然后,可以使用Plotly中的“scatter”函数绘制一个简单的散点图。可以使用x轴来表示时间,y轴来表示响应。接下来,可以使用Plotly中的“layout”函数来定制绘图的外观和布局,包括添加轴标签和设置图表标题等。 在绘制脉冲响应图时,通常还需要使用Plotly中的滤波器函数来处理数据。例如,可以使用“lowess”函数来执行局部加权回归平滑,并创建一个平滑的响应曲线。 最后,将散点图和平滑曲线组合在一起,可以获得一个完整的脉冲响应图。可以使用Plotly中的导出功能将图形保存到文件中,或将其嵌入到其他文档或网页中。 综上所述,Python中的Plotly库提供了一种强大的工具来绘制脉冲响应图。通过使用Plotly中的散点图、滤波器函数和布局功能,用户可以创建美观、互动和易于理解的图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值