Giter Club home page Giter Club logo

svg-editor's Introduction

我是前端西瓜哥,Web 前端开发,图形编辑器方向。

我的公众号:前端西瓜哥

如果你是做图形编辑器开发或是感兴趣的,可以加我微信 frstars。

如果想加群,可以备注 “图形群”,我拉你进群。

svg-editor's People

Contributors

f-star avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

svg-editor's Issues

全局缩放画布功能

全局快捷键的画布缩放功能,而不需要切换到 “放大镜” 工具来进行缩放。比如在绘制 path 的过程中,能够边缩放边绘制曲线,无疑用户体验更好。

暂定缩放画布快捷键:Ctrl + 滚轮Command + 滚轮(MacOS)

代码设计优化

待办清单

  • 辅助线(hub)不再在实例化的时候挂载,而是提供一个 mount 进行挂载,这样方便管理
  • Jest 配置优化,目前有不明原因的运行失败
  • 涉及到观察者模式的,底层同意换成自己实现的 EventEmitter

钢笔工具因undo导致中间状态对应不上的问题

问题

不考虑历史记录的影响,在钢笔工具的模式下,每次鼠标按下,需要记录

  • 当前光标位置(this.x, this.y)。非拖拽移动的情况下,预测曲线要用到。
  • 上一次鼠标按下时(this.prevX, this.prevY)。拖拽移动情况下,预测曲线要用到。

如果使用了 undo,会导致 path 丢掉最后的一段 curve(曲线),导致 this.x 和 this.y 以及 this.prevX, this.prevY 不再正确。

方案

  1. 改为提取正在绘制的曲线(this.path)的最后一个点的位置替代。这样的话需要给 Path 类添加 tail 方法。因为移动事件触发高,我们可以给 tail 方法添加缓存。
  2. 监听 undo 和 redo 事件

钢笔(贝塞尔曲线)工具实现

如题,需要设计一套方案来支持实现记录钢笔工具每一步操作,支持撤销和重做,并要考虑性能上的问题、复合贝塞尔问题等情况。

工具管理类代码设计梳理和优化

在实现绘制钢笔工具的预测曲线时,需要一个全新的非拖拽状态的移动事件,暂定为方法名为 moveNoPressed,在尝试往 toolManage.ts 文件添加这个功能代码时,发现代码的逻辑已经有些看不懂了,而且貌似也不好加这个新的方法。

于是决定梳理和重构一番。

绘制曲线时 PathDraw 和 PredictedCurve 类的职责重新划分

PathDraw 负责显示绘制曲线的轮廓线,其下关联的 SegDraw 则负责控制下一个 seg 的参数设置(通过交互的方式)。PredictedCurve 则是预测下一段将要绘制的 Curve。因为是先开发 PathDraw 再开发的 PredictedCurve,所以出现了设计不合理的地方,PathDraw 也负责了预测线的部分功能:拖拽鼠标配置 seg 时,替代了 PredictedCurve 绘制出了下一段曲线(作为 PathDraw 绘制的轮廓线的一部分)

遵循单一职责原则,故重新进行代码的设计。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.