Random Rotation

rr2d = UI::Command.new("Random Rotation") {
  Sketchup.active_model.start_operation('Random Rotation', true)
  prompts = ["最大角度","最小角度"]
  defaults = [-30,30]
  @input = UI.inputbox(prompts,defaults,"参数设置")
  def random_rotation(o) 
    centre = o.bounds.center 
    angle = rand(@input[0]..@input[1]).degrees
    trans = Geom::Transformation.rotation(centre,[0,0,1],angle) 
    Sketchup.active_model.entities.transform_entities(trans,o) 
  end
  Sketchup.active_model.selection.each{|o| 
    random_rotation(o) 
    }
  Sketchup.active_model.commit_operation
}
rr2d.set_validation_proc {
  if Sketchup.active_model.selection.length == 0
    MF_GRAYED
  else
    MF_ENABLED
  end
}
UI.menu("Draw").add_item rr2d
© AWhouse
rr3d = UI::Command.new("Random Rotation 3D") {
  Sketchup.active_model.start_operation('Random Rotation 3D', true)
  def random_3d_rotation(o) 
    centre = o.bounds.center
    phi = rand(360).degrees
    trans_h = Geom::Transformation.rotation(centre,[0,0,1],phi) 
    normal = Geom::Vector3d.new(1,0,0)
    normal.transform!(trans_h) 
    theta = rand(360).degrees
    trans_v = Geom::Transformation.rotation(centre,normal,theta) 
    Sketchup.active_model.entities.transform_entities(trans_h*trans_v,o) 
  end
  Sketchup.active_model.selection.each{|o| 
    random_3d_rotation(o) 
  }
  Sketchup.active_model.commit_operation
}
rr3d.set_validation_proc {
  if Sketchup.active_model.selection.length == 0
    MF_GRAYED
  else
    MF_ENABLED
  end
}
UI.menu("Draw").add_item rr3d
© AWhouse