public void ClearAllComponents() { for (var i = Components.Count - 1; i > 0; i--) { var component = Components[i]; if (component is IStructuralComponent) { continue; } Components.RemoveAt(i); } for (var it = DetectableComponents.First; it != null;) { var next = it.Next; if (it.Value is IStructuralComponent) { it = next; continue; } DetectableComponents.Remove(it); it = next; } }
private void AddComponent <T>(T component) where T : IDetectableComponent, IPositionalComponent { Components.Add(component); if (DetectableComponents?.Count == 0) { DetectableComponents.AddFirst(component); detectableComponent = DetectableComponents.First; } else { var beforeNode = DetectableComponents.FindLast(DetectableComponents.LastOrDefault(c => c.Azimuth <= component.Azimuth)); if (beforeNode != null) { DetectableComponents.AddAfter(beforeNode, component); } var afterNode = DetectableComponents.Find(DetectableComponents.FirstOrDefault(c => c.Azimuth > component.Azimuth)); if (afterNode != null) { DetectableComponents.AddBefore(afterNode, component); if (detectableComponent == afterNode) { detectableComponent = DetectableComponents.Find(component); } } } }