public function writeChart(Chart $chart)
{
// Create XML writer
$objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
// XML header
$objWriter->startDocument('1.0', 'UTF-8', 'yes');
// c:chartSpace
$objWriter->startElement('c:chartSpace');
$objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
$objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
$objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
// c:date1904
$objWriter->startElement('c:date1904');
$objWriter->writeAttribute('val', '1');
$objWriter->endElement();
// c:lang
$objWriter->startElement('c:lang');
$objWriter->writeAttribute('val', 'en-US');
$objWriter->endElement();
// c:chart
$objWriter->startElement('c:chart');
// Title?
if ($chart->getTitle()->isVisible()) {
// Write title
$this->writeTitle($objWriter, $chart->getTitle());
}
// c:autoTitleDeleted
$objWriter->startElement('c:autoTitleDeleted');
$objWriter->writeAttribute('val', $chart->getTitle()->isVisible() ? '0' : '1');
$objWriter->endElement();
// c:view3D
$objWriter->startElement('c:view3D');
// c:rotX
$objWriter->startElement('c:rotX');
$objWriter->writeAttribute('val', $chart->getView3D()->getRotationX());
$objWriter->endElement();
// c:hPercent
$objWriter->startElement('c:hPercent');
$objWriter->writeAttribute('val', $chart->getView3D()->getHeightPercent());
$objWriter->endElement();
// c:rotY
$objWriter->startElement('c:rotY');
$objWriter->writeAttribute('val', $chart->getView3D()->getRotationY());
$objWriter->endElement();
// c:depthPercent
$objWriter->startElement('c:depthPercent');
$objWriter->writeAttribute('val', $chart->getView3D()->getDepthPercent());
$objWriter->endElement();
// c:rAngAx
$objWriter->startElement('c:rAngAx');
$objWriter->writeAttribute('val', $chart->getView3D()->hasRightAngleAxes() ? '1' : '0');
$objWriter->endElement();
// c:perspective
$objWriter->startElement('c:perspective');
$objWriter->writeAttribute('val', $chart->getView3D()->getPerspective());
$objWriter->endElement();
$objWriter->endElement();
// Write plot area
$this->writePlotArea($objWriter, $chart->getPlotArea(), $chart);
// Legend?
if ($chart->getLegend()->isVisible()) {
// Write legend
$this->writeLegend($objWriter, $chart->getLegend());
}
// c:plotVisOnly
$objWriter->startElement('c:plotVisOnly');
$objWriter->writeAttribute('val', '1');
$objWriter->endElement();
$objWriter->endElement();
// c:spPr
$objWriter->startElement('c:spPr');
// Fill
$this->writeFill($objWriter, $chart->getFill());
// Border
if ($chart->getBorder()->getLineStyle() != Border::LINE_NONE) {
$this->writeBorder($objWriter, $chart->getBorder(), '');
}
// Shadow
if ($chart->getShadow()->isVisible()) {
// a:effectLst
$objWriter->startElement('a:effectLst');
// a:outerShdw
$objWriter->startElement('a:outerShdw');
$objWriter->writeAttribute('blurRad', CommonDrawing::pixelsToEmu($chart->getShadow()->getBlurRadius()));
$objWriter->writeAttribute('dist', CommonDrawing::pixelsToEmu($chart->getShadow()->getDistance()));
$objWriter->writeAttribute('dir', CommonDrawing::degreesToAngle($chart->getShadow()->getDirection()));
$objWriter->writeAttribute('algn', $chart->getShadow()->getAlignment());
$objWriter->writeAttribute('rotWithShape', '0');
$this->writeColor($objWriter, $chart->getShadow()->getColor(), $chart->getShadow()->getAlpha());
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->endElement();
// External data?
if ($chart->hasIncludedSpreadsheet()) {
// c:externalData
$objWriter->startElement('c:externalData');
$objWriter->writeAttribute('r:id', 'rId1');
// c:autoUpdate
$objWriter->startElement('c:autoUpdate');
$objWriter->writeAttribute('val', '0');
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->endElement();
// Return
return $objWriter->getData();
}