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