🌓
搜索
 找回密码
 立即注册

SketchUp的二次开发探索(五)自生长动画插件>>平滑拉高 ...

长空k 2022-8-24 13:31:55 68490

上一讲我们学会了如何操控模型运动。

nicaicai:SketchUp的二次开发探索 (四)自动化建筑遐想 6 赞同 · 3 评论文章

假如模型体块能按照我们预设好的条件长高,移动,旋转,上色。那么展示这样一个动效给导师或都领导看,会比迁强的体块分析图要更具说服力。

aFmbocAUCuz56vkO.jpg
QLzMw7ULWMEaHApU.jpg
CG3ySeK52SUzZyS2.jpg

今天就带小可爱们来逐步实现一个满足我们做体块分析的插件吧!

平滑拉高效果

tm0H8WwMH08mT88w.jpg

思路分析:

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

TyXn98zx80Z2i5U7.jpg

扫一扫

0 回复

高级模式
游客
返回顶部