void parseChMap(string[] parms) { if (!BuildingChannelMap) { return; } if (parms[1] == "done") { BuildingChannelMap = false; } else if (parms[1] == "ins") { ChannelMappingData chMapData = new ChannelMappingData(); int modeIndex = int.Parse(parms[2]); chMapData.Type = (MappingType)int.Parse(parms[3]); chMapData.ServoIndices = GetValueArrayFromString <int>(parms[4]); chMapData.ChannelIndices = GetValueArrayFromString <int>(parms[5]); chMapData.Positionning = (PositionningType)int.Parse(parms[6]); chMapData.Params = new decimal[chMapData.Type == MappingType.IK ? 2 : 0]; chMapData.chMapIndex = chMapIndex++; ucMappingBase ucMapping = null; switch (chMapData.Type) { case MappingType.Direct: ucMapping = new ucMappingDirect(inputCount, outputCount); break; case MappingType.TankMix: ucMapping = new ucMappingTankMix(inputCount, outputCount); break; case MappingType.IK: ucMapping = new ucMappingIK(inputCount, outputCount); break; } ucMapping.chMapData = chMapData; ucMapping.Top = buildHeight; buildHeight += ucMapping.Height; ucMapping.Width = panelChannelMap.Width - 20; ucMapping.OnCommand += OnCommandReceived; ucMapping.OnChMapTypeChanged += ucMapping_OnChMapTypeChanged; AddControlToContainer(panelChannelMap, ucMapping); } else if (parms[1] == "setParams") { // chMap setParams <modeIndex> <chMapIndex> <param1>,<param2>... int modeIndex = int.Parse(parms[2]); int chMapIndex = int.Parse(parms[3]); List <ucMappingBase> controlList = new List <ucMappingBase>(panelChannelMap.Controls.OfType <ucMappingBase>()); ucMappingIK uc = (ucMappingIK)controlList.Where(v => v.chMapData.chMapIndex == chMapIndex).FirstOrDefault(); ChannelMappingData chMapData = uc.chMapData; chMapData.Params = GetValueArrayFromString <decimal>(parms[4]); uc.SetControlValues(); } }
void ucMapping_OnChMapTypeChanged(object sender, ChMapTypeChangedEventArgs e) { if (updating) { return; } updating = true; ChannelMappingData chMapData = e.chMapData; ucMappingBase ucMapping = null; switch (chMapData.Type) { case MappingType.Direct: ucMapping = new ucMappingDirect(inputCount, outputCount); Array.Resize(ref chMapData.ChannelIndices, 1); Array.Resize(ref chMapData.ServoIndices, 1); break; case MappingType.TankMix: ucMapping = new ucMappingTankMix(inputCount, outputCount); Array.Resize(ref chMapData.ChannelIndices, 2); Array.Resize(ref chMapData.ServoIndices, 2); break; case MappingType.IK: ucMapping = new ucMappingIK(inputCount, outputCount); Array.Resize(ref chMapData.ChannelIndices, 3); Array.Resize(ref chMapData.ServoIndices, 3); Array.Resize(ref chMapData.Params, 2); break; } ucMapping.chMapData = chMapData; //ucMapping.Top = ucMapping.Height * chMapData.chMapIndex; ucMapping.Width = panelChannelMap.Width - 20; ucMapping.OnCommand += OnCommandReceived; ucMapping.OnChMapTypeChanged += ucMapping_OnChMapTypeChanged; panelChannelMap.Controls.RemoveAt(chMapData.chMapIndex); AddControlToContainer(panelChannelMap, ucMapping); RearrangeMappingControls(); updating = false; }