SketchUp的自动化探索 (二)建筑表皮生成器
在建筑立面设计,
好看的表皮能带来不一样的光影效果,
也让建筑设计师有了更大的发挥空间。
那今天我们就来制作一个快速生成 建筑表皮 的插件。
建筑表皮生成器 ▼
节奏和韵律
自然界中的许多事物或现象,
往往由于有秩序地变化或有规律地重复出现而激起人们的美感,
这种美通常称为韵律美。
建筑表皮赏析 ▼ (以下图片均来自cuto 侵删)
思路分析
- 通过
Sketchup::InputPoint.pick
获取鼠标在模型上的位置; - 通过
Sketchup::View.draw
绘制辅助线来优化交互体验; - 在获取的四边形区域内通过阵列、上色、变形等操作绘制单个表皮结构;
1、获取鼠标当前位置 ▼ 我们需要在activate方法中实例化一个inputpoint:
class PositionTooldef activate@ip = Sketchup::InputPoint.new@index = 0@spot_list = []endend
在onLButtonDown方法中监控鼠标点击事件,
再通过pick获取当前的点:
class PositionTool
# get current pointdef onLButtonDown(_flags, x, y, view)onSetCursor@ip.pick(view, x, y)@current_point = nil@current_point = @ip.positionend
end
2、绘制辅助线 ▼ 我们上面在`activate`方法中定义了
@index
记录我们的操作步骤,
@current_point
记录鼠标移动时候当前的点,
@spot_list
来储存鼠标选中的4个点:
class PositionTool# get current pointdef onMouseMove(_flags, x, y, view)@ip.pick(view, x, y)@current_point = @ip.positionview.invalidateend# do when onLButtonDowndef onLButtonDown(_flags, x, y, view)case @indexwhen 0# first step@spot_list[0] = @ip.position@copy_ip = @ipwhen 1# sec step@spot_list[1] = @ip.positionwhen 2# thierd step@spot_list[2] = @ip.positionendview.invalidate@index += 1end
end
然后在draw
方法中绘制出辅助线,
第一个和第二个点画一条线,
第二个点之后通过view.draw(GL_LINE_STRIP, @spot_list)
画出我们3个点确定的平行四边形:
class PositionTool def draw(view)# set line widthview.line_width = 3case @indexwhen 0# nothingwhen 1# view.draw_lines(@spot_list[0], @current_point)when 2view.drawing_color = 'orange'@spot_list[2] = @current_point@spot_list = get_fourth_spot(@spot_list)@spot_list[4] = @spot_list[0]view.draw(GL_LINE_STRIP, @spot_list)when 3@index = 0@spot_list = []endend
end
3、绘制表皮 ▼ 再贴一下第一个表皮的绘制过程:
# first skindef draw_skin_01@skin_01 = @ent.add_group@width = @pts[0].distance(@pts[1])@height = @pts[1].distance(@pts[2])@single_width = @width / (@width / @single_width).to_i@single_height = @height / (@height / @single_height).to_ipts_up, split_num_up = split_line(@pts[0], @pts[1], @single_width)pts_dwon, split_num_down = split_line(@pts[0], @pts[3], @single_height)move_up = pts_up[0] - @pts[0]move_down = pts_dwon[0] - @pts[0](0...split_num_down).each do |i|(0...split_num_up).each do |j|group = @skin_01.entities.add_groupstart_spot = @pts[0] + mult_vector(move_up, j) + mult_vector(move_down, i)face = group.entities.add_face start_spot, start_spot + move_up, start_spot + move_up + move_down, start_spot + move_downface.back_material = [rand(200..255), rand(200..255), rand(200..255)]face.pushpull -20.mmendendend
过程中还涉及到鼠标图标
的替换,
操作过程中鼠标的tooltip
提示,
工具中断的监听
等常见操作。
总结
生成表皮只接收了表皮单个组件的长宽、材质颜色、透明度等参数,
我们还可以做成让用户选择单个组件来阵列成不一样的表皮。
接收更多的参数,
实现更灵活的参数化、自动化设计,
需要各位小可爱共同去探索
本次的 building_skin.rbz 是一个更加完整的插件样例,
公众号 Nicaicaiwo 回复 建筑表皮 获取完整插件。
文章转载请注明出处author by Nicaicaiwo
SketchUp的自动化探索 (二)建筑表皮生成器相关推荐
- Sketchup 程序自动化(二)Ruby 基础、单位转换
1.Sketchup的单位转换 在我们打开Sketchup界面时,首先会选择模版,或者是默认的模版,这个模版规定了我们的尺寸单位,我们画的线是按照选择的单位格式来进行计算和规划. 在二次开发中,默认的 ...
- SketchUp的自动化探索 (一)构建私有模型库
每个建筑师的硬盘里面, 是不是都存了多年来收集的几个T的精品模型? 草.树.雕塑.桌椅- 甚至还有剑圣和钢铁侠. 日常建场景去一个个打开我们存的模型copy进去 是不是比较费时间? 今天我们来做个插件 ...
- SketchUp的自动化实战 (二)获取内部空间
SketchUp的自动化实战 (二)获取内部空间 之前在做光伏插件的时候用到了投影功能, 投影功能有很多应用场景, 今天我们来制作一个获取柜体 内部空间 的插件. 获取柜体内部空间 ▼ (获取内部抠门 ...
- SketchUp的自动化实战 (三)随机贴图
SketchUp的自动化实战 (三)随机贴图 今天来学习一个随机贴图插件, 学习两种不同的实现. 随机贴图插件功能是: 收集选择区域中面上的材质, 随机分配给其它没有材质的面.组.组件. 并思考两个问 ...
- 【深度学习】DIY 人脸识别技术的探索(二)
[深度学习]DIY 人脸识别技术的探索(二) 文章目录 训练模型 工具 结果展示 问题二的模型建立与求解 基于 KNN 的人脸识别模型 训练模型 MTCNN 可以并行训练(3 个网络同时训练,前提是内 ...
- Python自动化(十二):一分钟搞定几百个Excel中查找的数据
一.需求说明 首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名.同个年度的总表在年末可能会有两. ...
- 这4款数据自动化探索 Python 神器,解决99%的数据分析问题!
来源:Python学习与数据挖掘 探索性数据分析是一种非常重要的数据探索技术,用于了解数据的各个方面,这是执行任何机器学习或深度学习任务之前最重要的步骤之一. 探索性数据分析可以帮助识别明显的错误,区 ...
- 自动化(二)——八种元素定位方法
自动化(二) 一.元素定位 1)如何元素定位 二.元素定位方式 1)id定位 2)name定位 3) class_name定位 4) tag_name定位 5) link_text以及partial_ ...
- 探索接口自动化(二)--接口联调(Python)
导语 上篇总结了独立接口业务的分析过程,本次总结接口联调业务的分析过程,仍然尝试分解需求任务,采用多版本迭代,在实现需求的前提下再去做代码优化. 一.接口联调业务分析 对所有的接口需要有一个全局的认识 ...
最新文章
- delphi 16 网页缩放
- 手机屏幕适配遇到虚拟键的问题
- 必看 | VLAN划分和网络配置实例
- Java 网络实例三(获取URL响应头的日期信息、获取URL响应头信息、解析URL、ServerSocket和Socket通信实例)
- mysql中limit后面不能使用运算符
- Rsync+Inotify操作文档
- naturalWidth 与 naturalHeight
- CRM中多张关联表join的报表
- coreseek(中文全文搜索)安装和使用(一)
- 大数据产品推荐:金蜂巢大数据集成与脱敏系统
- 小说网站源码+采集器+App端
- 如何充分利用Composition API对Vue3项目进行代码抽离
- 网易新闻详情页排版实现思路
- 新建 Microsoft Office Word 文档
- 新手如何做游戏代理赚钱?
- 哈工大计算机学院官网哈工大软件工程专业,2019哈工大软件工程考研参考书目及复试线...
- 泰克|安捷伦|普源|PICO示波器程控软件二次开发NS-Scope
- lua 报错:'=' expected near ' '
- 《程序员修炼之道:从小工到专家》
- 关于SMBJ24CA