Example #1
0
        public Node CreateNode(ShaderFragmentArchive.Function fn, string archiveName, ShaderPatcherLayer.PreviewSettings previewSettings)
        {
            var node = new Node((fn != null) ? fn.Name : VisibleName(archiveName));

            node.Tag = new ShaderProcedureNodeTag(archiveName);

            var previewItem = new ShaderFragmentPreviewItem();

            if (previewSettings != null)
            {
                previewItem.PreviewSettings = previewSettings;
            }

            // use composition to access some exported types --
            {
                CompositionBatch compositionBatch = new CompositionBatch();
                compositionBatch.AddPart(previewItem);
                _composer.Compose(compositionBatch);
            }
            node.AddItem(previewItem);

            // Drop-down selection box for "preview mode"
            var enumList             = AsEnumList(previewItem.Geometry, PreviewGeoNames);
            var previewModeSelection = new HyperGraph.Items.NodeDropDownItem(enumList.Item1.ToArray(), enumList.Item2, false, false);

            node.AddItem(previewModeSelection);
            previewModeSelection.SelectionChanged +=
                (object sender, HyperGraph.Items.AcceptNodeSelectionChangedEventArgs args) =>
            {
                if (sender is HyperGraph.Items.NodeDropDownItem)
                {
                    var item = (HyperGraph.Items.NodeDropDownItem)sender;
                    previewItem.Geometry = AsEnumValue <ShaderPatcherLayer.PreviewGeometry>(item.Items[args.Index], PreviewGeoNames);
                }
            };

            // Text item box for output visualization string
            // note --  should could potentially become a more complex editing control
            //          it might be useful to have some preset defaults and helpers rather than just
            //          requiring the user to construct the raw string
            var outputToVisualize = new HyperGraph.Items.NodeTextBoxItem(previewItem.OutputToVisualize, false, false);

            node.AddItem(outputToVisualize);
            outputToVisualize.TextChanged +=
                (object sender, HyperGraph.Items.AcceptNodeTextChangedEventArgs args) => { previewItem.OutputToVisualize = args.Text; };

            if (fn != null)
            {
                foreach (var param in fn.InputParameters)
                {
                    node.AddItem(new ShaderFragmentNodeItem(param.Name, param.Type, archiveName + ":" + param.Name, true, false));
                }
                foreach (var output in fn.Outputs)
                {
                    node.AddItem(new ShaderFragmentNodeItem(output.Name, output.Type, archiveName + ":" + output.Name, false, true));
                }
            }
            return(node);
        }
Example #2
0
        public static Node CreateNode(ShaderFragmentArchive.Function fn, String archiveName, HyperGraph.GraphControl graphControl, ShaderDiagram.Document doc)
        {
            var node = new Node(fn.Name);

            node.Tag = new ShaderProcedureNodeTag(archiveName);
            node.AddItem(new ShaderFragmentPreviewItem(graphControl, doc));
            foreach (var param in fn.InputParameters)
            {
                node.AddItem(new ShaderFragmentNodeItem(param.Name, param.Type, archiveName + ":" + param.Name, true, false));
            }
            foreach (var output in fn.Outputs)
            {
                node.AddItem(new ShaderFragmentNodeItem(output.Name, output.Type, archiveName + ":" + output.Name, false, true));
            }
            return(node);
        }