private bool LocateElementInModel() { if (currentPosition > Path.Length) { return(true); } // traverse the remainer of the path string remainingPath = Path.Substring(currentPosition); PathElements = remainingPath.Split('.'); currentPosition = 0; foreach (var item in PathElements) { if (item == "$" && currentPosition == 0) { break; } if (CurrentRoot.IsComposite()) { CurrentRoot = CurrentRoot.AsComposite()?.Value.SingleOrDefault(mp => mp.Name == item && !(mp.Modified && mp.Modifier == "-")); } if (CurrentRoot == null) { logger.Trace("{0} could not be located in the model", Path); break; } currentPosition++; } return(CurrentRoot != null); }
public void DrawTreeMap(IRenderer Renderer) { if (DoRevalue || (ShowLayout != ShowNodes.All && XRay.CoverChange) || (ShowLayout == ShowNodes.Instances && XRay.InstanceChange)) { RecalcCover(InternalRoot); RecalcCover(ExternalRoot); XRay.CoverChange = false; XRay.InstanceChange = false; DoRevalue = false; RevalueCount++; DoResize = true; } if (DoResize) { var drawArea = new RectangleF(ScreenOffset.X, ScreenOffset.Y, ScreenSize.Width, ScreenSize.Height); float offset = 0; float centerWidth = drawArea.Width; PositionMap.Clear(); CenterMap.Clear(); if (ShowingOutside) { offset = drawArea.Width * 1.0f / 4.0f; centerWidth -= offset; InternalRoot.SetArea(new RectangleF(ScreenOffset.X, ScreenOffset.Y, offset - PanelBorderWidth, drawArea.Height)); PositionMap[InternalRoot.ID] = InternalRoot; SizeNode(Renderer, InternalRoot, CurrentRoot, false); } if (ShowingExternal) { float extWidth = drawArea.Width * 1.0f / 4.0f; centerWidth -= extWidth; ExternalRoot.SetArea(new RectangleF(ScreenOffset.X + offset + centerWidth + PanelBorderWidth, ScreenOffset.Y, extWidth - PanelBorderWidth, drawArea.Height)); PositionMap[ExternalRoot.ID] = ExternalRoot; SizeNode(Renderer, ExternalRoot, null, false); } CurrentRoot.SetArea(new RectangleF(ScreenOffset.X + offset, ScreenOffset.Y, centerWidth, drawArea.Height)); PositionMap[CurrentRoot.ID] = CurrentRoot; SizeNode(Renderer, CurrentRoot, null, true); DoResize = false; ResizeCount++; } }