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); }
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); }