×
热门分类
微信扫码登陆

QQ登录

只需一步,快速开始

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

您需要 登录 才可以下载或查看,没有帐号?立即加入SketchUp吧! 微信扫码登陆

x
转自:http://blog.csdn.net/article/details/38611081

在Sketchup中,move工具使用的非常广泛,


                               
登录/注册后可看大图
,可以移动、拉伸和复制几何体,也可以用来旋转组件。举一个简单地例子。

我们要做一个建筑物的尖顶,如下图所示,就是使用move工具实现的。


                               
登录/注册后可看大图
            

                               
登录/注册后可看大图

    接下来我们就要学习如何使用ruby实现这样的功能。

    实体类(Entities)提供了transform_entities方法来实现move的功能,transform_entities需要两个参数,一个或一系列实体对象和一个变换对象(Transformation)。

    例如,上图中屋顶中间的线我们叫做roof_line,下面的代码实现把这条线沿着Z轴网上移动5个单位(英寸)。


[ruby] view plaincopy


  • ents = Sketchup.active_model.entities  
  • tr = Geom::Transformation.translation [0, 0, 5]  
  • ents.transform_entities tr, roof_line  

    在第二行,前缀“Geom::”是必须的,这是因为Transformation类包含于Geom模型,这在接下来的章节中会介绍它是如何使用的。在这个例子中,tr是一个transformation对象,用于把roof_line从一个位置移动到另一个位置。

    transformation可以实现平移、旋转缩放

    1、平移

    在讲平移之前,我们要先了解一个概念,平移向量。我们在高中学习过,从一个点移动到另一个点,如从点(1,2,3)移动到点(3,4,5),只需要知道起点和移动向量就能到达终点,这个移动向量是用终点坐标减去起点坐标,即向量(2,2,2)。这里的平移向量类似于移动向量。

    SketchUp API提供了三种方法来实现平移动能。


  •     调用Geom::Transformation.new
  •     调用Geom::Transformation.translation
  •     使用平移向量本身。

    下面用一个例子演示如何使用这三种方法,这个例子是将一个面移动三次,首先沿着X轴正向移动4个单位,然后Y轴正向6个单位,最后沿X轴负向移动3个单位。


[ruby] view plaincopy


  • # 创建一个正方形面  
  • ents = Sketchup.active_model.entities  
  • tran_face = ents.add_face [-1, -1, 0],  
  • [-1, 1, 0], [1, 1, 0], [1, -1, 0]  
  • # T沿着X轴正向移动4个单位  
  • t = Geom::Transformation.new [4, 0, 0]  
  • ents.transform_entities t, tran_face  
  • # Y轴正向6个单位  
  • t = Geom::Transformation.new [0, 6, 0]  
  • ents.transform_entities t, tran_face  
  • # X轴负向移动3个单位  
  • ents.transform_entities [-3, 0, 0], tran_face  


    移动路径如下图所示。

   


                               
登录/注册后可看大图

   2、旋转

    去旋转一个图形,我们需要三个参数。


  • 旋转起源点(点)
  • 旋转轴(向量)
  • 旋转角度(浮点型)

看下图更有助于理解。


                               
登录/注册后可看大图

    系统提供两种方法用Transformation对象实现旋转功能


  • 调用Geom::Transformation.new 和起源点、旋转轴和角度参数
  • 调用Geom::Transformation.rotation和起源点、旋转轴和角度参数

    例如,要实现上图把圆围绕(0,0,0)和Z轴旋转30度,代码写为:

        tr = Geom::Transformation.new [0, 0, 0], [0, 0, 1], 30.degrees
        tr = Geom::Transformation.rotation [0, 0, 0], [0, 0, 1], 30.degrees

另外需要注意的是如果旋转角度是正值,则按‘逆时钟方向’旋转,如果是负值,就按顺时针方向旋转。


    3、缩放
    在Sketchup中,缩放工具


                               
登录/注册后可看大图
可以改变图形的大小形状和改变图形的位置。在用代码实现时,我们创建的缩放Transformation对象即会缩放图形的大小也会缩放相对于默认点(0,0,0)的距离,例如下面的代码缩小了图形的大小,也减小了到(0,0,0)的距离。


[ruby] view plaincopy


  • #创建一个正方形  
  • ents = Sketchup.active_model.entities  
  •   
  • tran_face = ents.add_face [-1, -1, 0],  
  • [-1, 1, 0], [1, 1, 0], [1, -1, 0]  
  • #沿X轴正向移动4个单位  
  • t = Geom::Transformation.new [4, 0, 0]  
  •   
  • ents.transform_entities t, tran_face  
  • #把正方形缩放为原来的一半,即改变形状也改变距原点的长度  
  • t = Geom::Transformation.new 0.5  
  •   
  • ents.transform_entities t, tran_face  


    效果如下图所示


                               
登录/注册后可看大图

    实现缩放功能还可以用如下代码,效果跟上面的一样。


[ruby] view plaincopy


  • ents = Sketchup.active_model.entities  
  • t = Geom::Transformation.scaling 0.5  
  • ents.transform_entities t, shape  

    除此之外,我们还可以改变默认缩放的源点,即上面的(0,0,0)。例如,下面的代码实现把图形放大2倍并把源点变为(5,5,5),相信在以后的应用中,这种写法会比较常见。

[ruby] view plaincopy


  • t = Geom::Transformation.scaling [5, 5, 5], 2  


    上面介绍了改变源点进行缩放,下面我们介绍一下如何基于坐标轴进行缩放。

    为实现基于坐标轴缩放,需要调用Transformation.scaling结合三个参数,即X,Y,Z所缩放值,例如,下面代码实现减小X轴的一半,扩大Y轴的3倍,保持Z轴不变。


[ruby] view plaincopy


  • t = Geom::Transformation.scaling 0.5, 3, 1  


示意图为


                               
登录/注册后可看大图

scaling最后一种用法是结合以上三种,即,改变源点和x,y,z的缩放值,例如,设置源点为(5,5,5),相对于源点,实现减小X轴的一半,扩大Y轴的3倍,保持Z轴不变代码如下。

t = Geom::Transformation.scaling [5, 5, 5], 0.5, 3, 1

总结:

在本节中我们实现了平移、旋转和缩放功能,下一节中我将简单介绍将三种方法结合使用。


赞赏

1

查看全部评分

SUAPP3.4

精彩评论

文明上网理性发言、请文明用语

4

主题

2468

帖子

15

红宝石

SU游学(等级2)

Rank: 2

红宝石
15

忠实粉丝社区微博达人积极讨论奖

dai025dai 2014-8-21 00:29:08
只能云里雾里给赞一个    太高端了些~~
高级模式
您需要登录后才可以回帖 登录 | 立即加入SketchUp吧! 微信扫码登陆

本版积分规则

梦回天阙

SU入学(等级1)

  • 主题

  • 吧币

  • 红宝石

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 客服中心 搜索 官方QQ群
关于我们/小黑屋/手机app/国土人/SketchUp吧 /京ICP备16008035号/