C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用

Posted IT技术与企业级信息化解决方案咨询

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用相关的知识,希望对你有一定的参考价值。

BIMFACE二次开发系列目录     【已更新最新开发文章,点击查看详细】

  在我的博客《C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案》中介绍了多种集成BIMFACE到客户端程序中的方案。最后推荐大家使用 CefSharp组件与WebView2组件。本篇文章介绍使用CefSharp组件如何集成BIMFACE到客户端程序中。

一、CefSharp 简介

CefSharp是一个围绕Chromium Embedded Framework(CEF)的轻量级.NET包装器。它是用C++/CLI编写的。允许开发者在.NET应用程序中嵌入Chromium。可以在C#或VB或任何其他CLR语言中使用。CefSharp同时提供WPF和WinForms Web浏览器控件实现。

功能特点

  • 免费、开源:https://github.com/cefsharp/CefSharp

  

  • 完善的文档 

        

  

  • 支持JS、C#、WinForm窗体之间相互通讯与调用
  • 兼容性较好,支持H5、CSS5、WebGL等
  • 支持获取Cookies较全面
  • 其他
二、CefSharp 下载

步骤1 新建WinForm项目

新建一个WinForm窗体应用程序,目标框架选择 .NET Framework 4.5.2,因为新版本的CefSahrp组件最低支持 .NET Framework 4.5.2。

步骤2 通过 NeGet 下载

打开NeGet

(1)搜索 CefSharp

(2)选择 CefSharp.WinForms

(3)选择最新版本

(4)点击【安装】按钮

点击【确定】开始安装。

安装完成后,项目中自动添加了CefSharp.dll、CefSharp.Core.dll、CefSharp.WinForms.dll 类库引用。

工具箱中也增加了CefSharp控件

步骤3 编译项目

编译 BIMFace.SDK.CSharp.Sample.WinForm 项目,生成如下内容

与 CefSharp 相关的共计32个文件,2个目录,文件大小总计216M。这个尺寸相对于业务系统本身来说已经非常大了,最后制作的安装包尺寸也会很大。

其中 locales 目录下是语言包,删除 zh-CN.pak 之外的所有文件,总文件大小可以减少22M左右。

三、CefSharp 集成开发

测试功能设计如下

功能说明

(1)WinForm中加载的网页来自于 BIMFace.SDK\\BIMFace.SDK.CSharp.Sample\\Pages\\BIMFaceDemo7_3.html,所以Web项目要首先运行。

(2)WinForm 窗体中输入 BIMFACE FileId,点击【加载模型/图纸】按钮,调用CefSahrp组件,加载步骤(1)中的网页。代码如下:

 1 // 加载模型/图纸
 2 private void btnLaodBIMFaceFile_Click(object sender, EventArgs e)
 3 {
 4     string fileId = txtBIMFaceFileId.Text.Trim();
 5     if (string.IsNullOrEmpty(fileId))
 6     {
 7         MessageBox.Show("请填写 BIMFACE FileId。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 8         return;
 9     }
10     // 将 ChromiumWebBrowserBindObject 实例对象注入到 js 对象中。网页中即可调用 ChromiumWebBrowserBindObject 类中定义的属性、方法
11     var objToBind = new ChromiumWebBrowserBindObject();
12     chromiumWebBrowser1.javascriptObjectRepository.Register("_chromeBrowser", objToBind, true, BindingOptions.DefaultBinder);
13 
14     string url = "https://localhost:44389/Pages/BIMFaceDemo7_3.html?fileId=" + fileId;
15     chromiumWebBrowser1.Load(url);
16 }

(3)网页中点击【JS 调用 C# 方法】按钮。代码如下:

在入口函数中,获取注入的 ChromiumWebBrowser 对象,名称为 _chromeBrowser。

按钮对应的js方法

1 // js 调用 C# 方法
2 function callCharpMethod() {
3     // 特别提醒:C# 类中定义的方法名称采用 Pascal 命名。网页中调用的时候必须将方法名称的第一个字母改为小写。否则调用不成功。
4     _chromeBrowser.testCalcAdd(6,8)
5         .then(function (response) {
6             alert(response);
7         });
8 }

特别提醒:C# 类中定义的方法名称采用 Pascal 命名。网页中调用的时候必须将方法名称的第一个字母改为小写。否则调用不成功。

调用的C#方法。定义一个单独的类,用于在CefSahrp组件加载网页之前,将其注入到网页中

(4)WinForm窗体中点击【 C# 调用 JS 方法】按钮。代码如下:

 1 // C# 调用 JS 方法
 2 private void btnCsharpCallJsMethod_Click(object sender, EventArgs e)
 3 {
 4     Task<JavascriptResponse> jsResponse = chromiumWebBrowser1.EvaluateScriptAsync("jsMethodForCSharpTestCalcSub", 25, 7);
 5 
 6     if (jsResponse.Result != null && jsResponse.Result.Success == false)
 7     {
 8         MessageBox.Show("C#调用JS方法发生异常。" + jsResponse.Result.Message
 9             , "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
10     }
11 }

网页中定义的 jsMethodForCSharpTestCalcSub() 方法如下:

1 // js 方法,供C#调用
2 function jsMethodForCSharpTestCalcSub(num1, num2) {
3     /*如果参数需要是复杂类型,则传递Json格式的字符串,然后反序列化为对象即可使用*/
4 
5     alert(\'传入的参数num1:\' + num1 + ", num2:" + num2 + \'  减法运算 num1 - num2 = \' + (num1 - num2));
6 }

特别说明:

(1)C#定义的方法供JS调用,C#方法的返回值类型、参数类型都只能是简单数据类型,如:int、string、bool 等。

(2)JS定义的方法供C#调用,JS方法的返回值类型、参数类型都只能是简单数据类型,如:int、string、bool 等。

一般来说复杂类型就是一个实体类。如果确实想使用复杂类型,建议的解决方案如下:

将复杂类型序列化为字符串,调用方将其反序列化之后再使用。

 

关于C#与JS互相通讯,请参考CefSahrp官方文档:https://github.com/cefsharp/CefSharp/wiki/General-Usage#3-how-do-you-expose-a-net-class-to-javascript

四、CefSharp 组件运行分析
CefSahrp组件加载网页浏览BIMFace模型/图纸之后,程序目录多了 GPUCache 目录、debug.txt 文件。

GPUCache目录内容如下。BIMFACE加载模型/图纸时利用了本地电脑的GPU强大的计算功能,所以产生了缓存内容。

debug.txt 内如如下,里面记录了网页的执行过程

五、总结
  • 通过NeGet安装SDK时,运行时环境会被自动下载到当前项目的bin\\debug 或者 bin\\Release目录下。导致整个项目非常大,大约220M左右。
  • 以独立进程方式运行,消耗内存较多。
  • 当控件Dock属性设置为 Fill,客户端电脑的缩放与布局不是100%时,窗体呈现黑边(严重bug),并没有完全填充父容器。

 

《BIMFace.SDK.CSharp》开源SDK。欢迎大家下载使用。

BIMFACE二次开发系列目录     【已更新最新开发文章,点击查看详细】

成在管理,败在经验;嬴在选择,输在不学!  贵在坚持!

 

欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。

   

 个人作品

   

    1、BIMFace.Community.SDK.NET

     开源地址:https://gitee.com/NAlps/BIMFace.SDK

     系列博客:https://www.cnblogs.com/SavionZhang/p/11424431.html

     系列视频:https://www.cnblogs.com/SavionZhang/p/14258393.html

   

    2、ZCN.NET.Common

     开源地址:https://gitee.com/NAlps/zcn.net.common

 技术栈

   

 1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python

 2、jQuery、Vue.js、Bootstrap

 3、数据库:SQLServer、mysql、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、达梦DM、人大金仓、 神通、南大通用 GBase、华为 GaussDB 、腾讯 TDSQL 、阿里 PolarDB、蚂蚁金服 OceanBase、东软 OpenBASE、浪潮云溪数据库 ZNBase

 4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分库分表、读写分离

 5、架构:领域驱动设计 DDD、ABP

 6、环境:跨平台、Windows、Linux(CentOS、麒麟、统信UOS、深度Linux)、maxOS、IIS、nginx、Apach

 7、移动App:androidios、HarmonyOS、微信、小程序、快应用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler

   

 云原生、微服务、Docker、CI/CD、DevOps、K8S;

 Dapr、RabbitMQ、Kafka、分布式、大数据、高并发、负载均衡、中间件、RPC、ELK;

 .NET + Docker + jenkins + Github + Harbor + K8S;

出处:www.cnblogs.com/SavionZhang

作者:张传宁   微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。

          专注于微软.NET技术(.NET Core、Web、MVC、WinForm、WPF)、通用权限管理系统、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。

          多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。

          熟悉中小企业软件开发过程:需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业快速化实现互联网技术全流程解决方案。

         


         

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如有问题,可以通过邮件905442693@qq.com联系。共同交流、互相学习。

如果您觉得文章对您有帮助,请点击文章右下角【推荐】。您的鼓励是作者持续创作的最大动力!

C#开发BIMFACE系列1 BIMFACE 简介

BIMFACE 是什么

BIMFACE = 国内领先的BIM轻量化引擎

BIMFACE 是广联达公司旗下的一款具有完全自主知识产权的BIM轻量化引擎,建筑行业的软件开发者可在BIMFACE所提供的基础功能上进行二次开发,为终端用户提供更加丰富、更有价值的BIM应用。

技术图片

目标人群:建筑行业的软件开发者

BIMFACE 主要向建筑行业具有软件开发能力的机构和个人提供服务。

目标场景:模型应用阶段

BIMFACE 的业务起点发生在建模完成后,聚焦于模型的浏览与管理,旨在帮助用户最大化地发挥模型的应用价值。

BIMFACE 能做什么

如同“滴滴打车”在“百度地图”的基础上进行功能开发一样,你也可以用 “图纸或模型”打底,基于BIMFACE进行功能扩展,开发自己的BIM应用; BIMFACE解决了“文件格式解析”,“模型图纸浏览”和“BIM数据存储”的问题,你只需要专注于业务功能的开发。

核心能力

BIMFACE 提供的基础功能,使得开发者只需要简单的步骤就能开发BIM应用,大大降低了技术门槛,提升研发效率90%。

1. 工程文件格式转换

无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息。开发者将告别原始文件解析烦恼,数据抽取全部自动完成。具体支持的格式有:rvt、rfa、rte、skp、nwd、nwc、ifc、dwg、dxf、3dm、stl、dgn、stp、3ds、obj、dae、ply、fbx、dwf、gmp、gtj、gbq、gcl、ggj、gqi、gdq、gjg、igms、gpb、gpv、gsc、gbg、gsh、gtb、gzb。

2. 模型/图纸轻量化显示

无需安装专业软件,直接在浏览器、手机、平板上打开模型/图纸,最大限度压缩模型大小,最大限度降低CPU/内存/显卡开销。开发者不必掌握计算机图形学知识,简单几步就能实现集成。

3. BIM数据管理

支持海量BIM数据(如:构件信息、空间信息、视图信息……)在云端结构化存储,获取数据方便快捷。开发者可通过标准的RESTful数据接口轻松调用BIM数据。

为什么选择 BIMFACE

国内外有多款轻量化引擎,每种引擎都有各自的特点,那BIMFACE突出的优势是什么?

功能

1. 功能丰富

BIMFACE 目前支持的转换格式高达35种,并且在持续地增加。同时每种格式解析的完整度也在不断增加,新版本也会及时支持。

BIMFACE 提供丰富的前端与后端API,在模型展示和BIM数据方面有很大的发挥空间。

2. 功能稳定

从16年公测以来,BIMFACE目前注册的用户超过3000家,稳定性获得了很好地检验。

BIMFACE 每2周1个迭代,敏捷的开发可以很快地满足用户的新需求和解决bug的出现。使得功能的完整性和好用性不断地增加。

3. 简单好用

只需30分钟,你可以从零开始搭建属于你的运维平台。

性能

1. 模型压缩比

BIMFACE采用多种智能算法,使得原模型在转换后的大小是原来的5%~10%,加载模型飞一般的感觉。

2. 支持超大模型的在线展示

无需IE插件,无需服务器渲染,普通笔记本也能轻松打开8G的rvt模型。

显示效果

1. 支持材质效果

BIMFACE 支持rvt、skp、fbx、3ds等文件的材质效果。

2. 支持真实感渲染

通过 BIMFACE 的真实感渲染,给模型增加真实的光影效果,可以很大程度上增加模型的颜值。

3. 支持线框和SSAO效果

通过线框和SSAO效果,很大程度地提升了模型的立体感和显示效果。

客户支持与服务

1. 线上运营全天候服务

微信群、QQ群及时提供问题解答和技术支持。

2. 开发者中心全方位教程

开发指南、API文档、示例DEMO全面地辅助你开发属于你的BIM应用。

3. 线下活动

开发者活动、创新加速器面对面助你实现需求。

推荐学习资源
BIMFACE 官方推出的教程文档,API功能完善、示例完整、不断更新。对于初学者以及有开发经验的人员来说进行二次开发比较简单。
官方SDK地址:https://github.com/bimface
 

以上是关于C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用的主要内容,如果未能解决你的问题,请参考以下文章

C#开发BIMFACE系列2 二次开发流程

C#开发BIMFACE系列14 服务端API之批量获取转换状态详情

C#开发BIMFACE系列24 服务端API之获取模型数据9:获取单个房间信息

#导入MD文档图片# 全网首发最全BIMFACE二次开发系列教程

C# WinForm开发系列 - WebBrowser

c#美化窗体----------WinForm控件开发系列