文章目录
- 1.概述
- 2.基础核心
- 2.1.C++ Rhino 核心
- 2.2.openNURBS
- 2.3.C++ SDK
- 3.C++ Stack
- 3.1.C++ Plugins
- 3.2.RhinoScript
- 4.NET Stack
- 4.1.C API
- 4.2.NET Framework
- 4.3.RhinoCommon
- 4.4.Eto
- 4.5.net插件
- 4.6.Grasshopper组件
- 4.7.Python脚本
- 5.相关主题
1.概述
《Rhinoceros》由许多层组成——用多种语言书写——层层叠加。最基础的内容在底层,但顶层绝不应该被认为是肤浅的……
让我们依次讨论每一层,从最下面的开始。
2.基础核心
2.1.C++ Rhino 核心
Rhino的c++ Core是最古老和最广泛的代码集。我们在一些地方使用微软的MFC,包括SDK。这是管理运行时文档的地方,是所有OpenGL视口绘图代码存在的地方,也是数学家编写的计算几何代码存在的地方。Rhino的许多命令都在这里。大量的用户界面——Rhino核心中的命令行、应用程序主机、状态栏和许多命令的对话框。
2.2.openNURBS
openNURBS是免费的c++源代码,可以让您读写Rhino 3dm文件—一直追溯到版本1。openNURBS是我们的第一个开源项目。该代码可在Windows、macOS、Linux、iOS和Android上编译。它被用于各种第三方应用程序,如ArchiCAD, SolidWorks, Inventor, SketchUp和许多其他产品,直接读取或写入3dm文件。openNURBS是Rhino本地用于读取/写入3dm文件的工具。该工具包在Rhino之前发布,因此任何产品,包括我们的竞争对手,都可以与最新的3dm文件兼容。Rhino写入的3dm文件与使用openNURBS读写3dm的其他应用程序没有区别。有关openNURBS的更多信息,请参阅openNURBS指南。
2.3.C++ SDK
最重要的是我们的c++ SDK,只能在Windows上使用。针对c++ SDK进行编译需要特定版本的Microsoft Visual Studio和Microsoft C- runtime。您必须为Rhino的每个主要版本重新编译。Rhino所能做的几乎所有事情都是通过c++ SDK公开的。一些命令和特性还没有公开,但是这个SDK非常广泛和丰富。不幸的是,由于它与Rhino Core紧密耦合,插件开发人员需要为每个Rhino版本重新编译他们的插件。有关c++ SDK的更多信息,请查看C/ c++指南。
3.C++ Stack
上面堆栈图的右列是Rhino的c++部分。c++栈允许我们(以及第三方插件开发人员)使用与开发Rhino本身相同的c++ SDK编写Rhino插件。注意,您不能使用c++编写Grasshopper组件。
3.1.C++ Plugins
C++ SDK之上是C++插件。Rhino附带的许多特性,包括一些命令、文件I/O、渲染器实际上都是C++插件。还有很多第三方C++插件,比如Asuni的VisualARQ, MecSoft的RhinoCAM, 以及Chaos Software的V-Ray。有关C++ SDK的更多信息,请查看C/C++指南。
3.2.RhinoScript
Rhino附带的c++插件之一是RhinoScript。RhinoScript通过VBScript(一种广泛使用和流行的脚本语言)公开了Rhino SDK的一个有用子集。RhinoScript不仅允许您访问Rhino,还允许您访问Windows上的任何其他COM对象。有关更多信息,请参阅RhinoScript指南,更具体地说,什么是VBScript和RhinoScript?指南。
4.NET Stack
.NET SDK在这里分为三层:
C API
.NET Framework
RhinoCommon
Eto
4.1.C API
一个直接的C API包装了c++ SDK,允许我们将平台调用(P/Invoke)集成到c++ SDK中,在原生c++代码和托管的.net层之间形成了一座桥梁。
4.2.NET Framework
微软开发了.net框架,.net使得用c#、f#、VB编写插件成为可能.NET,以及任何其他编译成微软IL的语言。微软.net框架随Windows一起发布。在Rhino for Mac产品中,我们嵌入了Mono运行时,它是.net运行时的部分跨平台实现。有关.net以及它与Rhino开发的关系的更多信息,请参阅什么是Mono和Xamarin?。
4.3.RhinoCommon
RhinoCommon是我们面向Rhino的.net SDK,构建在Windows和macOS(通过Mono)上通用的.net框架之上。RhinoCommon允许开发人员在Windows版和Mac版Rhino上运行. net代码。有关RhinoCommon的更多信息,请参阅RhinoCommon指南,或者更具体地说,参阅什么是RhinoCommon?指南。
4.4.Eto
使用RhinoCommon,你可以编写适用于Windows和Mac的.net插件,除了用户界面。Mono团队没有克隆WinForms或WPF,所以这两种技术都不能在Mac上工作。为了解决这个问题,Rhino现在附带了etto .forms。Eto允许您一次性用c#、XAML或JSON编写用户界面,并在Windows和macOS上使用。实际上,用Eto编写的UI也可以在iOS、Android和Linux上运行。有关Eto的更多信息,请查看Eto。GitHub上的表单。
4.5.net插件
在RhinoCommon之上构建了许多插件,包括内部插件和第三方开发的插件。例如,Grasshopper是一个RhinoCommon插件。Rhino中的一些命令、渲染器和文件IO插件实际上被写成了RhinoCommon插件。随着时间的推移,我们将越来越多的功能转移到RhinoCommon中。.NET插件,以便在平台之间共享更多的代码。许多成功的第三方插件也是使用RhinoCommon和. net编写的,例如GEMVision的RhinoGold和Matrix,以及Orca3D。有关RhinoCommon的更多信息,请参阅RhinoCommon指南。
4.6.Grasshopper组件
Rhino现在附带Grasshopper,这是我们用于算法和参数化设计的可视化编程语言。Grasshopper本身是一个开发平台,拥有数百个第三方编写的Grasshopper组件,用于做各种事情,从物理模拟到创建自定义用户界面,再到工业机器人编程和控制。有关Grasshopper的更多信息,特别是开发Grasshopper组件,请查看Grasshopper指南。
4.7.Python脚本
Rhino附带的一个.net插件是RhinoPython。使用IronPython (python运行时的. net实现)编写的RhinoPython将整个RhinoCommon SDK公开给python脚本语言。这意味着每当我们向RhinoCommon添加一个特性时,它都会自动显示在RhinoPython中。有关RhinoPython的更多信息,请参阅RhinoPython指南。
5.相关主题
C/C++ guides
openNURBS guides
RhinoScript guides
Microsoft .NET Framework (on microsoft.com)
What is RhinoCommon?
RhinoCommon guides
What are Mono & Xamarin?
Mono Project
Eto.Forms on GitHub
Grasshopper guides
RhinoPython guides