GeneGenie.Gedcom icon indicating copy to clipboard operation
GeneGenie.Gedcom copied to clipboard

Mapping pedigrees to Family Tree Maker

Open RyanONeill1970 opened this issue 7 years ago • 2 comments

FTM uses _FREL and _MREL instead of the standard PEDI pedigree tags. When loaded and resaved this causes the new file to fail the content comparison tests as we have inferred 'Birth' as the pedigree but not written it out to the new file.

This issues occurs on the FAM record type and a test case file is available at FTM-pedigree-mapping.ged

RyanONeill1970 avatar Mar 06 '17 15:03 RyanONeill1970

Multipart fix:

  1. In GedcomRecordReader ReadGedcom above line 378:

`// set pedigree here to allow for ADOP/FOST in the FAM tag // FAM record overrides link status if they differ famLink.Pedigree = family.GetLinkageType(childID); famLink.FatherPedigree = family.GetHusbandLinkageType(childID); famLink.MotherPedigree = family.GetWifeLinkageType(childID);

// handles proper assigning of pedigree if(famLink.FatherPedigree == PedegreeLinkageType.Birth && famLink.MotherPedigree == PedegreeLinkageType.Birth) { famLink.Pedigree = PedegreeLinkageType.Birth; } else if (famLink.FatherPedigree == PedegreeLinkageType.Adopted && famLink.MotherPedigree == PedegreeLinkageType.Birth) { famLink.Pedigree = PedegreeLinkageType.FatherAdopted; } else if (famLink.FatherPedigree == PedegreeLinkageType.Birth && famLink.MotherPedigree == PedegreeLinkageType.Adopted) { famLink.Pedigree = PedegreeLinkageType.MotherAdopted; } else if (famLink.FatherPedigree == PedegreeLinkageType.Adopted && famLink.MotherPedigree == PedegreeLinkageType.Adopted) { famLink.Pedigree = PedegreeLinkageType.Adopted; } else if (famLink.FatherPedigree == PedegreeLinkageType.Foster && famLink.MotherPedigree == PedegreeLinkageType.Foster) { famLink.Pedigree = PedegreeLinkageType.Foster; }`

  1. In GedcomFamilyLink line 97:

//remove/quote out the mother/father pedigree setting public PedegreeLinkageType Pedigree { get { return _Pedigree; } set { if (value != _Pedigree) { _Pedigree = value; //FatherPedigree = value; <- these was causing Unknown entries //MotherPedigree = value; Changed(); } } }

  1. In GedcomFamilyRecord line 1111:

//This will output FTM standard

// only output _FREL / _MREL value here, // real PEDI goes on the FAMC on the INDI tag GedcomFamilyLink link = null; if (child.ChildInFamily(_XrefID, out link)) { switch (link.Pedigree) { case Gedcom.PedegreeLinkageType.Birth: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Natural"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Natural"); break; case Gedcom.PedegreeLinkageType.FatherAdopted: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Adopted"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Natural"); break; case Gedcom.PedegreeLinkageType.MotherAdopted: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Natural"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Adopted"); break; case Gedcom.PedegreeLinkageType.Adopted: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Adopted"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Adopted"); break; case Gedcom.PedegreeLinkageType.Unknown: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Unknown"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Unknown"); break; case Gedcom.PedegreeLinkageType.Foster: sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_FREL Foster"); sw.Write(Environment.NewLine); sw.Write(levelPlusTwo); sw.Write("_MREL Foster"); break; } }

kman73 avatar Apr 13 '23 01:04 kman73

Thank you, I'll have a look at merging this in at some point.

RyanONeill1970 avatar Apr 13 '23 08:04 RyanONeill1970