setbackPerEdge 操作

CityEngine 2022.0    |

 

语法

  • setbackPerEdge(distance ) { selector operator operations | }
  • setbackPerEdge(distance, uvSet) { selector operator operations | }

参数

  1. distance浮点型
    用于指定退缩距离的表达式。 会针对每个面边进行计算。
  2. uvSet, selector, operator, operations
    所有其他参数与 setback 操作的相同。

说明

setbackPerEdge 操作类似于 setback 操作。 唯一的区别是会多次计算退缩 distance 并且单独针对每个面边进行计算。 将单独为每个面考虑共享边。 因此,可以为每条边设置不同的距离。

计算 distance 时,当前形状等于对应的面边组件之一。 更确切的说,当前几何、枢轴和范围等于 comp 操作的面边组件(compSelector 设置为 fe)。 此外,也可以访问 comp 属性

注:

setbackPerEdge(distance) { selector operator operations | … }

是以下内容的快捷方式:

setback(comp(fe) { all : distance } ) { selector operator operations | … }

这意味着在内部数组通过 comp 函数构造并传递到 setback 操作。

相关内容

示例

setback 与 setbackPerEdge

这一简单示例介绍了 setbacksetbackPerEdge 之间的差异。 对于 setback,距离仅计算一次并且所有边分配的距离相同,而 setbackPerEdge 会为每条边重新计算距离。

Lot1 --> setback(rand(5))
          { front = Red | back = Blue | left = Green }

Lot2 --> setbackPerEdge(rand(5))
          { front = Red | back = Blue | left = Green }
GUID-29178841-CC26-47DC-9C3F-69E9FD696BCF-web
 

使用 comp 形状属性

comp.index 属性用于从有序的浮点数组中提取距离。 请注意,将按照面-边顺序建立索引(前几条边以橙色突出显示)。 第一个距离应用于第一个面(左)的第一条边,第 5 个距离应用于第二个面(右)的第一条边。 另请注意,dist 是一个会多次计算的函数。 如果 distattrconst,将仅在规则开始时对其计算一次,其中 comp.index 为 -1。

const dists = [3,2,1,0,0,1,2,3]

dist = dists[comp.index]

Lot --> setbackPerEdge(dist) { all = Green }

可通过以下各项实现相同的结果:

Lot --> setback(comp(fe){all:dist}) { all = Green }
Lot --> setback(dists)              { all = Green }
GUID-6457083A-EE24-4122-A110-46ABBDDC4CF6-web
 

使用 comp 形状几何

退缩将相对于边长度应用。

Lot --> setbackPerEdge(scope.sx / 7.5) { all = Green }
GUID-2DED7B0C-267C-44EA-9AD6-0954D6DF7AC0-web

也可以使用上下文和遮挡查询指定距离。

dist = case minimumDistance(inter, "Block") < 3 : 2
       else : 0
         
Lot1 --> setbackPerEdge(dist)
           { all = Green | remainder = extrude(1) Blue }
GUID-F8A92408-A880-4FED-9C9E-2EA6D8B8AD07-web

在此示例中,会对边属性进行采样并用于设置距离。

dist(orientation) = case orientation == "park"   : 1
                    case orientation == "street" : 7
                    case orientation == "lot"    : 0
                    case orientation == "back"   : 3
                    else                         : 0

dist = dist(edgeAttr.getString("orientation"))

Lot --> setbackPerEdge(dist) { all = Green }
GUID-61C4DD4A-BC9C-4D16-824D-A42FECD469A0-web
 

setbackPerEdge 作为 setback

此示例演示了 setbackPerEdge 在内部为每条边计算距离,构造数组并将其传递给 setback。 尽管 front 选择器仅选择一条边,但是 debug 函数会计算 4 次,每条边对应一次。

debug = print(comp.index+5)

Lot --> setbackPerEdge(debug) { front = Green }
GUID-AECFA7AB-3DD6-4615-AB4B-198D74C713F7-web