Closed se-sss closed 1 year ago
Was:
Now convenient straight order:
Difference in choice fields is due to old version used (2.22) for the 1st screenshot.
I can't accept this PR any time soon, because there is a branch feature/compex-kinship, where I worked on the issue of strengthening the some kinships analysis. Improvements in this branch intersect with yours, the code will become completely incompatible for automatic merging.
But it's a cool improvement idea.
Also I have proposal of adding "Swap" button to that window to see backward route. Code working but not prepared for commit yet.
Something got broken.
Initial selection is not correct
After swap seems to be correct:
I shall look later
Withou my pull request
Приведите здесь без PR ваш код для свопа. Я у себя протестировал - в дереве отношения выводятся корректно, в этом модуле - тоже. Есть подозрение, что нужно посмотреть на реализацию свопа. Если вы есть в телеграмме - можете выйти на меня через канал программы и скинуть код в личку напрямую.
Для быстрого прототипа я сделал следующее в RelationshipCalculatorDlg:
public RelationshipCalculatorDlg(IBaseWindow baseWin)
{
....
fController.SetRec2(null);
this.KeyDown += RelationshipCalculatorDlg_KeyDown;
}
private void RelationshipCalculatorDlg_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == System.Windows.Forms.Keys.F11) {
fController.Swap();
}
}
И в RelationshipCalculatorDlgController:
public void Swap()
{
var rec1 = fRec1;
var rec2 = fRec2;
fRec1 = rec2;
fRec2 = rec1;
Solve();
}
На выбранном примере в своём дереве - всё работает корректно.
А проблема не со свапом. Первая картинка, где правнуком назван, получена без его применения. А после свапа - похоже на правду. Это после Merge branch 'master' into feature/complex-kinship
Есть мой прадед, у него сестра, у неё есть муж. Почему-то пишется, что я внук этого мужа сестры. В обратную нормально.
А в прежнем варианте тоже было неправильно? Или так стало после моих последних изменений?
Есть предположение, в чем может быть дело. У меня набор правил для определения родственных связей не обратно совместим (не помню подходящий термин). Т.е. когда идет обход цепочки графа в одном направлении - нужные связи отрабатываются правильно, а в обратном направлении, срабатывает какое-то неправильное правило, вместо отсутствующего.
Странно: нашел у себя в точности описанный паттерн, прогнал тест - в обоих направлениях всё определяется правильно.
Brother_in_law неожиданно появляется
Комментирование правила под этим индексом помогает //RegisterKinship( // RelationSet.Create(), // RelationSet.Create(RelationKind.rkWifeFather, RelationKind.rkWifeMother), // RelationSet.Create(RelationKind.rkSon), // RelationKind.rkBrotherInLaw_W, 0, 0);
Я подумаю как улучшить отладку модуля. Первоочередные моменты: нужно сделать какой-либо вывод всей анализируемой цепочки узлов графа, и вывод последовательности входных и выходных типов отношений на каждой итерации. Вышеуказанная ошибка может происходить только из-за некачественного определения какой-то связи. Не обязательо это BrotherInLaw.
Assume user selected 2 persons: Person 1 Person 2
Now order of output is more natural: Person1 is somebody for PersonA, PersonA is somebody for personB, PersonB is somebody for Person2.