云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

香港带宽_华为云电脑app下载_怎么申请

小七 141 0

幕后:Onshape中的协作工作原理

在我和同事以前工作过的其他CAD公司,实现的每一个方面都是一个严密保密的秘密。在Onshape,我们的核心价值之一是透明性,这包括帮助我们的用户(嗯,那些感兴趣的用户)不仅了解如何使用Onshape,还了解它是如何工作的。归根结底,了解Onshape如何思考可以让超级用户比看到神奇黑盒子的人更有效率。我想先谈谈"我在幕后如何合作"。当你看一个产品时,你可以知道一个功能是从一开始就设计的,还是后来才加上去的。你可以在汽车上加上翅膀和螺旋桨,如果你做得很好,它甚至可能会飞起来,但是如果你想要飞得好的东西,你就得造一架飞机。所以,即使在一开始,当我们设计Onshape的整体架构时,我们就知道我们需要协同CAD。在将变为Onshape的系统可以扫掠、倒角或创建部件之前,它已经可以支持多个用户同时编辑一个零件要理解我们是如何做到这一点的,我们必须从Onshape如何表示用户的数据开始。我将用一个单部件工作室来说明;一个包含几个相互关联的选项卡的文档增加了一层复杂性,我在这里不讨论。我们仔细区分了几种类型的数据:用户界面(UI)状态–例如,选择、摄像头视图、当前选项卡Part Studio定义–例如,功能列表、部件名称和颜色、导入数据重新生成结果-"b-rep"(实体、面、边等)、显示的三角形、重生成错误UI状态通常不会持久化(除了命名视图之类的东西)。将缓存再生结果,但始终可以根据定义重新生成这些结果。partstudio定义是我们存储在数据库中的内容,也是协作编辑发生的地方。什么是微版本?对于给定的Part Studio,在每个时间点,定义都存储为一个永恒的、不可变的对象,我们内部称之为微版本。每当用户更改Part Studio定义时(例如,编辑拉伸长度、重命名零件或拖动草图),我们不会更改现有的微版本,而是创建一个新的微版本来表示此新定义。新的微版本存储对前一个(父)微版本的引用和实际定义更改。通过这种方式,我们存储了文档的整个演化过程:用户可以将其作为文档历史记录进行访问,从而允许用户可靠地查看和恢复Onshape文档的任何先前状态。这就是在数据库中使用两个工作区来表示Part Studio的方式。工作区在版本1中分支。每个微版本只存储相对于其父级的更改。这些定义更改被设计成非常健壮的:存储在微版本中的更改旨在应用于父微版本,但可以应用于另一个微版本。例如,如果更改是"将挤出深度1更改为4英寸",只要原始特征存在(使用内部id标识,因此可以重命名),则可以应用此更改。因此,多个协作者同时进行的更改可以简单地应用于最新的微版本,而不会相互干扰。基于将不断变化的内存状态保存到文件中的传统CAD系统无法做到这一点,即使运行在远程服务器上或附加了PDM系统:数据本身必须是协作的。协作编辑的一个有趣的结果是,与一次一个用户的系统相比,撤消/重做的实现必须更加小心。假设我们在同一个零件工作室工作,我创建了一个拉伸孔,然后你创建了一个圆角。如果我点击undo按钮,我希望我的洞消失,而不是你的鱼片(这是显而易见的,但我们的第一个undo实现没有做到这一点,导致了合作者之间的痛苦干扰)。这意味着撤消不能简单地将Part Studio恢复到早期的微版本:在我点击undo之前,带有圆角但没有我的孔的微版本不存在,必须通过在最新的微版本上应用我的更改的反向("删除孔")来创建。通过变更历史恢复到早期的微版本没有这种行为,它是撤销的补充功能——可靠地恢复先前的状态,但可能会删除协作者为此所做的编辑。1用户1添加孔2用户2添加圆角三。用户1可以撤消孔而不影响其他用户的圆角当同时处理同一个文档时,用户只能撤消他们的单个操作,而保留了他们的同事的工作。分支与合并微版本和定义更改的相同原理允许Onshape执行分支(工作区)和合并。每个工作区都会跟踪其最新的微版本,因此,微版本形成了一个树状结构(版本图是对此的简化视图)。为什么从两个工作空间分支到这两个工作空间是不同的。当用户从一个工作区合并到另一个工作区时,我们会查找"from"工作区中尚未合并到"to"工作区中的更改,并使用这些更改为"to"工作区创建一个微版本。这是包含Part Studio的文档,其微版本树如上图所示。在两个工作区(左边的工作区1和右边的工作区2)的历史记录中,只有最近的更改不同。这种机制类似于流行的软件版本控制系统git所做的(并且是受其启发的),微版本对应于git的"提交",而工作区对应于分支。概念上的区别在于我们处理冲突的方式:如果您使用过git(或任何其他文本或代码的版本控制系统),您会看到当两个分支对同一文本进行修改时发生的合并冲突-在解决冲突之前,用户处于无效状态。在Onshape中,我们尽量不阻止用户:如果在两个工作区上以两种不同的方式修改一个维度,在合并中,"from"工作区将获胜。不应该发生合并冲突。更多协作工具Onshape的比较工具允许您探索工作区或文档版本之间的差异。这里,我们来看看工作区1和工作区2之间的区别基于Simple的不可变微版本也为其他协作工具提供了良好的基础:我们已经拥有的协作工具,如后续模式或比较工具,以及我们正在为未来开发的工具。除了协作能力之外,它还有很多好处:因为旧的微版本永远不会被修改,数据完整性得到了更好的保留,并且拥有更改历史记录使我们能够准确地调试当用户遇到问题或我们通过日志检测到问题时文档是如何形成的。因此,无惧协作–您的数据将被保存并始终可恢复!