gojs 坐标定位

gojs在vue中实现画布流程 GoJS 是一个用于实现交互式图表的 JavaScript 库,详情可查看根据官网实现以下demo。 阅读详情

展示效果

在这里插入图片描述

第一次加载只要有节点数据和连线数据,保存的时候会生成坐标数据 loc字段,

html 代码

<div id="myDiagramDiv" style="border: solid 1px black; width:100%; height:400px"></div>

<div id="buttons">
  <button id="loadModel" onclick="load()">Load</button>
  <button id="saveModel" onclick="save()">Save</button>
</div>
<textarea id="mySavedModel" style="width:100%;height:240px">

</textarea>

js 代码

 <script src="go.js"></script>
	<script>
	 init()
	
	  // 加载
	  function load() {
	    myDiagram.model = go.Model.fromJson(document.getElementById("mySavedModel").value);
	  }
	
	  // 保存
	  function save() {
	    document.getElementById("mySavedModel").value = myDiagram.model.toJson();
	    myDiagram.isModified = false;
	  }
	
	  function init() {
	
	    var $ = go.GraphObject.make;  // for conciseness in defining templates
	
	    myDiagram =
	      $(go.Diagram, "myDiagramDiv",  // create a Diagram for the DIV HTML element
	        {
	          // allow double-click in background to create a new node
	          "clickCreatingTool.archetypeNodeData": { text: "Node", color: "white" },
	
	          // allow Ctrl-G to call groupSelection()
	          "commandHandler.archetypeGroupData": { text: "Group", isGroup: true, color: "blue" },
	
	          // enable undo & redo
	          "undoManager.isEnabled": true,
	        });
	
	    // Define the appearance and behavior for Nodes:
	
	
	    function nodeInfo(d) {  // Tooltip info for a node data object
	      var str = "Node " + d.key + ": " + d.text + "\n";
	      if (d.group)
	        str += "member of " + d.group;
	      else
	        str += "top-level node";
	      return str;
	    }
	
	    // These nodes have text surrounded by a rounded rectangle
	    // whose fill color is bound to the node data.
	    // The user can drag a node by dragging its TextBlock label.
	    // Dragging from the Shape will start drawing a new link.
	    myDiagram.nodeTemplate =
	      $(go.Node, "Auto",
	        { locationSpot: go.Spot.Center },
	        $(go.Shape, "RoundedRectangle",
	          {
	            fill: "white", // the default fill, if there is no data bound value
	            portId: "", cursor: "pointer",  // the Shape is the port, not the whole Node
	            // allow all kinds of links from and to this port
	            fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
	            toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true
	          },
	          new go.Binding("fill", "color")),
	        $(go.TextBlock,
	          {
	            font: "bold 14px sans-serif",
	            stroke: '#333',
	            margin: 6,  // make some extra space for the shape around the text
	            isMultiline: false,  // don't allow newlines in text
	            editable: true  // allow in-place editing by user
	          },
	          new go.Binding("text", "text").makeTwoWay()),  // the label shows the node data's text
	        new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
	      );
	
	    // The link shape and arrowhead have their stroke brush data bound to the "color" property
	    myDiagram.linkTemplate =
	      $(go.Link,
	        { toShortLength: 3, relinkableFrom: true, relinkableTo: true },  // allow the user to relink existing links
	        $(go.Shape,
	          { strokeWidth: 2 },
	          new go.Binding("stroke", "color"),
	          new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),),
	
	        $(go.Shape,
	          { toArrow: "Standard", stroke: null },
	          new go.Binding("fill", "color"))
	      );
	
	
	
	    myDiagram.groupTemplate =
	      $(go.Group, "Vertical",
	        {
	          selectionObjectName: "PANEL",
	          ungroupable: true
	        },
	        $(go.TextBlock,
	          {
	            //alignment: go.Spot.Right,
	            font: "bold 19px sans-serif",
	            isMultiline: false,  // don't allow newlines in text
	            editable: true  // allow in-place editing by user
	          },
	          new go.Binding("text", "text").makeTwoWay(),
	          new go.Binding("stroke", "color")),
	        $(go.Panel, "Auto",
	          { name: "PANEL" },
	          $(go.Shape, "Rectangle",  // the rectangular shape around the members
	            {
	              fill: "rgba(128,128,128,0.2)", stroke: "gray", strokeWidth: 3,
	              portId: "", cursor: "pointer",  // the Shape is the port, not the whole Node
	              // allow all kinds of links from and to this port
	              fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true,
	              toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true
	            }),
	          $(go.Placeholder, { margin: 10, background: "transparent" })  // represents where the members are
	        ),
	      );
	
	    // 节点数据
	    var nodeDataArray = [
	      { key: 1, text: "Alpha", color: "lightblue" },
	      { key: 2, text: "Beta", color: "orange" },
	      { key: 3, text: "Gamma", color: "lightgreen", group: 5 },
	      { key: 4, text: "Delta", color: "pink", group: 5 },
	      { key: 5, text: "Epsilon", color: "green", isGroup: true }
	    ];
	
	    // 连线
	    var linkDataArray = [
	      { from: 1, to: 2, color: "blue" },
	      { from: 2, to: 2 },
	      { from: 3, to: 4, color: "green" },
	      { from: 3, to: 1, color: "purple" }
	    ];
	
	
	    myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);
	  }
</script>
用GoJS+贝塞尔曲线重构AGV地图编辑器:告别路线距离计算的血泪史 本文探讨了如何利用GoJS图形库和贝塞尔曲线技术重构AGV地图编辑器,以解决传统网格地图导致的路线距离计算失真问题。通过构建连续坐标地图、实现精确的曲线路径长度计算与采样,并与调度系统深度集成,该方法能显著提升AGV车辆控制调度系统的路径规划精度和运行效率。 阅读详情

相关推荐

双击即用的审批流程图编辑器,纯前端拖拽搭建,无需安装和联网

直接双击ding.html就能在浏览器里运行的审批流程图工具,所有功能都靠原生HTML、CSS和JavaScript实现,不连服务器、不装插件、不调外部接口。可以自由添加审批节点、分支判断框、连接线,鼠标点一点、拖一拖就完成布局调整,不用改代码、不用算坐标。内置轻量jQuery 3.3.1用于基础交互,样式统一由ding.css控制,图标用的是本地图片(iconmore.png、xltitlinebg.jpg)和iconfont字体图标,图片资源全放在img文件夹里,核心逻辑写在ding.js中。目录结构清

h9j8k7l6m5n的博客 170

GoJS交互式图形库常用的方法(二)

GoJS交互式图形库常用的方法 简介:GoJS是一个JavaScript和TypeScript库,用于构建交互式图形。 从简单的流程图和组织结构图到高度定制的工业图,SCADA和BPMN图,医学图(如基因图和爆发模型图)等等。GoJS通过使用可自定义的模板和布局使构建复杂节点、链接和组的图变得容易

qq_37656005的博客 2274

热膨胀系数(CTE)的不同处理方法对于封装翘曲仿真的影响

随着技术的不断发展,芯片封装的集成度越来越高,尺寸也越来越大,随之而来的封装翘曲问题也越来越引起关注。影响芯片封装翘曲最主要的原因就是封装中不同材料热膨胀系数(CTE)的失配性,因此在进行封装翘曲仿真的过程中,如何使用材料的CTE值就变得尤为重要,会对仿真精度产生较大的影响。本文将对比不同CTE的处理方法给仿真结果带来的影响。

wangyubo1的博客 6854

gojs 查找功能以及获取被选择状态的节点 (搜索节点)

gojs搜索功能gojs搜索功能 我就能知道几种第一种 通过节点的属性和属性值查找myDiagram.findNodesByExample({"category":"nodeStyleOne"})//通过节点的样式找 =&gt; 节点样式是 nodeStyleOne当然 你也可以查找多个属性并存的节点,反正传的是一个对象 比如var res=myDiagram.findNodesByExample...

qq_41152898的博客 1万+

内网渗透—横向移动&IPC横移&Impacket套件&CS插件

以上便是IPC横移的知识。最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

2301_76227305的博客 1890

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 886

gojs 部分功能实现

gojs

1540

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

go.js的基本使用(主要是vue,react同理)

go.js的基本使用,在vue中使用go.js完成业务逻辑,解析部分文档内容,代码中有详细注解

luofei_create的博客 6974

STM32固定翼增稳飞控设计:姿态解算、双环PID与一键救机实现

姿态稳定控制是无人机与航模飞控系统的核心基础,其本质是通过传感器融合(如IMU)实时感知飞行器姿态,并基于控制理论(如PID)生成修正指令以抑制扰动。该技术广泛应用于教育航模、轻型固定翼平台及嵌入式飞控开发场景,具有低延迟、高确定性、资源敏感等典型工程特征。本文围绕STM32F401与MPU6050构建的硬件闭环系统,深入解析互补滤波姿态解算原理与俯仰/横滚双环PID控制结构,同时聚焦‘一键救机’这一面向新手的关键安全机制——通过分阶段角速率抑制与平滑角度拉平策略,在80ms内启动响应,显著提升飞行容错能力

weixin_36328210的博客 400

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 312

GoJS地图编辑器在AGV系统里的翻车实录:我是如何被贝塞尔曲线拯救的

本文探讨了GoJS地图编辑器在AGV系统中应用贝塞尔曲线解决路径规划问题的实践。通过对比传统网格地图的缺陷,详细介绍了贝塞尔曲线在精度提升、路径平滑和距离计算方面的技术优势,并分享了实施过程中的关键挑战与优化策略,最终实现系统效率的显著提升。

y7z8a9的博客 847

Freemarker整合poi导出带有图片的Excel教程

Freemarker整合poi导出带有图片的Excel教程 https://blog.youkuaiyun.com/x541211190/article/details/105675771根据此人博客可完成此功能,但原文中有一处错误需要纠正,当单元格合并时,计算起始单元格有错误。 源代码: /** * 构造合并单元格集合 * * @param createRowIndex: * @param cellRangeAddresses: * @param startIndex: * @param c

weixin_39403349的博客 1002

gojs 自定义右键菜单/取消canvas的边框

自定义右键菜单 gojs自带的右键菜单,个人觉得样式不好调,导致一些要求达不到,不易对右键菜单随意调整,仔细想了一下,其实他的右键菜单可以换成html元素即可以获取到的。思路的话,就是写一个右键菜单,然后相对定位,在鼠标移入节点后,添加一个右键事件,获取右键的坐标,作为右键菜单的起坐标,并且让右键菜单显示;在鼠标点击的时候,再让右键菜单隐藏;我的话是在节点通用样式中加的鼠标移入事件;    myD...

qq_41152898的博客 4653

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 730

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GoJS Beginner Tutorial #1

比如:这里为我们的形状设置了填充属性,我们将为这些元素设置其他属性,以便对常用属性进行更深入的讨论,请先查看我们的视频 gojs GraphObject属性,面板负责保存和组织各种 gojs GraphObject,我们这些组成的GraphObject称之为面板的元素 请注意,part也充当panel并根据我们指定的面板类型组织它的元素,部件作为顶级面板,该部件的所有其他面板都将包含在其中。接下来的两个是面板元素:部件的第一个元素是一个形状,我们使用其第二个参数进行设置它的图形。

jiaojsun的博客 690

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

GoJS流程图内置GraphObject类各指数介绍

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。 点击下载GoJS最新版 constructor new Graph Object ():GraphObject 这是一个抽象类,因此您不应使用此构造函数。 Properties actionCancel : function(e: InputEvent, thisObj: GraphObject): void | nul

RoffeyYang的博客 312

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

流程图控件GoJS内置GraphObject类教程

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。 点击下载GoJS最新版 这是所有图形对象的抽象基类。从GraphObject继承的类包括:Shape、TextBlock、Picture和Panel。部件类从面板类派生,节点类和链接类从面板类派生。 使用静态函数graphject是非常常见的。为了建立一个图形对象的可视化树。你可以在介绍中看到很多这样的例子,从构建对象开

RoffeyYang的博客 477

AGV/RGV调度系统开发实战:基于GOJS的地图编辑器设计与实现

本文详细介绍了基于GOJS的AGV/RGV调度系统地图编辑器开发实战。通过解析GOJS核心功能、坐标系统转换、路径约束处理等关键技术,帮助开发者高效实现车辆控制调度系统中的地图设计与优化,提升AGV/RGV调度系统的开发效率与性能。

ttt77的博客 682

流程图控件GoJS内置GraphObject类各指数介绍

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。 点击下载GoJS最新版 背景点击 :功能(é :InputEvent的,thisObj :GraphObject ):void| null 获取或设置当用户单击该对象时执行的函数。通常,这需要进行鼠标下移,然后使用鼠标右键(辅助)在大约相同的位置上进行快速鼠标上移。 当用户单击GraphObject时,ClickSele

RoffeyYang的博客 316

GoJS 绘图 (五) :定位面板与垂直面板(Panel)

Panel是负责任的大小和位置的所有元素。每个面板建立自己的坐标系。一个面板的元件的绘制顺序表示建立这些元素的Z轴排序。虽然只有一个面板,也有许多不同类型的面板,每个都有其自己的目的是如何安排的元素。当你建立一个面板,你通常会指定其Panel.type作为构造函数参数。这些都是存在的各种面板组成: Panel.Position Pane...

weixin_34344403的博客 1319

模型组合

  写了一个简易的demo并上传了Github。需要做类似功能的同学可以参考一下。实现技术:js+html;确切的说是gojs。   因为gojs的中文资料实在太少了,所以看api的时候真的是把我看吐了。做这个功能的时候项目时间也比较紧,故而本文中以功能实现为主,笔者没有对gojs太深入的研究。欢迎深入学习,并使用过gojs的同学指正。 demo的GitHub地址: https://githu...

qq_42778289的博客 493

go.js Panel中文API

图表组件版本 3.0.26由开发(图形对象)(面板)(部件)Panel(面板)是一种(图形对象),它持有其他 GraphObject 作为其元素。Panel 负责调整其元素的大小和位置。Panel 的元素按照它们在(元素)集合中出现的顺序进行绘制。(部件)类继承自 Panel;Part 又是(节点)和(链接)的基类。每个 Panel 都有一个(类型)并建立自己的坐标系。(位置面板):用于根据元素在 Panel 本地坐标系中的绝对位置来排列元素。(垂直面板)和。

qq_25757181的博客 757

别再硬画流程图了!用Vue-Super-Flow插件,5分钟搞定在线考试系统的拖拽填空题

本文介绍如何利用vue-super-flow插件快速实现在线考试系统中的流程图拖拽填空功能。通过对比传统方案的不足,详细解析了该轻量级Vue组件的核心实现思路、拖拽交互逻辑和性能优化技巧,帮助开发者5分钟内完成专业流程图题型的开发,大幅提升在线教育平台的开发效率。

weixin_29011395的博客 234

js在web绘制在页上的圆

在web页,要画一个圆。有很多方法,SVG、canvas我们能够得出。但文章没有使用这两种方法,但使用的div。div通常一个矩形。但是,假设一个圆形的样式设置border-radius有可能div变圆。 回合职位要求在画布上绝对定位(position: absolute)。也就是通过设置X、Y坐标在定位。相应的css样式是left、top。想要圆的绝对定位起效。画布就要设置positi...

weixin_34199405的博客 283

ChartAB:数据可视化密集对齐评测框架解析

数据可视化是现代数据分析的核心技术,其质量直接影响信息传达效率。密集对齐(Dense Alignment)作为计算机视觉领域的重要技术,通过对图表元素的几何特征进行量化建模,解决了传统人工评估效率低、主观性强的问题。该技术通过视觉元素解构、空间关系建模和差异度量三个核心步骤,构建了可计算的图表质量评估体系。在工程实践中,ChartAB框架可应用于设计系统质量管控、学术图表规范检查等场景,显著提升图表一致性检测效率。结合A/B Testing方法,该框架还能为可视化设计提供数据驱动的优化建议,是数据可视化领域

weixin_38166905的博客 379
上一篇: 正则表达式
下一篇: node 常用命令
脑瓜不疼
博客等级 码龄9年 84粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值