#cad #geometry #2d #design #graphics

arcs

使用实体-组件-系统模式创建2D CAD应用程序的可扩展框架

3个版本 (重大更改)

0.3.0 2020年2月28日
0.2.0 2020年1月16日
0.1.0 2020年1月8日

#960 in 数学

每月27次下载

MIT/Apache

115KB
2.5K SLoC

Rust CAD系统

Build Status Docs.rs Badge Crates.io Crates.io

(master的API文档/WebAssembly演示)

一个用于创建2D CAD应用程序的可扩展框架,使用Rust编写并基于实体-组件-系统架构。

如果您想了解这个项目的实现方式和设计方式,可以查看思维实验:在游戏引擎之外使用ECS模式

项目目标和里程碑

我已经将这个项目的方向划分为几个里程碑,每个里程碑都包含一系列相关的功能或概念。

  • 里程碑:MVP

    • 几何原语(ArcPointLine等)
    • 基本的样式组件(例如,带有颜色和笔触宽度的LineStyle
    • 所有绘图对象都附加到一个Layer
    • 绘图对象有一个BoundingBox,每次有变化时都会重新计算
    • 在画布上渲染绘图对象
    • 示例展示了上述所有内容,并渲染了一个简单的绘图(render_to_image.rs
  • 里程碑:在线演示

    • 正确渲染到HTML5 <canvas>
    • 用于创建绘图对象的交互式工具
      • 线
    • 在不同层之间移动项目
    • 选择性地显示/隐藏层
    • Viewport 平移
    • 缩放 Viewport
  • 里程碑:适用于现实世界应用(请参阅Michael-F-Bryan/rustmatic#38

    • 强大的撤销/重做机制
  • 愿望清单

    • Z级,以便对象可以相互覆盖
    • 实体可以被赋予名称以赋予它们语义意义
    • 近似算法
    • 翻译算法
    • 统一缩放算法
    • 不保持宽高比的缩放算法
    • 计算几何原型的长度
    • B样条
    • 插值样条
    • 贝塞尔曲线
    • 椭圆形截面
    • 所有几何原型的最近点算法

构建WebAssembly演示

如果您想在本地上运行WebAssembly演示,您首先需要一个代码副本。

$ git clone https://github.com/Michael-F-Bryan/arcs

您还需要wasm-pack程序。我们将使用它来构建演示。

$ cargo install --force wasm-pack
    Updating crates.io index
  Installing wasm-pack v0.8.1
  Downloaded cc v1.0.50
  ...
  Compiling wasm-pack v0.8.1
    Finished release [optimized] target(s) in 2m 20s
   Installed /home/michael/.cargo/bin/wasm-pack

现在我们可以构建演示了。

$ cd arcs/demo
$ wasm-pack build --target web
[INFO]: Checking for the Wasm target...
[INFO]: Compiling to Wasm...
   Compiling arcs-demo v0.1.0 (/home/michael/Documents/arcs/demo)
    Finished release [optimized] target(s) in 8.19s
:-) [WARN]: origin crate has no README
[INFO]: Installing wasm-bindgen...
[INFO]: :-) Done in 8.37s
[INFO]: :-) Your wasm pkg is ready to publish at ./pkg.
$ ls pkg
arcs_demo.d.ts arcs_demo.js arcs_demo_bg.d.ts arcs_demo_bg.wasm
package.json README.md

现在演示已编译,可以从磁盘提供。

$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
127.0.0.1 - - [10/Jan/2020 18:31:35] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2020 18:31:35] "GET /pkg/arcs_demo.js HTTP/1.1" 200 -
127.0.0.1 - - [10/Jan/2020 18:31:35] "GET /pkg/arcs_demo_bg.wasm HTTP/1.1" 200 -

许可

本项目受以下任一许可协议的许可:

供您选择。

建议始终使用cargo-crev来验证每个依赖项的可信度,包括此依赖项。

贡献

开始贡献的最简单方法是检查问题跟踪器,寻找容易解决的问题。或者,愿望清单包含我们希望实现的特性列表,尽管这些可能需要更多努力或经验。

我们总是愿意帮助指导贡献者!

该库的目的是不包含安全性错误。开发者将尽力避免它们,并欢迎帮助分析和修复它们。

除非您明确说明,否则根据Apache-2.0许可协议定义的,您提交的任何贡献,都应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~6.5MB
~125K SLoC