static int EvaluateExpressionHelper(IntPtr statementsAsStringHolder, IntPtr expressionAsStringHolder, int rhinoDocId, IntPtr pResultString) { int rc = 0; #if RHINO_SDK try { string state = StringHolder.GetString(statementsAsStringHolder); string expr = StringHolder.GetString(expressionAsStringHolder); PythonScript py = PythonScript.Create(); object eval_result = py.EvaluateExpression(state, expr); if (null != eval_result) { string s = null; RhinoDoc doc = RhinoDoc.FromId(rhinoDocId); if (eval_result is double || eval_result is float) { if (doc != null) { int display_precision = doc.DistanceDisplayPrecision; string format = "{0:0."; format = format.PadRight(display_precision + format.Length, '0') + "}"; s = string.Format(format, eval_result); } else s = eval_result.ToString(); } else if (eval_result is string) { s = eval_result.ToString(); } System.Collections.IEnumerable enumerable = eval_result as System.Collections.IEnumerable; if (string.IsNullOrEmpty(s) && enumerable != null) { string format = null; if (doc != null) { int display_precision = doc.DistanceDisplayPrecision; format = "{0:0."; format = format.PadRight(display_precision + format.Length, '0') + "}"; } System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (object obj in enumerable) { if (sb.Length > 0) sb.Append(", "); if ( (obj is double || obj is float) && !string.IsNullOrEmpty(format) ) { sb.AppendFormat(format, obj); } else { sb.Append(obj); } } s = sb.ToString(); } if (string.IsNullOrEmpty(s)) s = eval_result.ToString(); UnsafeNativeMethods.ON_wString_Set(pResultString, s); } rc = 1; } catch (Exception ex) { UnsafeNativeMethods.ON_wString_Set(pResultString, ex.Message); rc = 0; } #endif return rc; }
private static void OnContentListCleared(int kind, int docId) { if (m_content_list_cleared_event != null) { try { m_content_list_cleared_event(null, new ContentListEventArgs((RenderContentKind)kind, RhinoDoc.FromId(docId))); } catch (Exception ex) { Runtime.HostUtils.ExceptionReport(ex); } } }