private void _DrawAllFrameSubframes(EasyGraph dataGraph, FrameContainer frameContainer, Frame isA_nilFrame, DataVertex isA_nilFrameDataVertex) { foreach (Slot slot in isA_nilFrame.slots) { Frame nextFrame = frameContainer.FrameFinder(slot.value); if (nextFrame != null) { DataVertex nextFrameDataVertex = new DataVertex(); if (_GetVertexByItsFrame(nextFrame, dataGraph) == null) { nextFrameDataVertex.Text = nextFrame.name; nextFrameDataVertex.ID = nextFrame.Id; dataGraph.AddVertex(nextFrameDataVertex); } else { nextFrameDataVertex = _DrawGetVertexById(nextFrame.Id, dataGraph); } var dataEdge = new DataEdge(nextFrameDataVertex, isA_nilFrameDataVertex) { }; dataGraph.AddEdge(dataEdge); //TODO: Здесь супер функция по отрисовке всех из-а для этого } } }
bool DrawAllRelatedVertices(Frame mainFrame, ref EasyGraph dataGraph, FrameContainer mainFrameContainer) { try { //Нижний блок можно извлеч в метод DataVertex mainVertex = AddNewVertexSafety(mainFrame, dataGraph); //ПОИСК И ОТРИСОВКА СУБФРЕЙМОВ List <string> allDomainValues = new List <string>(); foreach (var domain in mainFrameContainer.GetDomains()) { foreach (var domainValue in domain.values) { allDomainValues.Add(domainValue); } } foreach (var slot in mainFrame.slots) { if (allDomainValues.Contains(slot.value)) { Frame subFrame = mainFrameContainer.FrameFinder(slot.value); if (subFrame != null) { DataVertex subFrameVertex = AddNewVertexSafety(subFrame, dataGraph); var dataEdge = new DataEdge(subFrameVertex, mainVertex); dataGraph.AddEdge(dataEdge); DrawAllRelatedVertices(subFrame, ref dataGraph, mainFrameContainer); } } } //ПОИСК И ОТРИСОВКА IS_A foreach (var frame in mainFrameContainer.GetAllFrames()) { if (frame.isA == mainFrame.name) { Frame inheritedFrame = frame; if (inheritedFrame != null) { DataVertex inheritedFrameVertex = AddNewVertexSafety(inheritedFrame, dataGraph); var dataEdge = new DataEdge(inheritedFrameVertex, mainVertex) { Text = "is_a" }; dataGraph.AddEdge(dataEdge); DrawAllRelatedVertices(inheritedFrame, ref dataGraph, mainFrameContainer); } } } return(true); } catch (Exception e) { MessageBox.Show("DrawAllRelatedVertices " + e.ToString()); return(false); } }