当前位置: 首页 > news >正文

犀牛插件开发-基础核心-技术概览-总体架构-教程

文章目录

    • 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

相关文章:

  • 看2022年卡塔尔世界杯有感
  • 小黑被劝退了,生活学习依然继续的leetcode之旅:572. 另一棵树的子树
  • 数据库原理及MySQL应用 | 日志管理
  • web前端经典react面试题
  • web靶场搭建之帝国cms7.5
  • Spring Boot学习篇(一)
  • RosonQt140——Qt Charts模块介绍和Qt绘制图表
  • 正交编码器溢出处理
  • 机器学习——05线性回归
  • IIC信号为什么要加上拉电阻
  • Tippecanoe安装使用
  • 免费分享一个SSM商城管理系统,很漂亮的
  • 蓝桥杯基础算法(一)—— 快速排序
  • 关于进程的几个问题
  • 【Flink实时数仓】数据仓库项目实战 《四》日志数据分流 【DWD】
  • Java编程基础24——递归练习
  • js写一个简单的选项卡
  • Just for fun——迅速写完快速排序
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • spring boot下thymeleaf全局静态变量配置
  • springboot_database项目介绍
  • 编写高质量JavaScript代码之并发
  • 讲清楚之javascript作用域
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 一些css基础学习笔记
  • 转载:[译] 内容加速黑科技趣谈
  • zabbix3.2监控linux磁盘IO
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ###C语言程序设计-----C语言学习(6)#
  • #define用法
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)使用竞争神经网络实现数据聚类
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三)uboot源码分析
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)编辑寄语:因为爱心,所以美丽
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net - 类的介绍
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 解决重复提交问题
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET开源快速、强大、免费的电子表格组件
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [AIGC codze] Kafka 的 rebalance 机制
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [COI2007] Sabor
  • [Gradle] 在 Eclipse 下利用 gradle 构建系统
  • [HackMyVM]靶场Crossbow
  • [HJ56 完全数计算]