CityEngine2016-学习笔记(2)Shape Operations

这是学习CGA规则的笔记,版本是cityengine 2016.0,参考help文件。
CityEngine Help Manual > Rule-based Modeling > Shape Operations

1 Extrusion 拉伸

一般用法:

Lot -->extrude(10) Building.

另外,可以用世界坐标:

Lot -->extrude(world.up, 30)

这里采用了world坐标,的up方向。
【延伸】extrude()用法:
extrude(distance)
extrude(extrusionType, distance)
Param:
extrusionType:
world.up:世界坐标系向上
word.up.flatTop:世界坐标系向上,但是生成平头
face.normal:默认垂直于面的法线
vertex.normal:Extrudes face vertices along their normals.
实际出来的效果,face.normal和vertex.normal没啥区别。。。

【延伸】taper()
一般用法:
taper(height)
Params:
height: float, 拉伸的距离,也可以是负数,向反拉,不过这时的scope.sy是负的。

2 Transformations 变换

t(tx, ty, tz) 沿着模型scope轴变换位置
r(rx, ry, rz) 沿着模型scope的轴(向量scope.r
)旋转角度。也可以写成r(scopeCenter, rx, ry, rz),围绕scope center旋转。
s(sx, sy, sz)设定模型向量scope.s的比例,与t、r操作不同,这里的参数是“重写”模型的比例。参数sx、sy、sz是绝对值。
相对操作符
s、t操作可以使用相对操作符 ’ :
s('0.5, '1, '1) 等同于 s(0.5scope.sx, 1scope.sy, 1scope.sz)
t('2, 0, '3) 等同于 t(2
scope.sx, 0scope.sy, 3scope.sz)
举栗:
相对比例缩放

Lot --> s(’0.8, ’1, ’0.8) center(xz) extrude(20)


中心旋转

Lot -->extrude(20)split(y) {2: r(scopeCenter, 0, 360*split.index/split.total, 0) X}*

注意,split后面要跟着successor,即上面那个X

坐标系统 coordinate system

omni…

From Volume to Surface with the Component Split 各部分部件的划分

从一个建筑体块划分为不同的形状(shapes),操作上使用comp(),一般来说酱紫:
comp(comp-selector) {selector: operations | selector: operations ... }
把一个物体依据它的几何(geometry)关系划分成部件(components),然后在每一个部件上进行进一步的操作。
参数comp-selector指定划分的类型,可以是f、e、v,分别是面faces,边edges,点vertices。
参数selector定义部件如何划分/选取。举栗:
A --> comp(f) {all: B}
从A创建了一个新的shape B,包括A的每个面。

A --> comp(e) {all: C}
A --> comp(v) {all: D}

创建C、D,分别包含A的边和点。
也可以用数字指定具体的部件,如comp(f){3 : B},这里特指第三个面。但是也可以用预定的关键词(semantic selection)来选取: Building --> comp(f) { side : Facade }
预定的关键词:

-front, back, left, right, top, bottom,根据方向来确定形状(shape)
-vertical, horizontal, aslant, nutant:相对于当前形状的局部坐标系的xz平面分析y法线。 例如,如果y法线平行于xz平面,则垂直匹配;否则,垂直匹配。 如果法线或多或少垂直,则为水平匹配; 如果法线和xz平面之间的角度为正,则aslant匹配;如果中间角度为负,则nutant相匹配。
-side: 选取除了水平(horizontal)方向的部件
-all: 选取全部部件。

栗子:

attr red = "#FF0000"
attr green = "#00FF00"
attr blue = "#0000FF"
Lot -->extrude(world.up, 10) A
A -->comp(f) {aslant : B |   nutant : C | all : D}
B -->color(blue)
C -->color(red)
D -->color(green)

3 the subdivision split 细分

一般形式:
split(axis) { selector : operation }

引用帮助文件:
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)-要沿其拆分的轴的名称。 这是相对于局部坐标系(即范围)而言的。
AdjustSelector
(adjust | noAdjust)-可选的选择器,用于控制所计算形状的范围计算:默认值是将范围调整到几何的边界框; noAdjust避免了这种情况,因此,最终形状的范围将无间隙地填充父级的范围。
建模的时候,一般来说,学会基本的推拉、移动、缩放、细分等操作足够可以应付大多数场景了。在cga建模也是一样,所以这方面多费点笔墨来详细叙述也是值得的。

(1)simple resize

栗子:

attr red = "#ff0000"
attr green = "#00ff00"
attr blue = "#0000ff"
attr yellow = "#ffff00"
attr orange = "#ffa500"
attr length = 5
Lot -->s(length, 1, 1)primitiveCube()color(red)


解释:定义三个颜色变量,拉出一个长5,截面1x1的长方体,颜色定义为红色。
栗子:

attr length = 5
Lot -->s(length, 1, 1)primitiveCube()Split_ex
Split_ex -->split(x) { 3 : X }
X -->color(blue)


解释:5个长的矩形,沿着x轴切出来一个3个的蓝色,剩下的就没了,截掉了。
栗子:

Split_ex -->split(x) { 3 : X | ~1 : X(2) }
X -->color(green)
X(h) -->color(red)s('1, h, '1)

解释:5个长的巨型,切了一个3个的绿色,然后剩下的“~1”部分切了2个长,2个高的部分。“~1”的意思就是“剩下的都是他的”,“~”是一个可变的变量。
栗子:

Split_ex -->split(x) { 1 : X | ~100 : Y | 1 : X(2) }Y -->color(yellow)

解释:不解释了。
栗子:

Split_ex -->split(x) { 3 : X | ~1 : X(0.5) | ~1 : X(0.5) | ~1 : X(0.5) }

(2)repeat split 重复

simple repeat 简单重复

栗子:

attr red = "#ff0000"
attr green = "#00ff00"
attr blue = "#0000ff"
attr yellow = "#ffff00"
attr orange = "#ffa500"
attr length = 10
Lot -->s(length, 1, 1)primitiveCube()color(yellow)Repeat_ex
Repeat_ex -->split(x) { ~2 : X } *


解释: * 是重复前一个大括号中操作的意思。

栗子:

attr red = "#ff0000"
attr green = "#00ff00"
attr blue = "#0000ff"
attr yellow = "#ffff00"
attr orange = "#ffa500"
attr length = 10
Lot -->s(length, 1, 1)primitiveCube()color(yellow)Repeat_exRepeat_ex -->split(x) {  { 2 : X }* | ~1 : X(2) }X -->color(red)X(h) -->s( '1, h, '1)

栗子:

Repeat_ex -->split(x) { ~1 : X(2) | { 2 : X }* }

解释:图像和上面一样。要先满足后面的固定数值,但是下面又不一样了。

Repeat_ex -->split(x) { ~1 : X(2) | { 2 : X }* | ~1 : X(2)}

repeat pattern 重复样式

Repeat_ex -->split(x) { ~1 : Y | 0.25 : X | ~1 : Y }*
Y -->s('1, '3, '1)color(orange)

rhythm 节奏重复

attr length = 15
Lot -->s(length, 1, 1)primitiveCube()color(yellow)Rhythm_exRhythm_ex -->split(x){ ~5: X(2) | { ~1: Y | { ~1: Y | ~1: Z }* }* }*Z -->color(blue)Y -->s('1, '3, '1)color(orange)X -->color(red)X(h) -->s( '1, h, '1)

relative split 相对细分

按比例切分,栗子:

attr red = "#ff0000"
attr green = "#00ff00"
attr blue = "#0000ff"
attr yellow = "#ffff00"
attr orange = "#ffa500"
attr length = 10
Lot -->s(length, 1, 1)primitiveCube()color(yellow)R_ex
R_ex -->split(x) { '0.5 : X | { ~1 : Y }* | 2 : Z | { ~1 : Y }* }*

栗子:

R_ex -->split(x) { '0.382 : A | '0.618 : B}
A -->R_ex
B -->R_ex

不要这样写,内存溢出,哈哈哈,触及了死循环的递归,CE崩溃,连带着浏览器也崩溃。
CE重启,卡到初始化licence阶段,这时的处理办法是删掉project目录中的.metadata目录,打开后,项目要重新导入并且重新设置鼠标,导入后切记打开cga之前删掉预览,否则还得崩溃。。。

CityEngine2016-学习笔记(2)Shape Operations相关推荐

  1. Qt学习笔记-使用shape() 使得碰撞更加精确

    官方解析如下: 这英语就我就不翻译了,就他说的,很好理解, 我就直接来个例子好了. 运行截图如下: 代码如下: myitem.h #ifndef MYITEM_H #define MYITEM_H#i ...

  2. 【shaderforge学习笔记】 Vector Operations(向量运算)

    shaderforge 向量运算 Append数据维度的附加 Component Mask数据维度的分解 Channel Blend通道混合 Cross Product叉积 Desaturate去色 ...

  3. 学习笔记 Keras:常见问题

    目录: 目录: 常见问题 如何引用Keras? 如何使Keras调用GPU? 如何在多张GPU卡上使用Keras? 数据并行 设备并行 "batch", "epoch&q ...

  4. Pytorch学习笔记总结

    往期Pytorch学习笔记总结: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 Pytorch系列目录: PyTorch学习笔记( ...

  5. cs224w(图机器学习)2021冬季课程学习笔记8 Colab 2

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 20 ...

  6. Dynamic Quantization PyTorch官方教程学习笔记

    诸神缄默不语-个人CSDN博文目录 本文是PyTorch的教程Dynamic Quantization - PyTorch Tutorials 1.11.0+cu102 documentation的学 ...

  7. 不完全免疫算法简介IMADE--AIS学习笔记5

    不完全免疫算法简介IMADE–AIS学习笔记5 觉得有用的话,欢迎一起讨论相互学习~ 多目标优化 An immune MOP algorithm with DE inspired recombinat ...

  8. 《B站-ElasticSearch》学习笔记

    目录 环境安装 安装ElasticSearch 安装ElasticSearch Hand可视化工具 安装Kibana ES核心概念 物理设计 逻辑设计 文档 类型 索引 倒排索引 IK分词器插件 什么 ...

  9. TensorFlow学习笔记:Retrain Inception_v3(一)

    转:http://www.jianshu.com/p/613c3b08faea 0. 概要 最新的物体识别模型可能含有数百万个参数,将耗费几周的时间去完全训练.因此我们采用迁移学习的方法,在已经训练好 ...

  10. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

最新文章

  1. 来看看企业如何拥抱混合云?
  2. 搜狗研究员:详解基于深度学习的语音分离
  3. 百度启动高管退休计划,总裁张亚勤今年十月退休
  4. java lock 效率_工作常用4种Java线程锁的特点,性能比较、使用场景
  5. 联想n308 android 一体机,附文:N308设计回顾_联想 N308_一体电脑评测-中关村在线...
  6. 怎样通过vb设置透视表多项选择_数据透视表有多强大?
  7. Lucene查询索引代码实现
  8. 什么是进程控制块,他有什么用?
  9. 一个炒鸡好用的pdf阅读器
  10. 新版征信对信用卡养卡会有重大影响吗?
  11. Jmeter中JDBC Connection Configuration实现MySQL JDBC Request数据库处理
  12. Hadoop下载地址/hbase下载地址
  13. CNC精雕机加工需要牢记的22个常识,一起来学习
  14. java调用讯飞语音合成api
  15. 华为荣耀计算机在哪,华为荣耀手机如何连接电脑
  16. 3分钟快速制作一张高颜值的公众号封面图
  17. 路由控制配置 peer as- number命令解析
  18. 【codevs2853】方格游戏 DP
  19. HLS 3 FPGA并行化 稀疏矩阵向量乘法(计算机视觉)
  20. Python 声明变量

热门文章

  1. 这些跳槽理由千万不能说!
  2. 谁是史上最强-用爬虫分析IMDB TOP250电影数据
  3. docker-Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runn
  4. 圣彼得堡三大教堂_2020年9大最佳教堂网站建设者(适合初学者)
  5. 程序员根本不是稳定工作!
  6. 756526-00-8,Cbz-N-amido-PEG4-acid末端羧酸可在活化剂(如EDC或HATU)存在下与伯胺基反应
  7. Statistic 代码统计利器
  8. NVIDIA驱动安装过程中的 'nvidia-drm' appears问题
  9. 电影感悟-豆瓣TOP3
  10. 2017-2018-2 1723《程序设计与数据结构》问题汇总 (更新完毕)