Sketchup二次开发教程
Sketchup提供了两套API:
C API,主要用于读写SU文件。我们的SU文件导入功能就是用这套API做的
Ruby API,用于开发SU插件
这次我们主要关注Ruby API,因为它是实现更丰富的SU扩展功能的主要方式
不得不承认Sketchup的Ruby API开发文档相对于React,或是Inventor/Revit这些都太不友好了。不过从这篇文档开始我们还是能按图索骥,找到门径。
如果不想读这篇文档,那么也可以遵循如下步骤:
去Github把官方tutorial教程项目clone下来
clone下来之后,直接把tutorial里面的rb源文件拷贝到Sketchup的Plugins目录(e.g. C:\Users\kzhan\AppData\Roaming\SketchUp\SketchUp 2018\SketchUp\Plugins),重启SU,就可以执行tutorial里面的插件了
==》
用VS code把官方tutorial项目打开,阅读代码。代码里有详细的注释,解释了插件代码要怎么写
代码全都是Ruby的,但我觉得也没必要再专门去学Ruby语言了。对着代码看,大部分还是能理解意思。遇到不熟悉的语法可以查Ruby官方文档 以及SU的 Ruby API文档
个人查阅过,觉得值得了解的Ruby语法知识点有:
Ruby SyntaxRuby的方法名可以包含!,?这些标点符号。包含!的方法名一般表示这是一个“危险”的操作,包含?的方法名一般表示它会return一个boolean。注意这些是coding convention而不是编译要求
Ruby有unless语句,unless [condition] then 中,condition为false,then后面的语句才会执行。且 unless和if 都可以放到待执行表达式的后面,如 a += 1 if a.zero
Sketchup::InputPoint.new, Sketchup是module name,InputPoint是class name,此语句new了一个InputPoint对象
Ruby调用一个方法时,如果不带参数,则方法后的括号可以省略。e.g. my_method()也可写成my_method
以$开头的变量名是全局变量,以@开头的变量名是类的成员变量(instance variable),以@@开头的变量名是类的静态成员变量(class variable)
可以先阅读tut_hello_cube的代码和注释。这是一个Hello World级别的插件,执行插件命令后直接在世界坐标系原点处生成一个立方体
接下来阅读tut_custom_tool,这是一个实现了和SU原生的“画直线”命令相同功能的插件。这才是我们真正需要了解的东西
从tut_custom_tool的程序结构看,SU插件和Inventor/Revit插件的程序结构其实很相似。它要定义一个custom tool的类,然后实现activate/deactivate/onCancle/onMouseMove/onLButtonDown等方法,在这些方法里实现业务逻辑
从tut_custom_tool的调用的API来看,SU Ruby API还是提供了相当丰富的、封装层次较高的基础设施,包括:
交互操作工具类。如InputPoint类,可完成从屏幕上交互拾取一个点的功能。其pick方法的输入参数还可打开“本次拾取的点与上次拾取的点的连线与坐标轴平行吸附“这样的高级功能。打开后,我们的插件画线工具和原生画直线工具一样,可以红/绿/蓝灯不同颜色的虚线,表示此时推断的连线和哪个坐标轴平行。而这样的交互能力的获取,只需要在调用API时传入一个参数即可
几何造型工具类。如Sketchup.active_model.active_entities.add_line,根据拾取的点在模型上加边;edge.find_faces,用于根据刚加好的边生成面
实现undo/redo管理util,如start_operation/commit_opeation等
视图操作util,如view.tool_tip, Sketchup.status_text, view.invalidate 等直接修改/更新视图对象的方法
感觉按照这样的API能力,SU Ruby API也和Onshape的FeatureScript一样,可以将其原生的建模功能完全用API重写一遍。
Sketchup二次开发教程的更多相关文章
- WeCenter二次开发教程(一):熟悉模板结构
<1>程序文件目录介绍: app – 应用目录 models – 模型目录 plugins – 插件目录 static – 静态文件 system – 系统目录 views – 模板目录 ...
- 最好最实用的PHP二次开发教程
◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术 ...
- PHPCMS二次开发教程(转)
转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api 结构文件目录 |–caches 缓存文件目录 ...
- PHPCMS二次开发教程
PHPCMS V9 结构设计 根目录|–api 结构文件目录|–caches 缓存文件目录 |– configs 系统配置文件目录 |– caches_* 系统缓存目录|–phpcms p ...
- PHPCMS 使用图示和PHPCMS二次开发教程(转)
PHPCMS V9 核心文件说明 模块与控制器 模块: phpcms v9框架中的模块,位于phpcms/modules目录中 每一个目录称之为一个模块.即url访问中的m. 访问content模块示 ...
- 最好最实用的二次开发教程 cms
◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...
- Ecshop系统二次开发教程及流程演示
来源:互联网 作者:佚名 时间:03-01 16:05:31 [大 中 小] Ecshop想必大家不会觉得陌生吧,大部分的B2C独立网店系统都用的是Ecshop系统,很受用户的喜爱,但是由于Ecs ...
- Odoo 二次开发教程(五)-新API的介绍与应用
[关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概] odoo 新api的实现是借助于python装 ...
- Odoo 二次开发教程【一】 Odoo 的安装
一,安装的两种方式: 1) deb包安装: 此安装方式适用于简单不需要太多的人工干预,大多数插件都在deb中涵盖了.具体的步骤如下: 1.编辑 /etc/apt/source.list 文件,在末尾添 ...
随机推荐
- ubuntu .bashrc文件添加jdk后无法登录的解决方案
1. 快捷键(ctl-alt-f2)进入虚拟终端 2. 执行export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/ ...
- linux文件系统与链接
Linux的文件属性图1 图1 linux的文件属性 ls -lhi -l 长格式 -h 人性化 -i inodo -d 看目录自己的信息 inode 源自于文件系统 分区 平面设计图 格式化 施 ...
- Estimating Gene Frequencies| method of maximum likelihood|point estimate
I.11 Estimating Gene Frequencies 在小样本上计算基因A的概率PA,举例如下: 通过加大样本会将通过观察值得到的数趋近于真实数据,所以该问题转化为了统计学上利用大量观察值 ...
- Linux中vim的基本操作
Vim三种模式之间的相互转换: 1.拷贝当前行 yy,拷贝当前行的向下五行 5yy,粘贴使用p: 2.删除当前行 dd,删除当前行的向下五行 5dd: 3.在文件中查找某个单词[命令行模式下 /关键 ...
- Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.x86_64
在使用gdb调试时出现Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.x86_64提示 解决 ...
- aclocal-1.13: command not found
原因: 将编译好的工程拷贝到系统版本不一样的系统中,再进行编译会出现此类问题. 解决方法: yum install automake autoconf yum install libtool auto ...
- [LC] 105. Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- C# 将多个DataTable添加到指定的DataSet中
DataSet ds = new DataSet();//创建数据集 DataTable dt1=new DataTable(); //表1 DataTable dt2 = new DataTable ...
- 用C#实现一个百度万年历
目录 背景 实现步骤 关键点 结束语 背景 命理学是对人生命运规律的探索,以人的各式各样的数字(出生年月日.姓名笔划等)来推测人的性格与命运并占卜推测未来会发生的事情.古今中外都有相关方面的理论,中国 ...
- FP-Grow树
序言 FP-growth(Frequent Pattern Tree, 频繁模式树),是韩家炜老师提出的挖掘频繁项集的方法,是将数据集存储在一个特定的称作FP树的结构之后发现频繁项集或频繁项对,即常在 ...