從零開始-基礎流程圖編輯庫

可我不愛聰明發表於2018-08-22

前言

各位路過的看官,且慢一步,容我與你分享下流程圖繪製庫的製作過程。 移步此處檢視demo示例:演示地址 原始碼

背景

  • 為什麼需要重新開發?
    • 業務需求(沒有買賣就沒有殺害 o(╥﹏╥)o )
    • 強大的go.js可以完美的製作流程圖功能,受限於其license,只能捨棄
    • G6庫也十分強大,曾以G6為底層開發過一版,但是在繪製節點之間連線時,無法做到自由配置,導致功能跟不上需求,也放棄了

目標

  • 明確目標:這個庫需要完成哪些功能?
    • 需要有開始/結束、步驟、判斷,連線,這幾個流程圖的基礎節點
    • 給定一組資料,能正常的展示出流程圖
    • 流程圖需要可編輯:增刪節點,自由定位

分析

  • 節點如何繪製?
    • 節點是由一系列基礎圖形組合而來
    • 比如說要繪製開始節點,那它是由橢圓和文字這兩個基礎圖形組合而來
    • 定義基礎圖形,節點的樣式就可以千變萬化
    • 一組基礎圖形就是一個節點,節點內圖形的座標相對於節點
  • 如何避免重複重新整理計算?
    • 該庫有顯示模式與編輯模式
    • 編輯模式下存在增刪節點操作,若每次操作都重繪整個畫板,無疑增加計算
    • 設計兩個畫板,一個用來顯示不常改變的節點:顯示層;另一個用來繪製常重新整理的節點:編輯層;這樣可以節省大量計算資源
  • 節點之間連線邏輯?
    • 節點之間的連線要遵從儘量不重合、不相交
    • 當前使用的邏輯是:將節點用長方形包裹,有四個面,從開始節點到結束節點,有4 * 4條繪製邏輯

實現

  • 提供全域性方法註冊自定義節點,在此可以定義任何你想繪製的圖形,在後面使用只需要提供這個圖形的名稱及配置資訊
  • 建立編輯器例項,此時會初始化內部的渲染引擎,ID管理器,節點管理器,事件分發中心
    • 渲染引擎:真正在皮膚上繪製圖形,依據自定義圖形的描述繪製
    • ID管理器:每個節點都對應的id,此ID唯一,在此生成
    • 節點管理器:管理節點的增刪改操作
    • 事件分發中心:接收瀏覽器事件,並轉化成內部處理事件,供內部消化及向外部透出

下面是:系統架構圖

系統架構圖

下面是:程式執行圖

程式執行圖

寫在最後

  • 感謝各位看官耐心的看到最後
  • 這個專案的完成度還是不夠,現在也只出產demo,後續還有很多需要跟進的地方
  • 本專案參考了go.js的流程圖操作,參考了g6的API寫法
  • 若有任何你覺得不爽的地方,歡迎指出
  • 若你任何的建議或想法,歡迎討論
  • 附帶個廣告:我的小站

相關文章