尝试用大一统的计算几何库CGAL解决BIM的算法问题(二)——C#接口实现

关于CGAL的介绍可以参考上一篇文章: 尝试用大一统的计算几何库CGAL解决BIM的算法问题(一)

通过高级程序开发语言调用CGAL

在了解如何新建C++项目使用CGAL之后,我们希望把CGAL的算法能力提供给开发效率更高的高级语言。由于我们在做BIM开发的时候总是无法绕开Revit和Autocad,所以需要考虑C#语言的封装。

CGAL的C#版本封装

把C++的函数封装成C#版本一般有两种做法,一种是通过C++/CLI封装,另外一种是通过P/Invoke进行封装。
C++/CLI是微软提供的一种胶水语言,允许用户通过类似于C++语法的进行C++库的调用,并提供一些托管类和接口给到C#进行调用。
而 P/Invoke是让程序通过C/C++的协议标准对底层库进行调用。
在这里我们选择了使用P/Invoke的方式,因为这种方式同样能用于Python/Java等别的高级语言。

项目结构

由于CGAL本身的设计稍稍还是有点面向对象的结构,因此P/Invoke无法直接对其进行调用,首先需要做的,是需要新建一个C++项目,提供一些面向过程的标准C语言接口,这里称之为cgal_functions项目。
有了C语言版本的统一出口后,需要新建一个C#版本的项目与之进行对接,这里可以称为CGALInterop。
有了这两个项目之后,再建一个上层C#应用项目CGALConsoleTest,对CGALInterop的接口进行调用。
在这里插入图片描述

接口示例

以CGAL提供的一个接口示例

cgal_function项目

cgal_function.cpp

// pch.cpp: 与预编译标头对应的源文件

#include "pch.h"

// 当使用预编译的头时,需要使用此源文件,编译才能成功。

#include <CGAL/Cartesian.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_conic_traits_2.h>
#include <CGAL/Arrangement_2.h>
typedef CGAL::CORE_algebraic_number_traits              Nt_trai
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值