Esempio n. 1
0
 public BocsSlotBase(BocsNodeBase n, string title, string name, BocsSlotType type)
 {
     Node        = n;
     SlotType    = type;
     SlotTitle   = title;
     SlotName    = name;
     InputSlot   = null;
     OutputSlots = new List <BocsSlotBase>();
 }
        public static string SaveGraph()
        {
            //Debug.Log("SaveGraph");

            string s = string.Empty;

            for (int i = 0; i < BocsCyclesNodeManager.Nodes.Count; i++)
            {
                BocsNodeBase n = BocsCyclesNodeManager.Nodes[i];
                s += "node" + "|";
                s += "t=" + n.GetType().Name + ",";
                s += "x=" + (int)n.NodeRect.x + ",";
                s += "y=" + (int)n.NodeRect.y + ",";
                s += "c=" + n.State;
                s += ":";
            }

            for (int i = 0; i < BocsCyclesNodeManager.Nodes.Count; i++)
            {
                BocsNodeBase n = BocsCyclesNodeManager.Nodes[i];
                for (int j = 0; j < n.Slots.Count; j++)
                {
                    if (n.Slots[j].HasValue())
                    {
                        s += "val" + "|";
                        s += "n=" + i + ",";
                        s += "s=" + n.Slots[j].SlotName + ",";
                        s += "v=" + n.Slots[j].GetString();
                        s += ":";
                    }
                }
            }

            for (int i = 0; i < BocsCyclesNodeManager.Nodes.Count; i++)
            {
                BocsNodeBase n = BocsCyclesNodeManager.Nodes[i];
                for (int j = 0; j < n.Slots.Count; j++)
                {
                    for (int k = 0; k < n.Slots[j].OutputSlots.Count; k++)
                    {
                        int cn = FindNodeFromSlot(n.Slots[j].OutputSlots[k]);
                        int cs = FindSlotInNode(BocsCyclesNodeManager.Nodes[cn], n.Slots[j].OutputSlots[k]);

                        s += "connect" + "|";
                        s += "n1=" + i + ",";
                        s += "n2=" + cn + ",";
                        s += "s1=" + n.Slots[j].SlotName + ",";
                        s += "s2=" + BocsCyclesNodeManager.Nodes[cn].Slots[cs].SlotName + ",";
                        s += ":";
                    }
                }
            }

            return(s);
        }
 public static int FindSlotInNode(BocsNodeBase nb, BocsSlotBase sb)
 {
     for (int i = 0; i < nb.Slots.Count; i++)
     {
         if (nb.Slots[i] == sb)
         {
             return(i);
         }
     }
     return(-1);
 }
 public static BocsSlotBase FindOutputSlotFromString(BocsNodeBase bn, string s)
 {
     for (int i = 0; i < bn.Slots.Count; i++)
     {
         if (bn.Slots[i].SlotType != BocsSlotBase.BocsSlotType.Output)
         {
             continue;
         }
         if (bn.Slots[i].SlotName == s)
         {
             return(bn.Slots[i]);
         }
     }
     return(null);
 }
        public static void DeleteNode(int i)
        {
            if (i == -1)
            {
                return;
            }
            if (i > Nodes.Count)
            {
                return;
            }

            SelectedNode = -1;

            //Debug.Log("Delete:" + i);

            BocsNodeBase bn = BocsCyclesNodeManager.Nodes[i];

            foreach (BocsSlotBase s in bn.Slots)
            {
                s.RemoveConnection();
            }

            BocsCyclesNodeManager.Nodes.Remove(bn);
        }
Esempio n. 6
0
 public BocsSlotInt(BocsNodeBase n, string description, string name, BocsSlotType type, int defaultValue = 0) : base(n, description, name, type)
 {
     Val = defaultValue;
 }
Esempio n. 7
0
 public BocsSlotColor(BocsNodeBase n, string description, string name, BocsSlotType type, Color defaultValue = default(Color)) : base(n, description, name, type)
 {
     SlotColor = Color.yellow;
     ColorVal  = defaultValue;
 }
Esempio n. 8
0
 public BocsSlotStringList(BocsNodeBase n, string description, string name, BocsSlotType type, int defaultValue) : base(n, description, name, type)
 {
     Selected = defaultValue;
 }
Esempio n. 9
0
        public BocsSlotClosure(BocsNodeBase n, string description, string name, BocsSlotType type) : base(n, description, name, type)
        {
            //Color Known Types...
            if (description == "Color")
            {
                SlotColor = Color.yellow;
            }

            if (description == "Surface")
            {
                SlotColor = Color.green;
            }
            if (description == "BSDF")
            {
                SlotColor = Color.green;
            }
            if (description == "Shader")
            {
                SlotColor = Color.green;
            }
            if (description == "Volume")
            {
                SlotColor = Color.green;
            }
            if (description == "Emission")
            {
                SlotColor = Color.green;
            }
            if (description == "BSSRDF")
            {
                SlotColor = Color.green;
            }
            if (description == "Background")
            {
                SlotColor = Color.green;
            }
            if (description == "AO")
            {
                SlotColor = Color.green;
            }
            if (description == "Holdout")
            {
                SlotColor = Color.green;
            }

            if (description == "Normal")
            {
                SlotColor = Color.blue;
            }
            if (description == "Tangent")
            {
                SlotColor = Color.blue;
            }
            if (description == "Vector")
            {
                SlotColor = Color.blue;
            }
            if (description == "Clearcoat Normal")
            {
                SlotColor = Color.blue;
            }
            if (description == "Generated")
            {
                SlotColor = Color.blue;
            }
            if (description == "UV")
            {
                SlotColor = Color.blue;
            }
            if (description == "Object")
            {
                SlotColor = Color.blue;
            }
            if (description == "Camera")
            {
                SlotColor = Color.blue;
            }
            if (description == "Window")
            {
                SlotColor = Color.blue;
            }
            if (description == "Reflection")
            {
                SlotColor = Color.blue;
            }
        }
Esempio n. 10
0
 public BocsSlotBool(BocsNodeBase n, string description, string name, BocsSlotType type, bool defaultValue = true) : base(n, description, name, type)
 {
     Val = defaultValue;
 }
Esempio n. 11
0
 public BocsSlotVector3(BocsNodeBase n, string description, string name, BocsSlotType type, Vector3 defaultValue = default(Vector3)) : base(n, description, name, type)
 {
     SlotColor = Color.blue;
     Vect3     = defaultValue;
 }
Esempio n. 12
0
 public BocsSlotTexture(BocsNodeBase n, string description, string name, BocsSlotType type) : base(n, description, name, type)
 {
     SlotColor = Color.yellow;
 }
        public static void CreateNode(string type, float x, float y, int c)
        {
            BocsNodeBase nb = null;

            //I'm sure there is a better way, maybe Activator or reflection..but meh for now
            if (type == "BocsNodeOutput")
            {
                nb = new BocsNodeOutput();
            }
            if (type == "BocsNodeDiffuseBsdf")
            {
                nb = new BocsNodeDiffuseBsdf();
            }
            if (type == "BocsNodeMixShader")
            {
                nb = new BocsNodeMixShader();
            }
            if (type == "BocsNodeGlossyBsdf")
            {
                nb = new BocsNodeGlossyBsdf();
            }
            if (type == "BocsNodeTexture")
            {
                nb = new BocsNodeTexture();
            }
            if (type == "BocsNodeGlassBsdf")
            {
                nb = new BocsNodeGlassBsdf();
            }
            if (type == "BocsNodeEmission")
            {
                nb = new BocsNodeEmission();
            }
            if (type == "BocsNodeEnviromentTexture")
            {
                nb = new BocsNodeEnviromentTexture();
            }
            if (type == "BocsNodeSkyTexture")
            {
                nb = new BocsNodeSkyTexture();
            }
            if (type == "BocsNodeNoiseTexture")
            {
                nb = new BocsNodeNoiseTexture();
            }
            if (type == "BocsNodeCheckerTexture")
            {
                nb = new BocsNodeCheckerTexture();
            }
            if (type == "BocsNodeBrickTexture")
            {
                nb = new BocsNodeBrickTexture();
            }
            if (type == "BocsNodeGradientTexture")
            {
                nb = new BocsNodeGradientTexture();
            }
            if (type == "BocsNodeVoronoiTexture")
            {
                nb = new BocsNodeVoronoiTexture();
            }
            if (type == "BocsNodeMusgraveTexture")
            {
                nb = new BocsNodeMusgraveTexture();
            }
            if (type == "BocsNodeMagicTexture")
            {
                nb = new BocsNodeMagicTexture();
            }
            if (type == "BocsNodeWaveTexture")
            {
                nb = new BocsNodeWaveTexture();
            }
            if (type == "BocsNodeNormal")
            {
                nb = new BocsNodeNormal();
            }
            if (type == "BocsNodeBump")
            {
                nb = new BocsNodeBump();
            }
            if (type == "BocsNodeAnisotropicBsdf")
            {
                nb = new BocsNodeAnisotropicBsdf();
            }
            if (type == "BocsNodeTranslucentBsdf")
            {
                nb = new BocsNodeTranslucentBsdf();
            }
            if (type == "BocsNodeTransparentBsdf")
            {
                nb = new BocsNodeTransparentBsdf();
            }
            if (type == "BocsNodeVelvetBsdf")
            {
                nb = new BocsNodeVelvetBsdf();
            }
            if (type == "BocsNodeToonBsdf")
            {
                nb = new BocsNodeToonBsdf();
            }
            if (type == "BocsNodeRefractionBsdf")
            {
                nb = new BocsNodeRefractionBsdf();
            }
            if (type == "BocsNodeHairBsdf")
            {
                nb = new BocsNodeHairBsdf();
            }
            if (type == "BocsNodeAmbientOcclusion")
            {
                nb = new BocsNodeAmbientOcclusion();
            }
            if (type == "BocsNodeHoldout")
            {
                nb = new BocsNodeHoldout();
            }
            if (type == "BocsNodeAbsorptionVolume")
            {
                nb = new BocsNodeAbsorptionVolume();
            }
            if (type == "BocsNodeScatterVolume")
            {
                nb = new BocsNodeScatterVolume();
            }
            if (type == "BocsNodeSubsurfaceScattering")
            {
                nb = new BocsNodeSubsurfaceScattering();
            }
            if (type == "BocsNodeGeometry")
            {
                nb = new BocsNodeGeometry();
            }
            if (type == "BocsNodeTextureCoordinate")
            {
                nb = new BocsNodeTextureCoordinate();
            }
            if (type == "BocsNodeLightPath")
            {
                nb = new BocsNodeLightPath();
            }
            if (type == "BocsNodeLightFalloff")
            {
                nb = new BocsNodeLightFalloff();
            }
            if (type == "BocsNodeObjectInfo")
            {
                nb = new BocsNodeObjectInfo();
            }
            if (type == "BocsNodeParticleInfo")
            {
                nb = new BocsNodeParticleInfo();
            }
            if (type == "BocsNodeHairInfo")
            {
                nb = new BocsNodeHairInfo();
            }
            if (type == "BocsNodeValue")
            {
                nb = new BocsNodeValue();
            }
            if (type == "BocsNodeColor")
            {
                nb = new BocsNodeColor();
            }
            if (type == "BocsNodeAddShader")
            {
                nb = new BocsNodeAddShader();
            }
            if (type == "BocsNodeInvert")
            {
                nb = new BocsNodeInvert();
            }
            if (type == "BocsNodeMixRGB")
            {
                nb = new BocsNodeMixRGB();
            }
            if (type == "BocsNodeGamma")
            {
                nb = new BocsNodeGamma();
            }
            if (type == "BocsNodeBrightContrast")
            {
                nb = new BocsNodeBrightContrast();
            }
            if (type == "BocsNodeCombineRGB")
            {
                nb = new BocsNodeCombineRGB();
            }
            if (type == "BocsNodeSeparateRGB")
            {
                nb = new BocsNodeSeparateRGB();
            }
            if (type == "BocsNodeCombineHSV")
            {
                nb = new BocsNodeCombineHSV();
            }
            if (type == "BocsNodeSeparateHSV")
            {
                nb = new BocsNodeSeparateHSV();
            }
            if (type == "BocsNodeCombineXYZ")
            {
                nb = new BocsNodeCombineXYZ();
            }
            if (type == "BocsNodeSeparateXYZ")
            {
                nb = new BocsNodeSeparateXYZ();
            }
            if (type == "BocsNodeHueSaturation")
            {
                nb = new BocsNodeHueSaturation();
            }
            if (type == "BocsNodeWaveLength")
            {
                nb = new BocsNodeWaveLength();
            }
            if (type == "BocsNodeBlackbody")
            {
                nb = new BocsNodeBlackbody();
            }
            if (type == "BocsNodeAttribute")
            {
                nb = new BocsNodeAttribute();
            }
            if (type == "BocsNodeUVmap")
            {
                nb = new BocsNodeUVmap();
            }
            if (type == "BocsNodeCameraData")
            {
                nb = new BocsNodeCameraData();
            }
            if (type == "BocsNodeFresnel")
            {
                nb = new BocsNodeFresnel();
            }
            if (type == "BocsNodeLayerWeight")
            {
                nb = new BocsNodeLayerWeight();
            }
            if (type == "BocsNodeWireframe")
            {
                nb = new BocsNodeWireframe();
            }
            if (type == "BocsNodeNormalMap")
            {
                nb = new BocsNodeNormalMap();
            }
            if (type == "BocsNodeTangent")
            {
                nb = new BocsNodeTangent();
            }
            if (type == "BocsNodeMath")
            {
                nb = new BocsNodeMath();
            }
            if (type == "BocsNodeVectorMath")
            {
                nb = new BocsNodeVectorMath();
            }
            if (type == "BocsNodeVectorTransform")
            {
                nb = new BocsNodeVectorTransform();
            }
            if (type == "BocsNodeRGBtoBW")
            {
                nb = new BocsNodeRGBtoBW();
            }
            if (type == "BocsNodeBackground")
            {
                nb = new BocsNodeBackground();
            }
            if (type == "BocsNodeDisneyBsdf")
            {
                nb = new BocsNodeDisneyBsdf();
            }
            if (type == "BocsNodeMapping")
            {
                nb = new BocsNodeMapping();
            }

            if (nb != null)
            {
                Rect pos = new Rect(x, y, 0, 0);
                nb.NodeRect = pos;
                nb.State    = c;
                BocsCyclesNodeManager.Nodes.Add(nb);
            }
        }
Esempio n. 14
0
 public BocsSlotFloat(BocsNodeBase n, string description, string name, BocsSlotType type, float defaultValue = 1.0f) : base(n, description, name, type)
 {
     Val = defaultValue;
 }
Esempio n. 15
0
        private static void _addShaderGraph(XmlTextWriter xml, BocsCyclesGraphBase graph, string name)
        {
            string saved = BocsCyclesNodeManager.SaveGraph();

            for (int graphIndex = 0; graphIndex < graph.GetGraphCount(); graphIndex++)
            {
                BocsCyclesNodeManager.LoadGraph(graph.GetGraph(graphIndex));

                if (name != string.Empty)
                {
                    xml.WriteStartElement("shader");
                    xml.WriteAttributeString("name", name + graphIndex);
                }

                for (int nid = 0; nid < BocsCyclesNodeManager.Nodes.Count; nid++)
                {
                    BocsNodeBase n = BocsCyclesNodeManager.Nodes[nid];

                    if (n.NodeName == "output")
                    {
                        continue;                        //shaders have one by default
                    }
                    xml.WriteStartElement(n.NodeName);
                    xml.WriteAttributeString("name", n.NodeName + nid);
                    for (int sid = 0; sid < n.Slots.Count; sid++)
                    {
                        BocsSlotBase slot = n.Slots[sid];
                        string       val  = slot.GetXML();
                        if (val != string.Empty)
                        {
                            xml.WriteAttributeString(slot.SlotName, val);
                        }
                    }
                    xml.WriteEndElement();
                }
                for (int nid = 0; nid < BocsCyclesNodeManager.Nodes.Count; nid++)
                {
                    BocsNodeBase n = BocsCyclesNodeManager.Nodes[nid];
                    for (int sid = 0; sid < n.Slots.Count; sid++)
                    {
                        BocsSlotBase slot = n.Slots[sid];
                        foreach (BocsSlotBase c in slot.OutputSlots)
                        {
                            int          toID      = BocsCyclesNodeManager.FindNodeFromSlot(c);
                            BocsNodeBase toNode    = BocsCyclesNodeManager.Nodes[toID];
                            string       toConnect = "output";
                            if (toNode.NodeName != "output")
                            {
                                toConnect = toNode.NodeName + toID;
                            }

                            xml.WriteStartElement("connect");
                            xml.WriteAttributeString("from", n.NodeName + nid + " " + slot.SlotName);
                            xml.WriteAttributeString("to", toConnect + " " + c.SlotName);
                            xml.WriteEndElement();
                        }
                    }
                }

                if (name != string.Empty)
                {
                    xml.WriteEndElement();
                }
            }

            BocsCyclesNodeManager.LoadGraph(saved);
        }
Esempio n. 16
0
 public BocsSlotGradient(BocsNodeBase n, string description, string name, BocsSlotType type) : base(n, description, name, type)
 {
 }
        public static void LoadGraph(string g)
        {
            //Debug.Log("LoadGraph");
            Reset();

            if (g == null)
            {
                return;
            }

            string[] sn = g.Split(':');

            foreach (string n in sn)
            {
                //Debug.Log(n);
                string[] s = n.Split('|');
                //foreach(string ts in s) Debug.Log(ts);

                if (s.Length > 0)
                {
                    if (s[0] == "node")
                    {
                        string[] p = s[1].Split(',');
                        //foreach(string ts in p) Debug.Log(ts);

                        int    x = 0;
                        int    y = 0;
                        int    c = 0;
                        string t = string.Empty;
                        foreach (string ts in p)
                        {
                            string[] v = ts.Split('=');
                            if (v.Length > 1)
                            {
                                if (v[0] == "t")
                                {
                                    t = v[1];
                                }
                                if (v[0] == "x")
                                {
                                    x = int.Parse(v[1]);
                                }
                                if (v[0] == "y")
                                {
                                    y = int.Parse(v[1]);
                                }
                                if (v[0] == "c")
                                {
                                    c = int.Parse(v[1]);
                                }
                            }
                        }
                        CreateNode(t, x, y, c);
                    }

                    if (s[0] == "val")
                    {
                        string[] p = s[1].Split(',');
                        //foreach(string ts in p) Debug.Log(ts);

                        int    ni = -1;
                        string ss = string.Empty;
                        string sv = string.Empty;

                        foreach (string ts in p)
                        {
                            string[] v = ts.Split('=');
                            if (v.Length > 1)
                            {
                                if (v[0] == "n")
                                {
                                    ni = int.Parse(v[1]);
                                }
                                if (v[0] == "s")
                                {
                                    ss = v[1];
                                }
                                if (v[0] == "v")
                                {
                                    sv = v[1];
                                }
                            }
                        }

                        if (ni >= 0 && ni < BocsCyclesNodeManager.Nodes.Count)
                        {
                            BocsNodeBase nb = BocsCyclesNodeManager.Nodes[ni];
                            if (nb != null)
                            {
                                foreach (BocsSlotBase us in nb.Slots)
                                {
                                    if (us.SlotName == ss)
                                    {
                                        us.SetString(sv);
                                    }
                                }
                            }
                        }
                    }
                    if (s[0] == "connect")
                    {
                        string[] p = s[1].Split(',');
                        //foreach(string ts in p) Debug.Log(ts);

                        int    n1 = -1;
                        int    n2 = -1;
                        string s1 = string.Empty;
                        string s2 = string.Empty;

                        foreach (string ts in p)
                        {
                            string[] v = ts.Split('=');
                            if (v.Length > 1)
                            {
                                if (v[0] == "n1")
                                {
                                    n1 = int.Parse(v[1]);
                                }
                                if (v[0] == "n2")
                                {
                                    n2 = int.Parse(v[1]);
                                }
                                if (v[0] == "s1")
                                {
                                    s1 = v[1];
                                }
                                if (v[0] == "s2")
                                {
                                    s2 = v[1];
                                }
                            }
                        }

                        if (n1 != -1 && n2 != -1 && s1 != string.Empty && s2 != string.Empty && n1 < Nodes.Count && n2 < Nodes.Count)
                        {
                            BocsSlotBase f = FindOutputSlotFromString(BocsCyclesNodeManager.Nodes[n1], s1);
                            BocsSlotBase t = FindInputSlotFromString(BocsCyclesNodeManager.Nodes[n2], s2);
                            if (f != null && t != null)
                            {
                                f.AddConnection(t);
                            }
                        }
                    }
                }
            }
        }