提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:杨鹏连|2020-09-15 11:30:18.960|阅读 490 次
概述:在此博客文章中,我们将说明如何在JavaScript图中以编程方式平移和缩放。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
MindFusion.Diagramming for WinForms是一个能帮助你创建工作流和进程图表的.NET控件;数据库实体关系图表;组织图表;对象层次和关系图表;图表和树。它是基于对象-图表框,表格和箭头类型,将其归类分派给其他并结合成复杂的结构。该控件提供超过预先定义的50多种图表框,如自定义设计样式和对图表框着色等。MindFusion.Diagramming for WinForms现已加入在线订购,Standard Single Developer版本原价2848现在抢购立享优惠只需2345,立即查看详情>>
点击下载MindFusion.Diagramming for WinForms最新试用版
我们将构建一个包含50个随机节点的图,并以编程方式缩放和平移该图。这是最终图的屏幕截图:
一.项目设置
我们添加了对MindFusion.Diagramming.js和MindFusion.Common.js文件的引用。我们还添加了对另一个名为MouseEvents.js的文件的引用。这是我们的代码隐藏文件。
<script src="MindFusion.Common.js" type="text/javascript"></script> src="MindFusion.Common.js" type="text/javascript"></script>
<script src="MindFusion.Diagramming.js" type="text/javascript"></script><script src="MindFusion.Diagramming.js" type="text/javascript"></script>
<script src="MouseEvents.js" type="text/javascript"></script><script src="MouseEvents.js" type="text/javascript"></script>
在网页的正文中,我们创建一个Canvas元素,并为其分配一个ID。这很重要,因为我们将在代码中引用Canvas
<div style="width: 100%; height: 100%; overflow: auto;"> style="width: 100%; height: 100%; overflow: auto;">
<canvas id="diagram_canvas" width="2100" height="2100"><canvas id="diagram_canvas" width="2100" height="2100">
This page requires a browser that supports HTML 5 Canvas element.
</canvas></canvas>
</div></div>
在我们称为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多种自动布局算法。通过//mindfusion.eu/javascript-diagram.html了解有关JavaScript制图的更多信息。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:



Parasoft C/C++test是一款专为C/C++代码设计的自动化测试工具,通过静态代码分析、单元测试和运行时错误检测等功能,帮助开发团队在早期发现并修复缺陷,提升代码质量和开发效率 。在实际使用中,尤其是在VC6此类旧版开发环境中执行单元测试时,可能会因环境兼容性问题触发链接错误。
本文主要介绍如何在MVVM应用程序中使用虚拟源,欢迎下载最新版组件体验!
Aspose.Slides for Java使用户能够轻松地操作幻灯片、添加注释和转换文件。其易用性和集成能力提高了工作效率,使开发人员能够专注于更关键的任务。
在嵌入式软件测试领域,对交叉编译代码进行单元测试是一大挑战。Parasoft C/C++test作为专业的C/C++测试工具,能够与劳特巴赫Trace32调试器深度集成。下面会详细介绍如何在C++test中配置Trace32调试器,实现对PowerPC架构程序的单元测试,涵盖环境设置、项目导入到测试执行的全过程。
相关产品
FlowChart.NET是一款能够帮助你轻松创建流程图和示意图的.NET控件,可以自定义设计样式和图表框颜色。
最新文章 MORE
永利最大(官方)网站相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站 