1 简介

管道广泛用于化工、工厂、建筑、市政等方面,关系到国计民生。虽然管道设计软件种类繁多,有的也非常强大(然而也非常昂贵),但也并不能完全满足个性化需要。 如何快速开发一款满足自己需求的三维管道设计软件?本文提供一种基于AnyCAD .NET SDK的开发解决方案,不妨一试。

2 方案

《.NET6: 开发基于WPF的摩登三维工业软件》系列提供了一种插件式的开发工业软件的框架(源码详见:https://gitee.com/anycad/RapidCAX )。本案例基于该框架开发。

整体上采用MVVM模式,以直管为例,整体架构如下:

 

注:上述架构在《.NET6: 开发基于WPF的摩登三维工业软件》系列有详细说明。

3 实现

本案例中,管道由直管和弯管组成,两种的参数不一样,因此需要按照不同的类型来处理。由于篇幅所限,此处以直管为例的MVVM架构实现。

3.1 Model实现

    // 定义管子的参数
public class PipeModel : ElementModel
{
public GPnt Position = new GPnt();
public GDir Direction = new GDir();
public double Thickness = 2;
public double InnerRadius = 5;
public double Length = 100;
public PipeModel()
{
} // 根据参数创建几何
public TopoShape CreateShape()
{
return ShapeBuilder.MakeTube(Position, Direction, InnerRadius, Thickness, Length);
}
} //参数化机制实现
class PipeSchema : ElementSchema
{
public PipeSchema()
: base(nameof(PipeModel))
{
this.SetTitle("管");
} public override ElementModel CreateModel()
{
return new PipeModel();
} public override Element OnCreateInstance()
{
return new ShapeInstance();
} public override bool OnParameterChanged(Document document, Element instance, ParameterDict parameters)
{
var element = ShapeInstance.Cast(instance);
if (element == null)
return false; PipeModel model = new PipeModel();
model.Load(parameters); var shape = model.CreateShape(); element.SetShape(shape); return true;
}
}

3.2 ViewModel实现

   internal class PipeViewModel : ElementViewModel
{
public PipeModel Model { get { return (PipeModel)_Model; } }
public PipeViewModel(Element model, Document doc)
: base(new PipeModel(), model, doc)
{
SetPickFilter(EnumShapeFilter.VertexEdgeFace);
} public GPnt Position
{
get => Model.Position;
set => SetProperty(nameof(Position), ref Model.Position, value, nameof(X), nameof(Y), nameof(Z));
} public double X
{
get => Model.Position.x;
set
{
if(X != value)
{
Position = new GPnt(value, Model.Position.y, Model.Position.z);
}
}
} public double Y
{
get => Model.Position.y;
set
{
if (Y != value)
{
Position = new GPnt(Model.Position.x, value, Model.Position.z);
}
}
}
public double Z
{
get => Model.Position.z;
set
{
if (Z != value)
{
Position = new GPnt(Model.Position.x, Model.Position.y, value);
}
}
} public GDir Direction
{
get => Model.Direction;
set => SetProperty(nameof(Direction), ref Model.Direction, value);
} public double InnerRadius
{
get => Model.InnerRadius;
set => SetProperty(nameof(InnerRadius), ref Model.InnerRadius, value,
() => { return value > 0; }, nameof(OutterRadius));
} public double Thickness
{
get => Model.Thickness;
set => SetProperty(nameof(Thickness), ref Model.Thickness, value,
() => { return value > 0; }, nameof(OutterRadius));
}
public double Length
{
get => Model.Length;
set => SetProperty(nameof(Length), ref Model.Length, value, ()=>{ return value > 0; });
} public double OutterRadius
{
get => Model.InnerRadius + Model.Thickness;
} //...
}

3.3 View实现

xaml和界面布局相关,此处省略。

4 运行效果

程序下载:

链接: https://pan.baidu.com/s/1KEzQbYhRLAsWb5lC6S0O2g?pwd=pipe 

提取码: pipe

5 总结

本文从技术的角度提供一种管道建模的方案,能够快速验证想法,但距离实际应用还有一段距离,达到生产应用还需要精雕细琢。基于AnyCAD Rapid .NET框架提供的建模、显示、数据管理等基础设施,可以快速验证产品原型,大大地缩短产品研发周期,使产品能够更快的产生价值。

 

 
 

基于.NET三维控件的个性化管道软件开发的更多相关文章

  1. WinForm中使用AnyCAD三维控件 の 初始化

    在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成. 一.添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation ...

  2. AnyCAD三维控件场景节点详解

    SceneNode是AnyCAD三维图形平台的AnyViz显示引擎的核心对象之一,只有放在场景管理器(SceneManager)里的节点才能被显示引擎所显示. 1.   节点分类 SceneNode是 ...

  3. 在MFC对话框中快速集成三维控件

    在MFC的对话框中可以方便的集成AnyCAD三维控件(c++版本),遵循一下几步: 1.在对话框资源中增加一个Static控件,ID为IDC_STATIC_3D,并且把它的Notify属性设置为Tru ...

  4. AnyCAD三维控件(转)

    在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成. 一.添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation ...

  5. Qt开发Active控件:如何使用ActiveQt Server开发大型软件的主框架(2)

    Qt开发Active控件:如何使用ActiveQt Server开发大型软件的主框架 注:本文更多地是带着如何去思考答案,而不是纯粹的放一个答案上来,如果你需要直接看到完整的答案,请直接看实例和最后的 ...

  6. ASP.NET登录控件延伸(个性化)

    既然由登录控件涉及到了Membership,那么就不得不提到用户个性化Profile对象.个性化允许为用户保存特定的个性化信息到数据库中,因此它不同于ASP.NET状态管理之处在于可以永久性保存这些信 ...

  7. .Net三维控件

    AnyCAD .Net三维建模和可视化控件为.Net 4.0开发者提供简单易用的三维建模.三维可视化和文件交换的API. 30天试用版下载: 1.  三维建模 三维建模有以下功能: 三维基本体,如点. ...

  8. MFC/QT 学习笔记(四)——MFC基于对话框学习控件(上)

    新建项目->MFC模板->MFC应用程序->应用程序类型:基于对话框->...OK 解决方案资源管理器->资源文件->xxx.rc->进入:资源视图-> ...

  9. 问题解决——基于MSCOMM32.OCX控件的类在客户机不能创建控件

    大家不要笑我了,我不喜欢用那个人家写的串口类. 所以导出了MSCOMM32.OCX的类,然后在此基础上写了一个串口打印机的小工具类. -------------声明--------------- 本文 ...

  10. 基于jQuery的控件:弹框

    ★页面展示 ★属性 属性 值 说明 默认值 div Object jQuery对象 $('body') width Number 控件的宽度 auto height Number 控件的高度 auto ...

随机推荐

  1. Kotlin 协程真的比 Java 线程更高效吗?

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-OcCDI4L5GR8vVXSYhXJ7w作者:吴越 网上几乎全部介绍Kotlin的文章都会说 ...

  2. Java 多线程上下文传递在复杂场景下的实践

    一.引言 海外商城从印度做起,慢慢的会有一些其他国家的诉求,这个时候需要我们针对当前的商城做一个改造,可以支撑多个国家的商城,这里会涉及多个问题,多语言,多国家,多时区,本地化等等.在多国家的情况下如 ...

  3. Vue大数据可视化(大屏展示)解决方案

    DataV:组件库基于Vue (React版) ,主要用于构建大屏(全屏)数据展示页面即数据可视化 官网地址: http://datav.jiaminghi.com/guide/#%E7%94%A8% ...

  4. 响应式开发bootstrap

    响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的. 平时我们响应式尺寸划分 超小屏幕(手机,小于768px):设置宽度为100% 小屏幕(平板,大于等于7 ...

  5. gradle简介与windows安装操作

    本文为博主原创,转载请注明出处: 目录 1.Gradle 简介 2.gradel 与 maven 对比 3.安装 gradle 3.1.安装jdk 3.2.下载gradle 3.3.下载解压到指定目录 ...

  6. 通过设置 Chrome 解决开发调用跨域问题

    转载请注明出处: 项目采用的是前后端分离的方式,前端本地访问方式是 localhost:8080,访问本地后台服务时,通过 localhost:9000 进行访问 本地后端服务.在本地通过chrome ...

  7. 一个WPF开发的打印对话框-PrintDialogX

    今天五月一号,大家玩的开心哦. 1. 介绍 今天介绍一个WPF开发的打印对话框开源项目-PrintDialogX,该开源项目由<WPF开源项目:AIStudio.Wpf.AClient>作 ...

  8. Kafka 社区KIP-382中文译文(MirrorMaker2/集群复制/高可用/灾难恢复)

    译者:对于Kafka高可用的课题,我想每个公司都有自己的方案及思考,这是一个仁者见仁智者见智的命题,而社区给出了一个较大的特性,即MirrorMaker 2.0,不论是准备做高可用还是单纯的数据备份, ...

  9. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.26)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  10. [转帖]alertmanager的使用

    https://www.jianshu.com/p/654d59325550 一.Alertanager的安装 1.下载   下载altermanager 2.安装 # 不同的平台下载不同的安装包 w ...