新書推薦:
《
周易
》
售價:HK$
44.6
《
东南亚的传统与发展
》
售價:HK$
67.2
《
乾隆制造
》
售價:HK$
87.4
《
资治通鉴臣光曰辑存 资治通鉴目录(司马光全集)(全二册)
》
售價:HK$
304.4
《
明代社会变迁时期生活质量研究
》
售價:HK$
316.2
《
律令国家与隋唐文明
》
售價:HK$
76.7
《
现代吴语的研究(中华现代学术名著3)
》
售價:HK$
65.0
《
天下的当代性:世界秩序的实践与想象(新版)
》
售價:HK$
77.3
|
編輯推薦: |
本书作者参考国内外前沿技术成果,深入浅出地讲解了参数化建模软件Grasshopper,书中配有大量独具特色的案例,尤其是综合性案例摩天大楼的建模。读者通过学习本书能在较短的时间内掌握该软件的主要理念和重要的制作技法,从而能较快地运用该软件解决工作、设计中遇到的各种建模问题。
|
內容簡介: |
"本书是一本讲解参数化建模软件Grasshopper的技术专著,参考国内外*研究成果,对Grasshopper做了深入浅出的讲解,同时配有大量独具特色的案例,使读者能在较短的时间内掌握该软件的主要理念和重要的制作技法,从而能较快地运用该软件解决工作、设计中遇到的各种建模问题。 本书分为上下两篇,上篇为基础篇,包括第1~7章,主要讲解Grasshopper的基本操作和常用运算器。下篇为案例篇,包括第8~11章,详细讲解了一个综合性案例摩天大楼的建模。 本书适合从事建筑设计、机械设计、艺术设计、工业设计的人士和CG爱好者参阅,也可以作为高职类院校相关课程的教材和教参使用。 "
|
關於作者: |
程罡,高级工程师。从事计算机数字图形、图像、3D动画、三维数值城市、虚拟现实技术近二十年。
|
目錄:
|
目 录 上篇 基 础 篇
第1章 Grasshopper概述.... 1
1.1 参数化设计和Grasshopper 2
1.1.1 什么是参数化设计... 2
1.1.2 参数化建模与手工建模... 2
1.1.3 什么是Grasshopper 5
1.1.4 Grasshopper的运用... 6
1.2 Grasshopper的下载和安装... 10
1.2.1 Grasshopper的下载... 10
1.2.2 Grasshopper的安装... 11
1.3 打开Grasshopper和Grasshopper的
界面... 12
1.3.1 Grasshopper的加载... 12
1.3.2 Grasshopper的界面... 13
1.4 运算器详解... 17
1.4.1 运算器的构成... 17
1.4.2 运算器信息... 17
1.4.3 运算器和参数... 18
1.4.4 运算器图标的显示... 19
1.4.5 运算器的数据管理... 20
本章小结... 22
第2章 Grasshopper初步.... 23
2.1 从点的绘制开始... 24
2.1.1 点的创建... 24
2.1.2 创建滑块运算器... 25
2.1.3 滑块运算器的复制... 26
2.1.4 编辑滑块运算器的属性... 28
2.2 曲线和样条线的绘制... 30
2.2.1 绘制另一个点... 30
2.2.2 创建Line运算器... 31
2.2.3 创建样条线... 31
2.3 数据匹配... 32
2.3.1 如何用两个滑块控制一个
属性... 32
2.3.2 创建Panel运算器... 33
2.3.3 Shortest List运算器... 36
2.3.4 Longest List运算器... 38
2.3.5 Cross Reference运算器... 39
2.4 一个简单的案例水波纹的制作... 41
本章小结... 44
第3章 功能和控制.... 45
3.1 在表格中创建多重物体... 46
3.1.1 创建系列圆... 46
3.1.2 改变系列圆的起点... 47
3.1.3 显示系列圆的信息... 48
3.1.4 动态改变系列圆的半径... 48
3.2 创建系列直线段... 49
3.2.1 直线的创建... 49
3.2.2 创建系列直线... 50
3.2.3 Range运算器的功用... 51
3.2.4 动态系列线的设置... 53
3.2.5 Addition运算器... 54
3.2.6 设置扭曲效果... 56
3.3 使用数学功能绘制曲线... 57
3.3.1 创建曲线分布顶点... 57
3.3.2 创建正弦曲线... 58
3.4 控制和表格... 59
3.4.1 创建系列圆... 59
3.4.2 圆圈的挤压... 61
3.4.3 设置挤压高度... 62
3.4.4 Item运算器... 62
3.4.5 Cull运算器... 65
3.5 变换操作... 67
3.5.1 Box运算器... 67
3.5.2 Move运算器... 68
3.6 形状图表... 69
3.6.1 Graph运算器... 69
3.6.2 Scale运算器... 71
3.6.3 减法运算器... 72
3.6.4 控制系列Box的外轮廓... 72
本章小结... 74
第4章 在曲面上做造型.... 75
4.1 导入几何体... 76
4.1.1 打开Rhino模型... 76
4.1.2 Surface运算器... 76
4.1.3 显示效果的设置... 77
4.2 次表面细分... 80
4.2.1 细分运算器... 80
4.2.2 细分参数的设置... 80
4.3 扭曲长方体... 81
4.3.1 创建表面长方体... 81
4.3.2 曲面的细分... 82
4.3.3 细分长方体的厚度控制... 83
4.4 变形参照几何体... 84
4.4.1 在Rhino中创建四棱锥... 84
4.4.2 Geometry运算器... 85
4.4.3 Morph运算器... 86
4.5 完成多次变形操作... 87
4.5.1 在Rhino中创建变形参照
对象... 87
4.5.2 拾取多个对象... 88
4.5.3 使用Longest运算器... 89
本章小结... 90
第5章 案例螺旋塔的建模.... 91
5.1 项目简介... 92
5.1.1 旋转中心简介... 92
5.1.2 横截面的绘制... 93
5.2 扭转楼板的轮廓曲线... 95
5.2.1 转换GH曲线... 95
5.2.2 创建系列轮廓线... 96
5.2.3 创建群组... 96
5.2.4 另一组运算器... 98
5.2.5 加法运算器... 100
5.3 创建核心... 101
5.3.1 挤压中心圆... 101
5.3.2 加法和乘法运算器... 102
5.4 扭转楼板轮廓曲线... 103
5.4.1 在Rhino中创建四棱锥... 103
5.4.2 扭转轴的设置... 104
5.4.3 控制轮廓曲线的扭转... 105
5.4.4 除法运算器... 105
5.4.5 弧度运算器... 106
5.4.6 Range运算器的使用... 107
5.4.7 表达式的运用... 107
5.4.8 移动核心... 109
5.5 设置楼板的厚度... 109
5.5.1 创建4个运算器... 109
5.5.2 运算器的连接... 110
5.6 外立面的生成... 111
5.6.1 放样运算器的运用... 111
5.6.2 Sub List运算器... 113
5.6.3 多个局部的外立面生成... 114
5.7 高效率地使用范围和序列运算器... 116
5.7.1 Integer运算器... 116
5.7.2 整数运算器的连接... 117
5.7.3 删除单独的Dom运算器... 117
5.8 总结和反思... 118
5.8.1 简单的材质设置... 118
5.8.2 遥控参数设置... 121
本章小结... 122
第6章 数据树详解.... 123
6.1 数据树介绍... 124
6.1.1 什么是数据树... 124
6.1.2 数据的行为... 125
6.2 展平、融合与移植... 127
6.2.1 展平数据树... 127
6.2.2 融合数据树... 128
6.2.3 移植数据树... 129
6.3 连接曲线上对应的点... 129
6.3.1 创建曲线... 129
6.3.2 细分曲线... 130
6.3.3 查看顶点数据... 131
6.3.4 Path Mapper运算器... 132
6.3.5 圆圈的复制... 133
6.4 桁架曲面的构建... 134
6.4.1 创建GH曲面... 134
6.4.2 曲面的细分... 135
6.4.3 图层的设置... 135
6.4.4 收集顶点... 136
6.4.5 分支顶点... 137
6.4.6 构建立体网格模型... 139
6.5 制作桁架的另一种方法... 141
6.5.1 GH创建系列圆圈... 142
6.5.2 改变系列圆圈的轮廓... 143
6.5.3 顶点的连线... 145
6.5.4 扭转曲线... 146
6.5.5 双螺旋曲线的构建... 148
6.5.6 构建立体网格... 149
本章小结... 150
第7章 使用Galapagos进行优化
和提升.... 151
7.1 什么是Galapagos. 152
7.1.1 Galapagos概述... 152
7.1.2 关于进化求解程序... 152
7.1.3 Galapagos的运行特点... 153
7.2 一个简单的案例如何设置
Galapagos. 156
7.2.1 求差值的运算器设置... 156
7.2.2 加载Galapagos. 157
7.2.3 Galapagos的解算... 158
7.3 第二个案例优化参数达到目标
面积... 160
7.3.1 加载GH场景... 160
7.3.2 楼层面积的设定... 161
7.3.3 解算... 163
本章小结... 165
下篇 案 例 篇
第8章 初始化设置.... 167
8.1 构建初始平面和等分角... 168
8.1.1 搜索框的运用... 168
8.1.2 初始平面的构建... 169
8.1.3 等分角的设置... 170
8.2 初始计算和第二个角度... 172
8.2.1 等分角度的优化... 172
8.2.2 等分120角... 173
8.3 计算第三个角度... 175
8.3.1 乘法运算器的运用... 175
8.3.2 角度范围的再次调整... 176
8.3.3 SDL曲线运算器... 177
8.4 生成驱动线... 178
8.4.1 旋转平面运算器的使用... 178
8.4.2 在直线上标记顶点... 180
8.4.3 完成全部放射状直线... 181
8.5 完成驱动图解定义... 185
8.5.1 继续添加点... 185
8.5.2 以点为圆心画圆... 186
8.5.3 另一个圆的绘制... 187
8.5.4 二等分圆... 189
8.5.5 设置任意起始角度... 191
8.6 定义摩天大楼参数... 192
8.6.1 楼层的设置... 192
8.6.2 添加网格平面... 193
8.6.3 阵列截面曲线... 194
本章小结... 196
第9章 弧度和扭曲.... 197
9.1 规划几何体和初始弧度... 198
9.1.1 复制Project运算器... 198
9.1.2 点的选择... 199
9.1.3 重命名运算器... 201
9.1.4 绘制弧形... 202
9.2 如何划分数据树... 204
9.2.1 绘制另外3组圆弧... 204
9.2.2 Split运算器的运用... 205
9.2.3 清理数据树... 206
9.3 创建截面弧形... 207
9.3.1 点的生成... 207
9.3.2 清理预览... 209
9.3.3 创建圆弧... 210
9.4 扭曲截面曲线... 213
9.4.1 清理场景... 213
9.4.2 表达式运算器的使用... 215
9.4.3 扭转轮廓曲线... 217
9.5 修改轮廓曲线... 219
9.5.1 准备工作... 219
9.5.2 余弦运算器的使用... 221
9.5.3 圆弧的关联... 224
9.5.4 另一组轮廓的渐变设置... 226
本章小结... 230
第10章 摩天大楼外表面的创建.... 231
10.1 分割弧度并创建底板轮廓... 232
10.1.1 分割运算器的使用... 232
10.1.2 分割另外两组轮廓曲线... 234
10.2 改变轮廓曲线的层数... 235
10.2.1 改变一组轮廓的高度... 235
10.2.2 表达式运算器... 236
10.2.3 表达式的输入... 237
10.3 外立面格栅的创建... 239
10.3.1 重命名运算器... 239
10.3.2 格栅化处理轮廓曲线... 240
10.4 独立划分点... 242
10.4.1 清理数据... 242
10.4.2 生成网格... 243
10.4.3 连线的优化... 245
10.5 完成外立面格栅... 247
10.5.1 表达式运算器... 247
10.5.2 另外两组直线的选择... 249
10.6 完成外立面系统和放样表面... 252
10.6.1 创建三组直线之间的点... 252
10.6.2 格栅的创建... 254
10.6.3 一组直线的放样... 256
10.6.4 完成全部外立面的放样... 258
本章小结... 262
第11章 楼板的设计.... 263
11.1 创建楼板... 264
11.1.1 整理文件... 264
11.1.2 收缩轮廓曲线... 265
11.1.3 挤压楼板厚度... 266
11.1.4 修正挤压方向... 268
11.2 完成楼塔并烘焙到Rhino. 270
11.2.1 线条管状化... 270
11.2.2 保存状态... 272
11.2.3 烘焙到Rhino. 274
本章小结... 278
|
內容試閱:
|
前言 自从有了计算机以来,设计师们就梦想着实现设计的自动化。到了20世纪6070年代,计算机开始协助设计师完成复杂的计算,或者绘制规则的工程图纸。但是通过计算机将产品的设计要求和工程师的设计思想,直接变成可用的工程图纸或者数控加工指令,在当时是不可能办到的。20世纪80年代初,AutoCAD软件问世,标志着计算机辅助设计大众化时代的到来,到了20世纪90年代中期,随着个人计算机的普及,特别是Windows操作系统的出现,大量原来只能在工作站上运行的计算机辅助设计软件纷纷向PC上移植。1997年,CAD历史上一个重要的版本AutoCAD R14推出,所见即所得的操作方式,可以使没有多少计算机基础的人士快速掌握计算机绘图技术,使计算机辅助设计很快成为行业标准,彻底替代了传统的手工绘图,引领了一次设计方法上的革命。进入21世纪,计算机辅助设计继续向智能化、多元化的方向发展。机械和建筑设计的复杂性、多样性和灵活性要求设计自动化必须走参数化的路子。自从以Pro/Engineer机械和Revit Building建筑等为代表的基于特征造型的参数化设计系统问世以来,在此基础上实现设计的自动化已经变得切实可行。参数化设计技术是计算机辅助设计技术的又一次巨大的飞跃,目前先进的计算机辅助设计软件大部分实现了参数化。本书讲解的是参数化设计软件的一枝奇葩Grasshopper。Grasshopper并非一个独立的软件,而是一款在Rhino环境下运行的采用参数化方式生成模型的插件。不同于Rhino Script,Grasshopper不需要太多任何的程序语言知识,就可以通过一些简单的流程方法达到设计师所想要的模型。不同于Pro/Engineer和Revit Building这样用途鲜明的参数化软件,Grasshopper更加全能!无论机械设计、艺术设计还是建筑设计,Grasshopper都游刃有余、运用自如。Grasshopper强大的逻辑建模功能可以在短时间内生产大量结果,并以此进行对比分析,优化设计结果。Grasshopper的学习也应当秉承由浅入深、循序渐进的原则,掌握基础操作的同时建立起Grasshopper的基本思维模式。根据笔者多年研究和自身用户的总结,要学好Grasshopper必须把握好以下3个关键环节。* 熟练掌握数据类型、数据结构和相关运算器。* 熟练掌握各种建模的运算器。* 熟练掌握内部编程语言和可以调用的函数。其中的第一条是关键之关键,务必优先掌握。本书对基础命令和运算器做了详细的讲解和运用,希望能为学习Grasshopper的读者提供一个入门的基石。本书在写作过程中参考了国内外专家高手的一些制作方法,并使用了一些相关图片资料,并尽量地在书中做出了标注,但是由于条件所限,不能一一告知,在此一并表示衷心感谢!由于作者水平所限,本书错漏之处在所难免,也恳请国内外专家高手不吝赐教,多多交流沟通。 编 者
第3章 功能和控制内容提要:* 在表格中创建多重物体* 使用数学功能绘制曲线* 控制和表格* 变换操作* 形状图表在Grasshopper中,对模型的编辑和控制是至关重要的一个环节,通过各种控制运算器,可以使模型产生极为丰富的变化。本章将讲解各种控制编辑模型的技法,包括对多重对象的控制、对曲线的控制、对列表的控制等。3.1 在表格中创建多重物体采用Panel列表同时控制多个对象的属性,高效率地编辑模型,这也是参数化建模相对于手工建模最大的优势所在。3.1.1 创建系列圆打开GH,在工作区创建3个运算器,分别是Curve曲线标签面板中的Circle圆,Params参数标签面板的Panel面板和Sets设置标签面板的Series系列,如图3-1所示。
图3-1 创建3个运算器工作区中将出现3个运算器的图标,移动3个图标,将它们从左至右排列,视图中的原点位置将出现一个半径为默认值1的圆,如图3-2所示。在GH工作区,将Series运算器与Panel运算器相连接,将Panel运算器与Circle运算器的R半径端口相连接,视图中将生成10个圆,半径从0到9,如图3-3所示。
图3-2 视图中出现一个圆
图3-3 连接运算器产生系列圆3.1.2 改变系列圆的起点目前,系列圆的起点半径是0,这个圆是没有意义的,用户可以将其更改为从半径1开始。在Series运算器图标左侧右击,在弹出的快捷菜单中选择Set Multiple Numbers命令,在弹出的对话框中,将原来的0作为起点,更改为1,最后单击对话框下方的Commit changes结束设置。Panel运算器中的系列圆半径从1.0开始,如图3-4所示。
图3-4 更改系列圆的起点半径
3.1.3 显示系列圆的信息再创建一个Panel运算器,放置到Cir运算器的右侧。将Cir运算器的C端口与新建Panel相连接,Panel运算器上将显示系列圆的信息,如图3-5所示。括弧中的R: 1.00 mm的含义为圆的半径是1毫米。其单位由系统设置决定。
图3-5 系列圆的半径3.1.4 动态改变系列圆的半径在工作区创建一个Panel运算器和Slider运算器。将Panel运算器的数值设置为1,将其与Series运算器的SStart端口相连接。将Slider运算器与Series运算器的NStep N端口相连接。连接完成后,前者的名称将变更为Step,如图3-6所示。
图3-6 再创建两个运算器接下来用户可以拖动Step运算器中的滑块,动态改变系列圆的半径。Panel运算器的参数将决定系列圆半径的起点,如果设置为2,则系列圆半径的起点将变更为2,如图3-7所示,其余以此类推即可。
图3-7 改变系列圆的起点半径3.2 创建系列直线段本节介绍采用参数化方法绘制系列直线以及编辑直线形态的方法。将讲解使用Range运算器改变系列直线排列方式,加法运算器Addition产生阶梯上升效果,和Reverse List运算器产生扭曲效果的方法。3.2.1 直线的创建新建GH,在工作区创建3个运算器,分别是Curve标签面板中的Line线运算器如图3-8所示和两个PtConstruct Point运算器。
图3-8 Line运算器将两个Pt运算器分别与于Line运算器的A、B端口进行连接,结果如图3-9所示。
图3-9 Line运算器的连接创建一个Series运算器,将它的S输出端口与两个Pt运算器的X轴端口连接起来,如图3-10所示。
图3-10 创建Series运算器3.2.2 创建系列直线创建两个Panel运算器,数字分别设置为1和10。分别连接到两个Pt运算器的Y轴输入端口,如图3-11所示。
图3-11 创建Y轴的输入视图中将出现10条直线,每条线的Y轴向上的坐标为1,10,每条线的X轴方向间距是1,如图3-12所示。
图3-12 创建10条直线
3.2.3 Range运算器的功用在Sets标签面板的下拉菜单中,加载Range范围运算器到工作区。该运算器用于产生一个数字的变化范围,如图3-13所示。
图3-13 Range运算器的位置如果将光标放置到Range运算器右侧的RRange字母上,将会出现一个RangeR as list面板,显示其默认的参数范围,从0.0到1.0,如图3-14所示。
图3-14 显示运算器取值范围将Range右侧的R端口与Pt运算器的Z轴端口相连接,如图3-15所示。视图中的系列直线的Z轴坐标将呈现从低到高的坡状排列,Z轴坐标从0到1排列,如图3-16所示。
图3-15 Range运算器的连接
图3-16 直线的Z轴坐标创建一个Panel运算器,将其与Range运算器的R端口建立连接,Panel面板中将显示Range运算器的取值范围,如图3-17所示。
图3-17 创建一个Panel运算器
3.2.4 动态系列线的设置在工作区中Series运算器的左侧创建一个Slider运算器,双击左侧的运算器名称,打开Slider对话框,设置其N的取值范围为2~20,如图3-18所示。
图3-18 Slider运算器的设置将Slider运算器分别与Range的N端口和Series的C端口连接起来,运算器的名称也变更为Count,如图3-19所示。
图3-19 Slider运算器的连接拖动滑块可动态创建系列直线,如图3-20所示。
图3-20 动态创建系列直线
图3-20 动态创建系列直线续3.2.5 Addition运算器在Maths标签面板中拖动Addition加法运算器到工作区,创建A B图标。该运算器用于加法运算,如图3-21所示。
图3-21 创建Addition运算器将Slider运算器与Addition的A端口相连接,再将Addition运算器的R端口与Series运算器的C端口相连接,原来的Slider与Series的连接将自动断开,如图3-22所示。
图3-22 Addition运算器的连接在Maths标签面板中,将Construct Domain构建数字域按钮拖动到工作区,创建Dom运算器,将Dom右侧的I端口与Range的D端口相连接。再创建一个Panel运算器,参数设为1,将其与Addition运算器的B端口连接起来,如图3-23所示。
图3-23 创建两个运算器再创建一个Slider运算器,将其取值范围设置为0~20,将其与Dom的B端口连接起来。该运算器的名称将变更为Domain end,如图3-24所示。
图3-24 创建新的滑块运算器拖动滑块,系列直线将产生坡度大小的变化,如图3-25所示。
图3-25 Dom运算器控制坡度
图3-25 Dom运算器控制坡度续3.2.6 设置扭曲效果在Sets标签面板,将Reverse List运算器拖动到工作区,创建Rev运算器图标;该运算器用于翻转列表中的数据。将Rev运算器的L端口与Range的R端口连接,将L端口与Pt的Z端口相连接,如图3-26所示。
图3-26 加载Reverse运算器视图中的系列线将呈现相互翻转的扭曲效果,如图3-27所示。
图3-27 系列线的扭曲效果
3.3 使用数学功能绘制曲线本节将讲解一个采用数学运算器创建正弦曲线的案例。3.3.1 创建曲线分布顶点在Maths标签面板,将Evaluate评估拖动到工作区,创建一个Eval运算器,如图3-28所示。该运算器用于评估表达式和变量。
图3-28 Evaluate运算器再创建一个Range和两个Panel运算器。在一个Panel运算器中输入表达式sinx,将这个Panel运算器与Eval的F端口相连接。另一个Panel运算器与Eval的r端口相连接。Range的R端口与Eval运算器的x端口相连接,结果如图3-29所示。
图3-29 创建Panel运算器创建一个Domain运算器和两个Panel运算器,将Dom的I端口与Range的D端口相连接。将两个Panel运算器设置为10和-10,并分别于Dom的A和B端口相连接,如图3-30所示。创建一个Pt运算器,将Range运算器的R端口与Pt的X端口连接起来。Eval的r端口与Pt运算器的Y端口连接起来。视图中将出现一组呈曲线排列的点,如图3-31所示。
图3-30 创建Dom运算器
图3-31 呈曲线排列的点3.3.2 创建正弦曲线在Curve标签面板,拖动Interpolatet到工作区,创建一个IntCrvt运算器图标。该运算器用于创建与系列点相切的插值曲线,如图3-32所示。
图3-32 Interpolate运算器将Pt的右侧端口与IntCrvt运算器的V端口相连接,视图中将出现正弦曲线,如图3-33所示。
图3-33 形成正弦曲线创建一个Slider运算器,将其取值范围设定为5~100。将其与Range的N端口相连接,如图3-34所示。
图3-34 创建Slider运算器拖动滑块可动态改变正弦曲线上的顶点数量,点越多,曲线越光滑,如图3-35所示。
图3-35 动态控制顶点数量3.4 控制和表格3.4.1 创建系列圆新建GH,在工作区创建3个运算器,分别是Cir、Pt和Series。将Pt右侧端口与Cir的P端口相连接。将Series右侧的S端口与Pt的X端口相连接,如图3-36所示。
图3-36 Pt运算器的连接视图中出现了一串10个圆,如图3-37所示。
图3-37 创建10个圆创建两个Panel运算器,分别设置为3和5;将取值为3的运算器与Series的N端口相连接;取值为5的运算器与Series的C端口相连接。视图中出现5个圆,间距为3,如图3-38所示。
图3-38 创建5个圆
3.4.2 圆圈的挤压在Surface表面标签面板,将Extrude挤出运算器拖动到工作区,创建Extr图标。该运算器用于将平面线框挤压形成管状物体。在Vector矢量标签面板,将Unit Z运算器拖动到工作区,创建Z图标,如图3-39所示。
图3-39 Unit Z运算器将Cir运算器的C端口与Extr运算器的B端口相连接。Z运算器的V端口与Extr运算器的D端口相连接,如图3-40所示。
图3-40 Extr运算器的连接视图中的5个圆产生了Z轴挤压效果,形成了5个圆管,圆管的高度为1,如图3-41所示。
图3-41 圆圈被挤压出高度
|
|