https://www.plasticity.xyz/ 是个人开发的CAD软件,是为CG艺术家设计的。这个软件开发了两年多,一个人。最开始使用c3d这个几何引擎。现在的开源版本还能看到作者封装的c3d接口。商业版使用Parasolid这个业界经典的几何引擎。从价格上看,作者还是很厉害的,居然能让西门子降价这么多:

plasticity price

这款软件是开源的,起码0.6.30是开源的。我搞了一个可以调试的版本,但是很多功能还是不能用的:https://github.com/feelapi/plasticity 。这个版本的代码不能使用完整的实体造型功能,只能作为代码调试,学习交互建模开发。

学习资源

开源版本0.6.30,相应的学习资源:

技术栈

技术栈

架构

架构

界面

界面

Modeling

modeling-1

plasticity中,几何建模功能通过以下两种方式启动交互过程:

  • 命令。右侧的palette中定义的基本命令,选中几何后toolbar显示的相关命令。可以通过鼠标停留在按钮上显示的tooltip文字搜索相应的命令名字。例如三点圆弧命令:”Three-point arc”,对应的command是ThreePointArcCommand(ThreePointArcCommand.ts),execute函数是命令执行流程。注意,命令中有await调用的同步函数,会等待用户输入点或者选择几何元素,例如这里是PointPicker,只有取消命令或者返回点才从函数返回。这个命令非常典型,可以设置断点学习这里需要用到的各种建模需要实现的相应类和接口

  • gizmo。小工具实际上也是通过命令系统启动。例如上图给出的是一条折线。选中后,显示两种gizmo,大圆点是fillet工具,对应的命令是ModifyContourCommand (ModifyContourGizmo.ts)。ModifyContourCommand命令是如何启动的呢?

    • editor的数据成员commandForSelection:SelectionCommandManager。这个类负责维护一个映射表,参考他的成员函数commandFor。对应选择的几何体,按照类型返回相应的修改命令。这个图是ModifyContourCommand
  • 如果没有当前命令,根据当前选中几何体执行命令,也就是上一步的逻辑,参考CommandExecutor.dequeue()。可以通过在ModifyContourGizmo.ts中设置断点查看相应的调用堆栈和调用逻辑。.

关键模块

  • Editor
    • Editor
  • database:
    • Backup
    • PlasticityDocument
  • visualmodel
    • SpaceItem
  • datamodel
    • GeometryDatabase
  • view
    • viewport
    • Scene
  • command
    • command
    • PointPicker
    • Snap
    • AbstractGizmo