private void writeOpcServerConfig(string fileName) { /*OPCServerConfig opcServerConfig = new OPCServerConfig(); * List<string> inputsList = new List<string>(); * List<string> outputsList = new List<string>(); * * if (inputVars != null) * { * foreach (NuTraceVariable inputVar in inputVars) * { * inputsList.Add(inputVar.Variable); * } * } * if (outputVars != null) * { * foreach (NuTraceVariable outputVar in outputVars) * { * outputsList.Add(outputVar.Variable); * } * } * opcServerConfig.InputVariables = inputsList; * opcServerConfig.OutputVariables = outputsList; * opcServerConfig.SocketHost = "localhost"; * opcServerConfig.SocketPort = 11000;*/ ConfigBuilder.DefinitionList serverInemsDeflist = new ConfigBuilder.DefinitionList(); { serverInemsDeflist.BranchSeperatorChar = '.'; ConfigBuilder.BranchElement root = new BranchElement(); { root.name = "CIROS Connector"; ConfigBuilder.ConfigDefs defaultBranchConfig = new ConfigDefs(); defaultBranchConfig.activeDef = true; defaultBranchConfig.accRightSpecified = false; defaultBranchConfig.dataTypeSpecified = false; defaultBranchConfig.qualitySpecified = false; defaultBranchConfig.signalTypeSpecified = false; defaultBranchConfig.scanRateSpecified = false; defaultBranchConfig.deviceIDSpecified = false; defaultBranchConfig.deviceAddrSpecified = false; defaultBranchConfig.deviceSubAddrSpecified = false; defaultBranchConfig.user1Specified = false; defaultBranchConfig.user2Specified = false; root.branchDefs = defaultBranchConfig; ItemElement dummyItem = new ItemElement(); { dummyItem.name = "dummyItem"; dummyItem.handle = 0; dummyItem.itemDefs = new ConfigDefs(); dummyItem.Value = Convert.ToInt32(0); dummyItem.itemDefs.dataType = drvtypes.Type.SHORT; dummyItem.itemDefs.activeDef = true; dummyItem.itemDefs.accRightSpecified = false; dummyItem.itemDefs.dataTypeSpecified = true; dummyItem.itemDefs.qualitySpecified = false; dummyItem.itemDefs.signalTypeSpecified = false; dummyItem.itemDefs.scanRateSpecified = false; dummyItem.itemDefs.deviceIDSpecified = false; dummyItem.itemDefs.deviceAddrSpecified = false; dummyItem.itemDefs.deviceSubAddrSpecified = false; dummyItem.itemDefs.user1Specified = false; dummyItem.itemDefs.user2Specified = false; } root.items = new ItemElement[1]; root.items[0] = dummyItem; if (inputVars != null) { root.subBranches = new BranchElement[1]; //TODO: 2 root.subBranches[0] = new BranchElement(); root.subBranches[0].name = "Inputs"; { ConfigBuilder.ConfigDefs branchConfig = new ConfigDefs(); branchConfig.activeDef = true; branchConfig.accRightSpecified = true; branchConfig.accRight = OPCAccess.READWRITEABLE; branchConfig.dataTypeSpecified = false; branchConfig.qualitySpecified = true; branchConfig.quality = OPCQuality.GOOD; branchConfig.signalTypeSpecified = false; //branchConfig.signalTypeSpecified = true; //branchConfig.signalType = SignalType.INTERN; branchConfig.scanRate = 100; branchConfig.scanRateSpecified = true; branchConfig.deviceIDSpecified = false; branchConfig.deviceAddrSpecified = false; branchConfig.deviceSubAddrSpecified = false; branchConfig.user1Specified = false; branchConfig.user2Specified = false; root.subBranches[0].branchDefs = branchConfig; } root.subBranches[0].items = new ItemElement[inputVars.Count]; int i = 0; foreach (NuTraceVariable inputVar in inputVars) { ItemElement element = new ItemElement(); { element.name = inputVar.Variable; element.handle = i + 1; element.itemDefs = new ConfigDefs(); try { element.Value = Convert.ToInt32(inputVar.Value); element.itemDefs.dataType = drvtypes.Type.SHORT; } catch (FormatException e) { element.Value = Convert.ToBoolean(inputVar.Value); element.itemDefs.dataType = drvtypes.Type.BOOLEAN; } element.itemDefs.activeDef = true; element.itemDefs.accRightSpecified = true; element.itemDefs.accRight = OPCAccess.READWRITEABLE; element.itemDefs.dataTypeSpecified = true; element.itemDefs.qualitySpecified = true; element.itemDefs.quality = OPCQuality.GOOD; element.itemDefs.signalTypeSpecified = false; element.itemDefs.scanRateSpecified = false; element.itemDefs.deviceIDSpecified = false; element.itemDefs.deviceAddrSpecified = false; element.itemDefs.deviceSubAddrSpecified = false; element.itemDefs.user1Specified = false; element.itemDefs.user2Specified = false; /*element.itemDefs.properties = new PropertyDef[1]; * { * element.itemDefs.properties[0] = new PropertyDef(); * element.itemDefs.properties[0].id = 101; * element.itemDefs.properties[0].name = "Item Description"; * element.itemDefs.properties[0].dataType = drvtypes.Type.STRING; * element.itemDefs.properties[0].val = "Property test"; * * }*/ } root.subBranches[0].items[i++] = element; } } } serverInemsDeflist.DefinitionsRoot = root; } XmlSerializer ser = new XmlSerializer(typeof(ConfigBuilder.DefinitionList)); StringBuilder sb = new StringBuilder(); using (TextWriter writer = new StringWriter(sb)) { ser.Serialize(writer, serverInemsDeflist); } sb.Replace("xsi:nil=\"true\" ", ""); // hack removing xsi:nil="true" StreamWriter sw = new StreamWriter(fileName); sw.Write(sb); //ser.Serialize(writer, serverInemsDeflist); sw.Close(); }
public GhAlgorithm() { // In the constructor, we will build the input files RhinoModel.Initialize(); // Gets the current GH file. Will throw if not available GrasshopperFullFileName = RhinoModel.RM.GrasshopperFullFileName; WpfGrasshopperFileDescription = RhinoModel.RM.GrasshopperDescription; #region Gets the Grasshopper Input List GrasshopperAllEmasaInputDefsWrapper_AsRhino3dm inputDefs = RhinoModel.RM.Grasshopper_GetAllEmasaInputDefs(); // Integers foreach (string integerInput in inputDefs.IntegerInputs) { Integer_GhConfig_ParamDef intParam = new Integer_GhConfig_ParamDef(inName: integerInput); ConfigDefs.Add(intParam); } // Doubles foreach (var doubleInput in inputDefs.DoubleInputs) { Double_Input_ParamDef bdlInputParam = new Double_Input_ParamDef(inName: doubleInput.Key, inRange: new DoubleValueRange(doubleInput.Value.Item2, doubleInput.Value.Item3)); bdlInputParam.Start = doubleInput.Value.Item1; AddParameterToInputs(bdlInputParam); } // Points foreach (var pointInputs in inputDefs.PointInputs) { Point_Input_ParamDef pntParam = new Point_Input_ParamDef(inName: pointInputs.Key, inRange: new PointValueRange(pointInputs.Value.Item2, pointInputs.Value.Item3)); pntParam.Start = pointInputs.Value.Item1; AddParameterToInputs(pntParam); break; } #endregion #region Gets the Grasshopper Output List GrasshopperAllEmasaOutputWrapper_AsRhino3dm outputDefs = RhinoModel.RM.Grasshopper_GetAllEmasaOutputs(); // Line Lists foreach (var lineList in outputDefs.LineLists) { GeometryDefs.Add(new LineList_GhGeom_ParamDef(lineList.Key)); } // Double Lists foreach (var doubleList in outputDefs.DoubleLists) { DoubleList_GhGeom_ParamDef dlParam = new DoubleList_GhGeom_ParamDef(doubleList.Key); GeometryDefs.Add(dlParam); } // Point Lists foreach (var pointList in outputDefs.PointLists) { GeometryDefs.Add(new PointList_GhGeom_ParamDef(pointList.Key)); } #endregion #region Setting the WPF collection views InputDefs_View = CollectionViewSource.GetDefaultView(InputDefs); InputDefs_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); InputDefs_View.GroupDescriptions.Add(new PropertyGroupDescription("TypeName")); ConfigDefs_View = CollectionViewSource.GetDefaultView(ConfigDefs); ConfigDefs_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); CollectionViewSource configDefs_Integer_Cvs = new CollectionViewSource() { Source = ConfigDefs }; ConfigDefs_Integer_View = configDefs_Integer_Cvs.View; ConfigDefs_Integer_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); ConfigDefs_Integer_View.Filter += inO => inO is Integer_GhConfig_ParamDef; HasConfigDefs_Integer = ConfigDefs_Integer_View.IsEmpty ? Visibility.Collapsed : Visibility.Visible; CollectionViewSource geometryDefs_PointList_Cvs = new CollectionViewSource() { Source = GeometryDefs }; GeometryDefs_PointList_View = geometryDefs_PointList_Cvs.View; GeometryDefs_PointList_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); //GeometryDefs_PointList_View.GroupDescriptions.Add(new PropertyGroupDescription("TypeName")); GeometryDefs_PointList_View.Filter += inO => inO is PointList_GhGeom_ParamDef; HasGeometryDef_PointList = GeometryDefs_PointList_View.IsEmpty ? Visibility.Collapsed : Visibility.Visible; GeometryDefs_LineList_View = (new CollectionViewSource() { Source = GeometryDefs }).View; GeometryDefs_LineList_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); //GeometryDefs_LineList_View.GroupDescriptions.Add(new PropertyGroupDescription("TypeName")); GeometryDefs_LineList_View.Filter += inO => inO is LineList_GhGeom_ParamDef; HasGeometryDef_LineList = GeometryDefs_LineList_View.IsEmpty ? Visibility.Collapsed : Visibility.Visible; GeometryDefs_DoubleList_View = (new CollectionViewSource() { Source = GeometryDefs }).View; GeometryDefs_DoubleList_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); //GeometryDefs_DoubleList_View.GroupDescriptions.Add(new PropertyGroupDescription("TypeName")); GeometryDefs_DoubleList_View.Filter += inO => inO is DoubleList_GhGeom_ParamDef; HasGeometryDef_DoubleList = GeometryDefs_DoubleList_View.IsEmpty ? Visibility.Collapsed : Visibility.Visible; GeometryDefs_PointLineListBundle_View = (new CollectionViewSource() { Source = GeometryDefs }).View; GeometryDefs_PointLineListBundle_View.SortDescriptions.Add(new SortDescription("TypeName", ListSortDirection.Ascending)); GeometryDefs_PointLineListBundle_View.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); GeometryDefs_PointLineListBundle_View.Filter += inO => inO is LineList_GhGeom_ParamDef || inO is PointList_GhGeom_ParamDef; #endregion }