public void XYZFromReferencePoint() { var model = dynSettings.Controller.DynamoModel; string samplePath = Path.Combine(_testPath, @".\XYZFromReferencePoint.dyn"); string testPath = Path.GetFullPath(samplePath); model.Open(testPath); ReferencePoint rp; using (_trans = new Transaction(dynRevitSettings.Doc.Document)) { _trans.Start("Create a reference point."); rp = dynRevitSettings.Doc.Document.FamilyCreate.NewReferencePoint(new XYZ()); _trans.Commit(); } FSharpList <FScheme.Value> args = FSharpList <FScheme.Value> .Empty; args = FSharpList <FScheme.Value> .Cons(FScheme.Value.NewContainer(rp), args); //find the XYZFromReferencePoint node var node = dynSettings.Controller.DynamoModel.Nodes.Where(x => x is XyzFromReferencePoint).First(); FScheme.Value v = ((NodeWithOneOutput)node).Evaluate(args); Assert.IsInstanceOf(typeof(XYZ), ((FScheme.Value.Container)v).Item); }
public string BuildValueString(FScheme.Value eIn, int currentListIndex, int maxListIndex, int currentDepth, int maxDepth) { if (eIn == null) { return("<null>"); } string accString = String.Concat(Enumerable.Repeat(" ", currentDepth)); if (maxDepth == currentDepth || currentListIndex == maxListIndex) { accString += "...\n"; return(accString); } if (eIn.IsContainer) { var str = (eIn as FScheme.Value.Container).Item != null ? (eIn as FScheme.Value.Container).Item.ToString() : "null"; accString += str; } else if (eIn.IsFunction) { accString += "<function>"; } else if (eIn.IsList) { accString += "List\n"; var list = (eIn as FScheme.Value.List).Item; // build all elements of sub list foreach (var e in list.Select((x, i) => new { Element = x, Index = i })) { if (e.Index > maxListIndex) { break; } accString += BuildValueString(e.Element, e.Index, maxListIndex, currentDepth + 1, maxDepth); } } else if (eIn.IsNumber) { accString += (eIn as FScheme.Value.Number).Item.ToString(); } else if (eIn.IsString) { accString += "\"" + (eIn as FScheme.Value.String).Item + "\""; } else if (eIn.IsSymbol) { accString += "<" + (eIn as FScheme.Value.Symbol).Item + ">"; } accString += "\n"; return(accString); }
public double GetDoubleFromFSchemeValue(FScheme.Value value) { var doubleWatchVal = 0.0; Assert.AreEqual(true, Dynamo.FSchemeInterop.Utils.Convert(value, ref doubleWatchVal)); return(doubleWatchVal); }
private double getDoubleFromFSchemeValue(FScheme.Value value) { var doubleWatchVal = 0.0; Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref doubleWatchVal)); return(doubleWatchVal); }
public static string GetStringFromFSchemeValue(this FScheme.Value value) { string stringValue = string.Empty; Assert.IsTrue(Utils.Convert(value, ref stringValue)); return(stringValue); }
void registerButt_Click(object sender, System.Windows.RoutedEventArgs e) { //data = Value.NewList(FSharpList<Value>.Empty); View activeView = dynRevitSettings.Doc.ActiveView; PickedSunAndShadowSettings = activeView.SunAndShadowSettings; if (PickedSunAndShadowSettings != null) { sunAndShadowSettingsID = activeView.SunAndShadowSettings.Id; this.RegisterEvalOnModified(sunAndShadowSettingsID); // register with the DMU, TODO - watch out for view changes, as sun is view specific XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings); this.data = FScheme.Value.NewContainer(sunVector); this.tb.Text = PickedSunAndShadowSettings.Name; } else { //sunPathButt.Content = "Select Instance"; this.tb.Text = "Nothing Selected"; } }
internal static dynamic convertFromValue(FScheme.Value exp, ObjectOperations invoker) { if (exp.IsList) { return(((FScheme.Value.List)exp).Item.Select(x => convertFromValue(x, invoker)).ToList()); } else if (exp.IsNumber) { return(((FScheme.Value.Number)exp).Item); } else if (exp.IsString) { return(((FScheme.Value.String)exp).Item); } else if (exp.IsContainer) { return(((FScheme.Value.Container)exp).Item); } else if (exp.IsFunction) { var func = ((FScheme.Value.Function)exp).Item; PyWrapper wrapped = args => convertFromValue( func.Invoke(args.Select(a => convertToValue(a, invoker) as FScheme.Value).ToFSharpList()), invoker); return(wrapped); } else { throw new Exception("Not allowed to pass Functions into a Python Script."); } }
public static double GetDoubleFromFSchemeValue(this FScheme.Value value) { var doubleWatchVal = 0.0; Assert.IsTrue(Utils.Convert(value, ref doubleWatchVal)); return(doubleWatchVal); }
public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args) { if (!args[0].IsList) { throw new Exception("Input must be a list of numbers."); } FSharpList <FScheme.Value> vals = ((FScheme.Value.List)args[0]).Item; var len = vals.Length; if (len % 3 != 0) { throw new Exception("List size must be a multiple of 3"); } var result = new FScheme.Value[len / 3]; int count = 0; while (!vals.IsEmpty) { result[count] = FScheme.Value.NewContainer(new XYZ( ((FScheme.Value.Number)vals.Head).Item, ((FScheme.Value.Number)vals.Tail.Head).Item, ((FScheme.Value.Number)vals.Tail.Tail.Head).Item)); vals = vals.Tail.Tail.Tail; count++; } return(FScheme.Value.NewList(Utils.SequenceToFSharpList(result))); }
private FSharpList <FScheme.Value> getListFromFSchemeValue(FScheme.Value value) { FSharpList <FScheme.Value> listWatchVal = null; Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref listWatchVal)); return(listWatchVal); }
public PortData(string nickName, string tip, Type portType, FScheme.Value defaultValue = null) { NickName = nickName; ToolTipString = tip; PortType = portType; DefaultValue = defaultValue; }
public FScheme.Value Evaluate(IEnumerable <Binding> bindings) { var scope = this.engine.CreateScope(); foreach (var bind in bindings) { scope.SetVariable(bind.Symbol, bind.Value); } try { this.source.Execute(scope); } catch (Exception e) { var eo = engine.GetService <ExceptionOperations>(); string error = eo.FormatException(e); return(FScheme.Value.NewString(error)); } FScheme.Value result = FScheme.Value.NewNumber(1); if (scope.ContainsVariable("OUT")) { dynamic output = scope.GetVariable("OUT"); result = Converters.convertToValue(output); } return(result); }
private string getStringFromFSchemeValue(FScheme.Value value) { string stringValue = string.Empty; Assert.AreEqual(true, FSchemeInterop.Utils.Convert(value, ref stringValue)); return(stringValue); }
public static FSharpList <FScheme.Value> GetListFromFSchemeValue(this FScheme.Value value) { FSharpList <FScheme.Value> listWatchVal = null; Assert.IsTrue(Utils.Convert(value, ref listWatchVal)); return(listWatchVal); }
public static T GetObjectFromFSchemeValue <T>(this FScheme.Value value) { Assert.IsInstanceOf <FScheme.Value.Container>(value); var o = (value as FScheme.Value.Container).Item; Assert.IsInstanceOf <T>(o); return((T)o); }
private static FScheme.Value setParam(FamilySymbol fi, Definition paramDef, FScheme.Value valueExpr) { var p = fi.get_Parameter(paramDef); if (p != null) { return(_setParam(fi, p, valueExpr)); } throw new Exception("Parameter \"" + paramDef.Name + "\" was not found!"); }
public List <List <FScheme.Value> > ConvertTo2DList(FScheme.Value v) { if (v.IsList) { return(((FScheme.Value.List)v).Item.Select(ConvertRow).ToList()); } var list = new List <List <FScheme.Value> >(); list.Add(ConvertRow(v)); return(list); }
internal static dynamic convertFromValue(FScheme.Value exp) { if (exp.IsList) { return(((FScheme.Value.List)exp).Item.Select(x => convertFromValue(x)).ToList()); } else if (exp.IsNumber) { return(((FScheme.Value.Number)exp).Item); } else if (exp.IsString) { return(((FScheme.Value.String)exp).Item); } else if (exp.IsContainer) { return(((FScheme.Value.Container)exp).Item); } //else if (exp.IsFunction) //{ // return new Func<IList<dynamic>, dynamic>( // args => // ((Value.Function)exp).Item // .Invoke(ExecutionEnvironment.IDENT) // .Invoke(Utils.convertSequence(args.Select( // x => (Value)Converters.convertToValue(x) // ))) // ); //} //else if (exp.IsSpecial) //{ // return new Func<IList<dynamic>, dynamic>( // args => // ((Value.Special)exp).Item // .Invoke(ExecutionEnvironment.IDENT) // .Invoke( //} //else if (exp.IsCurrent) //{ // return new Func<dynamic, dynamic>( // ex => // Converters.convertFromValue( // ((Value.Current)exp).Item.Invoke(Converters.convertToValue(ex)) // ) // ); //} else { throw new Exception("Not allowed to pass Functions into a Python Script."); } }
public static FScheme.Value ConvertAsAtom(FScheme.Value v) { if (v == null) { return(FScheme.Value.NewString("")); } else if (v.IsString || v.IsNumber) { return(v); } else { return(FScheme.Value.NewString(v.ToString())); } }
public override FScheme.Value Evaluate(FSharpList <FScheme.Value> args) { if (PickedSunAndShadowSettings == null) { throw new Exception("The sun and shadow settings have not been selected. Click to pick the sun and shadow settings from the active view."); } if (PickedSunAndShadowSettings.Id.IntegerValue == sunAndShadowSettingsID.IntegerValue) // sanity check { XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings); this.data = FScheme.Value.NewContainer(sunVector); return(data); } else { throw new Exception("SANITY CHECK FAILED"); } }
/// <summary> /// Returns the objects from a Value type which have associated visualizers. /// </summary> /// <param name="value"></param> /// <returns></returns> public static List <object> GetDrawableFromValue(FScheme.Value value) { var drawables = new List <object>(); if (value == null) { return(drawables); } var viz = dynSettings.Controller.VisualizationManager; if (value.IsList) { foreach (var val_inner in ((FScheme.Value.List)value).Item) { drawables.AddRange(GetDrawableFromValue(val_inner)); } return(drawables); } var container = value as FScheme.Value.Container; if (container == null) { return(drawables); } var obj = ((FScheme.Value.Container)container).Item; if (obj != null) { var t = obj.GetType(); var visualizer = viz.Visualizers.FirstOrDefault(x => x.Key == t || x.Key.IsAssignableFrom(t)); if (visualizer.Value != null) { drawables.Add(obj); } } return(drawables); }
public static List <FScheme.Value> ConvertRow(FScheme.Value v) { if (v.IsString || v.IsNumber) { return(new List <FScheme.Value>() { v }); } else if (v.IsList) { return(((FScheme.Value.List)v).Item.Select(ConvertAsAtom).ToList()); } else { return(new List <FScheme.Value>() { ConvertAsAtom(v) }); } }
public FScheme.Value Evaluate(IEnumerable <KeyValuePair <string, dynamic> > bindings, IEnumerable <KeyValuePair <string, FScheme.Value> > inputs) { var scope = _engine.CreateScope(); foreach (var bind in bindings) { scope.SetVariable(bind.Key, bind.Value); } var ops = scope.Engine.CreateOperations(); foreach (var input in inputs) { scope.SetVariable(input.Key, Converters.convertFromValue(input.Value, ops)); } try { _source.Execute(scope); } catch (Exception e) { var eo = _engine.GetService <ExceptionOperations>(); string error = eo.FormatException(e); return(FScheme.Value.NewString(error)); } FScheme.Value result = FScheme.Value.NewNumber(1); if (scope.ContainsVariable("OUT")) { dynamic output = scope.GetVariable("OUT"); result = Converters.convertToValue(output, ops); } return(result); }
private static FScheme.Value _setParam(FamilySymbol ft, Parameter p, FScheme.Value valueExpr) { if (p.StorageType == StorageType.Double) { p.Set(((FScheme.Value.Number)valueExpr).Item); } else if (p.StorageType == StorageType.Integer) { p.Set((int)((FScheme.Value.Number)valueExpr).Item); } else if (p.StorageType == StorageType.String) { p.Set(((FScheme.Value.String)valueExpr).Item); } else if (valueExpr.IsNumber) { p.Set(new ElementId((int)(valueExpr as FScheme.Value.Number).Item)); } else { p.Set((ElementId)((FScheme.Value.Container)valueExpr).Item); } return(FScheme.Value.NewContainer(ft)); }
/// <summary> /// Returns the objects from a Value type which have associated visualizers /// along with a string tag representing the array index of the value, i.e. [0][5][3] /// </summary> /// <param name="value"></param> /// <returns></returns> public static Dictionary <string, object> GetDrawableFromValue(List <int> chain, FScheme.Value value) { //var drawables = new List<object>(); var drawables = new Dictionary <string, object>(); if (value == null) { return(drawables); } var viz = dynSettings.Controller.VisualizationManager; if (value.IsList) { int count = 0; foreach (var val_inner in ((FScheme.Value.List)value).Item) { var subChain = new List <int>(chain); subChain.Add(count); var innerDrawables = GetDrawableFromValue(subChain, val_inner); innerDrawables.ToList().ForEach(x => drawables.Add(x.Key, x.Value)); count++; } return(drawables); } var container = value as FScheme.Value.Container; if (container == null) { return(drawables); } var obj = ((FScheme.Value.Container)container).Item; if (obj != null) { var t = obj.GetType(); var visualizer = viz.Visualizers.FirstOrDefault(x => x.Key == t || x.Key.IsAssignableFrom(t)); if (visualizer.Value != null) { drawables.Add(TagFromList(chain), obj); } } return(drawables); }
void DrawPython(FScheme.Value val, string id) { //DrawContainers(val, id); }
protected internal virtual void Run(bool runInDebug, IEnumerable <dynNodeModel> topElements, FScheme.Expression runningExpression) { //Print some stuff if we're in debug mode if (runInDebug) { // NOPE //if (dynSettings.Bench != null) //{ // //string exp = FScheme.print(runningExpression); // //dynSettings.Bench.Dispatcher.Invoke(new Action( // // delegate // // { // // foreach (dynNodeModel node in topElements) // // { // // string exp = node.PrintExpression(); // // dynSettings.Controller.DynamoViewModel.Log("> " + exp); // // } // // } // // )); //} } try { //Evaluate the expression FScheme.Value expr = this.FSchemeEnv.Evaluate(runningExpression); if (dynSettings.Bench != null) { //Print some more stuff if we're in debug mode if (runInDebug && expr != null) { // NOPE //dynSettings.Bench.Dispatcher.Invoke(new Action( // () => // dynSettings.Controller.DynamoViewModel.Log(FScheme.print(expr)) // )); } } } catch (CancelEvaluationException ex) { /* Evaluation was cancelled */ OnRunCancelled(false); //this.RunCancelled = false; if (ex.Force) { runAgain = false; } } catch (Exception ex) { /* Evaluation failed due to error */ // NOPE //if (dynSettings.Bench != null) //{ // //Print unhandled exception // if (ex.Message.Length > 0) // { // dynSettings.Bench.Dispatcher.Invoke(new Action( // delegate { dynSettings.Controller.DynamoViewModel.Log(ex); } // )); // } //} OnRunCancelled(true); RunCancelled = true; runAgain = false; } OnEvaluationCompleted(); }
protected virtual void Run(List <dynNodeModel> topElements, FScheme.Expression runningExpression) { //Print some stuff if we're in debug mode if (DynamoViewModel.RunInDebug) { if (dynSettings.Controller.UIDispatcher != null) { foreach (string exp in topElements.Select(node => node.PrintExpression())) { DynamoLogger.Instance.Log("> " + exp); } } } try { DynamoLogger.Instance.Log("Evaluating the expression..."); //Evaluate the expression FScheme.Value expr = FSchemeEnvironment.Evaluate(runningExpression); if (dynSettings.Controller.UIDispatcher != null) { //Print some more stuff if we're in debug mode if (DynamoViewModel.RunInDebug && expr != null) { DynamoLogger.Instance.Log(FScheme.print(expr)); } } } catch (CancelEvaluationException ex) { /* Evaluation was cancelled */ OnRunCancelled(false); RunCancelled = false; if (ex.Force) { runAgain = false; } } catch (Exception ex) { /* Evaluation failed due to error */ if (dynSettings.Controller.UIDispatcher != null) { //Print unhandled exception if (ex.Message.Length > 0) { dynSettings.Controller.DispatchOnUIThread(() => DynamoLogger.Instance.Log(ex)); } } OnRunCancelled(true); RunCancelled = true; runAgain = false; //If we are testing, we need to throw an exception here //which will, in turn, throw an Assert.Fail in the //Evaluation thread. if (Testing) { throw new Exception(ex.Message); } } OnEvaluationCompleted(); }
public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args) { if (!args[0].IsList) { throw new Exception("Input must be a list of numbers."); } FSharpList<FScheme.Value> vals = ((FScheme.Value.List)args[0]).Item; var len = vals.Length; if (len % 3 != 0) throw new Exception("List size must be a multiple of 3"); var result = new FScheme.Value[len / 3]; int count = 0; while (!vals.IsEmpty) { result[count] = FScheme.Value.NewContainer(new XYZ( ((FScheme.Value.Number)vals.Head).Item, ((FScheme.Value.Number)vals.Tail.Head).Item, ((FScheme.Value.Number)vals.Tail.Tail.Head).Item)); vals = vals.Tail.Tail.Tail; count++; } return FScheme.Value.NewList(Utils.SequenceToFSharpList(result)); }
public override FScheme.Value Evaluate(FSharpList<FScheme.Value> args) { if (PickedSunAndShadowSettings == null) { throw new Exception("The sun and shadow settings have not been selected. Click to pick the sun and shadow settings from the active view."); } if (PickedSunAndShadowSettings.Id.IntegerValue == sunAndShadowSettingsID.IntegerValue) // sanity check { XYZ sunVector = GetSunDirection(PickedSunAndShadowSettings); this.data = FScheme.Value.NewContainer(sunVector); return data; } else throw new Exception("SANITY CHECK FAILED"); }
public static dynamic UnwrapFSchemeValue(this FScheme.Value value) { return(value.IsList ? (value as FScheme.Value.List).Item.Select(UnwrapFSchemeValue).ToFSharpList() : (value as dynamic).Item); }