18handle手柄

下载项目

先决条件

  • CityEngine 2015.0或更高版本

本教程适用于希望为其模型添加句柄的CGA编写者。句柄提供了一种从3D视口中编辑CGA属性的方法。这简化了编辑模型,并提供了属性将控制的可视提示。

风车把手

第1部分:基本线性句柄

在我们开始创建句柄之前,让我们执行以下操作:

  1. 打开教程数据中的部分1.cej
  2. 在场景中生成模型。
  3. 选择立方体模型,并尝试使用属性height,width,depth和offset来了解它们的行为。
  4. 打开rules / cube.cga规则文件。

创建一个高度手柄

接下来,我们将为多维数据集的高度创建一个句柄。

  1. 在height属性中添加注释:
    @Handle(shape=Cube)
    attr height = 10
    

    这会添加一个控件,它控制多维数据集的高度,位于规则Cube的作用域输入上。

  2. 选择多维数据集模型,然后单击“ 形状” >“ 生成”以显示句柄来重新生成

    高度处理

    高度处理标签

  3. 缩放视图。手柄不再能够在模型外部保持其位置,并且放置在模型上。

    高度处理模型

制作宽度手柄

现在我们将为多维数据集的宽度创建第二个句柄。

  1. 在width属性中添加注释:
    @Handle(shape=Cube, axis=x, skin=sphere, color="#6666ff")
    attr width = 10
    

    这会将手柄连接到相同的形状,Cube,还会使用一些其他参数来自定义其位置和外观:

    • axis = x指定句柄的方向应相对于Cube范围在x方向上。
    • skin = sphere将橙色箭头更改为球体。
    • color =“#6666ff”将新球形手柄的颜色设置为蓝色。
  2. 再次生成模型,并观察新的手柄。

    宽度和高度处理

指定深度控制柄

继续,我们创建一个控制立方体深度的第三个手柄。

  1. 向深度属性添加注释:
    @Handle(shape=Cube, axis=z, skin=diameterArrow)
    attr depth = 10
    

    同样,我们设置axis参数以指定句柄所在的范围轴。模型的depth属性与widthheight属性的行为不同。它围绕中心点缩放立方体的深度。为了适应这种情况,我们使用参数skin = diameterArrow。这将创建一个具有不同拖动行为的手柄,以及两个橙色箭头,这两个箭头都可用于更改立方体模型的深度。

    高度,宽度和深度处理

  2. 旋转视图。随着视图旋转,手柄避开模型和彼此。

创建偏移句柄

对于最终参数offsetX,我们将创建一个在视图更改时不移动的句柄。

  1. 添加以下注释:
    @Handle(shape=ShapeForHandleOnly, axis=x, reference=origin, slip=inside)
    attr offsetX = 5
    

    我们将此句柄附加到仅为此句柄创建的“虚拟”范围。参数slip = inside 请求句柄位于模型轮廓内,而不随视点移动。通常情况下,手柄可能出现在给定轴方向的任何四个示波器边缘上; 但是,reference = origin会使手柄仅出现在与示波器原点相邻的边缘上。

  2. 编辑此新句柄,使其触及多维数据集的中心:
    @Handle(shape=ShapeForHandleOnly, axis=x, reference=origin, slip=inside, translate={0,0.5,0})
    attr offsetX = 5
    

    翻译=参数移动相对于当前范围的句柄。参数{0,0.5,0}将手柄移动0.5倍于y方向(up)的范围-y比例(高度)。

    固定手柄

第2部分:高级线性句柄

接下来,我们将使用更复杂的风车模型。要开始使用,请执行以下操作:

  1. 打开教程数据中的部分2.cej
  2. 生成模型,并尝试不同的属性。
  3. 打开rules / windmill.cga规则文件。

我们可以看到属性控制着各种不同的特征,其中一些是圆柱形的,还有一些是重复的。在这里,我们将学习如何为这种几何体添加句柄。

创建一个基本的风车手柄

在 本教程的第1部分中,您为长方体形状添加了句柄。移动视点时,手柄会捕捉到与多维数据集的面相同的平面。圆柱形风车对象也是如此。

  1. 添加注释以创建基本句柄:
    @Handle(shape=UnderRoof)
    @Range(3, 100)
    attr height = 7
    

    当我们旋转视图时,我们注意到这个句柄不是很有效。当视图旋转时,它会在UnderRoof范围的角落之间跳转。由于范围较大且形状与建筑物不同,因此难以遵循模型与手柄之间的关联。

  2. 编辑注释以创建风车的有效手柄。
    @Handle(shape=UnderRoof, reference=center, slip=screen)
    @Range(3, 100)
    attr height = 7
    

    这里,参数reference = center将句柄附加到范围的中心(有关其他可用参考位置的详细信息,请参阅CGA文档)。slip =定义手柄移出模型的方向。在这种情况下,slip = screen指定它在2D屏幕上与其自身平行移动。由此产生的手柄运动更加平滑和清晰。

添加半径控制柄

我们可以继续添加两个手柄来控制屏幕顶部和底部的风车半径。

  1. 添加注释以创建半径控制柄:
    @Handle(shape=UnderRoof, reference=radial, align=bottomLeft)
    @Range(1.5, 9)
    attr bottomRadius = 2
    
    @Handle(shape=UnderRoof, reference=radial, align=topLeft)
    @Range(1.0,5.1)
    attr topRadius = 1
    
  2. 旋转视图。

    带半径手柄的风车

    当我们围绕模型旋转视图时,我们注意到两个新手柄适合于模型的几何体。reference =径向位置用于测量圆柱半径的手柄; align =给出屏幕上句柄的首选位置。使用对齐可确保每个手柄的屏幕位置一致。否则,bottomRadius手柄可能会显示在模型的顶部。

创建链柄

在许多模型中,单个属性会影响多个部分。在此风车示例中,bladeLength属性更改四个刀片中每个刀片的长度。

CityEngine将“链”这样的句柄组合在一起,并为每个属性显示单个链。

  1. bladeLength属性添加句柄注释:
    @Handle(shape=Blade, axis=x, reference=origin)
    attr bladeLength = height * 0.6
    

    根据视图方向,可以显示不同的手柄链。在此示例中,CityEngine将显示风车叶片的两个手柄链:

    风车与链柄

  2. 使用参数repeat = none关闭链行为。
    @Handle(shape=Blade, axis=x, reference=origin, repeat=none)
    attr bladeLength = height * 0.6
    

    没有链柄的风车

添加处理门和窗户

windowScale属性是一个涉及多一点和操纵窗户和门的大小。

  1. 创建一个控制属性的句柄。
    @Handle(shape=Windoor, axis=y)
    @Range(0.1,1.5)
    attr windowScale = 1
    

    窗户和门把手

    关于windowScale属性的另一个观察是缩放因子的值与窗口的大小不同。此外,每个窗户或门具有与其相关联的不同尺寸的范围。CityEngine在重复元素上放置一系列句柄,并缩放每个句柄的长度以匹配每个范围。拖动这样的线性句柄(具有与句柄长度不同的值)将在括号中显示实际长度。

  2. 将鼠标悬停在手柄上,直到它突出显示它所连接的范围。所有句柄类型都会出现此问题。这里的Windoor范围是橙色的。

    彩色手柄

  3. 从不同的视图方向探索手柄位置。

    风车显示所有句柄

第3部分:其他类型的手柄

在本教程的最后一部分中,我们将介绍颜色,切换和旋转手柄,以及通过删除范围来隐藏句柄。请执行下列操作:

  1. 打开教程数据中的部分3.cej
  2. 在场景中生成模型。
  3. 打开rules / biped.cga规则文件。

在本教程的第1部分第2部分中,我们使用了线性句柄。除了这些类型,句柄还可以控制其他类型的属性。让我们添加一个位于模型头部上方的颜色手柄。

将范围添加到模型中

使用不熟悉的CGA代码时,使用“ 模型层次结构”来探索可用范围通常很有用。

  1. 单击“ 窗口” >“ 显示模型层次结构”,然后 从编辑工具栏中选择“ 检查模型” 按钮, 访问“ 模型层次结构”。 检查模型按钮
  2. 单击模型的头部以在“ 模型层次结构”中显示范围。
  3. 浏览层次结构以找到具有唯一名称的适当范围。在这里,HeadHandle似乎是我们处理好的范围,因为X,因为它是在几个不同的地方使用的是非常棘手。
  4. 将鼠标悬停在层次结构中的HeadHandle上。它表明该规则需要一个参数。

    检查模型

  5. 单击“ 检查模型” 按钮以退出检查模型模式。
  6. 关闭“ 模型层次结构”选项卡。

创建一个颜色手柄

现在我们将把句柄添加到我们找到的HeadHandle范围。

  1. 添加以下注释:
    @Handle(type=color, shape=HeadHandle^1, axis=y, reference=center)
    attr color = "#888888"
    

    我们使用其规则名称和规则所采用的参数数来标识范围,在这种情况下,shape = HeadHandle ^ 1。在前面的示例中,我们已经能够排除这个参数数量标识符,因为它已经为零。color属性是一个字符串,通过使用参数type = color,我们可以在视口中编辑它。颜色,切换和选择器手柄的行为与线性手柄的行为不同:axis = y指定手柄可以在y(向上)方向上移动,而reference = center将手柄附加到范围中心的单个点。

  2. 生成模型。它现在有一个颜色手柄(下方,左侧),如果您拖动新手柄,则会出现一个色轮(下方,右侧),可用于编辑颜色属性。

    颜色手柄

    在三角形内拖动会改变颜色的饱和度和亮度,而在大圆圈中拖动会选择色调。以前选择的颜色在较小的圆圈中出现在边缘周围。

控制处理可见性

可以通过控制规则中范围的生成来隐藏句柄。此模型的每个臂和腿都由单个导入的规则实例创建。每个导入的实例都有三个参数来控制肢体的位置。然而,这12个手柄给模型增添了许多令人困惑的混乱。因此,我们将这些句柄附加到可选范围,这些范围仅在布尔属性(showRotateHandles)为true时创建。

  1. 创建一个type = toggle句柄来控制这个属性并显示肢体控制句柄:
    @Handle(type=toggle, shape=HeadHandle^1, slip=screen, align=right)
    attr showRotateHandles = false
    

    这次我们使用slip = screenalign = right将手柄定位在球形头右侧的一致位置。

  2. 通过单击或单击并向上和向下拖动来控制切换手柄。

    使用句柄将showRotateHandles设置为true会显示每个肢体的旋转手柄。这些可以用来根据需要建立我们人的模型。

默认情况下,旋转手柄不会随着视图方向的变化而移动。但是,从侧面看时,它们是不可见的。围绕模型旋转视点通常可以更好地控制手柄。我们可以看到我们模型上的所有句柄,甚至新手用户也能够理解这些属性。所以玩得开心!探索并发现手柄的所有可能性,以及如何将它们应用到您的模型中。

Was this article helpful?