public static Graph GetPatriarchsGraph(IBaseContext context, int gensMin, bool datesCheck, bool loneSuppress) { Graph graph = new Graph(); try { using (ExtList <PatriarchObj> patList = GetPatriarchsList(context, gensMin, datesCheck)) { // init GKUtils.InitExtData(context.Tree); // prepare int count = patList.Count; for (int i = 0; i < count; i++) { PatriarchObj patNode = patList[i]; GEDCOMIndividualRecord iRec = patNode.IRec; int count2 = iRec.SpouseToFamilyLinks.Count; for (int k = 0; k < count2; k++) { GEDCOMFamilyRecord family = iRec.SpouseToFamilyLinks[k].Family; family.ExtData = new PGNode(family.XRef, PGNodeType.Patriarch, patNode.DescGenerations); } } IProgressController progress = AppHost.Progress; try { int patCount = patList.Count; progress.ProgressInit(LangMan.LS(LSID.LSID_LinksSearch), patCount); for (int i = 0; i < patCount; i++) { PatriarchObj patr = patList[i]; for (int j = i + 1; j < patCount; j++) { PatriarchObj patr2 = patList[j]; GEDCOMFamilyRecord cross = TreeTools.PL_SearchIntersection(patr.IRec, patr2.IRec); if (cross != null) { PGNode node = (PGNode)cross.ExtData; if (node != null && node.Type == PGNodeType.Patriarch) { // dummy } else { int size = GKUtils.GetDescGenerations(cross.GetHusband()); if (size == 0) { size = 1; } cross.ExtData = new PGNode(cross.XRef, PGNodeType.Intersection, size); } } } progress.ProgressStep(); } } finally { progress.ProgressDone(); } // create graph int count3 = patList.Count; for (int i = 0; i < count3; i++) { PatriarchObj patNode = patList[i]; PL_WalkDescLinks(graph, null, patNode.IRec); } // clear GKUtils.InitExtData(context.Tree); /*if (gpl_params.aLoneSuppress) { * for (int i = aList.Count - 1; i >= 0; i--) { * PatriarchObj patr = aList[i] as PatriarchObj; * if (patr.ILinks.Count == 0) aList.Delete(i); * } * aList.Pack();*/ } } catch (Exception ex) { Logger.LogWrite("PatriarchsMan.GetPatriarchsGraph(): " + ex.Message); } return(graph); }