fgs记录行

vuePress-theme-reco fgs    2021 - 2022
fgs记录行 fgs记录行
主页
博客
  • 随笔
  • 总结文章
  • 技术笔记
  • 复盘
  • 技术笔记 未完成
标签
时间轴
关于
author-avatar

fgs

48

文章

46

标签

主页
博客
  • 随笔
  • 总结文章
  • 技术笔记
  • 复盘
  • 技术笔记 未完成
标签
时间轴
关于

graph组件

vuePress-theme-reco fgs    2021 - 2022

graph组件

fgs 2022-08-17 数据转视图 未完成

# 关于 graph 组件

这个东西的初始目标是 blender 中的渲染节点,在 three 的项目中,有些配置项单个更改,可能看不出更改的效果或者程序运行的不大对,比如我加大一个球的重力,那么这个球的弹跳功能可能完全不能用了 换言之,我希望做一个类似计算属性的东西,将几个互相影响的属性单独分配一个节点,进行运算,最后得到一个合并的属性连到主程序部分,当里面属性不合理时,合并属性可以制止它,从而使的暴露的东西可用

一开始我没有找到对应的库,只好用 logicflow,一款流程图的库,因为我觉得都是拖拽连线的功能,而且有自定义节点的说法,但这个主要还是支持 react,我还是打算自己做一个小型的组件库 (其实还参考了 three 官方的节点库,我样式就是用的那个,但那个转成 vue 有点难了)

在这个过程中,我关注点搞错了,其实重点是节点数据建立联系,而不是 ui 中的拖拽连线,所以上述的库其实是不能在这用的,然后我对标做的东西是这样的: 一个节点的左右连线点无区别,各连线也没有区别。(组件基于 sfc 但实际上,blender,以及我后面找到的库(对 vue3 支持有大问题,但其他都还好),都是这样的: 左侧连线点全是注入属性,与节点中个属性对应,右侧是输出,与节点本身对应,左侧点连线只能取消和更改,不能增加,右侧则只能增加。(组件基于 js

在组件库编写中,我基本没有感觉到问题,但在这个组件运用的过程中我就明显感到不对了,假设我要做个 validator,或者限制某节点连线数目,都非常麻烦,因为连线太自由了,按理来说节点和节点关系是有限制的,比如 a 只能右连 b 等,而现在节点关系是自由的,即使我用 a 连 b,那么有可能是 a 左连 b

整个画布维护一个对象如下

当然也可以进行限制,比如 watch 每条线,获得每条线的左侧节点 id 和右侧节点 id,在到节点里面遍历获得对应节点,在去根据节点内部值去 validate,

不是复杂,是折磨

话说那个官方库也有责任的,我视图上完全是照搬它。。。

附,由于在线数据中有连线点的 dom,然后每帧 get,程序理解为线数据每时每刻都在变化,没有办法正常 watch

# 总结,

  1. 应该先考虑数据结构,再考虑 ui 实现,比如,先确定画布中整体的数据结构,再确定节点中部分的数据结构,再确定 ui 的数据结构(比如 canvas 的连线数据),然后再视图实现

  2. 应该先考虑接口模样,哪个组件有那些数据事件是一定要有的

  3. 先考虑主体功能,先做好测试样例

  4. 不要把所有的复杂度,验证等功能交给数据,而是让 ui 交互分担掉一部分。不应该是节点随意连线,再数据验证,而是节点连线就进行限制,再数据限制。 (即视图就应该禁止掉一部分行为,或者说视图就规定了行为的模式,迫使用户进行规定行为)