找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6941|回复: 7

[分享] 用SketchUp和Eclipse进行3-D建模(1)

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-6 22:00:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


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




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

                               
登录/注册后可看大图
常用缩略词
  • 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

1631261.jpg

与 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 的基础工具栏

1631262.jpg

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


图 3a. 简单的 SketchUp 图形

1631263.jpg

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 [0,0,0], [9,0,0], [9,9,0], [0,9,0]face.pushpull -9

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


图 4. SketchUp Ruby Console 窗口

1631264.jpg

现在如果看一下 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. 示例图形

1631265.jpg



                               
登录/注册后可看大图

SketchUp Bridge


                               
登录/注册后可看大图
对 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 Bridge

SketchUp 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 设计。




                               
登录/注册后可看大图

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 SDK

SketchUp 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

16312611.jpg

如果您已经很熟悉 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 脚本中的代码。




                               
登录/注册后可看大图

结束语

Google 的 SketchUp 应用程序虽然很容易使用和理解,但这并不意味着它的特性有限。 SketchUp 提供了大量的功能,用于模块化设计、控制设计的外观及几何形状。 SketchUp 最重要的特点之一就是它的脚本解释器,它可以执行用来创建、修改及删除一个 SketchUp 设计的各个方面的 Ruby 脚本。虽然 SketchUp 提供了脚本解释器,但它却没有提供编辑器,这也是为什么要用 Eclipse 的原因。

在将 Eclipse 与 SketchUp 交互之前,需要下载 SketchUp Bridge 。这个应用程序包含三个文件,如果放置正确,这三个文件能够让您在 SketchUp 控制台窗口外执行 SketchUp 脚本。接下来,您需要在 Eclips 内下载和安装 SketchUp SDK 。这个简单的 SDK 让您只需单击一下按钮就能在 SketchUp 中编辑并执行这些脚本。




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-31 16:01:30 | 显示全部楼层
非常不错的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-20 10:55:40 | 显示全部楼层
谢谢版主翻译,很好的文章。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 828个

财富等级: 财运亨通

发表于 2013-10-5 12:02:23 | 显示全部楼层
skp确实很强大,现在已经算是设计师的专用了,现在也有很多配套的插件,使用起来很方便,其实很多行业都可以使用,使用简单、方便、直观
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-10-25 11:07:58 | 显示全部楼层
哇噻,没想到老大的SU这么厉害。研究的这么清楚了。今年上半年我也在学习SU,非常容易上手,而且使用不会觉得枯燥。插件好像现在还很少,我只装了个渲染插件。  如果能针对特定的人群开发一个外挂,我觉得还不错。比如室内设计的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 55个

财富等级: 招财进宝

发表于 2017-2-10 05:00:07 | 显示全部楼层
感谢分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 17个

财富等级: 恭喜发财

发表于 2017-2-22 16:44:53 | 显示全部楼层
啥也不说了,感谢楼主分享哇!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 69个

财富等级: 招财进宝

发表于 2018-3-20 08:03:53 | 显示全部楼层
感谢分享!            
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-21 20:44 , Processed in 0.366042 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表