Hi all,
I have been struggling with this for a while and can’t quite get my head around the script’s behaviour.
Essentially, in previous code, I have joined a bunch of curves via
Curve joined = Curve.JoinCurves(crvsToJoin.ToArray(), RhinoMath.ZeroTolerance); These curves are derived from previous scripting working similarly to the SelChain command. The essential difference is that when the user picks the chain, the command should automatically join it and discard the ‘used curves’ (so that there aren’t any duplicates). No problem up until here.
Ideally, I would like to add the joined curve to the display so the user can verify it first, and then press enter if they want to confirm. Only then will the script add the joined curve to the document and delete the curves ‘used’ to make the joined curve. To do this, I have written the following code:
Curve[] joined = Curve.JoinCurves(crvsToJoin.ToArray(), RhinoMath.ZeroTolerance);
display.AddCurve(joined[0], color, thickness);
view.Redraw();
string input = string.Empty;
var result = Rhino.Input.RhinoGet.GetString("Premi Enter per confermare la Selezione.", true, ref input);
if (result == Result.Success)
{
Guid joinedCrvId = doc.Objects.AddCurve(joined[0]);
ObjRef joinedCrvObjRef = new ObjRef(doc, joinedCrvId);
doc.Objects.Delete(doc.Objects.Find(pickedcrvID));
display.Dispose();
curvaConcatenata = joinedCrvObjRef;
return true;
}
else
{
display.Dispose();
return false;
}
This code will not add the joined curve to the document and neither will it delete the curve that was originally picked by the user to trigger the chain selection.
Tinkering, I have found a solution which sort of works:
Curve[] joined = Curve.JoinCurves(crvsToJoin.ToArray(), RhinoMath.ZeroTolerance);
Guid joinedCrvId = doc.Objects.AddCurve(joined[0]);
ObjRef joinedCrvObjRef = new ObjRef(doc,joinedCrvId);
display.AddCurve(joined[0], color, thickness);
view.Redraw();
doc.Objects.Delete(doc.Objects.Find(pickedcrvID));
string input = string.Empty;
var result = Rhino.Input.RhinoGet.GetString("Premi Enter per confermare la Selezione.", true, ref input);
if (result == Result.Success)
{
display.Dispose();
curvaConcatenata = joinedCrvObjRef;
return true;
}
else
{
display.Dispose();
return false;
}
The caveat here is that if the users presses escape while the command is running, it still adds the curve and deletes the originally picked curve. What am I not seeing?
Thanks