SketchUp辅助风景园林设计技术开发
2022-07-23周丁丁
周丁丁
(博兴县公用事业服务中心,滨州 256500)
0 引言
当今,在风景园林学科中,不管以图片的方式还是其他多媒体(如虚拟现实)的方式展示设计方案,三维模型的制作一般都是必不可少的环节。在三维模型的制作中,Trimble SketchUp(文中简称SketchUp)弥补了项目可视化的不足,以“人人可操作的3D软件”的优势得到了从业者广泛的应用。
园林植物是风景园林的重要组成部分,对于三维模型中园林植物的制作,在SketchUp中通常是运用以下两种方法:
(1)将树制作成SketchUp中的组件,再将这个组件通过复制或者类似复制的阵列操作来实现。
(2)通过SketchUp与其他软件的文件交换,通常是在AutoCAD中将树制作成一个块,并将这个块通过复制或者阵列再导入SketchUp中,将这个块(SketchUp跟AutoCAD的文件交换中,将AutoCAD中的块转化为SketchUp中的组件)通过SketchUp中的组件替换功能实现。
这两种方法中,其他的树其底层都是通过对同一棵树的复制来绘制的,所以形成的结果就是同一种树的大小和角度都是相同的(见图1),这显然是不符合自然规律的。
图1 所有的树都同样大小
如果保持这样的结果,将使三维模型和后期以三维模型为基础生成的其他文件看起来很不自然。为了让三维模型看起来更自然,就需要挨个调整每一棵树的大小,由于园林中的树通常很多(尤其是绿化占主要内容的项目),而且SketchUp本身自带的缩放或旋转工具效率不高,所以这就意味着较大的工作量和较低的工作效率。
1 技术手段
为了使运用SketchUp制作的三维模型更加自然,提高劳动效率,降低劳动强度,本文开发了一款SketchUp插件,其可以一次性地按照用户设定的缩放和旋转边界,以组件的原点为基准对所选组件实现批量随机缩放,从而解决上述的问题,使模型看起来更自然。
插件运用Ruby语言开发,Ruby也是SketchUp命令的底层语言。
插件通过each方法遍历用户选择的每一个组件,并使其以原点为原点进行缩放/旋转:
2 技术人性化设计
为方便用户的使用,插件在算法中过滤掉了用户选择的图元中的其它元素,使得缩放/旋转变换只对组件起作用:
为了在用户填反最大值/最小值的情况下也能变换,插件采用自动将用户实际填入的值中大的作为最大值,小的作为最小值的处理方案(但仍会提示用户检查是否有其他错误):
#不管用户如何填写,最大值总是取大的,最小值总是取小的。
3 技术的使用方法和使用效果
3.1 插件的运行环境
经测试,插件适合以下操作系统版本和SketchUp版本的任意组合。
操作系统版本:Windows7、Windows10
SketchUp版本:SketchUp8、SketchUp2013-2021
在硬件方面,SketchUp8及以上版本的硬件都满足插件的运行需求。
3.2 插件的使用方法和效果
插件的名称为“随机缩放/旋转”,通过Random_Scale_and_Rotation.rbz的rbz文件提供。
在SketchUp中,依次点击菜单栏扩展程序管理器→安装扩展程序→根据用户的存储位置找到程序→打开即可将插件安装到SketchUp中(见图2)。
图2 插件的安装方法
插件安装后位于工具栏中,默认是隐藏的,使用时依次点击视图→工具栏→找到随机缩放/旋转并将前面复选框中的√勾选(或者在任意工具栏的空白处右击,在弹出的菜单中找到随机缩放/旋转勾选)即可显示插件。插件的图标为两棵树。
当用户的选择集中不包含组件时,图标是不可用状态(grey),当用户的选择集中包含组件时,插件即自动激活(enable)。用户点击插件图标,即可实现对所选组件的随机缩放/旋转。
用户点击图标,即弹出输入缩放/旋转边界输入框,让用户输入缩放/旋转的边界,缩放比例以百分比为单位,旋转角度以角度为单位,默认缩放比例为80%~120%,旋转角度为0°~360°(见图3)。
图3 用户可在输入框中输入缩放/旋转上下界
用户输入数值后点击确定按钮,即按照输入的数值随机缩放/旋转用户选择的组件(见图4)。
图4 树随机批量缩放/旋转效果
插件的第1个易用性在于插件在进行随机缩放/旋转的过程中过滤掉了用户选择集中的其他图元,只对组件起作用,由于SketchUp的选择工具本身比较难用,这样就避免了用户误将其它图元选择入选择集时产生误操作的情况。如在图中,若用户的选择集中还包含了后边的建筑、花池、草地、路,它们分别是SketchUp中的组、面、线图元——但都不是组件图元,插件并不对它们起作用,而只对组件图元树进行如图4所示的随机旋转或/和缩放。
需要注意的是,插件是忽略角度的周期性的,即插件认为10°跟370°是不同的角度,所以用户的旋转角度界限输入为0°~10°和0°~370°时的效果是不同的,前者只能让组件在0°~10°之间产生一个微小的随机旋转,后者则能产生超过一个圆周的随机旋转。
另外,根据SketchUp的算法,旋转只对没有勾选“总是朝向相机”选项的组件起作用,对于勾选了“总是朝向相机”的组件,不管怎么旋转,总是红原点蓝这个平面面向用户(见图5)。这不是插件的缺陷,而是SketchUp默认的算法,这也是符合日常行为逻辑的,如一个图片制成的面片树组件,我们总是希望这个图片面向着我们,这样看起来才像棵树,如果这个面转了,它就是一条线了(转90°的时候就只剩下一条线),这是我们所不希望的结果。
图5 旋转命令对勾选了“总是朝向相机”的组件不起作用
图4中的树就是一种总是朝向相机的组件,所以随机旋转在图4中并不起作用,图6中的树并不总是朝向相机,所以随机旋转对图6是起作用的。
图6 旋转命令对没有勾选“总是朝向相机”的组件起作用
若用户错误地将缩放/旋转的最小值和最大值写反了——即用户将最大值(最小值)填写成了最小值(最大值),插件会向用户提示并根据用户的选择执行忽略或者修改错误,这是插件的第2个易用性。
当用户将最大值和最小值填反时,插件会弹出消息框,提示用户填反了,并询问用户是否忽略错误,将用户填写的实际数值中的最大值和最小值作为最大值和最小值进行随机缩放/旋转,若用户选择是,插件将忽略用户的错误,自动按照用户实际填写数值中的最大值(最小值)作为缩放/旋转边界进行运算。若用户选择否,则返回输入框界面,让用户修改数值后提交。
插件的退出:插件可以在输入框界面点击关闭或者取消退出。
4 结语
插件可帮助实现园林三维模型的自然开发,但显而易见,其是针对SketchUp组件图元的一项操作,所以,它适合有组件此类变换需求的任何行业,如舞台场景、游戏设计、工业设计、建筑设计等。另外,对于当前的计算机系统或者编程语言,是不能产生真正意义的随机序列的,所以同样,插件对树的随机调整并不是真正意义上的随机——这并不是插件的缺陷,而是当前信息技术和计算机的发展水平。但显然,即使如此,对于我们关注视觉效果的三维模型来说已经足够了。