Skip to content

常见问题解答(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 开发人员? ​

SU 论坛的开发者专区 或 sketchucation

什么是 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 获取作系统信息。

ruby
CURRENT_PLATFORM = (Object::RUBY_PLATFORM =~ /mswin/i || Object::RUBY_PLATFORM =~ /mingw/i) ? :windows : ((Object::RUBY_PLATFORM =~ /darwin/i) ? :mac : :other)

或者,您可以创建布尔常量以用于确定当前平台:

ruby
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 语言官方站点。

我可以根据模型生成物料清单吗? ​

可以。通过 Ruby API 可以做任何你想做的事。

扩展可以在 Web 上运行吗? ​

SU 的 HtmlDialog 类允许您的扩展在 SU 中打开网页,也可以通过 Ruby API 让网页与 SU 通信。

当前版本中可用的扩展,能否在早期版本中运行? ​

不一定。Ruby API 文档中的每个方法都列出了该方法在哪个版本的 SU 中引入,须谨慎检查,并在多版本 SU 中测试。

建议在扩展中添加检测用户版本的代码:

ruby
# 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 类。

上一篇:扩展开发入门

问题咨询

周 曦

总是乐于交流,请随时与我联系!

微信电话 13077353068
QQ邮箱453154007@qq.com
微信公众号 Ketchup