常见问题解答(FAQ)
原文中的部分链接未搬运,如需直达可查看 英文原文
什么是 SketchUp(SU)?
SU 是 Trimble 公司开发的易于使用的 3D 建模软件。它有 Make 和 Pro 版本。您可以在 3D Warehouse 找到数以千计的 SU 模型。
什么是 Ruby?
Ruby 是“一种面向对象的语言”。您可以在 Ruby 基础教程 或 Ruby 官方网站 了解更多信息。
什么是 SU Ruby API?
SU Ruby API(应用程序编程接口)是通过 Ruby 语言扩展 SU 功能。
什么是 Ruby 插件 (Plugin/Extension/Rubies)?
“插件”是指任何可以添加到 SU 以扩展其功能的 Ruby 代码。一版为包含了 Ruby 编程代码的扩展名为 .rb(源代码)或 .rbs(加密代码)的文本文件。自 SU 2013 以来一直鼓励开发人员创建 “扩展(Extension)”。
什么是 SU 扩展 (Extension)?
“扩展(Extension)” 与其他 Ruby 插件不同的是:包含了额外的代码用来告诉 SU 其相关信息,以便用户可以轻松地管理众多的扩展。
什么是 Ruby C 扩展呢?
Ruby C 扩展不是 SU Ruby APi。它是基于 C 语言编译的库,可以向 Ruby 添加功能,一版用于进行一些密集的计算,因为它比 Ruby 的速度更快。
只有 SU Pro 能运行扩展?
任何版本都能使用 SU 扩展。
如何学习二次开发?
查看 SketchupExtension 类的 Ruby 文档,注意说明中的扩展示例。官方入门教程将引导您创建一个完整扩展。
在哪里可以找到 SU 扩展?
SU 官方维护了一个 扩展仓库
在哪里可以找到 SU 开发人员?
什么是 Ruby 控制台?
SU Ruby 控制台是一个用于运行 Ruby 代码的小对话框,您可以点击 窗口 -> Ruby 控制台 显示。
如何在不重启 SU 的情况下重新加载脚本文件?
从菜单中选择 窗口 -> Ruby 控制台。假设脚本名为 d:/HelloWorld.rb。只需在输入框中输入 load 'd:/HelloWorld.rb',SU 就会重新加载并执行脚本。
怎样才能防止别人窃取我的开发成果?
可以在官方的数字签名和加密页面上完成。或者,当扩展上传到官方扩展仓库时也会为您加密。
如何在 Mac/PC 上进行测试?
最佳实践是在两个平台上都进行彻底测试。可以尝试在 SU 开发者论坛上询问是否有人愿意帮助您进行测试。
Mac/PC 的 Ruby API 有什么区别?
在 SU 2017 之前,这两个平台之间最大的区别是 WebDialogs,此外无需担心。在 2017 年之后,使用新的 HtmlDialog 类可以在两个平台上渲染相同的 HTML 页面。
另一个区别是 Mac 支持 “MDI”(多文档接口),这意味着在同一 SU 进程下一次可以打开多个模型。因此,Mac 在启动 SU 并首次加载 Ruby 脚本时是没有 Sketchup.active_model 的。最佳实践,是确保修改 active_model 的代码是由用户操作触发。另外,还通过 AppObserver 在打开新模型后才允许调用 active_model。
如何检测我的扩展是在 Mac 还是 PC 上运行?
您可以从 Object::RUBY_PLATFORM 获取作系统信息。
CURRENT_PLATFORM = (Object::RUBY_PLATFORM =~ /mswin/i || Object::RUBY_PLATFORM =~ /mingw/i) ? :windows : ((Object::RUBY_PLATFORM =~ /darwin/i) ? :mac : :other)或者,您可以创建布尔常量以用于确定当前平台:
MAC = ( Object::RUBY_PLATFORM =~ /darwin/i ? true : false )
WIN = ( (Object::RUBY_PLATFORM =~ /mswin/i || Object::RUBY_PLATFORM =~ /mingw/i) ? true : false )
# Check which platform you are on and print a message.
if MAC # You are running on a Mac computer.
UI.messagebox("I like apples!")
elsif WIN # You are running on a Windows computer.
UI.messagebox("I prefer windows!")
else # You are running on another architecture.
UI.messagebox("I like open source!")
end有 Ruby API 的调试工具吗?
调试最常见的方法是使用大量 puts() 或 p() 语句将内容打印到 Ruby 控制台,并观察正在发生的事情。
官方也在 Github 上托管了一个 SU Ruby 调试器。功能更全面方法但设置很复杂。
SU 附带了 Ruby 的哪些部分?
SU 附带了 Ruby Core 类以及大多数标准库。部分标准库因为在 SU 中运行有问题而被删除了。
如何添加一个 SU 不附带的模块?
将所需模块的 .rb 文件直接复制到扩展目录中。
在哪里可以找到 Ruby 语言的文档?
我可以根据模型生成物料清单吗?
可以。通过 Ruby API 可以做任何你想做的事。
扩展可以在 Web 上运行吗?
SU 的 HtmlDialog 类允许您的扩展在 SU 中打开网页,也可以通过 Ruby API 让网页与 SU 通信。
当前版本中可用的扩展,能否在早期版本中运行?
不一定。Ruby API 文档中的每个方法都列出了该方法在哪个版本的 SU 中引入,须谨慎检查,并在多版本 SU 中测试。
建议在扩展中添加检测用户版本的代码:
# You can have this sort of code in the initialization routine of your plugin.
version_required = 7.0
if (Sketchup.version.to_f version_required)
UI.messagebox("You must have Sketchup " + version_required.to_s + " to run this plugin. Visit sketchup.com to upgrade.")
return
end我在 API 中发现了一个错误,该怎么办?
可以先搜索 SU 开发者论坛或 Sketchucation,看看论坛中是否已经有了答案。
如果您找不到答案,请将其发布到论坛,很有可能会有答案出现。
我有一个 API 的功能请求,该怎么办?
建议将功能请求发布到 SU 官方论坛或的开发人员组或 Sketchucation 上的 Ruby API 论坛。
如何将自己的菜单添加到 SU?
请参阅 Menu 类。