rearrangeAstrolabe<T extends FunctionalAstrolabe> function

T rearrangeAstrolabe<T extends FunctionalAstrolabe>(
  1. ZhongZhouHeavenEarth from,
  2. T astrolabe,
  3. Option option
)

Implementation

T rearrangeAstrolabe<T extends FunctionalAstrolabe>(
  ZhongZhouHeavenEarth from,
  T astrolabe,
  Option option,
) {
  final timeIndex = option.timeIndex;
  final fixLeap = option.fixLeap;

  // 以传入地支为命宫
  final params = AstrolabeParams(
    solarDate: astrolabe.solarDate,
    timeIndex: timeIndex,
    fixLeap: fixLeap,
    gender: getMyGenderFrom(astrolabe.gender),
    from: from,
  );
  final soulAndBody = getSoulAndBody(params);
  final fiveElementClass = getFiveElementClass(
    from.heavenlyStem,
    from.earthlyBranch,
  );
  final palaceNames = getPalaceNames(soulAndBody.soulIndex);
  final majorStars = getMajorStar(params);
  final changSheng12 = getChangSheng12(params);
  final horoscope = getHoroscope(params);
  astrolabe.fiveElementClass = fiveElementClass;
  for (int i = 0; i < astrolabe.palaces.length; i++) {
    final palace = astrolabe.palaces[i];
    palace.name = palaceNames[i];
    palace.majorStars = majorStars[i];
    palace.changShen12 = changSheng12[i];
    palace.decadal = horoscope?["decades"][i];
    palace.ages = horoscope?["ages"][i];
    palace.yearlies = horoscope?["yearlies"][i].ages;
    palace.isBodyPalace = soulAndBody.bodyIndex == i;
  }
  return astrolabe;
}