在进行 Sketchup 二次开发时,会涉及到对逻辑进行判断,这些判断也是程序员赋予程序思维的过程,下面通过代码回顾下 Ruby 强大的流程控制:
model = Sketchup.active_model
ent = model.entities
# Ruby 语言实用特性
# 结构控制
x = "ASD"
a = 1
b = 2
# if判断
if a > b
puts a
else
puts b
end
# case :条件
puts case x
when String; puts "String"
when Numeric then puts "Numeric"
when TrueClass,FalseClass ; puts "Boolen"
else
puts "Other"
end
x = 1
# while : 条件
while x <10
puts x
x += 1
end
x = 1
# until :直到...才停止
until x > 10
puts x
x += 1
end
for i in 1..10
puts i
end
# 改变结构
# return 返回参数,默认为nil 跳出整个函数
# break 结束当前循环
# next 结束当前轮的循环到下一次
# redo
puts "======= redo ======="
# 让循环从头开始
i = 0
while i < 3
puts i
i += 1
redo if i == 3
end
################# 迭代器
# times 执行代码多少次
3.times{
puts "666666666"
}
# each 类似于 for in
arr = [11,22,33]
arr.each{ |item|
puts item
}
# 也可以将块写成
arr.each do |item|
puts item
end
# map 将每个元素拿出后,执行块加工后放回数组
[1,2,3].map{|item|
item * item
}
puts "---------"
# upto 从 1到10 递增 打印的是 1到10的整数
1.upto(10) {|x|
puts x
}
# 对于 Numeric的迭代器
# 从 0 开始 以0.1为增量 ,输出到 PI
0.step(Math::PI,0.1){ |x|
puts Math::sin(x)
}
# 简单应用例子
# 判断面
ent.each{ |item|
if item.typename == "Face" && item.normal == [1,0,0]
puts "这是为X轴的面"
end
}
# 获取一个立方体的顶点数据
face = ent.add_face [[0,0,0],[100,0,0],[100,100,0],[0,100,0]]
face.pushpull -100
vertex_arr = []
ent.each do |entity|
if entity.typename == "Edge"
# 柔化边缘线
if entity.start.position.x > 0 && entity.start.position.y > 0
entity.smooth = true
end
# 通过逻辑运算符,获得不重复的矩阵
vertex_arr = vertex_arr | entity.vertices
end
end
vertex_arr.each{ |vertex|
puts vertex.position
}
复制代码