几何标签:基础知识

本部分将介绍几何标签的基本概念。

组件标签

标签是基于字符串的信息,直接存储在形状几何资产的拓扑组件上。 每个面、边和折点可以具有任意数量的标签。 其用途是从语义上标识几何的不同部分,例如在使用 comp 操作时。

标签是用于定义其名称的字符串。 示例:"Name"

标签等级

可以使用名称分隔符“.”(点)按等级对标签进行分组。 示例:"Facade.Front""Facade.Side"

标签内以点分隔的名称称为子标签

标签查询

标签查询是一个字符串,可能包含用于替换子标签的通配符。 存在两个通配符:

?(问号)

精确匹配 1 个子标签。 示例:"?.Front"

*(星号)

匹配 1 个或多个子标签。 示例:"Facade.*.Left"

基于等级分组,标签查询 "Facade" 不仅可匹配精确标签 "Facade",还可匹配带有附加子标签的标签,例如 "Facade.Front""Facade.TypeA.Side.Left"

相关内容

自动标签

所选几何创建操作将自动应用预定义标签。 这些标签可从语义上标识输出几何的不同部分。

某个操作应用的自动标签仍然可以访问,直到再次调用该操作并将其替换为新标签为止。

颜色

这些规则适用于在以下示例中使用的颜色。

Blue   --> color("#0399F5")
Green  --> color("#09DE1F")
Yellow --> color("#FADB19")
Purple --> color("#8D09DE")
Red    --> color("#FF360A")
Orange --> color("#FA9100")

操作在面上应用自动标签

面组件分为三种主要类型:底部、侧面和顶部。 底部组件对应于原始面,可以进一步将新侧面分类为内部或外部,具体取决于其是否从孔中发出。

拉伸

请参阅 extrude 操作。

Init --> 
    extrude(4)
    comp(f) { isTagged("extrude.bottom")     : Blue 
            | isTagged("extrude.side.outer") : Yellow
            | isTagged("extrude.side.inner") : Red
            | isTagged("extrude.top")        : Green }
自动标签拉伸

包络矩形

请参阅 envelope 操作。

Init --> 
    envelope(normal,4, 2.5, 45, 3, 45, 3.5, 50, 2, 50)
    comp(f) { isTagged("envelope.bottom")     : Blue 
            | isTagged("envelope.side.base")  : Yellow
            | isTagged("envelope.side.slope") : Orange
            | isTagged("envelope.side.inner") : Red
            | isTagged("envelope.top")        : Green }
自动标签包络矩形

锥化

请参阅 taper 操作。

Init --> 
    taper(4)
    comp(f) { isTagged("taper.bottom") : Blue 
            | isTagged("taper.side")   : Yellow }
自动标签锥化

屋顶

所有 roof 操作都应用相同的基本标签“roof”。

请参阅 roofGable 操作。

Init --> 
    roofGable(byHeight, 4)
    RoofAutoTags1

RoofAutoTags1 -->
    comp(f) { isTagged("roof.bottom") : Blue 
            | isTagged("roof.side")   : Yellow
            | isTagged("roof.top")    : Green }
自动标签 roofGable

请参阅 roofHip 操作。

Init --> 
    roofHip(byHeight, 4)
    RoofAutoTags1
自动标签 roofHip

请参阅 roofPryamid 操作。

Init --> 
    roofPyramid(byHeight, 4)
    RoofAutoTags1
自动标签 roofPyramid

roofRidgeroofShed 运算还会将侧分为内侧和外侧。

请参阅 roofRidge 操作。

Init --> 
    roofRidge(byHeight, 4)
    RoofAutoTags2

RoofAutoTags2 -->
    comp(f) { isTagged("roof.bottom")    : Blue 
            | isTagged("roof.side.outer"): Yellow
            | isTagged("roof.side.inner"): Red
            | isTagged("roof.top")       : Green }
自动标签 roofRidge

请参阅 roofShed 操作。

Init --> 
    roofShed(byHeight, 4)
    RoofAutoTags2
自动标签 roofShed

布尔运算

在布尔运算中,将在面和边上应用自动标签:面的标签依据其原始运算对象确定,同时会在新创建的相交边上应用自动标签。

在布尔运算中,将在面和边上应用自动标签

BoolAutoTags -->
    comp(f) { isTagged("bool.A")  : Blue 
            | isTagged("bool.B")  : Green  }
    comp(e) { isTagged("bool.cut"): Orange }


Cube   --> primitiveCube
Sphere --> t(0.3,0.3,0.3) primitiveSphere
Left   --> union { Cube | Sphere }
           BoolAutoTags

Middle --> subtract { Cube | Sphere }
           BoolAutoTags

Right  --> intersect { Cube | Sphere } 
           BoolAutoTags

请参阅 unionsubtractintersect 操作。

操作在边上应用自动标签

setback 操作及其变体 - setbackToAreasetbackPerEdgeshapeLUOsplitAndSetbackPerimeter - 可以使用相同的基础“setback”自动标记边组件。

形状

Init --> 
    setback(4) { front: ShapeAutoTags }

ShapeAutoTags -->
    comp(e) { isTagged("setback.front"): Blue
            | isTagged("setback.side") : Yellow
            | isTagged("setback.back") : Green }
自动标签形状

剩余部分

Init --> 
    setback(4) { front    : NIL
               | remainder: RemainderAutoTags }

RemainderAutoTags -->
    comp(e) { isTagged("setback.side")     : Yellow
            | isTagged("setback.back")     : Green 
            | isTagged("setback.remainder"): Purple }
自动标签剩余部分

标签传播

几何修改操作将保留现有组件上的标签,并根据一致的规则将标签传播到新构造的组件(如果适用)。

几何细分

当分割几何时,将保留已切割的现有边和面组件上的标签。 新组件(例如用于闭合切割体积的新面)没有初始标签。

设置:通过 roofGable 操作对面进行标记,而使用 tag 操作添加边和折点标签。

Init --> 
    roofGable(byHeight, 4)
    tag("EdgeTag", edges)
    tag("VertexTag", vertices)
    VisualizeTags

VisualizeTags -->
    RoofAutoTags1
    comp(e) { isTagged("EdgeTag")  : Orange }
    comp(v) { isTagged("VertexTag"): Purple }

后续操作(例如,当使用分割操作时)将保留这些标签。

Init --> 
    roofGable(byHeight, 4)
    tag("EdgeTag", edges)
    tag("VertexTag", vertices)
    split(x) { '0.25: t(0,split.index,0) VisualizeTags }*
通过 roofGable 操作标记的面和通过 tag 操作标记的折点

面标签传播

在现有面上构造的新面可获取其源面的标签。

roofGable 操作应用的自动标签将自动传播到 extrude 操作构建的新面。

注:每个面现在均具有拉伸和屋顶自动标签。

Init --> 
    roofGable(byHeight, 4)
    extrude(1)
    RoofAutoTags1
标签传播 - 面

边和折点标签传播

在所有几何修改操作(例如,extrudeoffset)中,边和折点传播遵循一个简单的规则:从边“发出”的任何新面均会继承该边的标签;从折点“发出”的任何新边均会继承该折点的标签。

设置:此示例将减去两个四边形,每个四边形都具有通过 tag 操作应用的不同的边和折点标签。 VisualizeTags 规则将使用geometry.hashTags,根据每个组件的标签为其着色。

注:请避免使用 isTagged 选择器(参见 comp),因为其同样匹配继承的标签(例如,选择标记面的未标记边),而 geometa.hasTags 会将测试限制为已检查组件。

Init --> subtract { A | B }
         VisualizeTags

A --> tag("e.A", edges)
      tag("v.A", vertices)

B --> tag("e.B", edges)
      tag("v.B", vertices)
      t('0.5, 0, '0.5)

VisualizeTags -->
    comp(f) { geometry.hasTags("e.A", faces): Green
            | geometry.hasTags("e.B", faces): Blue 
            | all                           : White. }

    comp(e) { geometry.hasTags("e.A", edges): Green 
            | geometry.hasTags("e.B", edges): Blue
            | geometry.hasTags("v.A", edges): Orange 
            | geometry.hasTags("v.B", edges): Purple }

    comp(v) { geometry.hasTags("v.A", vertices): Orange
            | geometry.hasTags("v.B", vertices): Purple }
边和折点标签传播设置

示例 extrude 操作。

Init --> 
    subtract { A | B }
    extrude(4)
    VisualizeTags

示例 offset 操作。

Init --> 
    subtract { A | B }
    offset(-2)
    VisualizeTags

示例 taper 操作。

Init --> 
    subtract { A | B }
    taper(4)
    VisualizeTags

有关更多示例,另请参阅 setTagsFromEdgeAttrs 操作。

几何清理

cleanupGeometry 操作将保留现有标签。 这意味着:

  • 将保留标记边以及具有不同标签的共面之间的边。
  • 将保留标记折点以及具有不同标签的边之间的共线折点。

继续以上示例:由于存在标签,使用 cleanupGeometry 操作合并共面的面没有任何效果。

Init --> 
    subtract { A | B }
    offset(-2)
    Cleanup

Cleanup -->
    cleanupGeometry(edges, 0)
    VisualizeTags

使用 deleteTags 操作从内部边移除传播标签后,将合并具有相同标签的相邻面。

Init --> 
    subtract { A | B }
    offset(-2)
    Cleanup

Cleanup -->
    deleteTags("v", edges)
    cleanupGeometry(edges, 0)
    VisualizeTags

用于清除所有标签的操作

按设计

这些操作将替换当前形状的几何资产,从而清除现有组件标签。

不受支持

这些操作(目前)不支持使用组件标签和清除所有标签。