如何从“UI.Inputbox”字段中询问和验证长度?

时间:2015-04-13 14:15:02

标签: ruby sketchup

在SketchUp上,可以使用使用UI.Inputbox方法创建的对话窗口请求用户输入。要求脚本在之后创建的某些几何体的尺寸或长度是一项基本任务。

SketchUp内部使用英寸来定义几何体。用户将以他/她的本地化维度成语给出答案:1.5米的“1.5米”。内置的SketchUp方法.to_l将字符串转换为长度。请参阅https://github.com/thomthom/SketchUp-Units-and-Locale-Helper#sketchups-shortcomings以供参考。

我要求用户将长度作为UI.Inputbox的字符串,然后使用.to_l将其转换为长度值,但如果用户输入的值无效,我不知道如何检查或如何处理错误。

由于我的本地化长度输入有','作为小数点(葡萄牙语是1.5米而不是1.5米),我不愿意要求浮点值。

prompts = ['Length']
defaults = ['1,2']
inputs = UI.inputbox( prompts, defaults ,'Length Input')
inputs[0].to_l
#try inputs[0].to_f 

如何检查输入字符串或捕获.to_l失败?

2 个答案:

答案 0 :(得分:1)

这应该对你有用,但可能需要根据每个错误案例的要求进行微调。

prompts = ['Length']
defaults = ['1,2']
inputs = UI.inputbox( prompts, defaults ,'Length Input')

假设上述情况,我们可以创建一种方法来处理输入的错误情况。

def parse_input(inputs)
  input = normalize(inputs)

  handle_error if input.empty?
  input
end

def normalize(input)  
   input.gsub(/[a-zA-Z]/, "")
end

def handle_error
  # you could raise an error or just return the default
end

当您解析输入时,它会尝试“标准化”它 - 意味着它用点替换逗号然后调用to_f。由于看起来您是从字段中获取此输入,inputs将始终为String,因此无需担心处理其他类型。样本输出:

normalize('1,4') #=> '1.4'
normalize('2.6') #=> '2.6'
normalize('5a.2') #=> '5.2'
normalize('text') #=> ''

现在输入已经标准化,你可以处理错误(基本上当标准化输入是一个空字符串时。你想要做什么取决于你,在你的特定情况下最有效。

最后,如果没有输入错误,则返回输入。

答案 1 :(得分:1)

  

我要求用户输入一个长度为UI.Inputbox的字符串然后   使用.to_l

将其转换为长度值

问题是错误的,我的意思是,要求一个字符串并尝试自己来管理本地化浮点值的复杂性并不是一个好主意。不要这样做!

Aks长度为'和SketchUp将为您处理一切。使用void,将在本地/所选单位中提示用户输入值。结果输入将为'长度 - 内部单位'。

.m

来源:ThomThom http://www.thomthom.net/thoughts/2012/08/dealing-with-units-in-sketchup/