每个建筑师的硬盘里面,
是不是都存了多年来收集的几个T的精品模型?
草、树、雕塑、桌椅…
甚至还有剑圣和钢铁侠。
日常建场景去一个个打开我们存的模型copy进去
是不是比较费时间?
今天我们来做个插件快速的从本地导入我们需要的模型。

导入内置模型

导入本地模型

思路分析
  1. 通过UI.openpanel读取内置/本地需要导入的模型 路径
  2. 通过DefinitionList.load从文件 读取 组件
  3. 通过Model.place_component放置 模型

1、选择.skp文件

UI.openpanel可以开启系统选择文件的窗口,
获取到选中文件的路径。

.openpanel(title, directory, filename) ⇒ String
  • title 选择文件窗口的标题;
  • directory 窗口默认打开的系统路径,可以不填,也可以指定到你模型库的路径;
  • filename 默认的文件名,可以通过UIname|wildcard||来筛选你需要打开的文件类型;

那我们只需要选择.skp文件,就可以这样写(过滤文件这个功能只在Windows上有效)

chosen_skp = UI.openpanel("Open Skp File", "c:/", "Skp Files|*.skp||")

2、从.skp文件读取出组件

DefinitionList.load可以从文件读取出组件

load(path) ⇒ Sketchup::ComponentDefinition
  • path 组件文件路径,就是我们的.skp文件路径;

从第一步我们就可以获取到我们需要导入的文件路径。

3、摆放组件

Model.place_component可以在模型中摆放我们想导入的模型

place_component(componentdef, repeat = false) ⇒ Sketchup::Model?
  • componentdef 从第二步获取到的 ComponentDefinition
  • repeat 是否重复导入,如果你只想导入一次就默认false,true可以多次创建我们想导入的模型

我们来整合一下放到插件结构里面即可:

toolbar = UI::Toolbar.new 'pricate_model_library'cmd = UI::Command.new('pricate_model_library') domodel = Sketchup.active_modelcom_path = UI.openpanel('Open Skp File', '', 'Skp Files|*.skp||')com_def = model.definitions.load com_pathmodel.place_component(com_def)
endtoolbar = toolbar.add_item cmd
toolbar.show

4、内置组件

如果我们使用频率非常高的组件,
我们也可以内置到插件里面。
下面我们找了三个莫比乌斯带形体组件来内置到插件里面去,
我们对上面的导入方法重写,
设置参数接收需要内置的模型名称

def self.place_in_model(name)skp = File.join(@modelsdir, name + '.skp')com_def = @model.definitions.load skp@model.place_component(com_def, true)
end

然后我们遍历内置文件名来调用place_in_model插入多个插件。

shapes = %w[uzi_fir uzi_sec uzi_thir]
shapes.each do |s|cmd = UI::Command.new(s.capitalize) { place_in_model(s) }cmd.small_icon = File.join(@imagesdir, s + '.png')cmd.large_icon = File.join(@imagesdir, s + '.png')cmd.tooltip = s.capitalizecmd.status_bar_text = 'Place ' + s + ' (multiple)'toolbar.add_item cmd
end

上面有部份以@开头的实例变量
其实就是为了方便提取了部分会多次用到的变量。
为了项目规范我把模型和插件图标分别放到了各自的文件夹,
项目结构是这样的:

private_model_libs
├── images
│   ├── grow.png
│   ├── import.png
│   ├── uzi_fir.png
│   ├── uzi_sec.png
│   └── uzi_thir.png
├── models
│   ├── uzi_fir.skp
│   ├── uzi_sec.skp
│   └── uzi_thir.skp
└── private_model_libs.rb

文件夹同级目录下还有个private_model_libs.rb来声明插件的一些其他信息,

比如插件名称版本号码作者等信息。

5、总结

这是一个结构轻巧的插件,
代码也经过了rubocop规范,
适合初学者学习如何制作插件。

其实内置的几个组件不一定是我们用的到的,
我们可以预留几个内置模型的位置,
用的时候每个人都可以修改成自己常用的组件。

维护好自己的组件库,
借用这种导入模式,
希望能有效的帮助各位小可爱提高工作效率。

公众号回复 私有库 获取完整插件。

修改private_model_libs.rbzprivate_model_libs.zip即可解压出插件源码。
欢迎小可爱们一起交流学习。

文章转载请注明出处author by Nicaicaiwo

SketchUp的自动化探索 (一)构建私有模型库相关推荐

  1. SketchUp的自动化探索 (二)建筑表皮生成器

    在建筑立面设计, 好看的表皮能带来不一样的光影效果, 也让建筑设计师有了更大的发挥空间. 那今天我们就来制作一个快速生成 建筑表皮 的插件. 建筑表皮生成器 ▼ 节奏和韵律 自然界中的许多事物或现象, ...

  2. SketchUp的自动化实战 (三)随机贴图

    SketchUp的自动化实战 (三)随机贴图 今天来学习一个随机贴图插件, 学习两种不同的实现. 随机贴图插件功能是: 收集选择区域中面上的材质, 随机分配给其它没有材质的面.组.组件. 并思考两个问 ...

  3. SketchUp的自动化实战 (二)获取内部空间

    SketchUp的自动化实战 (二)获取内部空间 之前在做光伏插件的时候用到了投影功能, 投影功能有很多应用场景, 今天我们来制作一个获取柜体 内部空间 的插件. 获取柜体内部空间 ▼ (获取内部抠门 ...

  4. 这4款数据自动化探索 Python 神器,解决99%的数据分析问题!

    来源:Python学习与数据挖掘 探索性数据分析是一种非常重要的数据探索技术,用于了解数据的各个方面,这是执行任何机器学习或深度学习任务之前最重要的步骤之一. 探索性数据分析可以帮助识别明显的错误,区 ...

  5. 超融合与私有云区别及联系:基于超融合构建私有云成主流方案

    核心观点 1.目前主流私有云参考架构主要包含三个层次: IaaS 层.PaaS 层以及云管理平台,企业进行私有云改造应该根据自己的实际需求逐步落地: 2.IaaS 层是私有云最核心和最基础的部分,也是 ...

  6. ssl以及构建私有CA

    ssl以及构建私有CA ssl协议:将报文在传输前进行加密: # ssl 所谓的安全,加密是指保证:保密,完整,可用: ssl将明文通过密钥转为密文, 密码算法和协议: 对称加密: 单向加密: 公钥加 ...

  7. 使用Samba服务器构建私有和公共共享目录

      使用Samba服务器构建私有和公共共享目录   实验背景:       小诺公司使用RHEL4系统构建了Linux服务器,并在该服务器上默认安装了Samba服务器及相关软件包作为该公司的文件服务器 ...

  8. 和我一起构建私有物联网云平台

    和我一起构建私有物联网云平台 "预计2020年全球的物联网设备将达到500亿台"这句话已经被我无耻地在各种材料.PPT中引用过无数次了,但这并不妨碍物联网已经成为或即将成为下一个浪 ...

  9. etcd+skydns构建私有域名解析服务器

    1.研究背景 在大数据和云计算等领域应用中,如果机器数量达到一定的量时,可以考虑自建域名解析服务集群.构建私有的域名解析主要是出于两个目的:(1)通过域名,而不是ip来记忆服务,是更方便的事情:(2) ...

最新文章

  1. Eclipse 之 EasyExplore 插件
  2. hadoop部署单机
  3. Django之路--第一篇
  4. 基于FFmpeg H264 + G711A 音视频裸流合并 MP4文件 ( G711A 转 AAC)
  5. 神经网络网络参数的取值问题
  6. 跨站请求伪造攻击(CSRF)
  7. Ubuntu16.04彻底删除MySQL5.7
  8. php判断全是中文正则,php判断是否为中文正则表达式大全
  9. java freemarker_Java: FreeMarker的配置和使用
  10. python一元线性回归算法_Python机器学习(二):线性回归算法
  11. 矩阵专业词汇英文对照
  12. 徐培成JAVA基础04
  13. 威纶通定时循环操作宏_「精品详解」威纶通触摸屏宏指令应用(三)
  14. 如何克隆路由器MAC地址,怎么操作?
  15. RCNN 的 Hard Negative Mining的原理
  16. 科大讯飞批量语音转文字
  17. 2048C语言源码linux
  18. 苹果于近日推送了 iOS 14.5 开发者预览版 Beta
  19. springboot采用协同过滤算法的家政服务平台的设计与实现毕业设计源码260839
  20. 计算机存在其他连接设备错误,USB设备连接电脑失败怎么办

热门文章

  1. 1. Scrapy 框架介绍
  2. [转]Android数据存储SharedPreferences的使用
  3. 教育硬件产品换届:C端战火纷飞,B端渐入佳境
  4. 设计师必读的九本书_设计师必读:不要让我重新思考
  5. pkl中文意思_王者荣耀坦克回复流是什么意思 PKL联赛最强坦克回复流阵容玩法...
  6. android 流量 mate9,安卓也能久用不卡?Mate9用事实证明这完全可以有
  7. VMware虚拟机快照
  8. matlab循环选择语句怎么写,如何使用matlab循环语句
  9. 模板引擎jsrender的简单入门
  10. 如何在WordPress中添加FontAwesome图标