变换

可以使用以下变换来修改当前形状的范围:

  • t(tx, ty, tz) - 沿范围轴平移范围的位置。
  • r(rx, ry, rz) - 通过将 rx, ryrz 添加到范围的旋转矢量 scope.r 来使范围绕其原点旋转。 还可以通过编写 r(scopeCenter, rx, ry, rz) 来围绕范围中心旋转。
  • s(sx, sy, sz) - 将范围的大小设置为 sx, sysz 的值。 因此,不同于平移和旋转操作,系统不会添加参数值而是将其覆盖。 此外请注意,大小操作会将大小设置为绝对值(例如米或码),且不会执行相关缩放。
  • center(axes) — 根据 axes 平移当前形状的范围,以使其中心对应于形状堆栈上先前形状范围的中心。 后者将确定在哪个(形状堆栈上先前形状的)轴方向执行平移。

相关运算符

对于 t()s() 运算,可以使用运算符 ' 方便地将绝对值 tx,ty,tzsx,sy,sz 变换为与范围大小相关的值。

s('0.5, '1, '1)
t('2, 0, '3)

这等同于:

s(0.5*scope.sx, 1*scope.sy, 1*scope.sz)
t(2*scope.sx, 0*scope.sy, 3*scope.sz)

示例

设置大小

在全部三个尺寸中,拉伸的 Lot 都将设置为 5 个单位的绝对大小。

Lot --> extrude(10)
        s(5, 5, 5)
在三个尺寸中,拉伸的地块都将设置为 5 个单位的绝对大小

相关调整大小和居中

首先通过将 s() 运算与相关运算符 ' 结合使用来缩小范围,然后使范围(相对于 Lot 形状的范围)居中,最后将其拉伸为 3D 几何。

Lot --> s('0.8, '1, '0.8) 
        center(xz) 
        extrude(20)
缩小范围,然后将其拉伸为 3D 几何

旋转和居中

系统首先围绕每个分割形状的范围原点旋转该分割形状,然后使其居中。

Lot -->
   extrude(18)
   split(y) { 
      2 : r(0, 360*split.index/split.total, 0)
          center(xyz) X.
   }*

使用

r(scopeCenter, 0, 360*split.index/split.total, 0)

代替 r()center() 序列可以提供相同的结果。

系统围绕每个分割形状的范围原点旋转该分割形状,然后使其居中。

平移 - 旋转串联

这就是我们的开始形状。

A --> primitiveCube()
开始形状

首先沿 x 轴平移两个单位。

A --> primitiveCube()
      t(2, 0, 0)
沿 x 轴平移两个单位

然后绕 y 轴旋转 30 度。

A --> primitiveCube() 
      t(2, 0, 0) 
      r(0, 30, 0)
绕 y 轴旋转 30 度

然后沿 x 轴再平移 2 个单位:

  • 平移将沿范围的 x 轴进行,即旋转会更改全局平移方向。
  • 将使用相关运算符 ' - 此时该运算符不会引起任何改变,因为 scope.sx 为 1

A --> primitiveCube() 
      t(2, 0, 0) 
      r(0, 30, 0) 
      t('2, 0, 0)
沿 x 轴平移 2 个单位

有关更多详细信息,请参阅 CGA 参考中的 t 运算s 运算r 运算中心运算


在本主题中
  1. 相关运算符
  2. 示例