comp

概要

  • comp (compSelector) {选择器操作符| 选择器操作员操作…}

参数

    1. compselector –关键字
      要拆分的组件

        • f – 面孔。
        • e – 边缘。
        • v – 表示顶点。
        • g – 对于团体。
        • m – 用于材料。
      • h – 洞。
    1. selector –关键字
        • front | 回来了 离开| 对| 顶部| 底部 }组分-The的y法线由(坐标当前形状的系统相对于所述本地)它们的方向分类成相应的象限进行分析。
        • object.front | object.back | object.left | object.right | object.top | object.bottom |object.side } – 通过将它们的方向分类到相应的象限(相对于当前初始形状的对象坐标系)来分析组件的y法线。
        • world.south | world.north | world.west | world.east | world.up | world.down | world.side } – 通过将它们的方向分类到相应的象限(相对于世界坐标系)来分析组件的y法线。
        • 垂直| 水平| aslant | 螺母 } – 相对于当前形状的局部坐标系的xz平面分析y法线。法线和xz平面之间的角度用于对具有度数范围的组件进行分类:
            • 水平:] 78.75,90]
            • aslant:] 11.25,78.75]
            • 垂直:] -11.25,11.25]
            • 坚果:] -78.55,-11.25]
          • 水平:] -90,-78.75]
        •  -selects所有,但水平分量。
        • border | 内部 } – 分别位于几何体边界或完全内部的组件。边框边缘仅连接到一个面; 边界面包含一个或多个边界边; 边界顶点是一个或多个边界边的起点或终点。此选择器不适用于孔。
        • eave | 臀部| 山谷| 这些选择器仅在边缘上工作,设计用于与屋顶结合使用。有关详细信息,请参阅屋顶边缘
        • street.front | street.back | street.left | street.right | street.side } – 如果streetWidth属性在初始形状上可用,则这些选择器可用于识别面向街道的组件。有关详细信息,请参阅街道选择器
        • all –选择所有组件。
      • index(float) –选择索引组件(从0开始)。
    1. 操作者
      操作员定义如何使用所选组件生成后继形状。有效的运营商是:

        • 每个选定的组件都放入一个新的形状。
      • =所有选定的组件合并为一个新形状。
  1. 操作
    要执行的一系列CGA操作。

描述

该 补偿操作(组分分割)允许的形状分成其拓扑成分,其要么是面,边,顶点组,材料或空穴。可以使用它们的索引或一组语义选择关键字来选择组件。如果至少一个几何组件(通常是面)满足它,则组和材料组件满足特定的选择关键字。所选组件将转换为新形状,并通过一系列形状操作进行处理。根据 操作符,为每个选定的组件(“:”)创建一个形状,为整个所选组件集合(“=”)设置一个形状。

组件拆分的选择参数以排除方式工作:如果参数选择了特定组件,则该组件不能是另一个选择的一部分(从左到右)。

新生成的形状的局部坐标系(枢轴和 范围)根据几何的拓扑对齐; 组件拆分是少数操纵形状枢轴的形状操作之一。

在面部分量分割的情况下,x轴将平行于面的第一边缘,并且z轴将沿着面部法线平行。枢轴将位于面的第一边缘的第一顶点处; 范围将是面的边界框,即新出现的形状范围的z维设置为零。

在边缘分量分开的情况下,范围的x轴沿着边缘并且z轴指向相邻面的法线的平均值。范围的y和z维度设置为零,x维度是边缘的长度。枢轴将定位在边缘的一个端点处。边缘的索引如下:索引0是第一个面的第一个边,索引2是第一个面的第二个边等。第二次遇到时跳过共享边。

在顶点分量分割的情况下,枢轴位于顶点处,z轴将指向相邻面的法线的平均值,并且所有范围尺寸都设置为零。

形状属性

每个生成的形状都将设置多个属性:

    • comp.sel-包含选择器的字符串,该选择器选择此形状的组件。
    • comp.index – 所选组件的从零开始的索引。
  • comp.total – 选择器选择的组件总数。

索引总数是每个选择器; 例如:

...
   primitiveCube()
   comp(f) { front : Front 
           | side  : Side }

将使用comp.sel =“front”,comp.index = 0,comp.total = 1创建一个Front形状,并使用comp.sel =“side”,comp.index = 0,1,2comp 创建三个Side形状。总数= 3

有关更多信息,请参阅 comp属性

修剪飞机

此外,对于面,组件拆分会生成修剪平面。修剪平面沿着新面的共享边缘以平分角放置。修剪平面的目的是双重的。一方面,修剪处理两个相邻面的边界上的几何交叉点,另一方面,修剪用于处理非矩形面。使用插入操作, 基本操作或 修剪操作来应用修剪平面 。

根据共享边缘的方向,修剪平面分为水平和垂直平面。他们可以打开或关闭切换 设置的 装饰属性为true或false。默认情况下,对垂直修剪平面激活修剪,对水平修剪平面禁用修剪。检查下面的修剪平面示例 。

可以在 过程运行时首选项中配置修剪平面。

封闭器形状

在应用组件拆分之前,将自动生成一个未排序的封堵器形状。封堵器形状可用于未标记的遮挡查询

屋顶边缘

有许多选择器设计用于分类典型的屋顶边缘:

    • 屋顶底部的屋檐 –水平边框边缘。边缘始终围绕原始面逆时针定向。
    • 臀部 – 内侧边缘连接到至少一个屋檐边缘。髋部边缘总是朝上,即终点具有比起始点更大的y坐标。
    • 山谷 – 两个连接面形成凹面的内侧边缘。谷边缘总是朝上,即终点具有比起始点更大的y坐标。
  •  – 内侧边缘不是臀部或山谷。脊边缘总是朝上,即终点具有比起始点更大的y坐标。

下图显示了一些示例。

屋顶边缘

街头选择器

邻近街道部件可以与被选择street.front选择器,后部件可以与被选择street.back选择器,并在正面和背面之间的组件可以与被选择street.leftstreet.right选择器。street.side结合了左右组成部分。以下是street.xxx选择器的示例。

街道选择器1
街道选择器2

这些选择器取决于streetWidth属性映射的可用性; 看到自动生成街道width属性块参数。如果该属性不可用,则组件选择将回退到object.xxx选择器。

有关

例子

门面选择/面部分割细节

让我们将建筑物的质量模型分为主立面和多个侧立面。注意枢轴的方向(带注释的轴)。

分裂前的质量模型
Building-->	
   comp(f) { front : color("#ff0000") 
                     Main 
           | side  : color("#0000ff") 
		             Side }
应用拆分

现在每个面都是新形状的几何形状; 新形状的范围和枢轴取决于面部的方向。x轴指向第一边缘,z轴指向面法线。范围的z维度为零。

每个面都是新形状的几何形状
 

选择

选择器1:基于象限

选择器通过使用它们为球面几何体的面着色来演示。选择相对于局部坐标系(显示的范围)。

Sphere-->
   comp(f) { top    : color("#0000ff") X 
           | bottom : color("#ffff00") X 
           | front  : color("#ff0000") X 
           | back   : color("#ff00ff") X 
           | left   : color("#00ffff") X 
           | right  : color("#00ff00") X }
基于选择器象限

选择器2:基于y轴的角度

注意球体两极的水平区域(蓝色)。

Sphere -->
    comp(f){ horizontal: color("#0000ff") X 
           | aslant    : color("#ff0000") X 
           | vertical  : color("#ffff00") X 
           | nutant    : color("#ff00ff") X }
选择器角度以y轴为基础
 

基于索引的选择

网格也可以通过它们的索引直接解决它们而被分解成它的组件。索引方案固有地在模型本身中编码。

拆卸前进行网格划分

仅选择圆柱体的面0,2和​​4。

Tube-->
   comp(f) { 0 : X 
           | 2 : X 
           | 4 : X  }
带选定面的网格
 

修剪飞机

在共享边缘处,插入修剪平面(绿色)。

Start-->
   s(10,10,10)
   primitiveCube()
   comp(f) {5 : X}
修剪具有共享边缘的平面

使用修剪平面切割插入的几何体。

X-->
   s(15,'1, 2)
   center(xyz)
   primitiveCube()
修剪平面切割几何体

默认情况下,水平修剪平面关闭。在插入几何体之前启用它们会产生不同的结果。

Start-->
   s(10,10,10)
   primitiveCube()
   set(trim.horizontal, true)
   comp(f) {5 : X}
修正启用了水平线的平面
 

运营商

使用“:”运算符会为选择器选择的每个组件生成新形状。在下面的示例中,将为拉伸几何体的每一侧创建一个形状。因此,Lot Shape有五个后继者(每一个一个)。每个后继形状的枢轴和范围设置不同。

Lot-->
   extrude(20)
   comp(f) { side : Sides }
操作员有五个新形状

相反,使用“=”运算符会为选择器选择的所有组件生成一个新形状。在下面的示例中,为挤出几何体的所有五个边创建一个形状。新形状的几何体包含所有五个面,并且枢轴和范围相对于第一个选定面设置。

Lot-->
   extrude(20)
   comp(f) { side = Sides }
结合形状的操作员
 

边界和内部选择器

图为初始形状。它是一个细分的平面,由许多面组成。

初始形状与细分平面

该示例选择边框和内部面并对其进行着色。

Init-->
   comp(f) { border : FBorder 
           | inside : FInside  }
   
BorderF-->
   color("#ff0000")
	
InsideF-->
   color("#00ff00")
带有边框和面孔的形状

这里,选择边界和内边缘并插入彩色立方体。

Init-->
   comp(e) { border : EBorder 
           | inside : EInside  }

EBorder-->
   s('1, 0.05, 0.05) 
   t(0, '-0.5, 0)
   color("#ff0000") 
   primitiveCube()
	
EInside-->
   s('1, 0.01, 0.01) 
   t(0, '-0.5, 0)
   color("#00ff00") 
   primitiveCube()
插入彩色立方体的形状

最后,边界和内部顶点用于插入彩色立方体。

Init-->
   comp(v) { border : VBorder 
           | inside : VInside  }
   
VBorder--> 
   s(0.05, 0.05, 0.05) 
   t(-0.025, -0.025, -0.025)
   color("#ff0000") 
   primitiveCube()
   
VInside--> 
    s(0.05, 0.05, 0.05) 
    t(-0.025, -0.025, -0.025)
    color("#00ff00") 
	primitiveCube()
形状与顶点插入的彩色立方体
 

边缘分割细节

建筑质量模型分为边缘,内置立方体模型插入每个边缘形状。新形状的枢轴设置为边缘的起始顶点,对齐方式如下:x轴指向边缘,z轴是相邻面法线的平均值,y轴是法线的前两个。范围具有零平移和旋转,并且大小为(边长,0,0)。

Lot-->
   extrude(10) 
   comp(e) { all : primitiveCube() 
                   s('1, 0.8, 0.8) X }
具有边缘分割的质量模型
 

顶点拆分详细信息

建筑质量模型被分割为其顶点。新形状的枢轴(上面规则中的VShapes)设置为顶点位置,对齐如下:z轴是相邻面法线的平均值,选择x轴和y轴这样他们彼此都是正常的。范围没有平移,旋转和大小。

Lot-->
   extrude(10) 
   MassModel
   comp(v) { all : VShapes }
具有顶点分割的质量模型
 

分组细节

树模型分为其组。

Lot-->
   i("Orange_Tree_Model_0.obj") 
   comp(g) { 2 : Trunk. | all = set(material.opacity, 0.2) Foilage. }
树模型组拆分
 

材料拆分细节

树模型分为其材料。在这种情况下,组和材料是相同的。

Lot-->
   i("Orange_Tree_Model_0.obj") 
   comp(m) { 0 : Oranges. | 2 : Trunk. }
树模型材料分裂

Was this article helpful?

Leave A Comment?

You must be logged in to post a comment.