splitArea operation面积划分操作

概要

  • splitArea (splitAxis) {area1:operations1 | area2:operations2 | …… | arean-1:operationsn-1} 
  • split (splitAxis) {area1:operations1 | area2:operations2 | …… | arean-1:operationsn-1} * 
  • split (splitAxis,adjustSelector) {area1:operations1 | area2:operations2 | …… | arean-1:operationsn-1} 
  • split (splitAxis,adjustSelector) {area1:operations1 | area2:operations2 | …… | arean-1:operationsn-1} * 

参数

  1. splitAxis – selstr
    x | y | z } – 要拆分的轴的名称。这是相对于局部坐标系(即范围)。
  2. adjustSelector – selstr
    adjust | noAdjust } -optional选择器控制计算形状的范围计算。默认设置是将范围调整为几何体的边界框。使用noAdjust避免了这种情况,因此,结果形状的范围填充了父级的范围而没有间隙。
  3. 区域 –浮动

    拆分区域。根据前缀,沿的宽度按以下方式解释:

    • 没有前缀(绝对) – 新形状将具有完全相同的区域
    • ‘(相对) – 新形状的大小将是(区域*当前几何区域)
    • 〜(浮点) – 带有前缀,自动调整具有绝对尺寸的分割部分之间的剩余空格。如果在拆分中定义了多个浮动零件,则按比例对尺寸进行加权。
  4. 操作 –浮动
    要在新创建的形状上执行的一系列形状操作。
  5. * –漂浮
    重复开关:重复开关触发重复定义的分割到当前形状的范围,尽可能多次。重复次数和浮动尺寸适应最佳解决方案(最佳重复次数和最小拉伸次数)。

描述

所述splitArea操作细分沿着指定的当前形状的几何范围轴线成一组与由指定的几何形状的区域的面积的参数。此操作适用于平面2D几何体和几乎平面几何体。区域精度因非平面几何形状而失效。此操作不适用于3D几何体,例如网格或高度非平面几何体。

对于每个指定区域,使用垂直于分割轴的平面切割当前形状的几何体,使得生成的形状包含具有指定区域的几何体。

可选的重复开关*可用于重复{…} *块内的内容,因为它完全适合沿所选轴的示波器尺寸。

有关

例子

颜色

Red     -->                          // red
   color(1, 0, 0)                       
   print("area(R) = " + geometry.area)

Yellow  -->                         // yellow
   color(1, 1, 0)                       
   print("area(Y) = " + geometry.area)

Green   -->                         // green
   color(0, 1, 0)                       
   print("area(G) = " + geometry.area)

Cyan    -->                         // cyan
   color(0, 1, 1)                      
   print("area(C) = " + geometry.area)

Blue    -->                         // blue
   color(0, 0, 1)                       
   print("area(B) = " + geometry.area)

Magenta -->                         // magenta
   color(1, 0, 1)                      
   print("area(M) = " + geometry.area)

Pink    -->                         // semi-transparent pink
   color(1, 0.5, 0.5, 0.3)

这种形状分为两部分。第一部分是原始区域的70%,第二部分是原始区域的30%。请注意,指定的区域数量不需要总和为1.对于小于1的总和,将丢弃形状的其余部分,并忽略大于1的拆分部分。

Lot -->
   print("total area = " + geometry.area)
   splitArea(x) { '0.7 : Green
                | '0.3 : Yellow }
形状分为两部分区域部分的总和不等于1
 

重复拆分

该分割使用重复分割将形状分成五个相等的面积部分。它反复将形状分割成面积等于原始面积的20%的部分。请注意,如果区域设置为’0.3,我们将得到四个部分,其面积等于原始面积的30%,30%,30%和10%。

Lot -->
   print("total area = " + geometry.area)
   splitArea(x) { '0.2 : ColorMe }*

ColorMe -->
   case split.index == 0 :
      Red
   case split.index == 1 :
      Yellow
   case split.index == 2 :
      Green
   case split.index == 3 :
      Cyan
   else :
      Blue
重复拆分部件表格显示5个相等面积的零件
 

分为混合浮动和绝对区域

这种分割将形状分为中间部分(黄色),其中绝对区域为600,两个侧面部分各自具有相同的区域。黄色部分由两个部分组成,因为在原始形状中存在孔,并且分割沿着孔边界切割形状。

Lot -->
   print("total area = " + geometry.area)	
   splitArea(x) { ~1  : Green
                | 600 : Yellow
                | ~1  : Blue }
                }
拆分浮动和绝对区域两部分绝对和两部分浮动
 

嵌套分裂

此嵌套拆分在x中首先划分形状,以获得三个相等的面积部分。然后,将每个部分分成两个相等的部分。这产生六个相等的面积部分。

Lot -->
   print("total area = " + geometry.area)	
   splitArea(x) { ~1 : splitArea(z) { '0.5 : Red
                                    | '0.5 : Yellow }
                | ~1 : splitArea(z) { '0.5 : Green
                                    | '0.5 : Cyan }
                | ~1 : splitArea(z) { '0.5 : Blue
                                    | '0.5 : Magenta }
                }
嵌套分裂嵌套拆分表
 

调整与noAdjust

这是原始形状及其范围。

原始形状和范围

如果不指定adjustSelector的值,则默认行为是将范围大小调整为每个拆分零件的几何。每个粉红色框显示每个拆分部分的范围。示波器保持原始示波器的方向,但缩小到几何的边界框。

SplitAdjust -->
   splitArea(x) { '0.2 : splitArea(z) { '0.2 : SplitLeaf }* }*

SplitLeaf-->
   color(0.5, 0.5, 0.5)
   Geometry.
   primitiveQuad()
   t(0, 0.02, 0)
   Pink
   comp(e) { all : color(0, 0, 0) Edge. }
调整范围几何以分割零件尺寸

使用noAdjust时,每个拆分部分的范围的并集构成原始范围。范围不会根据内部几何调整。

SplitNoAdjust -->
   splitArea(x, noAdjust) { '0.2 : splitArea(z, noAdjust) 
                                   { '0.2 : SplitLeaf }* }*
范围联盟制作原始范围
 

将块分成相等的部分

这是原始形状及其范围。下面是一个示例,说明如何使用splitArea操作将街区划分为具有相同区域的地块。

原始范围

使用splitArea以递归方式将块分割三次每个分割将垂直于其最长轴的形状分成两个相等面积的部分。每个批次按其区域着色,使得具有相同区域的批次具有相同的颜色。使用splitArea,所有批次都是黄色的,因为块被分成相等的区域批次。

Lot -->
   SplitArea(3)

SplitArea(n) -->
   case n == 0 :
      A
   case scope.sz > scope.sx :
      splitArea(z) { ~1 : SplitArea(n-1)
                   | ~1 : SplitArea(n-1) }
   else :
      splitArea(x) { ~1 : SplitArea(n-1)
                   | ~1 : SplitArea(n-1) }

A -->
   color(getColor)
   print("area(A) = " + geometry.area)
	
// color by area (so that lots with same area get same color)
const minArea = 243
const maxArea = 1255
alpha = (geometry.area - minArea)/(maxArea - minArea)
getColor = colorRamp("spectrum", alpha)
块分为等份表显示每个块的ares

相比之下,当使用拆分操作时,批次是不同的颜色,因为块被分成具有不同区域的批次。

Lot2 -->
   Split(3)

Split(n) -->
   case n == 0 :
      B
   case scope.sz > scope.sx :
      split(z) { ~1 : Split(n-1)
               | ~1 : Split(n-1) }
   else :
      split(x) { ~1 : Split(n-1)
               | ~1 : Split(n-1) }

B -->
   color(getColor)
   print("area(B) = " + geometry.area)
地块分为不等的部分表格显示不相等的部分区域

Was this article helpful?

Leave A Comment?

You must be logged in to post a comment.