Sketchup 程序自动化(七)Ruby流程控制

在进行 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
}

复制代码

你可能感兴趣的:(ruby)