工业软件开发学习:深入解析AnyCAD事务处理与撤销重做机制

2025-02-14 0 136

近期我参与了一些小项目,注意到SDK中关于文档和元素组件的某些理念与BIM软件颇为类似,这在业务开发过程中显得尤为实用。不过,官方在这方面的资料相对匮乏,示例也不多,于是我便着手编写了一篇小教程,希望能为大家提供一些参考。

SDK与BIM软件的联系

项目过程中偶然发现,SDK里有许多与文档和构件相关的理念,与Revit等BIM软件颇为相近。这种接近性在业务开发阶段极为重要,有助于开发者迅速掌握SDK。试想,若对BIM软件有所了解,那么在研究SDK时,就能大大减少所需的时间和精力。

明白这种关系,无论是初学者还是资深的开发者,都能显著提升工作效率。比如在实际操作时,运用已有的BIM知识去理解SDK中的相关内容,便能迅速学会SDK的操作方法。

官方文档情况

public partial class MainViewModelImpl : WpfMainViewModel
{
    public MainViewModelImpl(IRenderView viewer) 
        : base(viewer)
    {
    }
}

遗憾的是,目前官方相关文档较少,具体案例也不充足。这让许多像我这样渴望深入学习和运用SDK的开发者感到困扰。由于缺乏足够的文档和案例,我们在开发中遇到问题时,很难快速找到解决方案。

public MainWindow()
{
    InitializeComponent();
    var viewModel = new MainViewModelImpl(mRenderCtrl);
    this.DataContext = viewModel;
}

众人摸索前行,历经曲折。期盼官方能够加以关注,丰富并优化相关资料与案例,以便开发者能更流畅地运用SDK。

图形平台入门

private void mRenderCtrl_ViewerReady()
{
    // 初始化
    ViewModel.Initialize(mRenderCtrl);
}

图形平台带来了诸多方便,它具备多样的造型和展示功能,以及工业应用中的辅助设施。在gitee上,官方提供了许多示例仓库,这些资料对于刚开始接触该平台的朋友来说,是非常实用的入门指南。

工业软件开发学习:深入解析AnyCAD事务处理与撤销重做机制

我们可以先从官网的介绍入手,然后参考gitee上的案例来深入了解图形平台。这样,我们可以迅速建立起对图形平台的基本了解,为后续的开发工作奠定基础。

数据管理功能

// MainWindow.xaml
<Metro:MetroWindow.RightWindowCommands>
    <Metro:WindowCommands ShowSeparators="False">
        <Menu Margin="50,2,0,0" Background="#00000000">
            <MenuItem  Header="创建" Background="#00000000">
                <MenuItem  Header="圆柱体" Command="{Binding NewCylinderCommand}"/>
            </MenuItem>
        </Menu>
    </Metro:WindowCommands>
</Metro:MetroWindow.RightWindowCommands>
    
// MainViewModelImpl.cs
[RelayCommand]
void OnNewCylinder() // 该方法与xaml中的创建圆柱体命令绑定
{
    UndoTransaction undo = new(Document); // 实例化UndoTransaction对象
    undo.Start("create.cylinder"); // 开启事务
    
    var shape = ShapeBuilder.MakeCylinder(GP.XOY(), 10, 20, 0); // 创建圆柱体shape
    var shapeElement = ShapeElement.Create(Document); // 在文档中创建ShapeElement对象
    shapeElement.SetShape(shape); // 将构造好的shape赋予ShapeElement对象
    
    undo.Commit(); // 提交事务
}

多数情况下,所创建和操控的元素仅用于展示,然而,对于复杂的CAD软件而言,数据管理能力是不可或缺的。换句话说,对于数据对象的增删查改操作,都必须支持回退和重做功能,而SDK正是提供了这些基础性支持。

官方指南中关于数据管理部分,对基础理念和操作方法进行了阐述。我已对相关代码库进行了分支并作出调整,若大家想要借鉴,请将代码拉取至本地执行。不过,在此之前,需先安装必要的依赖库,具体依赖信息可查阅官方教程。

工业软件开发学习:深入解析AnyCAD事务处理与撤销重做机制

应用框架搭建

SDK中的应用框架非常实用,开发者能够通过MVVM模式迅速构建应用。我们能够利用这个框架轻松完成应用及文档的初始设置。在构造函数里创建所需内容,随后在已设定的事件函数中进行初始化动作。

<Metro:MetroWindow.InputBindings>
    <KeyBinding
        Key="Z"
        Command="{Binding UndoCommand}"
        Modifiers="Control" />
    <KeyBinding
        Key="Y"
        Command="{Binding RedoCommand}"
        Modifiers="Control" />
</Metro:MetroWindow.InputBindings>

程序编译并执行完毕,随即会出现一个带有初始化文档对象的界面。借助这个应用框架,开发者可以更高效地构建满足需求的应用。

操作与事务控制

<MenuItem  Header="事务" Background="#00000000">
    <MenuItem Header="回退" Command="{Binding ExecuteSystemCommand}"  CommandParameter="Undo"/>
    <MenuItem Header="重做" Command="{Binding ExecuteSystemCommand}"  CommandParameter="Redo"/>
</MenuItem>

依据开发手册中的示例,只需添加一个菜单选项,便能生成一个圆柱体形状的实体。启动后,通过该菜单项即可生成圆柱体,并且新建圆柱体的过程支持撤销操作。然而,SDK并未提供回退和重做的快捷键绑定,我们需要在.xaml文件中手动进行绑定,或者添加额外的菜单项以执行这两个功能。

对已建对象进行编辑同样可在事务内完成,这样就能实现撤销/重做功能。SDK中还配备了用于移动和旋转物体的小工具,只需调用相应指令即可激活。不过,目前存在一个小问题,使用这两个小工具进行编辑后,需要执行两次撤销操作才能恢复到编辑前的状态。这个问题已经提交给了平台,相信在后续版本中会得到解决。

工业软件开发学习:深入解析AnyCAD事务处理与撤销重做机制

在大家运用SDK进行编程时,是否遇到了让您感到困扰的问题?欢迎在评论区留言交流。若您觉得这篇文章对您有帮助,请记得点赞并转发!

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 工业软件开发学习:深入解析AnyCAD事务处理与撤销重做机制 https://www.7claw.com/2808525.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务