近期我参与了一些小项目,注意到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上,官方提供了许多示例仓库,这些资料对于刚开始接触该平台的朋友来说,是非常实用的入门指南。
我们可以先从官网的介绍入手,然后参考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正是提供了这些基础性支持。
官方指南中关于数据管理部分,对基础理念和操作方法进行了阐述。我已对相关代码库进行了分支并作出调整,若大家想要借鉴,请将代码拉取至本地执行。不过,在此之前,需先安装必要的依赖库,具体依赖信息可查阅官方教程。
应用框架搭建
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中还配备了用于移动和旋转物体的小工具,只需调用相应指令即可激活。不过,目前存在一个小问题,使用这两个小工具进行编辑后,需要执行两次撤销操作才能恢复到编辑前的状态。这个问题已经提交给了平台,相信在后续版本中会得到解决。
在大家运用SDK进行编程时,是否遇到了让您感到困扰的问题?欢迎在评论区留言交流。若您觉得这篇文章对您有帮助,请记得点赞并转发!