public LadderDiagramReplaceNetworksCommand( LadderDiagramViewModel ld, LadderNetworkViewModel replacedNet, IEnumerable <LadderNetworkViewModel> removedNets, int index, NetworkChangeElementArea area = null, NetworkChangeElementArea oldarea = null) { _ladderDiagram = ld; _replacedNetworks = new SortedSet <LadderNetworkViewModel>() { replacedNet }; _removedNetworks = new SortedSet <LadderNetworkViewModel>(removedNets); _index = index; _oldarea = oldarea; _area = area; if (_oldarea == null) { _oldarea = NetworkChangeElementArea.Create( _ladderDiagram, _removedNetworks); } if (_area == null) { _area = NetworkChangeElementArea.Create( _ladderDiagram, _replacedNetworks); } }
public NetworkReplaceElementsCommand( LadderNetworkViewModel network, IEnumerable <BaseViewModel> elements, IEnumerable <BaseViewModel> oldelements, NetworkChangeElementArea area = null, NetworkChangeElementArea oldarea = null) { _network = network; _elements = elements; _oldelements = oldelements; _vlines = new VerticalLineViewModel[] { }; _oldvlines = new VerticalLineViewModel[] { }; _area = area; _oldarea = oldarea; if (_area == null) { _area = NetworkChangeElementArea.Create( _network, _elements, _vlines); } if (_oldarea == null) { _oldarea = NetworkChangeElementArea.Create( _network, _oldelements, _oldvlines); } }
public void Initialize() { pmodel = new ProjectModel("效果展示"); ldvmodel = new LadderDiagramViewModel("效果展示", pmodel); lnvmodel = ldvmodel.GetNetworks().First(); ldvmodel.LadderMode = LadderMode.Demo; ldvmodel.Visibility = Visibility.Hidden; GD_Main.Children.Add(ldvmodel); LDDemoViewModel ldmodel = new LDDemoViewModel(); LDWEQDemoViewModel ldweqmodel = new LDWEQDemoViewModel(); SMOVDemoViewModel smovmodel = new SMOVDemoViewModel(); lnvmodel.LadderCanvas.Children.Add(ldmodel); lnvmodel.LadderCanvas.Children.Add(ldweqmodel); lnvmodel.LadderCanvas.Children.Add(smovmodel); lnvmodel.CommentAreaExpander.IsEnabled = false; lnvmodel.ladderExpander.IsEnabled = false; lnvmodel.LadderCanvas.IsEnabled = false; ldvmodel.CommentAreaExpander.IsEnabled = false; ldvmodel.ladderExpander.IsEnabled = false; ldvmodel.IsCommentMode = true; fbvmodel = new FuncBlockViewModel("效果展示", null); fbvmodel.Code = "void Func(WORD* w1, WORD* w2, WORD* w3)\n{\n\tw3[0] = w1[0] + w2[0];\n}\n"; fbvmodel.CodeTextBox.IsReadOnly = true; GD_Main.Children.Add(fbvmodel); fbvmodel.Visibility = Visibility.Hidden; }
private static bool IsRelativeToModel(LadderNetworkViewModel ladderNetwork, BaseViewModel model, BaseViewModel hLine) { var relativePoints = GetRightRelativePoint(hLine.X, hLine.Y); //判断元素hLine是否与model相连 return(CheckRelativePoints(ladderNetwork, relativePoints, model, Direction.Right)); }
//短路检测 private static bool CheckLadderGraphShort(LadderNetworkViewModel ladderNetwork, BaseViewModel checkmodel) { List <BaseViewModel> eles = checkmodel.NextElements; if (eles.Count == 1) { return(true); } if (eles.Exists(x => { return(x.Type == ElementType.Null); }) && eles.Count > 1) { ladderNetwork.ErrorModels.Clear(); ladderNetwork.ErrorModels.Add(eles.First());//add error element return(false); } Queue <BaseViewModel> tempQueue = new Queue <BaseViewModel>(eles); while (tempQueue.Count > 0) { var ele = tempQueue.Dequeue(); if (eles.Intersect(ele.NextElements).Count() > 0) { ladderNetwork.ErrorModels.Clear(); ladderNetwork.ErrorModels.Add(ele);//add error element return(false); } else { foreach (var item in ele.NextElements) { tempQueue.Enqueue(item); } } } return(true); }
public void Uninstall() { lnvmodel.ElementChanged -= OnElementChanged; lnvmodel.VerticalLineChanged -= OnVerticalLineChanged; lnvmodel.PropertyChanged -= OnNetworkPropertyChanged; this.lnvmodel = null; }
private BackTraceElement GetElement(int bpaddr) { BaseViewModel bvmodel = BreakPointManager.GetBVModel(bpaddr); if (bvmodel != null) { LadderNetworkViewModel lnvmodel = ifacade.ProjectModel.GetNetwork(bvmodel); if (lnvmodel == null) { return(null); } LadderDiagramViewModel ldvmodel = lnvmodel.LDVModel; SimuBrpoElement brpo = new SimuBrpoElement(); brpo.LDVModel = ldvmodel; brpo.LNVModel = lnvmodel; brpo.BVModel = bvmodel; return(new BackTraceElement(BackTraceType.Diagram, brpo)); } FuncBlock fblock = BreakPointManager.GetFBlock(bpaddr); if (fblock != null) { FuncBlockViewModel fbvmodel = ifacade.ProjectModel.GetFuncBlock(fblock); if (fbvmodel == null) { return(null); } FuncBrpoElement brpo = new FuncBrpoElement(); brpo.FBVModel = fbvmodel; brpo.FBlock = fblock; return(new BackTraceElement(BackTraceType.FuncBlock, brpo)); } return(new BackTraceElement(BackTraceType.External)); }
static private void Analyze( LadderNetworkViewModel lnvmodel, BaseViewModel bvmodel, ref NetworkChangeElementArea area) { int x = bvmodel.X; int y = bvmodel.Y; if (bvmodel is VerticalLineViewModel) { x++; } if (area == null) { area = new NetworkChangeElementArea(); area.SU_Select = SelectStatus.SingleSelected; area.SU_Cross = CrossNetworkState.NoCross; area.NetworkNumberStart = lnvmodel.NetworkNumber; area.NetworkNumberEnd = lnvmodel.NetworkNumber; area.X1 = area.X2 = x; area.Y1 = area.Y2 = y; } else { area.SU_Select = SelectStatus.MultiSelected; area.X1 = Math.Min(area.X1, x); area.X2 = Math.Max(area.X2, x); area.Y1 = Math.Min(area.Y1, y); area.Y2 = Math.Max(area.Y2, y); } }
public static LadderNetworkViewModel CreateLadderNetworkByXElement(XElement xEle, LadderDiagramViewModel parent) { LadderNetworkViewModel result = new LadderNetworkViewModel(parent, int.Parse(xEle.Attribute("Number").Value)); result.RowCount = int.Parse(xEle.Attribute("RowCount").Value); if (xEle.Attribute("IsMasked") != null) { result.IsMasked = bool.Parse(xEle.Attribute("IsMasked").Value); } else { result.IsMasked = false; } result.NetworkBrief = xEle.Element("Brief").Value; result.NetworkDescription = xEle.Element("Description").Value; XElement contentNode = xEle.Element("LadderContent"); foreach (var instEle in CreateLadderElementsByXElement(contentNode)) { result.ReplaceElement(instEle); } foreach (var vline in CreateLadderVertialLineByXElement(contentNode)) { result.ReplaceVerticalLine(vline); } InstructionCommentManager.RaiseMappedMessageChangedEvent(); return(result); }
private void OnBreakpointChanged(object sender, BreakpointChangedEventArgs e) { LadderNetworkViewModel lnvmodel = (LadderNetworkViewModel)sender; LadderDiagramViewModel ldvmodel = lnvmodel.LDVModel; IEnumerable <SimuBrpoElement> fit = null; SimuBrpoElement ele = null; if (e.BPRect_old != null) { fit = items.Where((_ele) => { return(_ele.BPRect == e.BPRect_old); }); if (fit.Count() > 0) { ele = fit.First(); Unactive(ele); items.Remove(ele); } } if (e.BPRect_new != null) { ele = new SimuBrpoElement(); ele.IsActive = true; ele.LDVModel = ldvmodel; ele.LNVModel = lnvmodel; ele.BVModel = e.BPRect_new.BVModel; ele.BPRect = e.BPRect_new; ele.BreakTime = "1"; items.Add(ele); Active(ele); } PropertyChanged(this, new PropertyChangedEventArgs("Items")); ifacade.MainWindow.LACBreakpoint.Show(); }
private static bool CheckRelativePoints(LadderNetworkViewModel ladderNetwork, IEnumerable <IntPoint> relativePoints, BaseViewModel model, Direction direction) { IntPoint p1 = new IntPoint(); //right IntPoint p2 = new IntPoint(); //up IntPoint p3 = new IntPoint(); //down bool right = false; bool up = false; bool down = false; if (direction == Direction.Right) { p1 = relativePoints.ElementAt(0); p2 = relativePoints.ElementAt(1); p3 = relativePoints.ElementAt(2); } else if (direction == Direction.Up) { p2 = relativePoints.ElementAt(0); p1 = relativePoints.ElementAt(1); } else { p3 = relativePoints.ElementAt(0); p1 = relativePoints.ElementAt(1); } BaseViewModel element = ladderNetwork.LadderElements[p1.X, p1.Y]; if (element != null) { if (element == model) { return(true); } if (element.Type == ElementType.HLine) { right = CheckRelativePoints(ladderNetwork, GetRightRelativePoint(p1.X, p1.Y), model, Direction.Right); } } VerticalLineViewModel verticalLine; if ((direction == Direction.Up) || (direction == Direction.Right)) { verticalLine = ladderNetwork.LadderVerticalLines[p2.X, p2.Y]; if (verticalLine != null) { up = CheckRelativePoints(ladderNetwork, GetUpRelativePoint(p2.X, p2.Y), model, Direction.Up); } } if ((direction == Direction.Down) || (direction == Direction.Right)) { verticalLine = ladderNetwork.LadderVerticalLines[p3.X, p3.Y]; if (verticalLine != null) { down = CheckRelativePoints(ladderNetwork, GetDownRelativePoint(p3.X, p3.Y), model, Direction.Down); } } //结果必须是三个方向的并 return(right || up || down); }
public virtual void Dispose() { lnvmodel.ElementChanged -= OnElementChanged; parent = null; bvmodel = null; ldvmodel = null; lnvmodel = null; }
public static void Execute(LadderNetworkViewModel ladderNetwork) { foreach (var KVPair in ladderNetwork.LadderLogicModules.OrderBy(x => { return(x.Key); })) { HorizontalScan(KVPair.Value); VerticalScan(KVPair.Value); } RemoveEmptyLines(ladderNetwork); }
public ElementReplaceArgumentCommand( LadderNetworkViewModel _lnvmodel, BaseViewModel _bvmodel, IList <string> _pstring_old, IList <string> _pstring_new) { lnvmodel = _lnvmodel; bvmodel = _bvmodel; pstring_old = _pstring_old; pstring_new = _pstring_new; }
public FindElement ( FindWindow _parent, BaseViewModel _bvmodel, LadderDiagramViewModel _ldvmodel, LadderNetworkViewModel _lnvmodel ) : base(null, _bvmodel, _ldvmodel, _lnvmodel) { parent = _parent; }
public void Undo() { _ladderDiagram.AddNetwork(_removedNetworks, _index, true); _ladderDiagram.IDVModel.Setup(_ladderDiagram); _ladderDiagram.UpdateModelMessageByNetwork(); if (_area != null) { LadderNetworkViewModel lnvmodel = _removedNetworks.First(); _area.Select(lnvmodel); } }
public BreakpointChangedEventArgs ( LadderNetworkViewModel _lnvmodel, BreakpointRect _bprect_old, BreakpointRect _bprect_new ) { LNVModel = _lnvmodel; BPRect_old = _bprect_old; BPRect_new = _bprect_new; }
public ErrorReportElement ( PLCOriginInst _inst, LadderNetworkViewModel _lnvmodel, LadderDiagramViewModel _ldvmodel ) { this.inst = _inst; this.lnvmodel = _lnvmodel; this.ldvmodel = _ldvmodel; }
public MonitorContextMenu(LadderNetworkViewModel _lnvmodel) { lnvmodel = _lnvmodel; foreach (MenuItem MI_Value in MI_Values) { Items.Add(MI_Value); MI_Value.Click += OnMenuItemClick; } Items.Add(new Separator()); Items.Add(MI_Breakpoint); MI_Breakpoint.Click += OnMenuItemClick; }
public void Setup(LadderNetworkViewModel _lnvmodel) { if (lnvmodel != null) { Uninstall(); } this.lnvmodel = _lnvmodel; lnvmodel.ElementChanged += OnElementChanged; lnvmodel.VerticalLineChanged += OnVerticalLineChanged; lnvmodel.PropertyChanged += OnNetworkPropertyChanged; Update(); }
private static bool Assert(LadderNetworkViewModel ladderNetwork) { return(ladderNetwork.GetElements().All(x => { if (!x.Assert()) { ladderNetwork.ErrorModels.Clear(); ladderNetwork.ErrorModels.Add(x); } return x.Assert(); }) && CheckVerticalLines(ladderNetwork, ladderNetwork.GetVerticalLines())); }
/// <summary> /// 构造函数 /// </summary> /// <param name="_lnvmodel">网络的显示模型</param> /// <param name="_element">要替换的列表元素</param> /// <param name="_command">替换命令</param> public NetworkReplaceElementsCommand_ForReplaceWindow ( LadderNetworkViewModel _lnvmodel, ReplaceElement _element, NetworkReplaceElementsCommand _command ) { lnvmodel = _lnvmodel; Element = _element; BVM_old = _command.OldElements.First(); BVM_new = _command.NewElements.First(); }
public NetworkReplaceBreakpointCommand( LadderNetworkViewModel network, IEnumerable <BreakpointRect> oldbreakpoints, IEnumerable <BreakpointRect> newbreakpoints, NetworkChangeElementArea oldarea = null, NetworkChangeElementArea newarea = null) { _network = network; _oldbreakpoints = new HashSet <BreakpointRect>(oldbreakpoints); _newbreakpoints = new HashSet <BreakpointRect>(newbreakpoints); _oldarea = oldarea; _newarea = newarea; }
private static bool CheckVerticalLines(LadderNetworkViewModel ladderNetwork, IEnumerable <VerticalLineViewModel> VLines) { foreach (var VLine in VLines) { if (!ladderNetwork.CheckVerticalLine(VLine)) { ladderNetwork.ErrorModels.Clear(); ladderNetwork.ErrorModels.Add(VLine); return(false); } } return(true); }
/// <summary> /// 构造函数 /// </summary> /// <param name="_lnvmodel">网络的显示模型</param> /// <param name="_element">要替换的列表元素</param> /// <param name="_BVM_old">旧的元件</param> /// <param name="_BVM_new">新的元件</param> public NetworkReplaceElementsCommand_ForReplaceWindow ( LadderNetworkViewModel _lnvmodel, ReplaceElement _element, BaseViewModel _BVM_old, BaseViewModel _BVM_new ) { lnvmodel = _lnvmodel; Element = _element; BVM_old = _BVM_old; BVM_new = _BVM_new; }
public void Select(LadderNetworkViewModel lnvmodel) { if (this == Empty) { return; } LadderDiagramViewModel ldvmodel = lnvmodel.LDVModel; ProjectModel pmodel = ldvmodel.ProjectModel; InteractionFacade ifacade = pmodel.IFacade; ldvmodel.AcquireArea(this); ifacade.MainTabControl.ShowItem(ldvmodel); }
//得到与model直连的所有HLine private static IEnumerable <BaseViewModel> GetHLines(BaseViewModel model, LadderNetworkViewModel ladderNetwork) { var hLines = ladderNetwork.LadderElements.Where(x => { return(x.Type == ElementType.HLine); }); var tempList = new List <BaseViewModel>(); foreach (var hLine in hLines) { if (IsRelativeToModel(ladderNetwork, model, hLine)) { tempList.Add(hLine); } } return(tempList); }
public NetworkRemoveRowCommand(LadderNetworkViewModel network, int rowNumber) { _network = network; _rowNumber = rowNumber; _oldarea = new NetworkChangeElementArea(); _oldarea.SU_Select = SelectStatus.MultiSelected; _oldarea.SU_Cross = CrossNetworkState.NoCross; _oldarea.NetworkNumberStart = network.NetworkNumber; _oldarea.NetworkNumberEnd = _oldarea.NetworkNumberStart; _oldarea.X1 = 0; _oldarea.X2 = 11; _oldarea.Y1 = rowNumber; _oldarea.Y2 = _oldarea.Y1; }
public LadderDiagramReplaceNetworksCommand( LadderDiagramViewModel ld, LadderNetworkViewModel net, int index, NetworkChangeElementArea area = null, NetworkChangeElementArea oldarea = null) { _ladderDiagram = ld; _replacedNetworks = new SortedSet <LadderNetworkViewModel>() { net }; _removedNetworks = new SortedSet <LadderNetworkViewModel>(); _index = index; _oldarea = oldarea; _area = area; }
public NetworkRemoveElementsCommand( LadderNetworkViewModel network, IEnumerable <BaseViewModel> elements, IEnumerable <VerticalLineViewModel> vlines, NetworkChangeElementArea area = null) { _network = network; _elements = elements; _vlines = vlines; _area = area; if (_area == null) { _area = NetworkChangeElementArea.Create( _network, _elements, _vlines); } }