发布说明

从SketchUp的早期开始,SketchUp的API就以某种方式存在了,随着每一个版本的发布,我们都扩展了其功能。请阅读以下内容,了解有哪些变化。

虽然我们对最新版本的采用率很高,但在发布之后,每个人都需要时间来进行升级。如果你正在构建依赖于最新版本功能的脚本,请务必检查Sketchup.version以确保你的用户能够运行你的脚本。

# 你在你的扩展的初始化程序中做这样的事情。version_required = 16
if (Sketchup.version.to_f < version_required)
  UI.messagebox("你必须有Sketchup 20#{version_required}才能运行这个"\"扩展。请访问sketchup.com来升级。")
else
  # 你的代码...end

版本号

以下是最近SketchUp发布的版本的构建号。请注意,除了英语以外的语言,每个版本的版本号都比较大,所以最好是检查大于或等于这里的数字的版本。

  • SU2022.0.1=22.0.354 在Windows 64位上,22.0.353 在Mac 64位上。

  • SU2022.0= Windows 64位上的22.0.316,Mac 64位上的22.0.315。

  • SU2021.1.2= Windows 64位的21.1.332,Mac 64位的21.1.331。(不包含任何Ruby API变化)

  • SU2021.1.1= Windows 64位上的21.1.299,Mac 64位上的21.1.298。

  • SU2021.1= Windows 64位上的21.1.279,Mac 64位上的21.1.278。

  • SU2021.0.1= Windows 64位上的21.0.391,Mac 64位上的21.0.392。(不包含任何Ruby API变化)

  • SU2021.0= Windows 64位上的21.0.339,Mac 64位上的21.0.338。

  • SU2021.0= Windows 64位上的21.0.114,Mac 64位上的21.0.113。

  • SU2020.2= Windows 64位上的20.2.172,Mac 64位上的20.2.171。

  • SU2020.1.1= Windows 64位上的20.1.235。(不包含任何Ruby API变化)

  • SU2020.1= Windows 64位上的20.1.229,Mac 64位上的20.1.228。

  • SU2020.0= Windows 64位上的20.0.133,Mac 64位上的20.0.134。

  • SU2019.3=Windows 64位上的19.3.253,Mac 64位上的19.3.252。

  • SU2019.2=Windows 64位上的19.2.222,Mac 64位上的19.2.221。

  • SU2019.1=Windows 64位上的19.1.174,Mac 64位上的19.1.173。

  • SU2019=Windows 64位上的19.0.685,Mac 64位上的19.0.684。

  • SU2018 M1= Mac 64位上的18.1.1180。(不包含任何Ruby API变化)

  • SU2018= Windows 64位上的18.0.16975,Mac 64位上的18.0.16976。

  • SU2017= Windows 64位上的17.0.18899,Mac 64位上的17.0.18898。

  • SU2016= 16.0.19912 在Windows 64位,16.0.19911 在Windows 32位,16.0.19913 在Mac 64位。

  • SU2015 M2= 15.2.685 在 Windows 64 位上,15.2.687 在 Windows 32 位上,15.2.686 在 Mac 64 位上。

  • SU2015 M1= 15.1.106 在 Windows 64 位,15.1.105 在 Windows 32 位,15.1.104 在 Mac 64 位。

  • SU2015=Windows 64位上的15.0.9350,Windows 32位上的15.0.9351,Mac 64位上的15.0.9349。

  • SU2014 M1#NAME?

  • SU2014#NAME?

  • SU2013 M2= 13.0.4812 在Windows上,13.0.4811 在Mac上。

  • SU2013 M1= 13.0.4124 在Windows上,13.0.4123 在Mac上。

  • SU2013= 13.0.3689 在Windows上,13.0.3688 在Mac上。

  • SU8.0 M2#NAME?

  • SU8.0 M1#NAME?

  • SU8.0#NAME?

  • SU7.1 M2#NAME?

  • SU7.0 M1#NAME?

  • SU7.0#NAME?

  • SU6 M6#NAME?

SketchUp 2022.0.1中的新内容

修复了Ruby API的错误

  • 在SketchUp 2022.0中,一个错误可能导致一个可用的名字被错误地重命名。或者一个应该不可用的名字被重复了。这在SketchUp 2022.0.1中得到了修复。

SketchUp 2022.0中的新内容

实体生成器

我们增加了一个新的接口。Sketchup::EntitiesBuilder,目的是能够以类似于Geom::PolygonMesh的速度生成批量几何图形。Geom::PolygonMesh+Sketchup::Entities#fill_from_mesh的速度生成大量的几何体,但同时又具有Sketchup::Entities提供的简单性和每个实体的控制。这对导入者来说特别有用,你可以期望通过从Sketchup::Entities#add_faceSketchup::EntitiesBuilder#add_face

Mac上的通用二进制支持

我们现在支持macOS上的通用二进制文件,可以在苹果芯片和基于Intel的Mac电脑上原生运行。

更新OpenSSL到1.1.1l

Ruby中的OpenSSL版本已经更新到了1.1.1l。

使Ruby控制台的输出更加一致

早期版本的SketchUp对Ruby Console命令的返回值的打印因平台不同而不同。这已经按照Ruby自己的IRB工具的模式变得一致了。这样做的一个副作用是,控制台现在使用.expect而不是.puts来打印返回的值,这使得它在许多情况下不那么含糊。比如说nil""在这两种情况下都会打印一个空行。

Ruby API的增加和改进

Ruby API的错误修正

  • 修正了一个在UI::HtmlDialog#initialize的错误其中max_heightmax_width被调换了,当use_content_size被设置为true

  • 修正了一个错误,即UI::HtmlDialog的位置被不正确地设置,当use_content_size被设置为true

  • 修正了一个在UI::HtmlDialog中的错误。use_content_size没有被持久化(当preference_key被设置时)。由于这个bug,在某些情况下,HtmlDialog在被重新创建时改变了尺寸。

  • 修正了Mac上的一个bug,在这个bug中,HtmlDialog的大小和位置都会改变。UI::HtmlDialog的大小和位置没有被保留下来。UI::HtmlDialog窗口时,SketchUp 的尺寸和位置不会被保留。

  • 修正了一个在UI.savepanel的崩溃,当Mac系统下使用带*前缀的文件名时。response = UI.savepanel('Save Image', nil, '*.png').

  • 修正了 "EntityInfo "不是一个支持的参数,用于UI.show_inspector

  • 修正了 "EntityInfo "没有被列在UI.inspector_names

  • 修复了Sketchup::Face#uv_tile_at在某些边线情况下可能会返回不正确的值。

SketchUp 2021.1.1中的新内容

修复了Ruby API的错误

  • 修复了退步UI::HtmlDialog的回归,在这个问题上,JavaScript'的sketchup对象上的方法,在离开初始页面后,注册的动作回调就不见了。

SketchUp 2021.1中的新内容

Upgrade Ruby to 2.7.2

对于SketchUp 2021.1,我们将SketchUp中的Ruby版本从2.7.1升级到2.7.2。

值得注意的是bug-fix in Ruby 2.7.2是纠正了一个错误,该错误使ruby-prof等分析工具无法报告正确的结果。

更新OpenSSL到1.1.1k

Ruby中的OpenSSL版本已更新至1.1.1k。

Ruby 控制台的改进

  • Ruby 控制台现在可以在不同时段记住其可见性。

  • Ruby 控制台已从 Windows 菜单移至新的 Developer 菜单。

RubyAPI的增加和改进

Ruby API的错误修正

SketchUp 2021.0中的新内容

Upgrade Ruby to 2.7.1

对于SketchUp 2021.0,我们将SketchUp中的Ruby版本从2.5.5升级到2.7.1。开发人员应该验证他们的扩展在新版本的Ruby中是否能如期工作。

Ruby API的增加和改进

RubyAPI的错误修正

  • 修正了Sketchup::Texture#filename这样,当内部纹理文件名缺少扩展名时,它会附加一个与它所加载的数据格式相匹配的文件扩展名。

SketchUp 2020.2中的新内容

Ruby和C交换API

为了使Ruby API和C API在SketchUp应用程序中具有更好的互操作性,我们引入了在API之间交换实体和图像代表的能力。

实体是因为它是一个关键类型,而ImageRep是因为它可能是一个昂贵的复制对象。

  • SUEntityToRuby

  • SUEntityFromRuby

  • SUImageRepToRuby

  • SUImageRepFromRuby

更多细节请参考C语言API文档。

Ruby API的增加和改进

Ruby API的错误修正

  • 修正了Unicode字符在Ruby Console中不能正确显示的问题。

  • 修正了在UI::HtmlDialog的崩溃,当打开对话框后立即关闭时。

  • 修正了DWG导入选项。:preserve_origin被忽略了。

SketchUp 2020.1中的新内容

RubyAPI的增加和改进

SketchUp 2020.0中的新内容

RubyAPI的添加和改进

Ruby API错误修复

  • 修正了在UI::HtmlDialog'的回调中可能出现的崩溃,原因是这些值没有受到Ruby'垃圾回收的保护。

  • 修正了模型验证时,错误地将一些有效的UV映射标记为无效,并将其重置。

SketchUp 2019.3中的新内容

Ruby API的错误修复

  • (Win) 更新了libcrypto和libssl dlls到1.1.1c。

  • 修复了UI.openURL在Mac上不执行URL编码,以实现跨平台一致性。

SketchUp 2019.2中的新内容

RubyAPI的增加和改进

  • 增加了Sketchup::Selection#invert

  • 增加了:scale_factor选项到Sketchup::View#write_image允许控制视口相关元素的比例,如文本高度、箭头头、线宽、纹饰图案等。

  • 记录了:source => :framebuffer选项在Sketchup::View#write_image that dumps the current frame as drawn in viewport. This has existed since SketchUp 7

  • 添加了新的面积和体积单位设置到Sketchup::OptionsProvider

  • 添加了Sketchup.format_volume

  • 添加了常数到长度类的常量,以便与OptionsProvider一起使用面积和体积单位。

  • 增加了检查,以防止图像材料被分配给普通绘图元素。这样做现在会抛出一个ArgumentError

  • 提高了彩色材质的PNG图像导出的性能。以前,它曾经使用最大压缩。现在我们使用一个更平衡的压缩设置。这影响到了Sketchup::Texture#write以及纹理写入器。我们还添加了一些一般性的优化,用于Sketchup::Texture#write. 在4Kx4K纹理上,我们看到处理时间从~50秒下降到~6秒。

  • 添加了Sketchup::Tool#onMouseWheel事件到Sketchup::Tool接口添加了Sketchup::Tool#onMouseWheel事件。

Ruby API错误修复

  • 将Ruby从2.5.1更新到2.5.5,以解决Ruby中的一个逻辑错误。

  • 修正了以下可能的崩溃Sketchup::Entities#clear!

  • 修复了.skm序列化中的一个bug,即材料属性中的数组没有被写到文件中。

SketchUp 2019.1中的新内容

Ruby API的错误修正

SketchUp 2019的新内容

Upgrade to Ruby 2.5.1

我们已经从Ruby 2.2.4升级到Ruby 2.5.1。这些升级往往会给Ruby语言带来微妙的变化,有时我们在内部测试中很难发现。我们的测试没有发现Ruby 2.2.4和新的2.5.1之间有任何重大的兼容性问题,我们希望大多数开发者的升级应该是相对直接的。请注意,任何已编译的C语言扩展将需要重新构建。确保OpenSSL库的调用是兼容的。

破折号

斑点和圆点以及点状斑点,哦,我的天! SketchUp增加了一个Dashes功能,允许在图层级别应用和控制独特的线条风格。我们已经在Ruby和C语言API中展示了这个新功能。参见每个API的改进和修复部分,了解我们增加的类和方法的清单。关于如何使用这些功能的完整文档,请参见每个API的文档。

尺寸和文本的InstancePath支持

在SketchUp 2019中,我们增加了Sketchup::InstancePath支持到我们现有的支持了Sketchup::DimensionLinearSketchup::Text类的支持。现在,当创建一个线性尺寸或一个附加的文本对象时,你可以通过提供一个有效的InstancePath对象,或一个实例路径的数组版本,就可以将其附加到一个嵌套实体上。这将允许你在模型空间中创建一个尺寸,但将其附加到一个有效的嵌套实体。线性维度或文本将被附加到该实体上,这与通过用户界面创建线性维度和文本时的情况完全一样。

Ruby API 破坏性变化

  • SketchUp改变了它显示单位的方式。现在它在数字和单位指示器之间添加了一个空格。如果你的扩展使用你自己创造的方法来解释SketchUp格式化的字符串,你可能会发现,如果你不考虑额外的空间,它就不能工作了。比如说。

  • 2019年之前。"2.5mm"

  • 现在是2019年。"2.5毫米"。

  • Ruby版本升级--Ruby 2.5删除了方法。Dir::Tmpname.make_tmpname. 如果你在使用这个方法,你需要找到一个替代方法

  • Sketchup::Entity#delete_attribute不再返回true当试图删除一个不存在的字典键时,不再返回true。

Ruby API的增加和改进

Ruby API的错误修正

  • 修正了在Mac上退出时,当一个Sketchup::FrameChangeObserver处于活动状态时的崩溃

  • 修正了一个问题,即Sketchup::Model可能会在调用.singleton_class.

  • 修正了Ruby创建的尺寸在非关联的情况下不高亮。

  • 修正了当 "Hide Foreshortened "被激活时,Ruby创建的尺寸不能正确隐藏。

  • 修正了 SketchUp 在构建Geom::PolygonMesh的时候,SketchUp会崩溃。

  • 修正了Ruby DWG导入器的单位不正确的问题。

  • 修复了Geom::PolygonMesh将不接受负数作为参数

  • 修复了在High Sierra上以非决定性的顺序加载扩展程序的问题。

  • 修正了SketchUp在试图加载较新版本的组件时崩溃的问题。

  • 修正了关于merge_coplanar_faces的拼写错误(为兼容起见,保留旧的拼写)。

  • 修正了SU2018中重命名相同名称的材料时的退步。这在过去会产生一个错误,而它本应是一个无用功。

  • 修正了 SU2018 中的退步,即model.materials["MaterialName"]可能会失败

  • 修正了在加载较新版本的 SketchUp 中制作的组件时出现的崩溃。

  • 修正了Windows上Ruby Console中的unicode字符。

  • 修正了修正了 UI::HtmlDialog这样,不可调整大小的对话框就不会使用偏好中的宽度和高度。

  • Sketchup::View#write_image如果有5个以上的参数传入,应该抛出一个错误。

  • 修复了UI::HtmlDialog的内容在调整大小时闪烁。

SketchUp C API 文档

  • 更新了关于VC++运行时版本的SDK文档。

用于SketchUp的LayOut Ruby API

SketchUp 2018 M0中的新内容

用于SketchUp的LayOut Ruby API

这是一个新的基于Ruby的SketchUp API,允许开发人员使用常规的SketchUp Ruby API来读写LayOut文件。我们已经采取了现有的LayOut C API,并用Ruby层将其包裹起来,然后将其包含在SketchUp内。这被证明是一个很好的工作模式,即如何将API功能暴露在我们的基础C API中,然后将该功能准确地暴露在Ruby层中而不重复代码。

Sketchup.send_to_layout

随着LayOut Ruby API for SketchUp的推出,我们增加了用LayOut应用程序打开LayOut文件的能力。这使开发人员能够纯粹用Ruby编写一个SketchUp扩展,解析SketchUp模型,编写LayOut文件,并在LayOut中顺利打开LayOut文件。这有助于在SketchUp和LayOut之间建立更强大的联系,并能通过使用开发人员创建的扩展来改善用户的工作流程。

ImageRep

你好,Ruby API开发者,请见Sketchup::ImageRep. 这个新类暴露了SketchUp内部的一个数据结构,称为的数据结构。.ImageRep是一个图像的内存表示(而不是对SketchUp模型中的图像的引用)。这个类向Ruby API暴露了许多图像阅读和操作工具。现在你可以在一个指定的uv坐标上获得一个像素的颜色。ImageRep中获取一个数组的所有像素数据,从一个ImageRep中设置像素数据。ImageRep, 保存一个ImageRep到磁盘,以及更多。当然,我们还包括将模型中的纹理转换为一个ImageRep的工具,并将一个ImageRep对象直接分配给一个材质作为该材质的纹理。这个新的类为读取和处理模型中的图像提供了很多机会。请看ImageRep类,了解更多信息。

在Ruby API中公开了导入器/导出器选项

我们已经将我们的本地导入器和导出器的所有选项暴露给Ruby。参见Ruby API文档中的Sketchup::Model#importSketchup::Model#export.

API中新的SketchUp功能

为SketchUp核心团队对SketchUp应用程序所做的改进表示热烈的掌声。那么,我们也想确保这些新功能能被我们的开发者社区使用。我们已经为命名的剖面图和填充的剖面图引入了新的API功能。棒极了

高级属性的Ruby处理

SketchUp核心添加了一个名为高级属性的功能。这为每个模型的组件实例和定义默认添加了一些新的属性字典和属性。应该注意的是,我们已经阻止了通过Ruby删除字典的能力。这应该是不可能的,如果你发现你能够这样做的情况,请让我们知道。然而,你可以删除键/值对。如果这些键值对不存在,用户界面将重新创建它们。

鲁比的改进和修复

错误修正

  • 破坏性变化#NAME?Sketchup::Material#name=中的一个错误,该错误允许API创建具有重复名称的材料。现在它将引发ArgumentError如果它对模型来说不是唯一的。

  • 突破性变化#NAME?Sketchup::Color类在LayOut和SketchUp之间是通用的。潜在的破坏性变化是Sketchup::Color改为现在比较RGBA值而不是Ruby对象。

  • 破坏性变化#NAME?Geom::Transformation#identity?所以它现在可以正确地返回true在所有变换矩阵与同一性变换的值相匹配的情况下都会正确返回true。

  • 修正了Geom::Transformation.scaling(float)Geom::Transformation#initialize(float)不设置矩阵的第15分量,而是调整其他字段。

  • 修正了当试图调用Sketchup::View#animation=时崩溃。Sketchup::Animation#stop

  • 修正了一个崩溃,当调用UI.menu时的崩溃。

  • Sketchup::Pages#erase现在会正确删除场景标签,就像UI那样。

  • 修正了一个在Sketchup::ArcCurve#end_angle中的一个错误,它有时会在返回值上增加360度。

  • 修正了一个问题,在Windows下,由于描述中的管道字符,Ruby导入器可能导致导入文件对话框不正确地呈现下拉项目。

  • 修正了一个崩溃,当使用-RubyStartup命令行参数时的崩溃,该参数在加载文件时引发了错误。

  • 修正了一个在UI.create_cursor中的崩溃,如果长度小于4个字符就会发生。

  • 修正了一个罕见的崩溃,在Sketchup::MaterialsObserver

SketchUp 2017 M0中的新内容

Ruby 2.2

是的,又到了这个时候 - 是时候更新我们的Ruby解释器了。我们已经升级到Ruby版本2.2.4。我们希望使用纯Ruby的扩展能够升级到Ruby 2.2,而不会有什么困难。请注意,任何已编译的C语言扩展将需要重新构建。

嵌入式网络框架

我们对SketchUp 2017最感兴趣的开发者功能之一是一个新的Web Dialog框架。对于SketchUp 2017,我们将Chromium网络浏览器与SketchUp安装程序捆绑。什么?是的,现在SketchUp预装了一个适用于Mac和Windows客户端的单一网络浏览器。在试图使你的网页与Internet Explorer 8-11和Safari兼容时,不再有以头撞墙的创伤了。

为了保持向后兼容,我们在Ruby API中实现了一个新的HtmlDialog类,我们没有改变现有的WebDialog类。使用WebDialogs的扩展应该继续工作,不需要任何改变。

新的Ruby API文档

我们一直在努力改进我们的Ruby API文档和发布过程。我们从内部调整和维护的RDoc版本切换到YARD来生成文档。在这个过程中,我们不得不在源代码中对我们的文档进行许多改动,我们做了一个专门的YARD模板来满足我们的需求。我们现在拥有的是一种简单的方法,可以在几秒钟内重新生成文档,而且我们可以将它们推送到git repo,在那里它们可以立即公开使用。过去需要花费数小时的手动HTML编辑和对Sketchup.com网络服务器的特殊访问,现在已经减少到大约10分钟的过程来生成和发布文档。

SketchUp C API平价 - 继续

我们在2017年专注于增加SketchUp C API的功能,为我们的开发人员提供更大的利益,并作为我们继续努力的一部分,在未来完全废弃和删除旧的C++ API。我们将继续增加更多的功能,直到我们获得足够的覆盖面,使C API与被废弃的C++ API的功能相提并论。

更新的编译器

我们更新了Windows和MacOS的编译器。在Windows上,我们现在使用Visual Studio 2015 SP1(以Windows 7为目标)。在MacOS上,我们使用XCode 7.2.1(部署目标为10.10)。

新的Ruby API功能

错误修复/小的改进

Ruby API

  • 修正了Sketchup::Entities#transform_by_vectors以使其对第二个数组进行边界检查。一个参数错误如果第二个数组的项目少于第一个数组,则会引发ArgumentError。

  • 增加了以下功能UI::HtmlDialog可以使用回调接收JavaScript数组和对象。

  • 删除了一个UI::HtmlDialog的限制,即回调需要至少有一个参数。现在不需要参数了。

  • UI.show_model_info不再打开一个模型信息页面给"扩展"因为该页面现在被扩展管理器对话框所取代。

SketchUp 2016 M0中的新内容

一个新的LayOut API

我们很自豪地宣布,我们向LayOut的扩展生态系统迈出了第一步。使用这个新的API,开发人员现在可以打开、创建、修改、保存和导出.布局文件。实际上,这意味着其他应用程序可以使用C API导入或导出.layout文件格式。(这包括从SketchUp创建一个.layout文件)。我们有几个样本脚本供开发人员在发布时试用。请查看开发者中心的API文档。开发者中心获取更多信息。

数字签名扩展--扩展加载政策

在SketchUp 2016中,我们为用户引入了选择他们想要使用的扩展加载策略的功能。这些选项是 "仅识别的扩展"、"批准未识别的扩展 "和 "不受限制"。

这一功能的开发者方面被称为数字签名。所有2016年或更高版本的SketchUp扩展现在都需要数字签名才能在最高安全模式下运行--"仅识别的扩展"。如果用户选择了 "批准未识别的扩展",那么所有已签署的扩展将自动加载,任何未签署的扩展都必须由用户批准。所有已签署和未签署的扩展将以 "不受限制 "的模式加载。

SketchUp 2016 M0默认安装在 "不受限制 "模式下。

要对您的扩展进行数字签名,只需将您的.rbz包上传到我们新的数字签名和加密页面,我们将对其进行签名并返回给您。访问新的扩展程序数字签名页面

每次你对代码进行修改并想重新发布时,你都需要签署你的扩展。您将需要成为扩展仓库的注册开发者,以便能够签署或加密扩展。在这里申请!

Ruby加密2.0

再见.rbs,你好.rbe! 我们增加了一种新的加密方式,您可以用它来帮助保护您的扩展知识产权(IP)。SketchUp 2016可以读取.rbe和.rbs两种文件类型。这应该有助于确保我们为那些需要一些时间来重新加密其扩展的作者保持向后的兼容性。要使用我们的新加密技术,只需将您的.rbz包的未加密版本上传到我们新的数字签名和加密页面,我们将对其进行加密并返回给您。访问新的扩展数字签名页面页面了解更多信息。

你将需要成为扩展仓库的注册开发者,以便能够签署或加密扩展。在这里申请!

开发者中心

在新的扩展数字签名页、新的LayOut C API和一大堆未来的想法和潜力之间,我们决定创建一个新的中心位置来组织我们的开发者资源、API文档等。访问(和书签!)。extensions.sketchup.com/en/developer_center

观察者升级

我们一直在努力寻找方法,使观察员对所有开发者来说更加稳定和可靠。这些变化大多发生在引擎盖下,对开发者来说并不完全可见。为了帮助解决这个问题,我们增加了一些出现在Ruby Console中的Ruby警告,以及两个调试方法,它们将决定是否显示这些警告。Sketchup.debug_mode=Sketchup.debug_mode?.

  • 观察者事件现在被排队,直到活动操作完成。

  • Sketchup::ModelObserver不会通知中间的Ruby操作("事务")。

  • 观察者不应该再为实体返回僵尸Ruby对象。更多信息请参见 Observers 2016 pdf。

  • 为了提高性能,从所有观察者基类中删除了假方法。这个pdf更深入地了解我们对观察者所作的改变。

SketchUp C API平价 - 继续

在2016年,我们专注于增加SketchUp C API的功能,为我们的开发人员提供更大的利益,并作为我们继续努力的一部分,在未来完全废弃和删除旧的C++ API。以下是我们在2016年增加的功能的完整列表。我们将继续增加更多的功能,直到我们获得足够的覆盖面,以考虑C API与被废弃的C++ API在功能上的平等。

新的Ruby API

错误修复/小的改进

  • 修正了Sketchup::Pages#erase这样它就不会再错误地创建撤销操作了。

  • 删除了有曲线的僵尸实例。更多信息请看观察者 2016 pdf。

  • 修正了以下问题Sketchup::ViewObserver在平行投影模式下使用缩放工具时不启动的问题。

  • 废弃了Piranisi .epx的导入

  • 通过对Windows和Mac的库更新解决了IFC导入失败问题。

  • 修正了Collada导出:camera_lookout值失败的问题,信息是 "被释放的指针从未被分配"。

  • 修正了Collada导出不导出相机的问题

  • 解决了扩展描述框的多个视觉缺陷。

  • Sketchup.version_number现在返回正确的值。

SketchUp 2015 M2的新内容

我们修复了Mac上的一个崩溃,该崩溃可能发生在通过终止定时器时可能会发生崩溃。来停止定时器时,可能会发生崩溃。

SketchUp 2015中的新内容

重新命名 "插件 "菜单

我们将 "插件 "菜单重新命名为 "扩展",以便与我们目前的命名惯例更加一致。这应该不会破坏现有的插件。在 "插件 "菜单中添加一个菜单项仍然有效,它将被添加到 "扩展 "菜单中。

新功能!--扩展许可API

我们为API添加的新功能之一是创建授权扩展的能力。扩展仓库已经升级,以管理和分发这些许可证。

新!--分类器API

新的API功能

对我们的Ruby API的64位相关修改

  • Length不再派生自Float. 在2015年,它的作用应该和以前的SketchUp版本一样,这也是我们64位升级变化的一部分。

  • 我们已经将GEM_PATHGEM_HOME目录分开,用于32位和64位的构建。

开发人员的Webdialog JS错误对话框

在Windows上的SketchUp以前的版本中,只要网页上有畸形的js代码,用户就会看到javascript错误弹出框。我们在以前的版本中对这些弹出框进行了静音处理。应广大用户的要求,我们又把它们带了回来,这次只针对开发者。开发人员可以通过在他们的Windows注册表中创建这个键来启用js错误弹出窗口。HKEY_CURRENT_USER/Software/SketchUp/SketchUp 2015/WebDialogs/ShowErrorDialogs并添加一个DWORD值设置为1.

错误修复和改进

  • 我们现在将初始工作目录设置为用户的文档目录。

  • 恢复了$0以返回"SketchUp"。 as it did prior to SketchUp 2014.

  • 修正了以下错误point3d.vector_to(inputpoint)会返回不正确的结果。

  • 清理了在Sketchup::Edge中使用的不一致的操作名称和ID。Sketchup::Edge类中使用的不一致的操作名称和ID。

  • 修正了工人线程对Ruby的内部调用导致的崩溃。

  • 防止了在Sketchup::Importer#loading中发生未捕获的Ruby错误时的崩溃。Sketchup::Importer#load_file

  • Geom::BoundingBox#corner现在当给定一个不正确的索引时,会引发IndexError。

  • 修正了一个错误,即Geom::BoundingBox#intersect可能会产生不正确的结果。

  • 修正了一个错误,即Geom::BoundingBox#intersect不接受顶点或包围盒的数组的错误。

  • 修正了一个错误,即Geom::PolygonMesh#normal_at将不会返回正确的顶点法线,如果模型在与获取 PolygonMesh 的脚本相同的处理循环中被修改。

  • 修正了一个bug:当方法作用于数组时,冻结的数组可能会引发错误,即使该方法没有修改该数组。

  • 修正了一个 Bug,即 InputPoint 对象在某些情况下可能会导致崩溃。

  • 将 Program Files 文件夹中的分类文件夹从C:\Program Files (x86)\SketchUp\SketchUp 2015\Classifications改为C:\Program Files (x86)\SketchUp\SketchUp 2015\ShippedClassifications. 现在Sketchup.find_support_file("Classifications")将返回用户文件夹中的分类文件夹,而不是应用程序文件夹中的。

  • 设置材料时Sketchup::ModelObserver#onPreSaveModel期间设置材料,在SU2014中不起作用。这应该在2015年得到修复。

  • Sketchup::ViewObserver通知在平行投影时曾经失败。这已被修复。

  • 自定义工具中的自定义上下文菜单得到了改进。现在有可能在打开上下文菜单之前确定被点击的实体的类型。因此可以编写自定义上下文菜单,以不同的方式处理不同类型的实体。

  • 爆炸一个图像实体现在会返回一个实体数组。这些实体包括所有相关的边、面、边缘使用对象等。以前它返回一个空数组。

  • 修正了一个错误,即view.draw(GL_LINES, ...)在传递奇数的点时崩溃的错误。

  • HTTPS连接现在应该可以在Windows上使用'net/https'.

SketchUp 2014 M1的新内容

  • 修正了在任何Ruby工具激活时导出动画时发生的崩溃。

  • 修正了一个Sketchup::EntityObserverSketchup::EntityObserver#onEraseEntity的崩溃,该崩溃可能在观察者删除自己时发生。

  • 修正了一个bug关于Sketchup::ViewObserver中的一个错误,该错误导致观察者方法在某些罕见的情况下不能正确启动。这发生在另一个事件的同一通知循环中删除观察者和添加新观察者时。

  • 修正了一个问题,即通过双击其他驱动器上的 skp 文件来启动 SketchUp 会破坏$LOAD_PATH并使标准库无法访问。这个错误导致许多人在打开位于 "C: "驱动器以外的文件时遇到插件加载问题。

  • 修正了一个在Windows上的错误,即如果用户名包含单引号,插件将无法加载。

  • 修正了一个在Sketchup::Face#position_material. 在SketchUp 2014.0.4900下,一个失败的异常(被捕获)产生于Sketchup::Face#position_material调用失败所产生的异常,似乎会导致SketchUp将所有的东西解开,回到最后的Sketchup::Model#start_operation.

  • 修正了一个Ruby的unicode问题,即Ruby不能要求unicode路径的.so文件。

  • 为 SketchUp Mac 增加了对加载SURubyDebugger.dylib. 开发人员现在可以在Mac上使用我们的调试器。

  • 修正了一个问题,即Sketchup::LayersObserver会导致SketchUp在用户进行撤销和重做时崩溃。

SketchUp 2014的新内容

We have made many additions and improvements to the SketchUp Ruby API. These changes include some big and potentially code-breaking changes in this round of SketchUp. We strongly recommend all developers test their scripts for compatibility with 2014.

升级到Ruby 2.0,现在包括Stdlib

  • 我们在Windows和Mac平台上都升级到了Ruby 2.0.0 p247。

  • 我们现在将Ruby标准库与SketchUp一起发布。

  • Ruby现在支持正确的unicode字符串。

  • Plugins on Windows have now been moved outside the SU Installation folder. On Vista, Win 7, 8: C:\Users<username>\AppData\Roaming\SketchUp\SketchUp 2014\SketchUp\Plugins在Win XP上。C:\Documents and Settings<username>\Application Data\Roaming\SketchUp\SketchUp 2014\SketchUp\Plugins

  • On Windows, we also load plugins from a user-independent support directory. On Win Vista, 7, 8: C:\ProgramData\SketchUp\SketchUp 2014\SketchUp\Plugins在Win XP上。C:\Documents and Settings\All Users\Application Data\SketchUp\SketchUp 2014\SketchUp\Plugins这个路径只被加载到$LOAD_PATH数组,如果该文件夹在SU启动时存在于用户的机器上。

新的! - 尺寸API

请参阅新的API文档,了解如何实现这些类和方法。

新的!-截面平面的增加

关于如何实现这些类和方法,请看新的API文档。

增加了对创建和激活的支持Sketchup::SectionPlane实体的支持。

额外的新API方法和功能

以下是新API功能的概要。关于如何实现这些类和方法,请看新的API文档。

Ruby控制台的升级

  • 多行代码输入和粘贴到Win平台的Ruby控制台(Ctrl+Enter创建一个新行)。

  • Ruby控制台写入数据的速度更快,并且在写入许多错误后不会变慢

  • 输入cls现在也可以清除控制台了

  • Mac的Ruby控制台恢复到了固定宽度的字体

观察者的错误修正

将Set类移至Sketchup::Set

为了避免与标准Ruby库发生冲突,我们把类到Sketchup::Set。类转移到Sketchup::Set. 所有对SketchUp Set类的引用都应该被重构。

一般错误修复

  • 确保了我们的类实现了Enumerable的类不会覆盖改进后的Ruby 2.0的#count方法。还确保了所有Enumerable类都实现了#length#size.

  • 更新后的Geom::PolygonMeshAPI 文档,使之准确无误。对许多其他 API 文档进行了修正和更新。

  • 修正了在 Ruby 2.0 线程中通过 puts 把输出写到控制台时的程序挂起。这些输出将不再挂起程序,但也不会被打印出来。所有对SU API的访问(包括写到控制台)都必须从主线程中进行。

  • 添加参数验证到Sketchup::Layer#page_behavior的参数验证。的参数验证,并更新了API文档。

  • 修正了在迭代选定实体时隐藏图层的崩溃。如果你的代码在迭代过程中修改了你所迭代的集合,SketchUp将停止迭代。相反,你应该在集合的数组上迭代。类似于以下的代码selection.each { |e| code_to_modify_the_selection_set } 类似的代码应该改为应该改成:selection.to_a.each { |e| code_to_modify_the_selection_set }的代码应该改为: selection.to_a.each { |e| code_to_modify_the_selection_set }所有的集合都是如此,例如。Sketchup::Entities,Sketchup::Layers,Sketchup::DefinitionList,Sketchup::Pages,Sketchup::Selection等。

  • 修正了一个错误,在某些情况下,共享相同定义的组似乎在成为唯一的后继续共享实体。

  • 修正了Sketchup::Group#description=的问题,该问题在设置组的描述之前没有使其成为唯一的。

  • 修正了错误的"RangeError: value cannot be negative"的有效输入时出现的错误。Sketchup::ConstructionLine#stipple=

  • 修正了Sketchup::DefinitionList#load和 load_from_url,它们不能正确地启动 Ruby 操作。

  • 修正了在应用模型中没有的材料时发生的崩溃和其他怪异现象--无论是从材料浏览器中选择的材料还是从其他打开的模型中选择的材料。现在,材料会在它所应用的模型中重新创建。

  • 修复了Sketchup::Entities方法erase_entitiesadd_3d_text当为一组 Entities 调用时,没有使该组唯一。

  • 属于已关闭模型的Ruby引用不应再保持活力,并导致Mac上可能的崩溃。

  • 修正了当Outliner打开时,在同一操作中创建/删除一个组所发生的崩溃。

  • 修正了Sketchup.active_model.export('myFilename.dae')当给定相对路径时,截断了前两个字符。

  • 修正了Sketchup::Tools#pop_tool以确保最后一个工具不会被弹出,这将使 SketchUp 处于没有活动工具的状态。

  • 修复了Sketchup::Tools#active_tool_name以便在Mac上返回正确的工具名称。

  • 修正了Sketchup::Model#close_active以便操作出现在撤销堆栈中。防止撤消操作时移动几何体。

  • 修正了Sketchup::Materials#remove以使它在从材料列表中删除材料之前,正确地从模型中的实体中删除材料。

  • 注册到的加载器文件SketchupExtension注册的加载器文件现在可以是加密的文件(.rbs)。

  • 修正了输入框包装器在sketchup.rb中的输入框包装器,以便在没有参数的情况下不进入无限循环。

  • 修正了加载错误,使其更加粗略,并包括文件路径和代码行号。

  • 任何发生在rbs文件上的Ruby错误现在都会以正确的文件名和行号报告。

  • Ruby 关键字__FILE____LINE__现在可以在 rbs 文件中正常工作。

  • 在程序启动过程中发生的 Ruby 错误现在会用堆栈跟踪来报告,这应该会使问题的诊断更加容易。

  • 修正了一个在 Windows 上的错误,即UI::WebDialog#show不记得webdialog之前的大小/位置。

  • Sketchup.require没有把加载的rbs文件的路径推到$LOADED_FEATURES#NAME?

  • RBZ提取现在应该保留文件权限。

  • Sketchup::Group#locked=/Sketchup::ComponentInstance#locked=现在可以正确地将自己添加到撤销堆栈中。

  • 为期望无符号整数参数的方法增加了负值检查(某些使用整数作为参数的方法允许格式化不良的负值)。

  • Sketchup::ComponentInstance#explode/Sketchup::Group#explode当编辑你爆炸的组件时,SketchUp会崩溃。现在这个问题已经解决了。

  • 以前的问题Sketchup::Tool#getInstructorContentDirectory方法假设所有东西都是相对于SketchUp资源文件夹的。这一点在2014年已经改变了。现在它接受文件或文件夹的绝对路径。

  • 新方法。Sketchup.quit

  • 增加了UI::WebDialog#screen_scale_factor这在Mac视网膜屏幕上很有用。

  • 实现了Sketchup::EntitiesObserver#onActiveSectionPlaneChanged。

  • 添加了Geom::PolygonMesh#set_uv

  • 修正了修复了Sketchup::EntitiesObserver的错误,当观察一个组的实体集合时,错误的实体引用会被发送到观察者方法。

SketchUp 2013 M1的新内容

错误修复

修复了一个工具条错误,该错误导致一些扩展工具条不显示,并且不正确地停靠在其他工具条后面。现在建议开发者调用UI::Toolbar#restore的话,尽管那些不这样做的工具条在SU2013 M1上也能正常工作。

修正了一个在UI::WebDialog#get_element_value中的一个错误。中的一个bug,该bug导致它在Mac上对某些html元素发生故障。

SketchUp 2013中的新内容

扩展了SketchupExtension

新方法。

记录了LanguageHandler

LanguageHandler}是一个现有的内部类,我们现在在API中公开。它已经被更新了,它首先寻找扩展目录结构中的资源文件夹中的翻译资源(如仓库开发者中心中的解释). 所有翻译的资源应位于适当的语言文件夹中。

增加了特殊的HTML链接,以便在扩展仓库中启动扩展页面。

请看详细解释"skp:launchEW"链接的详细解释,见{UI::WebDialog类文档。

改变在Sketchup.send_action

"addBuilding:"已被删除。

SketchUp 8 M2中的新内容

SketchUp 8的第二个维护版本于2011年12月1日发布。它包括一些围绕管理扩展的Ruby API的补充。

改进了SketchupExtension类

五个新方法。

增加了ExtensionsManager类

让你检查哪些扩展被注册。

在Sketchup对象中增加了新的钩子

SketchUp 8 M1的新内容

SketchUp 8的第一个维护版本于2011年1月12日发布。它包括几个Ruby API的修复和补充。

改进了UI::Toolbar

两个新的方法。

修正了Mac上这些失败的方法调用。

  • UI.set_toolbar_visible('GoogleToolPaletteController', false)

  • UI.set_toolbar_visible('ToolPaletteController', false)

  • UI.set_toolbar_visible("SolidModelToolPaletteController", true)

  • UI.set_toolbar_visible("SolidModelToolPaletteController", false)

修正了这个在PC上失败的方法调用。

  • UI.set_toolbar_visible("Walkthrough", true)

  • UI.set_toolbar_visible("Walkthrough", false)

  • UI.set_toolbar_visible("FullToolSet", true)

  • UI.set_toolbar_visible("FullToolSet", false)

展开了命令

新的方法。

扩展了材质/材料类

新的方法。

给予Ruby访问 "阴影错误修复 "的机会

如果你发现自己在8.0M1阴影错误修复中得到了意外的结果,你可以把它关掉。

改进的Alpha透明度控制

修正了几个错误

我们在最近的SketchUp版本中不小心引入了一些错误。所以我们在8.0 M1中修复了它们。

Sketchup::View#pick_helper不再尊重传递给它的参数。这破坏了Bezier.rb和BZ Tools插件。现已修复。

Sketchup::ConstructionLine#stipple=方法现在可以按文件规定工作了。

Sketchup::Model#raytest方法有时会返回不正确的值。我们修复了这个问题,并添加了一个可选的布尔参数,以指定是否在隐藏实体处停止。model.raytest(ray)#NAME?model.raytest(ray, true)忽略隐藏的实体model.raytest(ray, false)停在被隐藏的实体上(通过隐藏或在隐藏层上)。

Sketchup::Color#to_a返回的是一个Bignum当一个修复值的时候,却返回了一个Bignum。AFixnum现在会被返回。

SketchUp 8中的新内容

更新了PC上的Ruby版本至1.8.6

SketchUp的Ruby解释器版本在PC上已经升级到1.8.6(Mac上仍为1.8.5)。请注意,1.8.6包括数千个错误修复和稳定性改进,但它对语法的要求也更加严格。在SketchUp 7.x和更早版本中运行的脚本在SketchUp 8中可能会出现语法错误。

WebDialog用户代理更新

过去,WebDialogs会发送一个SketchUp特有的useragent字符串。现在我们发送的用户代理是由嵌入式浏览器的原始用户代理和一个额外的字符串连接而成的,用于识别SketchUp。这使得谷歌地球插件(和类似的插件)能够正确地检测到浏览器的种类,从而在SketchUp内部正常工作。

观察者的错误修复

Sketchup::EntitiesObserver#onElementModified现在接受两个参数:实体和实体,使其更有用。

修正了以下常见的崩溃Sketchup::EntitiesObserver#onContentsModified的常见崩溃。另外。Sketchup::EntitiesObserver#onContentsModified重命名为Sketchup::EntitiesObserver#onElementModified以保证一致性。

回调Sketchup::MaterialsObserver#onMaterialRemoveAll现在已被弃用,我们建议使用Sketchup::MaterialsObserver#onMaterialRemove来代替。

写入图像大小夹层

Sketchup::View#write_image现在被限制为输出16000x16000的最大图像尺寸,以防止冻结。

计时器以更小的增量工作

UI.start_timer现在可以接受小于1秒的值。

新的布尔方法

Sketchup::GroupSketchup::ComponentInstance有几个新的布尔运算方法。

  • manifold?

  • 体积

  • 交叉

  • 联合

  • 减去

  • 修剪

  • 分割

  • 外壳

  • 等于?

  • 显示差异

Sketchup::Face#classify_point更新

请注意,对于Sketchup::Face#classify_point的返回值在SketchUp 8中已经改变了。关于你应该检查的常量列表,请参见文档。如果你有依赖硬编码数值的脚本,你应该更新它们,以使用常量代替。

修复了崩溃

修正了在Sketchup::Pages#addSketchup::Model#number_faces.

SketchUp 7.1中的新内容

新方法

SketchUp 7.0 M1的新内容

新方法

SketchUp 7中的新内容

改善脚本性能

能够在start_operation事务中更快地执行。

go_faster = true
model.start_operation("我的处理", go_faster)
# 在这里做在SU6中很慢的处理# ...model.commit_operation

一些实际测试的结果,(在同一台机器上比较SU6和SU7),一旦加入go_faster布尔值。

交叉重叠500个重叠的方块,28.4秒对26.3秒(约92%的时间)

制作面21.7秒比14.5秒长(~66%)。

窗口化3.0用四个20'x20'窗口,12x12 16.1秒对7.0秒 (~43%的时间)

Windowizer 4.010个5'x5'窗口,6x6 22.6秒对8.7秒(~38%的时间)。

改进的网页对话框

增加了最小/最大宽度。

Webdialog.min_width=100
webdialog.max_width=300
webdialog.min_height=500
webdialog.max_height=600

固定Mac对WebDialogs的支持 execute_script

webdialog.execute_script('alert("Bug is Fixed!")') 。

为webdialogs新增full_security模式(禁用插件和远程链接)

webdialog.set_full_security

能够在Mac上隐藏主页/下一页/后一页导航图标

webdialog.navigation_buttons_enabled=true

更加简洁,基于哈希值的初始化语法

my_dialog = UI::WebDialog.new(my_settings_hash)

控制缩放工具的处理方式

你的脚本现在可以控制当用户选择一个给定的组件时,哪个比例工具手柄出现。

# 禁用绿轴和红轴手柄# 通过设置位1和2为1。behavior = my_component_definition.behavior
behavior.no_scale_mask = (1 << 1) + (1 << 2)

从网络上加载定义,或保存到磁盘上

能够从URL中下载一个定义

model.definitions.load_from_url(url, download_handler)

从API中保存组件到磁盘的能力

my_definition.save_as(path)

了解更多关于用户互动的信息

检测 "组件编辑 "模式的新方法

users_current_edit = model.active_path
edit_mode_transform = model.edit_transform

轻松确定他们是否在授权的专业版中运行

is_licensed_pro = Sketchup.is_pro?

ModelObserver中新的 "模型级 "回调

def onActivePathChanged(model) { # 检测编辑模式 }
def onPlaceComponent(instance) { # 检测摆放位置 } def onExplode(model) { # 检测组/组件爆炸 } def onBeforeComponentSaveAs(instance) { # 保存时添加数据 } def onAfterComponentSaveAs(instance) { # 然后进行清理 }

检测他们是否已经通过AppObserver关闭了你的扩展功能

def onUnloadExtension(extension_name)

开发人员要求的各种改进

通过API删除你的场景

my_page.erase

保持SketchUp的同步性

UI.refresh_inspectors # 强制完全更新UImy_definition.refresh_thumbnail # 强制更新缩略图my_definition.invalidate_bounds # 强制更新bb

测量你的组,不管他们的变换是什么

untransformed_bb = my_group.local_bounds

在你的自定义工具中使用鼠标中键

def onMButtonDown(flags, x, y, view) # 现在可以工作了! def onMButtonUp(flags, x, y, view) # 现在可以工作了

将Ruby控制台输出发送到标准输出 如果你从命令行启动SketchUp,你可以用管道连接到标准错误,看到Ruby puts语句为你出现。

Sketchup.exe > myRubyLog.txt

最后,我们修复了一些崩溃的错误,主要与模型中的实体迭代有关。

SketchUp 6的新内容

在SketchUp 6的Ruby API中,最重要的新增内容是Ruby Observer机制、Tools类、WebDialog类、Styles类和Style类。

Ruby观察者机制

Ruby观察者机制是为了让Ruby脚本在SketchUp应用程序或模型中的对象发生变化时得到通知。例如,你可以创建一个观察者类来 "监听 "SketchUp的退出,然后执行一些动作。

创建一个特定观察者类型的Ruby类,例如AppObserver,覆盖所需的方法,例如onQuit,并将观察者的实例添加到Ruby脚本中的适用对象中(使用该对象的add_observer方法)。更多信息请参考各个观察者接口。

工具类

Tools类包含操作SketchUp工具集合的方法。这个类主要用于通过使用按键或鼠标操作在工具之间进行切换。

WebDialog类

Ruby WebDialog类可以从Ruby代码中创建DHTML对话框并与之互动,在本文档中称为webdialogs。例如,你可以创建webdialogs,从你的Ruby代码中调用,以显示一个网站,或接受用户的输入并在你的Ruby代码中使用结果。样式和样式类 样式类包含操作模型中的样式集合的方法。样式类包含了用于修改特定样式信息的方法。

Before SketchUp 6

API的62个核心类在此建立。很少有用户是在SketchUp 6之前的,所以这个文档网站只关注SketchUp 6及以上版本。