XDSoft 发表于 2013-5-6 22:00:59

用SketchUp和Eclipse进行3-D建模(1)



SketchUp 是 Google 最新的一种流行工具,它解决了 3-D 建模的烦恼。 SketchUp 不仅可以使手动创建各种设计变得十分简单,而且还允许您通过 Ruby 脚本自动化设计流程。由于管理与编辑这些脚本非常重要,所以拥有一个像 Eclipse 这样的功能完备的开发环境会有很大帮助。在本文中,了解如何配置 SketchUp 和 Eclipse 以便在 Eclipse 中编辑脚本并在 SketchUp 中自动执行这些脚本。



我在最近的一个项目中有一项关键工作就是 3-D 建模,我急需找到一个设计工具,于是我尝试了 AutoCAD、Blender、Maya 和 SketchUp 的评估版。结果,我发现 SketchUp 是迄今为止最易学也是用起来最有趣的工具。“它不可能如此简单”,我时刻提醒着自已。但是借助 Google 的自定学习进度的教程和 YouTube 上的视频展示,我不仅缩短了学习曲线,而且还十分享受项目的完成。
http://new.51cto.com/files/uploadimg/20090603/1631260.gif
常用缩略词

[*]API:应用程序编程接口(Application programming interface)
[*]CVS:并发版本系统(Concurrent Versions System)
[*]SVN:版本控制器(Subversion)
[*]UI:用户界面(User interface)


让我更为高兴的是(我是一个程序员,而不是一个画家),我发现 SketchUp 可以执行命令脚本,这意味着我可以把一些工作自动化,比如给图形添加标签、为界面分配素材或是画一些几何图形,比如抛物线或椭圆。 SketchUp 的 API 是以 Ruby 编程语言为基础的,与 SketchUp 一样,它也不难学。为了加快编码的过程,我编写了一个定制 Eclipse 插件,它可以通过 SketchUp Bridge 与 SketchUp 通信。本文提供了对 SketchUp 的一个简单介绍,解释了 SketchUp Bridge 是如何工作的,还介绍了如何安装这个插件来将 Eclipse 连接到 SketchUp 。在 “用 SketchUp 和 Eclipse 进行 3-D 建模” 系列的这篇文章的稍后部分,我们将更深入地探讨这个 SketchUp API 以及能够创建的设计类型。SketchUp 建模工具像 Google 站点本身一样,Google SketchUp 在一个简单界面下提供了很多的功能。 SketchUp 的目标就是提供 “每个人都会用的 3-D ”,并且它实现了这个目标:五分钟内,您就可以学会如何画最基础的 2-D 形状并将它们变成 3-D 图形。经过半个小时的把玩,您就能够熟练掌握工具栏中的每个工具。图 1展示了 SketchUp UI 。虽然看上去像是一个建模工具,但用起来感觉更像是个玩具。
图 1. SketchUp UI

与 Blende 不同,SketchUp 不是开源的。 Google 的专有许可可以让您在合法范围内随意使用这个工具,并且还可以用插件扩展 SketchUp,但源代码是不开放的。 SketchUp 只能在 Windows®或 Apple Mac OS X 系统上运行,有两个版本可用:一个免费版和一个费用为 US$495 的收费版,叫作 SketchUp Pro 。 SketchUp Pro 提供了专业的布局和样式、先进的文件操作及技术支持。不过,免费版本也提供了很多特性,在继续往下看之前,我建议您访问 SketchUp 站点(参见参考资料)下载这个版本。启动 SketchUp在第一次启动 SketchUp 时,系统会询问您想要使用哪个模板。一个模板决定了度量单位及设计窗口的整个外观。有 12 个模板可供选择:
[*]Simple Template(英尺和英寸) —x-y 平面为绿色,正 -z 区域为浅蓝色
[*]Simple Template(米) —x-y 平面为绿色,正 -z 区域为浅蓝色
[*]Architectural Design(英尺和英寸) —  x-y 平面为深灰,正 -z 区域为浅灰色
[*]Architectural Design(毫米) —x-y 平面为深灰,正 -z 区域为浅灰色
[*]Google Earth Modeling(英尺和英寸) —x-y 平面为绿色,正 z 区域为浅蓝色
[*]Google Earth Modeling(毫米) —x-y 平面为绿色,正 -z 区域为浅蓝色
[*]Engineering(英尺) —整个设计区域都是白色
[*]Engineering(米) —整个设计区域都是白色
[*]Product Design and Woodworking(英寸) —x-y 平面为深灰,正 -z 区域为浅灰色
[*]Product Design and   Woodworking(毫米) —x-y 平面为深灰,正 -z 区域为浅灰色
[*]Plan View(英尺和英寸) —整个设计区域都是白色(从 2-D 视图开始)
[*]Plan View(毫米) —整个设计区域都是白色(从 2-D 视图开始)
除了度量单位外,模板与下一个模板间没有明显的区别。由于我是个工程人员,所以我更喜欢用 Engineering(米)模板。选择了一个模板后,会出现 SketchUp 设计窗口,您会看到一组线,这些线在称为原点的地方相交。这些线定义了坐标系(x,y,z),图 1显示了这些线的样子。实心的红线是正 x 轴,红虚线是负 x 轴。实心绿线是正 y 轴,绿虚线是负 y 轴。实心蓝线是正 z 轴,蓝虚线是负 z 轴(xyz = RGB)。SketchUp 绘图本文关心的是自动化 SketchUp,但首先,您需要对如何手工绘图有一些了解。我们从画两个简单的图开始。与 Adobe®Photoshop®和 Microsoft®Paint 一样,SketchUp 绘图流程也是先从工具栏选择工具,然后再在设计图口单击。图 2 显示了 SketchUp 的基础工具栏。

图 2. SketchUp 的基础工具栏

要开始绘图,先单击 Rectangle 工具,画一个平面的实心矩形。通过单击设计窗口内的两个点,就可以创建一个矩形。如您所看到的,设计的第一个图形通常被放进 x-y 面。如图 3a 所示。
图 3a. 简单的 SketchUp 图形

Push/Pull 工具用来给一个平面图添加第三个维度,可以用它把这个矩形变成一个立体的盒子图形。单击 Push/Pull 工具,单击矩形,然后向上移动鼠标。一个立体的盒子图形出现在了 SketchUp 窗口,并且它的高度会随着鼠标的位置变化而变化。再次单击创建一个类似于图 3b 的立体盒子图形。 SketchUp 把从 2-D 图形创建 3-D 图形的操作叫作成形(extrusion)。接下来,在盒子的上方画一个圆柱体。单击 Circle 工具,然后单击盒子顶面的中心。将鼠标从中心向外移动并再次单击鼠标,画出一个类似图 3c 的圆形。最后,再次单击 Push/Pul 工具,然后将鼠标向上移,画出一个类似图 3d 的圆柱体。如果向下移动鼠标,那么在盒子里就会出现一个圆柱形的洞。这个基础练习非常简单,SketchUp 可以实现的功能远远不止于此。要获得 SketchUp 的详细课程,可以登录 SketchUp 培训站点(参见参考资料),然后按自已的进度学习这些课程。学完之后,再看看有关中高级主题的一些视频,以加深对 SketchUp 功能的了解。SketchUp Ruby Console尽管 SketchUp 绘图很有趣,但我还是更愿意用代码进行设计。要想知道在 SketchUp 中如何用代码进行设计,请单击 Window > Ruby Console,这时在底部会出现一个有命令行界面(CLI)的窗口,同时在顶部会出现一个输出窗口。通过在这个 CLI 中输入代码,就可以在设计窗口创建并修改图形。在开始之前,请先清除掉现有的所有图形,做法是单击 Selection 工具,然后按 Ctrl+a,紧接着按下 Delete。接下来在 Ruby Console 的命令行键入下面的两个命令:
face = Sketchup.active_model.entities.add_face , , , face.pushpull -9

这些命令是用 Ruby 写的,它是 SketchUp 所能识别的惟一一种编程语言。 Ruby 是面向对象的,并且这里的第一个命令创建了一个名为face的对象,代表的是当前设计内的一个矩形。第二个命令通过调用Face类的pushpull()方法创建一个盒子图形。图 4 显示了输入了这两个命令后的输出结果。
图 4. SketchUp Ruby Console 窗口

现在如果看一下 SketchUp 的设计窗口,会看到一个接触到原点的正方形的盒子(9x9x9)。要想看得更清楚些,可以单击 Zoom Extents 工具。借助 SketchUp,可以像摆布一个常规的形状一样任意移动、伸缩或旋转这个图形。CLI 确实不错,像我们这样严谨的程序员一般都会将我们的代码保存在一个文件里,这样我们就不必重复输入所有命令了。文件访问是通过load命令实现的,该命令读取一个 Ruby 脚本(*.rb)并告诉 SketchUp 的 Ruby 解释程序执行它的每个命令。我提供了一个示例脚本,名为lathe.rb(参见下载)。这个脚本用一种与前面提及的 Push/Pull 机制不同的成形方法创建了一个图形。下载完这个脚本后,可以用下面的命令执行这个脚本(这里我们假设这个脚本位于 C:\test 文件夹中):
load "C:/test/lathe.rb"

SketchUp 现在会在 lathe.rb 内执行这些命令并显示这个加工好了的图形,如图 5 所示。
图 5. 示例图形



http://new.51cto.com/files/uploadimg/20090603/1631260.gif

SketchUp Bridge
http://new.51cto.com/files/uploadimg/20090603/1631260.gif
对 Ruby 和 Eclipse 的几个想法
SketchUp API 基于的是 Ruby,这是一种相对较新的编程语言,主要用于企业计算(Ruby on Rails)。在使用 SketchUp 之前,我从未进行过 Ruby 编程,我毫不怀疑,很多人也同我一样。 Ruby 并不是一种很难学的语言,而且具备很多优于C、C++和 Java™编程语言的特点,比如它的迭代器和简单的语法。但请不要误解,假如 SketchUp 的创作者将 API 基于另外一种更为流行的编程语言,对我而言会更为容易一些。SketchUp 并不是 Google 创建的; Google 是在收购 @last Software 时获得这个应用程序的。考虑到 Google 拥有很多 Java 程序员,所以如果他们能够将 API 从 Ruby 改成 Java 技术,就再好不过了。这样,SketchUp 也能在专业领域更为流行,3-D 设计人员也就能够使用 Java 技术所提供的所有的开源工具。那时,SketchUp 的目标就决不仅仅是要让 “人人都能用 3-D ”,更是为了要让 “人人都能进行 3-D 编程”。倘若 SketchUp 的功能能在 Eclipse 插件内实现,那就更棒了。那样一来,除了设计窗口外,您还能够拥有 Eclipse 提供的所有的资源导航器、debug/outline/console 视图和 CVS/SVN 集成。这一点不是很难实现:Eclipse Graphical Editor Framework(GEF)可以构建在 OpenGL 之上,正如 SketchUp 一样。 SketchUp 也就能够给 AutoCAD 带来某些竞争压力。如果需要志愿者的话,欢迎 Google 致电邮给我。

SketchUp 允许上传命令脚本,但是不提供任何类型的脚本编辑器。所以,大多数脚本开发人员都需要用一个单独的应用程序进行脚本编写,然后再将它们载入到 Ruby 控制台窗口。我们能做得更好。借助 SketchUp Bridge,可以在 SketchUp 之外执行 Ruby 脚本,这意味着您将无需在控制台窗口内输入命令。在本文稍后的部分,我将会阐释如何从 Eclipse 访问 SketchUp Bridge 。目前,首要任务是安装 SketchUp Bridge 文件以观其效。获得并安装 SketchUp BridgeSketchUp Bridge 是由 plugins.ro 上的神秘人物发布的,他们的座右铭 “工具让您快乐” 很值得称赞。如果是个人使用,可自由访问此软件。商业使用需要获得作者的允许,作者的名字只给出为 TBD。要获得这个软件,请访问 plugins.ro 站点(参见参考资料),并单击面向 bridge.zip 的链接。在下载并解压缩后,您会看到如下三个重要文件:
[*]bridge_load.rb —一个 Ruby 脚本,可充当 SketchUp 的插件
[*]Bridge.so —一个例程库,供 bridge_load 插件访问
[*]SUB.exe —一个 Windows 应用程序,可在 SketchUp 之外执行 SketchUp 脚本
要安装 SketchUp Bridge,请将前两个文件放入顶层 SketchUp 安装文件夹的 Plugins 目录。在我的系统上,这个文件夹是 C:\Program Files\Google\Google SketchUp 7\Plugins 。由于 bridge_load.rb 是 Plugins 目录内的一个 Ruby 脚本,所以它会在 SketchUp 启动时被自动加载。这种目录结构就将 SketchUp 插件同普通的脚本区别开来。测试这个桥在用 Eclipse 与 SketchUp Bridge 进行交互之前,应该验证一下是不是一切就绪:
[*]下载 lathe.rb 脚本(参见下载)并将其放入与 SketchUp Bridge 自带的 SUB.exe 应用程序相同的文件夹。这个文件夹可以在计算机的任何位置,不一定在 SketchUp 的 Plugins 目录。
[*]启动 SketchUp,若它已经运行,就重启它。
[*]打开一个 Windows 命令提示,并转到包含 SUB.exe 和 lathe.rb 脚本的目录。
[*]键入命令SUB lathe.rb。
SUB 应用程序告知 SketchUp 读取 lathe.rb 内的命令。 SketchUp 的 Ruby 解释器执行这些命令,结果(如图 5所示)在设计窗口可以看到。如果有两个显示器,这种安排会特别方便。您可以在一个显示器上编辑脚本,在另一个显示器上查看 SketchUp 设计。


http://new.51cto.com/files/uploadimg/20090603/1631260.gif

Eclipse 和 SketchUp Bridge我是一个忠实的 Eclipse 热爱者,当我需要在一种新语言中编写代码时,我一定会首先寻找能提供文件支持和编辑能力的一个 Eclipse 特性以便提高我的工作效率。 Ruby Development Toolset(RDT)过去是可用的,但现在它成为了 Aptana 的 RadRails 工具的一部分,该工具现在是 Aptana Studio 的一种附加特性。您可以下载 Aptana Studio 和 RadRails,但是安装过程很长,也很复杂。此外,如果您只是想要一个 Ruby 编辑器,下载巨大的 Aptana Studio 的 30 天评估版,很不值得。由于我不是很满意现有的 Ruby 工具,我自己编写了一个简单的 Eclipse 插件,我姑且冒昧地称之为SketchUp Software Development Kit 或 SketchUp SDK 。这个插件可以从下载部分获得。此插件提供了两个主要特性:一个 Ruby 编辑器,一个可启动 SketchUp Bridge 应用程序的工具栏项。本节介绍了如何安装这个插件,并展示了脚本是如何编辑和执行的。注意:这个问题可能有点让人迷惑,所以让我先来阐释相关的一些术语。在正式的 Eclipse 文档中,add-on 即plug-in。在正式的 SketchUp 文档中,用的术语是plugin(没有连字符)。SketchUp API是一组 Ruby 类、模块和方法,让您能够以代码的方式访问 SketchUp 设计。SketchUp SDK是一个 Eclipse 插件,可通过SketchUp Bridge与 SketchUp 交互,而 SketchUp Bridge 又包含一个SketchUp 插件。 SketchUp SDK 与 SketchUp Bridge 完全不同,但前者依赖于后者从 Eclipse 与 SketchUp 交互。安装 SketchUp SDKSketchUp SDK 处于公用领域,由于 SketchUp Bridge 只适用于 Windows,所以 SDK 也只能运行于 Windows 。下载后,需要执行如下 4 个任务:
[*]下载 SketchUp Bridge 归档文件,将 Bridge.so 和 bridge_load.rb 放入 SketchUp 的 Plugins 目录。
[*]解压缩 sketchup_sdk.zip,并将 SUB.exe(one of the SketchUp Bridge files)放入顶层 org.dworks.susdk_1.0.0 文件夹下的 exe 文件夹。
[*]将 org.dworks.susdk_1.0.0 文件夹移动到顶层 Eclipse 安装内的 plugins 文件夹。
[*]启动或重启 SketchUp 和 Eclipse 。
这些文件和目录可能让人困惑,所以让我先来介绍一下我的计算机上的目录结构。我将 Eclipse 安装在 C:\eclipse,我的顶层的 SketchUp 目录是 C:\Program Files\Google\Google SketchUp 7 。因此,SketchUp Bridge 文件—Bridge.so、bridge_load.rb 和 SUB.exe—处于如下位置:
[*]C:\Program Files\Google\Google SketchUp 7\Plugins\Bridge.so
[*]C:\Program Files\Google\Google SketchUp 7\Plugins\bridge_load.rb
[*]C:\eclipse\plugins\org.dworks.susdk_1.0.0\exe\SUB.exe
用 SketchUp SDK 创建和执行脚本将 SDK 插件和 bridge 文件放入正确的位置后,就可以开始进行编码了。在 Eclipse 内开发 SketchUp 脚本的过程包含三个部分:
[*]在 Eclipse 内创建一个 Ruby 脚本(*.rb)
[*]向此脚本添加 SketchUp 命令
[*]单击工具栏上的 SUB 执行 SketchUp 内的脚本
图 6 显示了这个编辑环境。
图 6. SketchUp SDK

如果您已经很熟悉 Eclipse,可能不需要操作指导。如果不熟悉,可以按以下的步骤做:
[*]在 Eclipse 内,单击 File > New > Project。
[*]打开 General 文件夹,选择 Project 并单击 Next。
[*]键入 my_project 作为这个项目的名称,然后单击 Finish。
[*]在 Eclipse Package Explorer 内,右键单击 my_project 然后单击 New > File。
[*]键入 my_script.rb作为 SketchUp 脚本的名字,然后单击 Finish。
[*]把文本从 lathe.rb 粘贴到 Eclipse 编辑器中,然后保存这个脚本的内容。
[*]单击 Eclipse 工具栏上的 SUB 访问 SketchUp Bridge 并把当前编辑器中的脚本发送给 SketchUp 。也可以用快捷键 Ctrl+Shift+Space 来完成这个步骤。
[*]打开 SketchUp 并放大,应该可以看到同样的加工好了的图形,如图 5 所示。
至此,SketchUp-Eclipse 环境应该已经建好,而且,您对 SketchUp 绘图也应该有了一个基本的了解。接下来我们将更深入地研究 Ruby 语言和 SketchUp 脚本中的代码。


http://new.51cto.com/files/uploadimg/20090603/1631260.gif

结束语Google 的 SketchUp 应用程序虽然很容易使用和理解,但这并不意味着它的特性有限。 SketchUp 提供了大量的功能,用于模块化设计、控制设计的外观及几何形状。 SketchUp 最重要的特点之一就是它的脚本解释器,它可以执行用来创建、修改及删除一个 SketchUp 设计的各个方面的 Ruby 脚本。虽然 SketchUp 提供了脚本解释器,但它却没有提供编辑器,这也是为什么要用 Eclipse 的原因。在将 Eclipse 与 SketchUp 交互之前,需要下载 SketchUp Bridge 。这个应用程序包含三个文件,如果放置正确,这三个文件能够让您在 SketchUp 控制台窗口外执行 SketchUp 脚本。接下来,您需要在 Eclips 内下载和安装 SketchUp SDK 。这个简单的 SDK 让您只需单击一下按钮就能在 SketchUp 中编辑并执行这些脚本。


maiqi816 发表于 2013-5-31 16:01:30

非常不错的

duotu007 发表于 2013-7-20 10:55:40

谢谢版主翻译,很好的文章。

ngc 发表于 2013-10-5 12:02:23

skp确实很强大,现在已经算是设计师的专用了,现在也有很多配套的插件,使用起来很方便,其实很多行业都可以使用,使用简单、方便、直观

ghoust 发表于 2013-10-25 11:07:58

哇噻,没想到老大的SU这么厉害。研究的这么清楚了。今年上半年我也在学习SU,非常容易上手,而且使用不会觉得枯燥。插件好像现在还很少,我只装了个渲染插件。如果能针对特定的人群开发一个外挂,我觉得还不错。比如室内设计的。

ggoop 发表于 2017-2-10 05:00:07

感谢分享!

logithelei 发表于 2017-2-22 16:44:53

啥也不说了,感谢楼主分享哇!

byqzhz 发表于 2018-3-20 08:03:53

感谢分享!            
页: [1]
查看完整版本: 用SketchUp和Eclipse进行3-D建模(1)