/** * Update coordinates * * @access private */ function _updateCoords() { if (is_array($this->_elements)) { $keys = array_keys($this->_elements); foreach ($keys as $key) { $element =& $this->_elements[$key]; if (is_a($element, 'Image_Graph_Plot')) { if ((is_a($element, 'Image_Graph_Plot_Bar') || is_a($element, 'Image_Graph_Plot_Step') || is_a($element, 'Image_Graph_Plot_Dot') || is_a($element, 'Image_Graph_Plot_CandleStick') || is_a($element, 'Image_Graph_Plot_BoxWhisker') || is_a($element, 'Image_Graph_Plot_Impulse')) && $this->_axisX != null) { $this->_axisX->_pushValues(); } $this->_setExtrema($element); } } unset($keys); } $this->_calcEdges(); $pctWidth = (int) ($this->width() * 0.05); $pctHeight = (int) ($this->height() * 0.05); $left = $this->_left + $this->_padding; $top = $this->_top + $this->_padding; $right = $this->_right - $this->_padding; $bottom = $this->_bottom - $this->_padding; // temporary place holder for axis point calculations $axisPoints['x'] = array($left, $top, $right, $bottom); $axisPoints['y'] = $axisPoints['x']; $axisPoints['y2'] = $axisPoints['x']; if ($this->_axisX !== null) { $intersectX = $this->_axisX->_getAxisIntersection(); $sizeX = $this->_axisX->_size(); $this->_axisX->_setCoords($left, $top, $right, $bottom); $this->_axisX->_updateCoords(); } if ($this->_axisY !== null) { $intersectY = $this->_axisY->_getAxisIntersection(); $sizeY = $this->_axisY->_size(); $this->_axisY->_setCoords($left, $top, $right, $bottom); $this->_axisY->_updateCoords(); } if ($this->_axisYSecondary !== null) { $intersectYsec = $this->_axisYSecondary->_getAxisIntersection(); $sizeYsec = $this->_axisYSecondary->_size(); $this->_axisYSecondary->_setCoords($left, $top, $right, $bottom); $this->_axisYSecondary->_updateCoords(); } $axisCoordAdd = array('left' => 0, 'right' => 0, 'top' => 0, 'bottom' => 0); if ($this->_axisY != null) { if ($this->_axisX != null) { $pos = $this->_axisX->_intersectPoint($intersectY['value']); } else { $pos = $this->_horizontal ? $bottom : $left; } if ($this->_horizontal) { if ($pos + $sizeY > $bottom) { $axisCoordAdd['bottom'] = $pos + $sizeY - $bottom; // the y-axis position needs to be recalculated! } else { // top & bottom may need to be adjusted when the x-axis has been // calculated! $this->_axisY->_setCoords($left, $pos, $right, $pos + $sizeY); $this->_axisY->_updateCoords(); } } else { if ($pos - $sizeY < $left) { $axisCoordAdd['left'] = $left - ($pos - $sizeY); // the y-axis position needs to be recalculated! } else { // top & bottom may need to be adjusted when the x-axis has been // calculated! $this->_axisY->_setCoords($pos - $sizeY, $top, $pos, $bottom); $this->_axisY->_updateCoords(); } } } if ($this->_axisYSecondary != null) { if ($this->_axisX != null) { $pos = $this->_axisX->_intersectPoint($intersectYsec['value']); } else { $pos = $this->_horizontal ? $top : $right; } if ($this->_horizontal) { if ($pos - $sizeYsec < $top) { $axisCoordAdd['top'] = $top - ($pos - $sizeYsec); // the secondary y-axis position need to be recalculated } else { // top & bottom may need to be adjusted when the x-axis has been // calculated! $this->_axisYSecondary->_setCoords($left, $pos - $sizeY, $right, $pos); $this->_axisYSecondary->_updateCoords(); } } else { if ($pos + $sizeYsec > $right) { $axisCoordAdd['right'] = $pos + $sizeYsec - $right; // the secondary y-axis position need to be recalculated } else { // top & bottom may need to be adjusted when the x-axis has been // calculated! $this->_axisYSecondary->_setCoords($pos, $top, $pos + $sizeY, $bottom); $this->_axisYSecondary->_updateCoords(); } } } if ($this->_axisX != null) { if ($intersectX['axis'] == IMAGE_GRAPH_AXIS_Y_SECONDARY && $this->_axisYSecondary !== null) { $axis =& $this->_axisYSecondary; } elseif ($this->_axisY !== null) { $axis =& $this->_axisY; } else { $axis = false; } if ($axis !== false) { $pos = $axis->_intersectPoint($intersectX['value']); } else { $pos = $this->_horizontal ? $left : $bottom; } if ($this->_horizontal) { if ($pos - $sizeX < $left) { $axisCoordAdd['left'] = $left - ($pos - $sizeX); $pos = $left + $sizeX; } $this->_axisX->_setCoords($pos - $sizeX, $top + $axisCoordAdd['top'], $pos, $bottom - $axisCoordAdd['bottom']); $this->_axisX->_updateCoords(); } else { if ($pos + $sizeX > $bottom) { $axisCoordAdd['bottom'] = $pos + $sizeX - $bottom; $pos = $bottom - $sizeX; } $this->_axisX->_setCoords($left + $axisCoordAdd['left'], $pos, $right - $axisCoordAdd['right'], $pos + $sizeX); $this->_axisX->_updateCoords(); } } if ($this->_horizontal) { if ($this->_axisX !== null && ($axisCoordAdd['top'] != 0 || $axisCoordAdd['bottom'] != 0)) { // readjust y-axis for better estimate of position if ($this->_axisY !== null) { $pos = $this->_axisX->_intersectPoint($intersectY['value']); $this->_axisY->_setCoords(false, $pos, false, $pos + $sizeY); $this->_axisY->_updateCoords(); } if ($this->_axisYSecondary !== null) { $pos = $this->_axisX->_intersectPoint($intersectYsec['value']); $this->_axisYSecondary->_setCoords(false, $pos - $sizeYsec, false, $pos); $this->_axisYSecondary->_updateCoords(); } } // adjust top and bottom of y-axis if ($this->_axisY !== null) { $this->_axisY->_setCoords($left + $axisCoordAdd['left'], false, $right - $axisCoordAdd['right'], false); $this->_axisY->_updateCoords(); } // adjust top and bottom of y-axis if ($this->_axisYSecondary !== null) { $this->_axisYSecondary->_setCoords($left + $axisCoordAdd['left'], false, $right - $axisCoordAdd['right'], false); $this->_axisYSecondary->_updateCoords(); } if ($this->_axisX !== null) { $this->_plotTop = $this->_axisX->_top; $this->_plotBottom = $this->_axisX->_bottom; } else { $this->_plotTop = $top; $this->_plotBottom = $bottom; } if ($this->_axisY !== null) { $this->_plotLeft = $this->_axisY->_left; $this->_plotRight = $this->_axisY->_right; } elseif ($this->_axisYSecondary !== null) { $this->_plotLeft = $this->_axisYSecondary->_left; $this->_plotRight = $this->_axisYSecondary->_right; } else { $this->_plotLeft = $this->_left; $this->_plotRight = $this->_right; } } else { if ($this->_axisX !== null && ($axisCoordAdd['left'] != 0 || $axisCoordAdd['right'] != 0)) { // readjust y-axis for better estimate of position if ($this->_axisY !== null) { $pos = $this->_axisX->_intersectPoint($intersectY['value']); $this->_axisY->_setCoords($pos - $sizeY, false, $pos, false); $this->_axisY->_updateCoords(); } if ($this->_axisYSecondary !== null) { $pos = $this->_axisX->_intersectPoint($intersectYsec['value']); $this->_axisYSecondary->_setCoords($pos, false, $pos + $sizeYsec, false); $this->_axisYSecondary->_updateCoords(); } } // adjust top and bottom of y-axis if ($this->_axisY !== null) { $this->_axisY->_setCoords(false, $top + $axisCoordAdd['top'], false, $bottom - $axisCoordAdd['bottom']); $this->_axisY->_updateCoords(); } // adjust top and bottom of y-axis if ($this->_axisYSecondary !== null) { $this->_axisYSecondary->_setCoords(false, $top + $axisCoordAdd['top'], false, $bottom - $axisCoordAdd['bottom']); $this->_axisYSecondary->_updateCoords(); } if ($this->_axisX !== null) { $this->_plotLeft = $this->_axisX->_left; $this->_plotRight = $this->_axisX->_right; } else { $this->_plotLeft = $left; $this->_plotRight = $right; } if ($this->_axisY !== null) { $this->_plotTop = $this->_axisY->_top; $this->_plotBottom = $this->_axisY->_bottom; } elseif ($this->_axisYSecondary !== null) { $this->_plotTop = $this->_axisYSecondary->_top; $this->_plotBottom = $this->_axisYSecondary->_bottom; } else { $this->_plotTop = $this->_top; $this->_plotBottom = $this->_bottom; } } Image_Graph_Element::_updateCoords(); /* if ($this->_axisX != null) { $this->_axisX->_updateCoords(); } if ($this->_axisY != null) { $this->_axisY->_updateCoords(); } if ($this->_axisYSecondary != null) { $this->_axisYSecondary->_updateCoords(); }*/ }