每个建筑师的硬盘里面是不是都存了多年来收集的几个T的精品模型? 草、树、雕塑、桌椅...甚至还有剑圣和钢铁侠。 日常建场景去一个个打开我们存的模型copy进去是不是比较费时间? 今天我们来做个插件快速的从本地导入我们需要的模型。
导入内置模型▼
导入本地模型▼
思路分析- 通过
UI.openpanel 读取内置/本地需要导入的模型 路径 - 通过
DefinitionList.load 从文件 读取 组件 - 通过
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", "", "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') do
model = Sketchup.active_model
com_path = UI.openpanel('Open Skp File', '', 'Skp Files|*.skp||')
com_def = model.definitions.load com_path
model.place_component(com_def)
end
toolbar = 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.capitalize
cmd.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.rbz 成private_model_libs.zip 即可解压出插件源码。 欢迎小可爱们一起交流学习。 http://weixin.qq.com/r/qCiDm3bEOStGrTL49326 (二维码自动识别) 文章转载请注明出处author by Nicaicaiwo
|