コード例 #1
0
 function collapse_tree($index, $curgen, $diff)
 {
     global $offsetarray, $treeid, $log2, $talloffset, $boxspacing, $mdiff, $minyoffset;
     //print "$index:$curgen:$diff<br />\n";
     $f = $index * 2 + 1;
     //-- father index
     $m = $f + 1;
     //-- mother index
     if (empty($treeid[$index])) {
         $pgen = $curgen;
         $genoffset = 0;
         while ($pgen <= $this->PEDIGREE_GENERATIONS) {
             $genoffset += pow(2, $this->PEDIGREE_GENERATIONS - $pgen);
             $pgen++;
         }
         if ($talloffset == 1) {
             $diff += 0.5 * $genoffset;
         } else {
             $diff += $genoffset;
         }
         if (isset($offsetarray[$index]["y"])) {
             $offsetarray[$index]["y"] -= $boxspacing * $diff / 2;
         }
         return $diff;
     }
     if ($curgen == $this->PEDIGREE_GENERATIONS) {
         $offsetarray[$index]["y"] -= $boxspacing * $diff;
         //print "UP $index BY $diff<br />\n";
         return $diff;
     }
     $odiff = $diff;
     $fdiff = collapse_tree($f, $curgen + 1, $diff);
     if ($curgen < $this->PEDIGREE_GENERATIONS - 1 || $index % 2 == 1) {
         $diff = $fdiff;
     }
     if (isset($offsetarray[$index]["y"])) {
         $offsetarray[$index]["y"] -= $boxspacing * $diff;
     }
     //print "UP $index BY $diff<br />\n";
     $mdiff = collapse_tree($m, $curgen + 1, $diff);
     $zdiff = $mdiff - $fdiff;
     if ($zdiff > 0 && $curgen < $this->PEDIGREE_GENERATIONS - 2) {
         $offsetarray[$index]["y"] -= $boxspacing * $zdiff / 2;
         //print "UP $index BY ".($zdiff/2)."<br />\n";
         if (empty($treeid[$m]) && !empty($treeid[$f])) {
             adjust_subtree($f, -1 * ($boxspacing * $zdiff / 4));
         }
         $diff += $zdiff / 2;
     }
     return $diff;
 }
コード例 #2
0
ファイル: Pedigree.php プロジェクト: jacoline/webtrees
 function adjust_subtree($index, $diff)
 {
     global $offsetarray, $treeid;
     $f = $index * 2 + 1;
     //-- father index
     $m = $f + 1;
     //-- mother index
     if (empty($offsetarray[$index])) {
         return;
     }
     $offsetarray[$index]["y"] += $diff;
     if ($f < count($treeid)) {
         adjust_subtree($f, $diff);
     }
     if ($m < count($treeid)) {
         adjust_subtree($m, $diff);
     }
 }