Exemplo n.º 1
0
 /**
  * Render the horizontal axis
  *
  * @param RenderContext $ctx    The context to use for rendering
  * @param DOMElement    $group  The DOMElement this axis will be added to
  */
 private function renderHorizontalAxis(RenderContext $ctx, DOMElement $group)
 {
     $steps = $this->ticksPerX($this->xUnit->getTicks(), $ctx->getNrOfUnitsX(), $this->minUnitsPerStep);
     $ticks = $this->ticksPerX($this->xUnit->getTicks(), $ctx->getNrOfUnitsX(), $this->minUnitsPerTick);
     // Steps should always be ticks
     if ($ticks !== $steps) {
         $steps = $ticks * 5;
     }
     // Check whether there is enough room for regular labels
     $labelRotationStyle = $this->labelRotationStyle;
     if ($this->labelsOversized($this->xUnit, 6)) {
         $labelRotationStyle = self::LABEL_ROTATE_DIAGONAL;
     }
     /*
     $line = new Line(0, 100, 100, 100);
     $line->setStrokeWidth(2);
     $group->appendChild($line->toSvg($ctx));
     */
     // contains the approximate end position of the last label
     $lastLabelEnd = -1;
     $shift = 0;
     $i = 0;
     foreach ($this->xUnit as $label => $pos) {
         if ($i % $ticks === 0) {
             /*
             $tick = new Line($pos, 100, $pos, 101);
             $group->appendChild($tick->toSvg($ctx));
             */
         }
         if ($i % $steps === 0) {
             if ($labelRotationStyle === self::LABEL_ROTATE_HORIZONTAL) {
                 // If the  last label would overlap this label we shift the y axis a bit
                 if ($lastLabelEnd > $pos) {
                     $shift = ($shift + 5) % 10;
                 } else {
                     $shift = 0;
                 }
             }
             $labelField = new Text($pos + 0.5, ($this->xLabel ? 107 : 105) + $shift, $label);
             if ($labelRotationStyle === self::LABEL_ROTATE_HORIZONTAL) {
                 $labelField->setAlignment(Text::ALIGN_MIDDLE)->setFontSize('2.5em');
             } else {
                 $labelField->setFontSize('2.5em');
             }
             if ($labelRotationStyle === self::LABEL_ROTATE_DIAGONAL) {
                 $labelField = new Rotator($labelField, 45);
             }
             $labelField = $labelField->toSvg($ctx);
             $group->appendChild($labelField);
             if ($this->drawYGrid) {
                 $bgLine = new Line($pos, 0, $pos, 100);
                 $bgLine->setStrokeWidth(0.5)->setStrokeColor('#BFBFBF');
                 $group->appendChild($bgLine->toSvg($ctx));
             }
             $lastLabelEnd = $pos + strlen($label) * 1.2;
         }
         $i++;
     }
 }