上一讲我们学会了如何操控模型运动。 nicaicai:SketchUp的二次开发探索 (四)自动化建筑遐想
6 赞同 · 3 评论文章 假如模型体块能按照我们预设好的条件长高,移动,旋转,上色。那么展示这样一个动效给导师或都领导看,会比迁强的体块分析图要更具说服力。 ▼
今天就带小可爱们来逐步实现一个满足我们做体块分析的插件吧! 平滑拉高效果▼ 思路分析: 1、pushpull 方法推拉面成体块; 2、UI.start_timer 可以延时渲染动作;
结合这两点, 我们就可以把pushpull 分割成N次动作来推拉, 以此实现一个平滑拉高的效果。 #1#2 初始化模型添加交互界面▼ # 1、初始化模型,获取选中模型
mod = Sketchup.active_model
ent = mod.entities
sel = mod.selection
# 2、交互界面
prompts = ['高度m:']
defaults = [10]
title = '生长动画'
input = UI.inputbox(prompts,defaults,title)
初始化模型和设置交互界面上几讲我们都用过很多次了, sel = mod.selection 可以获取我们当前选中的模型,
我们再添加一个交互界面接收我们输入的高度参数。
input 是一个list 数组,
input[0] 代表第一输入的参数,以此类推。
#3 将选中的面打成组▼ # 3、选中面打成组件
gp = ent.add_group(sel)
face = gp.entities.to_a.grep(Sketchup::Face)[0]
我们把选中的面打成组件, 有利于我们后面对整个组件做选择和移动操作, 打成组之后选中的面会丢失, 所以我们需要重新在组件中选中我们的面。
#4 设置动画频率▼ # 4、设置动画频率,获取输入高度
frequency = 300
height = input[0]
he = height/frequency.to_f
我们定义一个frequency作为动画频率, 设置成300, 表示把我们的推拉动作分割成300次来实现。 再计算出每次每次需要推拉的高度:he = 高度/频率。 #5 放入循环▼ # 5、按照频率循环操作推拉动作
(1..frequency).each do |s|
UI.start_timer(s*0.005, false) {
face.pushpull(he.m)
}
end
最后我们把推拉动作放到循环的延时操作里面去, s*0.005表示没0.005秒执行一次动作, 这个值设置的越小动画会越流畅。
当然这个参数也可以从交互界面接收, 这样就能灵活配置动画的频率。
至此我们的平滑拉高就完成啦., 感兴趣的小可爱们再细品一下, 下一讲我们再来说一下平滑移动和旋转。 最后贴一下完整代码: # 1、初始化模型,获取选中模型
mod = Sketchup.active_model
ent = mod.entities
sel = mod.selection
# 2、交互界面
prompts = ['高度m:']
defaults = [10]
title = '生长动画'
input = UI.inputbox(prompts,defaults,title)
# 3、选中面打成组件
gp = ent.add_group(sel)
face = gp.entities.to_a.grep(Sketchup::Face)[0]
# 4、设置动画频率,获取输入高度
frequency = 300
height = input[0]
he = height/frequency.to_f
# 5、按照频率循环操作推拉动作
(1..frequency).each do |s|
UI.start_timer(s*0.005, false) {
face.pushpull(he.m)
}
end
文章转载请注明出处author by Nicaicaiwo
|