I am trying to make a command line options menu for my plugin. I want to input in a string, as well as have 3 options, 2 boolean and 1 double. Everything works, except for when I input a plain number, like “12”. What that does is change the double value to 12, which I don’t want; I want “12” to be the inputted string. However, if I added another double option to the command bar, and input “12”, the code executes fine.
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
var string_value = "12";
var bool_a_value = false;
var bool_b_value = true;
var double_value = 1.0;
var bool_a_option = new OptionToggle(bool_a_value, "No", "Yes");
var bool_b_option = new OptionToggle(bool_b_value, "No", "Yes");
var double_option = new OptionDouble(double_value, 1.0, 100.0);
var gs = new GetString();
gs.SetCommandPrompt("Enter a string");
gs.SetDefaultString(string_value);
gs.AcceptNothing(true);
var bool_a_index = gs.AddOptionToggle("BooleanA", ref bool_a_option);
var bool_b_index = gs.AddOptionToggle("BooleanB", ref bool_b_option);
var double_index = gs.AddOptionDouble("Double", ref double_option);
for (;;)
{
var rc = gs.Get();
if (rc == GetResult.Option)
{
var index = gs.OptionIndex();
if (index == bool_a_index)
bool_a_value = bool_a_option.CurrentValue;
else if (index == bool_b_index)
bool_b_value = bool_b_option.CurrentValue;
else // if (index == double_index)
double_value = double_option.CurrentValue;
continue;
}
if (rc != GetResult.String && rc != GetResult.Nothing)
{
return Result.Cancel;
}
break;
}
string_value = gs.StringResult();
RhinoApp.WriteLine("String value = {0}", string_value);
RhinoApp.WriteLine("Boolean A value = {0}", bool_a_value);
RhinoApp.WriteLine("Boolean B value = {0}", bool_b_value);
RhinoApp.WriteLine("Double value = {0}", double_value);
return Result.Success;
}
I removed the “AcceptNumber” statement, and now my code looks like this:
getStr.ClearCommandOptions(); //I need this because I set up a command bar menu before this one
getStr.SetCommandPrompt("Expression");
//getStr.AcceptNumber(true, true);
//getStr.SetDefaultString("12");
var leIndex = getStr.AddOption("Last_Expression");
getStr.AddOptionDouble("Accuracy", ref accuracy);
//getStr.AddOptionDouble("AccuracyB", ref accuracyb);
getStr.AddOptionToggle("Curves", ref showCurves);
But I’m still getting getting the same result. If this helps, the code after it looks like this:
while (true)
{
// perform the get operation. This will prompt the user to input a string, but also
// allow for command line options defined above
if (!lastExpression)
{
get_rc = getStr.GetLiteralString();
RhinoApp.WriteLine("getStr.StringResult(): {0}", getStr.StringResult().ToLower().Replace(" ", "").Trim());
}
if (getStr.CommandResult() != Rhino.Commands.Result.Success)
{
return getStr.CommandResult();
}
if (get_rc == Rhino.Input.GetResult.String || lastExpression)
{
RhinoApp.WriteLine("HERE");
}
else if (get_rc == Rhino.Input.GetResult.Option)
{
if (getStr.OptionIndex() == leIndex)
{
RhinoApp.WriteLine("Previous Equation: {0}", savedLastExpression);
}
continue;
}
break;
}
I can enter letters, characters, and numbers all in the same string, but I just can’t put numbers by themselves.
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
var string_value = "12";
var bool_a_value = false;
var bool_b_value = true;
var double_value = 1.0;
var bool_a_option = new OptionToggle(bool_a_value, "No", "Yes");
var bool_b_option = new OptionToggle(bool_b_value, "No", "Yes");
var double_option = new OptionDouble(double_value, 1.0, 100.0);
var gs = new GetString();
gs.SetCommandPrompt("Enter a string");
gs.SetDefaultString(string_value);
gs.AcceptNumber(true, true);
gs.AcceptNothing(true);
var bool_a_index = gs.AddOptionToggle("BooleanA", ref bool_a_option);
var bool_b_index = gs.AddOptionToggle("BooleanB", ref bool_b_option);
var double_index = gs.AddOptionDouble("Double", ref double_option);
for (; ; )
{
var rc = gs.Get();
if (rc == GetResult.Option)
{
var index = gs.OptionIndex();
if (index == bool_a_index)
bool_a_value = bool_a_option.CurrentValue;
else if (index == bool_b_index)
bool_b_value = bool_b_option.CurrentValue;
else // if (index == double_index)
double_value = double_option.CurrentValue;
continue;
}
if (rc == GetResult.Number)
{
var value = gs.Number();
string_value = value.ToString();
break;
}
if (rc != GetResult.String && rc != GetResult.Nothing)
{
return Result.Cancel;
}
string_value = gs.StringResult();
break;
}
RhinoApp.WriteLine("String value = {0}", string_value);
RhinoApp.WriteLine("Boolean A value = {0}", bool_a_value);
RhinoApp.WriteLine("Boolean B value = {0}", bool_b_value);
RhinoApp.WriteLine("Double value = {0}", double_value);
return Result.Success;
}
I just wanted to quickly thank you, ever since I got ready for school and started other projects I forgot about the one I was currently working on. Your help was very valuable and was able to enter a number perfectly after I figured out the issue.