Beispiel #1
0
        public ColorRange1D ComputeColorRange(EngineController engine)
        {
            List <Color>  colors;
            List <double> parameters;

            // If there are colors supplied
            if (InPorts[0].Connectors.Any())
            {
                var colorsNode   = InPorts[0].Connectors[0].Start.Owner;
                var colorsIndex  = InPorts[0].Connectors[0].Start.Index;
                var startId      = colorsNode.GetAstIdentifierForOutputIndex(colorsIndex).Name;
                var colorsMirror = engine.GetMirror(startId);
                colors = GetColorsFromMirrorData(colorsMirror);
            }
            else
            {
                colors = DefaultColorRanges.Analysis;
            }

            // If there are indices supplied
            if (InPorts[1].Connectors.Any())
            {
                var valuesNode   = InPorts[1].Connectors[0].Start.Owner;
                var valuesIndex  = InPorts[1].Connectors[0].Start.Index;
                var endId        = valuesNode.GetAstIdentifierForOutputIndex(valuesIndex).Name;
                var valuesMirror = engine.GetMirror(endId);
                parameters = GetValuesFromMirrorData(valuesMirror);
            }
            else
            {
                parameters = CreateParametersForColors(colors);
            }

            return(ColorRange1D.ByColorsAndParameters(colors, parameters));
        }
        /// <summary>
        /// Gets the provided scene contexts from input node(s).
        /// </summary>
        /// <param name="engineController">Dynamo engine controller</param>
        /// <param name="inPortNo">InPort number</param>
        /// <returns>An array of inputs with their AST identifier</returns>
        public AstValue <T>[] GetCachedAstInput <T>(int inPortNo, EngineController engineController)
        {
            var nodes   = InPorts[inPortNo].Connectors.Select(c => (c.Start.Index, c.Start.Owner));
            var idNodes = nodes.Select(n => n.Owner.GetAstIdentifierForOutputIndex(n.Index));

            return(idNodes.SelectMany(idn => UnwrapAstValue <T>(engineController.GetMirror(idn.Name)?.GetData(), idn)).ToArray());
        }
Beispiel #3
0
        internal static List <IGraphicItem> GeneratedGraphicItems(this NodeModel node, EngineController engineController)
        {
            var ids = node.GetAllOutportAstIdentifiers();

            var results = new List <IGraphicItem>();

            foreach (var id in ids)
            {
                var mirror = engineController.GetMirror(id);
                if (mirror == null)
                {
                    continue;
                }

                var mirrorData = mirror.GetData();
                if (mirrorData == null)
                {
                    continue;
                }

                GetGraphicItemsFromMirrorData(mirrorData, results);
            }

            return(results);
        }
        protected override void HandleTaskExecutionCore()
        {
            if (nodeGuid == Guid.Empty)
            {
                throw new InvalidOperationException(
                          "UpdateRenderPackageAsyncTask.Initialize not called");
            }

            var idEnum = drawableIdMap.GetEnumerator();

            while (idEnum.MoveNext())
            {
                var mirrorData = engineController.GetMirror(idEnum.Current.Value);
                if (mirrorData == null)
                {
                    continue;
                }

                GetRenderPackagesFromMirrorData(
                    idEnum.Current.Key,
                    mirrorData.GetData(),
                    previewIdentifierName,
                    displayLabels);
            }
        }
        /// <summary>
        /// Gets the provided scene contexts from input node(s).
        /// </summary>
        /// <param name="engineController">Dynamo engine controller</param>
        /// <param name="inPortNo">InPort number</param>
        /// <returns>An array of inputs</returns>
        public T[] GetCachedInput <T>(int inPortNo, EngineController engineController)
        {
            var nodes = InPorts[inPortNo].Connectors.Select(c => (c.Start.Index, c.Start.Owner));
            var ids   = nodes.Select(n => n.Owner.GetAstIdentifierForOutputIndex(n.Index).Name);

            var data = ids.Select(id => engineController.GetMirror(id)?.GetData());

            return(data.SelectMany(Unwrap <T>).Distinct().ToArray());
        }
        protected override void HandleTaskExecutionCore()
        {
            var runtimeMirror = engineController.GetMirror(variableName);

            if (runtimeMirror != null)
            {
                cachedMirrorData = runtimeMirror.GetData();
            }
        }
        protected override void HandleTaskExecutionCore()
        {
            if (nodeGuid == Guid.Empty)
            {
                throw new InvalidOperationException(
                          "UpdateRenderPackageAsyncTask.Initialize not called");
            }

            var data = from varName in drawableIds
                       select engineController.GetMirror(varName)
                       into mirror
                           where mirror != null
                       select mirror.GetData();

            var labelMap = new List <string>();

            foreach (var mirrorData in data)
            {
                AddToLabelMap(mirrorData, labelMap, previewIdentifierName);
            }

            int count = 0;

            foreach (var drawableId in drawableIds)
            {
                var graphItems = engineController.GetGraphicItems(drawableId);
                if (graphItems == null)
                {
                    continue;
                }

                foreach (var graphicItem in graphItems)
                {
                    var package = new RenderPackage(isNodeSelected, displayLabels)
                    {
                        Tag = labelMap.Count > count ? labelMap[count] : "?",
                    };

                    try
                    {
                        graphicItem.Tessellate(package, tol: -1.0,
                                               maxGridLines: maxTesselationDivisions);
                    }
                    catch (Exception e)
                    {
                        System.Diagnostics.Debug.WriteLine(
                            "PushGraphicItemIntoPackage: " + e);
                    }

                    package.ItemsCount++;
                    renderPackages.Add(package);
                    count++;
                }
            }
        }
        /// <summary>
        /// Gets the provided scene contexts from output node(s).
        /// </summary>
        /// <param name="engineController">Dynamo engine controller</param>
        /// <param name="outPortNo">OutPort number</param>
        /// <returns></returns>
        public T[] GetCachedOutput <T>(int outPortNo, EngineController engineController)
        {
            var data = engineController.GetMirror(GetAstIdentifierForOutputIndex(outPortNo).Name)?.GetData();

            if (null == data)
            {
                return new T[] { }
            }
            ;
            else
            {
                return(Unwrap <T>(data).Distinct().ToArray());
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="selectedItems"></param>
        public void PopulateItems(IList selectedItems)
        {
            if (!InPorts.Any() || !InPorts[0].Connectors.Any())
            {
                return;
            }

            var owner      = InPorts[0].Connectors[0].Start.Owner;
            var index      = InPorts[0].Connectors[0].Start.Index;
            var mirrorName = owner.GetAstIdentifierForOutputIndex(index).Name;
            var mirror     = EngineController.GetMirror(mirrorName);

            var data = mirror?.GetData();

            if (data == null)
            {
                return;
            }

            if (data.IsCollection)
            {
                var counter = 0;
                foreach (var item in data.GetElements())
                {
                    var i       = item.Data;
                    var wrapper = new ListItemWrapper
                    {
                        Name  = i.ToString(),
                        Index = counter
                    };

                    var existing = ItemsCollection.IndexOf(wrapper);
                    if (existing != -1)
                    {
                        ItemsCollection[existing].IsSelected = selectedItems.Contains(wrapper);
                    }
                    else
                    {
                        ItemsCollection.Add(wrapper);
                    }

                    counter++;
                }
            }
        }
Beispiel #10
0
        protected override void HandleTaskExecutionCore()
        {
            if (nodeGuid == Guid.Empty)
            {
                throw new InvalidOperationException(
                          "UpdateRenderPackageAsyncTask.Initialize not called");
            }

            var data = from varName in drawableIds
                       select engineController.GetMirror(varName)
                       into mirror
                           where mirror != null
                       select mirror.GetData();

            foreach (var mirrorData in data)
            {
                GetRenderPackagesFromMirrorData(mirrorData, previewIdentifierName, displayLabels, isNodeSelected);
            }
        }
Beispiel #11
0
        private Element GetInputElement()
        {
            Element e = null;

            var owner  = InPorts[0].Connectors[0].Start.Owner;
            var index  = InPorts[0].Connectors[0].Start.Index;
            var name   = owner.GetAstIdentifierForOutputIndex(index).Name;
            var mirror = EngineController.GetMirror(name);

            if (!mirror.GetData().IsCollection)
            {
                var element = (Revit.Elements.Element)mirror.GetData().Data;
                if (element != null)
                {
                    e = element.InternalElement;
                }
            }
            return(e);
        }
Beispiel #12
0
        public override bool RequestVisualUpdateAsync(IScheduler scheduler, EngineController engine, IRenderPackageFactory factory, bool forceUpdate = true)
        {
            try
            {
                int           index  = OutPorts[0].Index;
                string        name   = GetAstIdentifierForOutputIndex(index).Name;
                RuntimeMirror mirror = engine.GetMirror(name);
                MirrorData    data   = mirror.GetData();

                List <Autodesk.DesignScript.Geometry.Mesh> meshes = GetMeshes(data);
                _meshes = meshes;
                IRenderPackage render = factory.CreateRenderPackage();
                foreach (Autodesk.DesignScript.Geometry.Mesh m in meshes)
                {
                    if (m != null)
                    {
                        m.Tessellate(render, factory.TessellationParameters);
                        //var method = render.GetType().GetMethod("SetTransform", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, new[] { typeof(double[]) }, null);

                        //if (method != null)
                        //{
                        //    method.Invoke(render, new object[] { new double[]
                        //    {
                        //       transform.XAxis.X, transform.XAxis.Y, transform.XAxis.Z, 0,
                        //       transform.YAxis.X, transform.YAxis.Y, transform.YAxis.Z, 0,
                        //       transform.ZAxis.X, transform.ZAxis.Y, transform.ZAxis.Z, 0,
                        //       transform.Origin.X, transform.Origin.Y, transform.Origin.Z, 1
                        //    }
                        //    });
                        //}
                    }
                }

                // NOTE: I'm not sure calling the Tessellate method from IGraphicItem is necessary here
                // but I've tried calling and am leaving it in here just in case I do wind up needing it.
                //Tessellate(render, factory.TessellationParameters);
                return(true);
            }
            catch { }
            return(false);
        }
Beispiel #13
0
        /// <summary>
        ///     Retrieves input string from connected input node.
        /// </summary>
        /// <param name="engine"></param>
        /// <returns></returns>
        public string GetInputString(EngineController engine)
        {
            string htmlString;

            // If there is an input supplied
            if (HasConnectedInput(0))
            {
                // retrieve input string from input
                var            node       = InPorts[0].Connectors[0].Start.Owner;
                var            nodeIndex  = InPorts[0].Connectors[0].Start.Index;
                var            nodeName   = node.GetAstIdentifierForOutputIndex(nodeIndex).Name;
                var            mirrorData = engine.GetMirror(nodeName);
                D3jsLib.Report report     = mirrorData.GetData().Data as D3jsLib.Report;
                htmlString = report.HtmlString;
            }
            else
            {
                htmlString = string.Empty;
            }
            return(htmlString);
        }
Beispiel #14
0
        protected override void HandleTaskExecutionCore()
        {
            if (nodeGuid == Guid.Empty)
            {
                throw new InvalidOperationException(
                          "UpdateRenderPackageAsyncTask.Initialize not called");
            }

            var data = from varName in drawableIds
                       select engineController.GetMirror(varName)
                       into mirror
                           where mirror != null
                       select mirror.GetData();

            var labelMap = new List <string>();
            var count    = 0;

            foreach (var mirrorData in data)
            {
                AddToLabelMap(mirrorData, labelMap, previewIdentifierName);
                GetRenderPackagesFromMirrorData(mirrorData, ref labelMap, ref count);
            }
        }