Esempio n. 1
0
            public static int Compare(GraphParameterData x, GraphParameterData y)
            {
                // By order
                if (x.Order != null)
                {
                    if (y.Order != null)
                    {
                        return(x.Order.Order - y.Order.Order);
                    }
                    return(-1);
                }
                if (y.Order != null)
                {
                    return(1);
                }

                // By group name
                if (x.Display?.Group != null)
                {
                    if (y.Display?.Group != null)
                    {
                        return(string.Compare(x.Display.Group, y.Display.Group, StringComparison.InvariantCulture));
                    }
                }

                // By name
                return(string.Compare(x.DisplayName, y.DisplayName, StringComparison.InvariantCulture));
            }
Esempio n. 2
0
        internal static GraphParameterData[] InitGraphParameters(IEnumerable <GraphParameter> parameters)
        {
            int count = parameters.Count();
            var data  = new GraphParameterData[count];
            int i     = 0;

            foreach (var parameter in parameters)
            {
                data[i] = new GraphParameterData(parameter);
                i++;
            }
            Array.Sort(data, GraphParameterData.Compare);
            return(data);
        }
Esempio n. 3
0
        /// <summary>
        /// Collects the graph parameters from the user, validates them, and then forwards the user to the graph page.
        /// </summary>
        /// <param name="data">Graph parameter data.</param>
        /// <returns>View to get graph parameters.</returns>
        public ActionResult GraphParameters(GraphParameterData data)
        {
            // If no data, or both parameter sets are null, give them an empty to fill.
            if (data == null ||
                (data.Parameters1 == null || data.Parameters2 == null))
            {
                // Clear errors for not entering any data
                this.ModelState.Clear();

                // Generate new model to fill data into & return
                var model = new GraphParameterData()
                {
                    FrequencyStartHz = 1000, FrequencyEndHz = 10000000
                };
                return(View(model));
            }

            // TODO Validation of graphing parameters, add to ModelState errors if any exist
            List <GraphParameters> validParameters = new List <GraphParameters>();
            // Validate that one set of graph parameters are filled out.
            GraphParameters p = data.Parameters1;

            if (p.CellRadius != null || p.CytoplasmConductivity != null || p.CytoplasmPermittivity != null || p.MediaConductivity != null || p.MediaPermittivity != null || p.MembraneConductivity != null || p.MembranePermittivity != null || p.ShellThickness != null)
            {
                validParameters.Add(data.Parameters1);
            }

            p = data.Parameters2;
            if (p.CellRadius != null || p.CytoplasmConductivity != null || p.CytoplasmPermittivity != null || p.MediaConductivity != null || p.MediaPermittivity != null || p.MembraneConductivity != null || p.MembranePermittivity != null || p.ShellThickness != null)
            {
                validParameters.Add(data.Parameters2);
            }

            if (validParameters.Count == 0)
            {
                ModelState.AddModelError("", "Please fill in at least one set of graph parameters to continue.");
            }

            if (!ModelState.IsValid)
            {
                return(View(data));
            }

            var graphData = UpdateGraphData(validParameters, data.FrequencyStartHz, data.FrequencyEndHz);

            TempData["graphData"] = graphData;
            return(RedirectToAction("Graph"));
        }
Esempio n. 4
0
        internal static GraphParameterData[] InitGraphParameters(IEnumerable <MaterialParameter> parameters, Material material)
        {
            int count = parameters.Count();
            var data  = new GraphParameterData[count];
            int i     = 0;

            // Load material surface parameters meta to use it for material instance parameters editing
            SurfaceParameter[] surfaceParameters = null;
            try
            {
                Profiler.BeginEvent("Init Material Parameters UI Data");

                if (material != null && !material.WaitForLoaded())
                {
                    var surfaceData = material.LoadSurface(false);
                    if (surfaceData != null && surfaceData.Length > 0)
                    {
                        using (var memoryStream = new MemoryStream(surfaceData))
                            using (var stream = new BinaryReader(memoryStream))
                            {
                                // IMPORTANT! This must match C++ Graph format

                                // Magic Code
                                int tmp = stream.ReadInt32();
                                if (tmp != 1963542358)
                                {
                                    // Error
                                    throw new Exception("Invalid Graph format version");
                                }

                                // Version
                                var version   = stream.ReadUInt32();
                                var guidBytes = new byte[16];
                                if (version < 7000)
                                {
                                    // Time saved (not used anymore to prevent binary diffs after saving unmodified surface)
                                    stream.ReadInt64();

                                    // Nodes count
                                    int nodesCount = stream.ReadInt32();

                                    // Parameters count
                                    int parametersCount = stream.ReadInt32();

                                    // For each node
                                    for (int j = 0; j < nodesCount; j++)
                                    {
                                        // ID
                                        stream.ReadUInt32();

                                        // Type
                                        stream.ReadUInt16();
                                        stream.ReadUInt16();
                                    }

                                    // For each param
                                    surfaceParameters = new SurfaceParameter[parametersCount];
                                    for (int j = 0; j < parametersCount; j++)
                                    {
                                        // Create param
                                        var param = new SurfaceParameter();
                                        surfaceParameters[j] = param;

                                        // Properties
                                        param.Type = new ScriptType(VisjectSurfaceContext.GetGraphParameterValueType((VisjectSurfaceContext.GraphParamType_Deprecated)stream.ReadByte()));
                                        stream.Read(guidBytes, 0, 16);
                                        param.ID       = new Guid(guidBytes);
                                        param.Name     = stream.ReadStr(97);
                                        param.IsPublic = stream.ReadByte() != 0;
                                        var isStatic     = stream.ReadByte() != 0;
                                        var isUIVisible  = stream.ReadByte() != 0;
                                        var isUIEditable = stream.ReadByte() != 0;

                                        // References [Deprecated]
                                        int refsCount = stream.ReadInt32();
                                        for (int k = 0; k < refsCount; k++)
                                        {
                                            stream.ReadUInt32();
                                        }

                                        // Value
                                        stream.ReadCommonValue(ref param.Value);

                                        // Meta
                                        param.Meta.Load(stream);
                                    }
                                }
                                else if (version == 7000)
                                {
                                    // Nodes count
                                    int nodesCount = stream.ReadInt32();

                                    // Parameters count
                                    int parametersCount = stream.ReadInt32();

                                    // For each node
                                    for (int j = 0; j < nodesCount; j++)
                                    {
                                        // ID
                                        stream.ReadUInt32();

                                        // Type
                                        stream.ReadUInt16();
                                        stream.ReadUInt16();
                                    }

                                    // For each param
                                    surfaceParameters = new SurfaceParameter[parametersCount];
                                    for (int j = 0; j < parametersCount; j++)
                                    {
                                        // Create param
                                        var param = new SurfaceParameter();
                                        surfaceParameters[j] = param;

                                        // Properties
                                        param.Type = stream.ReadVariantScriptType();
                                        stream.Read(guidBytes, 0, 16);
                                        param.ID       = new Guid(guidBytes);
                                        param.Name     = stream.ReadStr(97);
                                        param.IsPublic = stream.ReadByte() != 0;

                                        // Value
                                        param.Value = stream.ReadVariant();

                                        // Meta
                                        param.Meta.Load(stream);
                                    }
                                }
                            }
                    }
                }
            }
            catch (Exception ex)
            {
                Editor.LogError("Failed to get material parameters metadata.");
                Editor.LogWarning(ex);
            }
            finally
            {
                Profiler.EndEvent();
            }

            foreach (var parameter in parameters)
            {
                var surfaceParameter = surfaceParameters?.FirstOrDefault(x => x.ID == parameter.ParameterID);
                var attributes       = surfaceParameter?.Meta.GetAttributes() ?? FlaxEngine.Utils.GetEmptyArray <Attribute>();
                data[i] = new GraphParameterData(null, parameter.Name, parameter.IsPublic, ToType(parameter.ParameterType), attributes, parameter);
                i++;
            }
            Array.Sort(data, GraphParameterData.Compare);
            return(data);
        }