CityEngine CGA语法之切割函数 split

2023-10-20 08:40

本文主要是介绍CityEngine CGA语法之切割函数 split,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概要

split(splitAxis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }
split(splitAxis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }*
split(splitAxis, adjustSelector) { size1 : operations1 | ... | sizen-1 : operationsn-1 }
split(splitAxis, adjustSelector) { size1 : operations1 | ... | sizen-1 : operationsn-1 }*

参数

splitAxis (selstring):有三个取值:X,Y,Z,splitAxis表示沿哪个轴切割,XYZ轴系为模型轴系

adjustSelector:有两个取值:adjust和noAdjust,默认为adjust,adjust表示切割出来的新几何体自动调整scope范围(几何体外接最小长方体)为新几何体的scope,noAdjust表示新几何体的scope保持为切割前的scope

size (float):切割的宽度,根据前缀的不同具有不同的含义,沿轴的宽度有以下不同的解释

1.没有前缀,size代表绝对宽度,优先级高

2.带有前缀 ',相对值,值应该在 0 到 1 之间,超过了没有意义,取整体宽度的百分比,优先级高

3.带有前缀~,取近似值,根据前缀后的值,在带有相同前缀的值间进行比较。Size 值的大小本身没有绝对意义,取同类型比较的百分比。这种类型的宽度总值取前两种类型分割后的剩余值。优先级低

operations:执行在新产生的模型上的一系列操作

* :重复{ }中的分割内容

注意

相同优先级,在前面的优先程度高。先满足优先级程度高的需求

如果仅有带前缀~的,那么后面的值按照真实值进行计算,如果整个要分割的长度还有剩余,那么均分到每一个小块

示例

沿X轴切割,调整scope

Lot -->extrude(16)split(x) { 10 : A.|20 : B.| 30 : C.}





沿X轴切割,不调整scope

Lot -->extrude(16)split(x,noAdjust) { 10 : A.|20 : B.| 30 : C.}







相对尺寸切割

Lot -->extrude(16)split(x) { '0.2 : A|'0.3 : B| '0.5 : C}
A-->color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")




注意:当切割范围超出几何体尺寸范围,则超出尺寸的切割操作无效

如若设置第二次切割的尺寸比例因子为0.8,则第三次切割操作无效

Lot -->extrude(16)split(x) { '0.2 : A|'0.8 : B| '0.5 : C}
A-->color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")






绝对尺寸切割与近似尺寸切割

设置近似切割尺寸为~10,两个绝对切割尺寸也为10

Lot -->extrude(16)split(x) {~10 : A|10 : B| 10 : C}
A-->color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")






注意:虽然近似切割尺寸设置为10,但因为它是一个近似值,优先级低,在绝对切割尺寸完成后,自动调整尺寸


设置两个近似切割尺寸分别为~2和~1,绝对切割尺寸为10

Lot -->extrude(16)split(x) {~1 : A|10 : B| ~2 : C}
A-->color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")





注意:在绝对切割尺寸优先完成后,还存在两个近似切割,在存在多个近似切割的情况下,根据近似切割尺寸与同类型尺寸的百分比确定切割范围,如图,第一个近似切割尺寸占所有近似切割尺寸三分之一,第二个近似切割尺寸占所有近似切割尺寸三分之二


重复绝对切割

Lot -->extrude(16)split(x) {5 : A|10 : B| 15 : C}*
A-->	color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")



注意:如图,绝对切割执行了3次完整地切割和1次不完整的切割,直到超出尺寸为止


重复近似切割


Lot -->extrude(16)split(x) {~5 : A|~10 : B| ~15 : C}*
A-->	color("#ff0000")
B-->color("#00ff00")
C-->color("#0000ff")



注意:如图,虽然尺寸与绝对切割尺寸相同,但近似切割并没有出现不完整切割的现象,因为近似切割会自动调整尺寸保证完整切割



这篇关于CityEngine CGA语法之切割函数 split的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/245992

相关文章

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链