提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:黄竹雯|2018-11-19 11:24:54.000|阅读 1415 次
概述:轻量级流程图控件GoJS思维导图示例
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
GoJS是一个JavaScript库,可让您在现代Web浏览器中轻松创建交互式图表。本文所介绍的思维导图是一种蜘蛛图,它围绕中心概念组织信息,是表达发散性思维的有效图形思维工具。
通过移动最接近树根节点的节点来控制布局。当其中一个节点水平移动到根的另一侧时,其所有子节点将以新方向发送到Layout.doLayout,从而导致文本始终从根向外移动。该spotConverter功能用于管理 GraphObject.fromSpot和GraphObject.toSpot手动节点,所以TreeLayout.setsPortSpot和TreeLayout.setsChildPortSpot 属性被设置为假,使布图所述图将不会覆盖值。
删除节点时,CommandHandler.deletesTree属性确保使用它删除所有子节点。拖动节点时,DraggingTool.dragsTree 属性确保用它拖动所有子节点。这两个都是在Diagram的初始化期间设置的。
节点模板还定义了Part.selectionAdornmentTemplate,以允许创建新节点,并使用附加命令创建GraphObject.contextMenu。
想要了解更多相关信息请点击。
在页面中查看此示例页面的源代码
function init() { if (window.goSamples) goSamples(); // init for these samples -- you don't need to call this var $ = go.GraphObject.make; myDiagram = $(go.Diagram, "myDiagramDiv", { padding: 20, // when the user drags a node, also move/copy/delete the whole subtree starting with that node "commandHandler.copiesTree": true, "commandHandler.deletesTree": true, "draggingTool.dragsTree": true, initialContentAlignment: go.Spot.Center, // center the whole graph "undoManager.isEnabled": true }); // when the document is modified, add a "*" to the title and enable the "Save" button myDiagram.addDiagramListener("Modified", function(e) { var button = document.getElementById("SaveButton"); if (button) button.disabled = !myDiagram.isModified; var idx = document.title.indexOf("*"); if (myDiagram.isModified) { if (idx < 0) document.title += "*"; } else { if (idx >= 0) document.title = document.title.substr(0, idx); } }); // a node consists of some text with a line shape underneath myDiagram.nodeTemplate = $(go.Node, "Vertical", { selectionObjectName: "TEXT" }, $(go.TextBlock, { name: "TEXT", minSize: new go.Size(30, 15), editable: true }, // remember not only the text string but the scale and the font in the node data new go.Binding("text", "text").makeTwoWay(), new go.Binding("scale", "scale").makeTwoWay(), new go.Binding("font", "font").makeTwoWay()), $(go.Shape, "LineH", { stretch: go.GraphObject.Horizontal, strokeWidth: 3, height: 3, // this line shape is the port -- what links connect with portId: "", fromSpot: go.Spot.LeftRightSides, toSpot: go.Spot.LeftRightSides }, new go.Binding("stroke", "brush"), // make sure links come in from the proper direction and go out appropriately new go.Binding("fromSpot", "dir", function(d) { return spotConverter(d, true); }), new go.Binding("toSpot", "dir", function(d) { return spotConverter(d, false); })), // remember the locations of each node in the node data new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify), // make sure text "grows" in the desired direction new go.Binding("locationSpot", "dir", function(d) { return spotConverter(d, false); }) );
想要查看完整代码请点击。
在GitHub上查看此示例页面的源代码
function spotConverter(dir, from) { if (dir === "left") { return (from ? go.Spot.Left : go.Spot.Right); } else { return (from ? go.Spot.Right : go.Spot.Left); } } function changeTextSize(obj, factor) { var adorn = obj.part; adorn.diagram.startTransaction("Change Text Size"); var node = adorn.adornedPart; var tb = node.findObject("TEXT"); tb.scale *= factor; adorn.diagram.commitTransaction("Change Text Size"); } function toggleTextWeight(obj) { var adorn = obj.part; adorn.diagram.startTransaction("Change Text Weight"); var node = adorn.adornedPart; var tb = node.findObject("TEXT"); // assume "bold" is at the start of the font specifier var idx = tb.font.indexOf("bold"); if (idx < 0) { tb.font = "bold " + tb.font; } else { tb.font = tb.font.substr(idx + 5); } adorn.diagram.commitTransaction("Change Text Weight"); } function updateNodeDirection(node, dir) { myDiagram.model.setDataProperty(node.data, "dir", dir); // recursively update the direction of the child nodes var chl = node.findTreeChildrenNodes(); // gives us an iterator of the child nodes related to this particular node while(chl.next()) { updateNodeDirection(chl.value, dir); } } function addNodeAndLink(e, obj) { var adorn = obj.part; var diagram = adorn.diagram; diagram.startTransaction("Add Node"); var oldnode = adorn.adornedPart; var olddata = oldnode.data; // copy the brush and direction to the new node data var newdata = { text: "idea", brush: olddata.brush, dir: olddata.dir, parent: olddata.key }; diagram.model.addNodeData(newdata); layoutTree(oldnode); diagram.commitTransaction("Add Node"); // if the new node is off-screen, scroll the diagram to show the new node var newnode = diagram.findNodeForData(newdata); if (newnode !== null) diagram.scrollToRect(newnode.actualBounds); } function layoutTree(node) { if (node.data.key === 0) { // adding to the root? layoutAll(); // lay out everything } else { // otherwise lay out only the subtree starting at this parent node var parts = node.findTreeParts(); layoutAngle(parts, node.data.dir === "left" ? 180 : 0); } }
想要查看完整代码请点击。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢