/* * (c) Copyright Ascensio System SIA 2010-2023 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ #pragma once #include "PptxShape.h" #include "PresetShapesHeader.h" CPPTXShape::CPPTXShape() : CBaseShape(), FManager(m_arAdjustments, m_arGuides) { m_eType = OOXMLShapes::sptMin; } CPPTXShape::~CPPTXShape() { } bool CPPTXShape::LoadFromXML(const std::wstring& xml) { XmlUtils::CXmlNode oNodePict; if (oNodePict.FromXmlString(xml)) { return LoadFromXML(oNodePict); } return false; } bool CPPTXShape::LoadFromXML(XmlUtils::CXmlNode& root) { //std::wstring tempXML = _T("") + xml + _T(""); XmlUtils::CXmlNode avLst; bool res = true; if(root.GetNode(_T("avLst"), avLst)) res &= LoadAdjustValuesList(avLst.GetXml()); XmlUtils::CXmlNode gdLst; if(root.GetNode(_T("gdLst"), gdLst)) res &= LoadGuidesList(gdLst.GetXml()); XmlUtils::CXmlNode ahLst; if(root.GetNode(_T("ahLst"), ahLst)) res &= LoadAdjustHandlesList(ahLst.GetXml()); XmlUtils::CXmlNode cxnLst; if(root.GetNode(_T("cxnLst"), cxnLst)) res &= LoadConnectorsList(cxnLst.GetXml()); XmlUtils::CXmlNode textRect; if(root.GetNode(_T("rect"), textRect)) { m_strRect = textRect.GetXml(); res &= LoadTextRect(m_strRect); } XmlUtils::CXmlNode pathLst; if(root.GetNode(_T("pathLst"), pathLst)) { m_strPath = pathLst.GetXml(); res &= LoadPathList(m_strPath); } return res; } bool CPPTXShape::LoadAdjustValuesList(const std::wstring& xml) { XmlUtils::CXmlNode avLst; if(avLst.FromXmlString(xml)) { std::vector list; if(avLst.GetNodes(_T("gd"), list)) { for(size_t i = 0; i < list.size(); i++) { XmlUtils::CXmlNode & gd = list[i]; FManager.AddAdjustment(gd.GetAttribute(_T("name")), gd.GetAttribute(_T("fmla"))); } } return true; } return false; } bool CPPTXShape::LoadGuidesList(const std::wstring& xml) { XmlUtils::CXmlNode gdLst; if(gdLst.FromXmlString(xml)) { std::vector list; if(gdLst.GetNodes(_T("gd"), list)) { for(size_t i = 0; i < list.size(); i++) { XmlUtils::CXmlNode & gd = list[i]; FManager.AddGuide(gd.GetAttribute(_T("name")), gd.GetAttribute(_T("fmla"))); } } return true; } return false; } bool CPPTXShape::LoadAdjustHandlesList(const std::wstring& xml) { /*XmlUtils::CXmlNode ahLst; if(ahLst.FromXmlString(xml)) { std::vector oNodes; if (ahLst.GetNodes(_T("ahXY"), oNodes)) { size_t nCount = oNodes.size(); for (int i = 0; i < nCount; ++i) { XmlUtils::CXmlNode oNodeH; oNodes.GetAt(i, oNodeH); CHandle_ oH; oH.switchHandle = oNodeH.GetAttribute(_T("switch")); oH.xrange = oNodeH.GetAttribute(_T("minX")) + _T(" ") + oNodeH.GetAttribute(_T("maxX")); oH.yrange = oNodeH.GetAttribute(_T("minY")) + _T(" ") + oNodeH.GetAttribute(_T("maxY")); std::vector oPosNodes; if (oNodeH.GetNodes(_T("pos"), oPosNodes)) { int nCountPos = oPosNodes.GetCount(); XmlUtils::CXmlNode oPosNode; oPosNodes.GetAt(0, oPosNode); std::wstring strX = oPosNode.GetAttribute(_T("x")); std::wstring strY = oPosNode.GetAttribute(_T("y")); if (strX == _T("l")) oH.position += _T("topLeft"); else if (strX == _T("r")) oH.position += _T("bottomRight"); else oH.position += oNodeH.GetAttribute(_T("gdRefX")); if (strY == _T("t")) oH.position += _T("topLeft"); else if (strY == _T("b")) oH.position += _T("bottomRight"); else oH.position += _T(" ") + oNodeH.GetAttribute(_T("gdRefY")); } //TODO разобраться с полярными хендлами //поля: //polar = 10800, 10800 //position = gdrefR, gdrefAng (adj) //radiusrange = minR, maxR m_arHandles.push_back(oH); } } return true; } return false;*/ return true; } bool CPPTXShape::LoadConnectorsList(const std::wstring& xml) { return true; } bool CPPTXShape::LoadTextRect(const std::wstring& xml) { XmlUtils::CXmlNode rect; if(rect.FromXmlString(xml)) { Aggplus::RECT TextRect; TextRect.top = (long)FManager.GetValue(rect.GetAttribute(_T("t"))); TextRect.left = (long)FManager.GetValue(rect.GetAttribute(_T("l"))); TextRect.right = (long)FManager.GetValue(rect.GetAttribute(_T("r"))); TextRect.bottom = (long)FManager.GetValue(rect.GetAttribute(_T("b"))); if(m_arTextRects.size() > 0) m_arTextRects[0] = TextRect; else m_arTextRects.push_back(TextRect); return true; } return false; } bool CPPTXShape::LoadPathList(const std::wstring& xml) { XmlUtils::CXmlNode pathLst; if(pathLst.FromXmlString(xml)) { std::vector list; if(pathLst.GetNodes(_T("path"), list)) { m_oPath.FromXML(list, FManager); } return true; } return false; } bool CPPTXShape::SetAdjustment(long index, long value) { FManager.Clear(); if (index < (long)m_arAdjustments.size() && index >=0) { m_arAdjustments[index] = value; return TRUE; } return FALSE; } std::wstring CPPTXShape::ToXML(CGeomShapeInfo& GeomInfo, double StartTime, double EndTime, CBrush& Brush, CPen& Pen) { FManager.SetWidthHeight(GeomInfo.m_dWidth, GeomInfo.m_dHeight); ReCalculate(); return m_oPath.ToXml(GeomInfo, StartTime, EndTime, Pen, Brush, NSBaseShape::pptx); } void CPPTXShape::ToRenderer(IRenderer* pRenderer, CGeomShapeInfo& pGeomInfo, double dStartTime, double dEndTime, CPen& pPen, CBrush& pFore) { FManager.SetWidthHeight(pGeomInfo.m_dWidth, pGeomInfo.m_dHeight); ReCalculate(); m_oPath.ToRenderer(pRenderer, pGeomInfo, dStartTime, dEndTime, pPen, pFore, GetClassType()); } void CPPTXShape::ReCalculate() { FManager.ReCalculateGuides(); LoadTextRect(m_strRect); LoadPathList(m_strPath); } const ClassType CPPTXShape::GetClassType()const { return NSBaseShape::pptx; } bool CPPTXShape::SetProperties(CBaseShape* Shape) { if(Shape == NULL) return false; if(Shape->GetClassType() != NSBaseShape::pptx) return false; FManager = ((CPPTXShape*)Shape)->FManager; return CBaseShape::SetProperties(Shape); } bool CPPTXShape::SetToDublicate(CBaseShape* Shape) { if(Shape == NULL) return false; if(Shape->GetClassType() != NSBaseShape::pptx) return false; ((CPPTXShape*)Shape)->FManager = FManager; return CBaseShape::SetToDublicate(Shape); } bool CPPTXShape::SetShapeType(OOXMLShapes::ShapeType type) { CBaseShapePtr pShape = CreateByType(type); if(pShape) { m_eType = type; SetProperties(pShape.get()); return true; } m_eType = OOXMLShapes::sptCustom; return false; } void CPPTXShape::SetWidthHeightLogic(const double& dWidth, const double& dHeight) { FManager.SetWidthHeight(dWidth, dHeight); } void CPPTXShape::GetWidthHeightLogic(double& dWidth, double& dHeight) { dWidth = FManager.GetWidth(); dHeight = FManager.GetHeight(); } CBaseShapePtr CPPTXShape::CreateByType(OOXMLShapes::ShapeType type) { CBaseShapePtr shape; switch(type) { case OOXMLShapes::sptCAccentBorderCallout1: return CBaseShapePtr(new OOXMLShapes::CAccentBorderCallout1()); case OOXMLShapes::sptCAccentBorderCallout2: return CBaseShapePtr(new OOXMLShapes::CAccentBorderCallout2()); case OOXMLShapes::sptCAccentBorderCallout3: return CBaseShapePtr(new OOXMLShapes::CAccentBorderCallout3()); case OOXMLShapes::sptCAccentCallout1: return CBaseShapePtr(new OOXMLShapes::CAccentCallout1()); case OOXMLShapes::sptCAccentCallout2: return CBaseShapePtr(new OOXMLShapes::CAccentCallout2()); case OOXMLShapes::sptCAccentCallout3: return CBaseShapePtr(new OOXMLShapes::CAccentCallout3()); case OOXMLShapes::sptCActionButtonBackPrevious: return CBaseShapePtr(new OOXMLShapes::CActionButtonBackPrevious()); case OOXMLShapes::sptCActionButtonBeginning: return CBaseShapePtr(new OOXMLShapes::CActionButtonBeginning()); case OOXMLShapes::sptCActionButtonBlank: return CBaseShapePtr(new OOXMLShapes::CActionButtonBlank()); case OOXMLShapes::sptCActionButtonDocument: return CBaseShapePtr(new OOXMLShapes::CActionButtonDocument()); case OOXMLShapes::sptCActionButtonEnd: return CBaseShapePtr(new OOXMLShapes::CActionButtonEnd()); case OOXMLShapes::sptCActionButtonForwardNext: return CBaseShapePtr(new OOXMLShapes::CActionButtonForwardNext()); case OOXMLShapes::sptCActionButtonHelp: return CBaseShapePtr(new OOXMLShapes::CActionButtonHelp()); case OOXMLShapes::sptCActionButtonHome: return CBaseShapePtr(new OOXMLShapes::CActionButtonHome()); case OOXMLShapes::sptCActionButtonInformation: return CBaseShapePtr(new OOXMLShapes::CActionButtonInformation()); case OOXMLShapes::sptCActionButtonMovie: return CBaseShapePtr(new OOXMLShapes::CActionButtonMovie()); case OOXMLShapes::sptCActionButtonReturn: return CBaseShapePtr(new OOXMLShapes::CActionButtonReturn()); case OOXMLShapes::sptCActionButtonSound: return CBaseShapePtr(new OOXMLShapes::CActionButtonSound()); case OOXMLShapes::sptCArc: return CBaseShapePtr(new OOXMLShapes::CArc()); case OOXMLShapes::sptCBentArrow: return CBaseShapePtr(new OOXMLShapes::CBentArrow()); case OOXMLShapes::sptCBentConnector2: return CBaseShapePtr(new OOXMLShapes::CBentConnector2()); case OOXMLShapes::sptCBentConnector3: return CBaseShapePtr(new OOXMLShapes::CBentConnector3()); case OOXMLShapes::sptCBentConnector4: return CBaseShapePtr(new OOXMLShapes::CBentConnector4()); case OOXMLShapes::sptCBentConnector5: return CBaseShapePtr(new OOXMLShapes::CBentConnector5()); case OOXMLShapes::sptCBentUpArrow: return CBaseShapePtr(new OOXMLShapes::CBentUpArrow()); case OOXMLShapes::sptCBevel: return CBaseShapePtr(new OOXMLShapes::CBevel()); case OOXMLShapes::sptCBlockArc: return CBaseShapePtr(new OOXMLShapes::CBlockArc()); case OOXMLShapes::sptCBorderCallout1: return CBaseShapePtr(new OOXMLShapes::CBorderCallout1()); case OOXMLShapes::sptCBorderCallout2: return CBaseShapePtr(new OOXMLShapes::CBorderCallout2()); case OOXMLShapes::sptCBorderCallout3: return CBaseShapePtr(new OOXMLShapes::CBorderCallout3()); case OOXMLShapes::sptCBracePair: return CBaseShapePtr(new OOXMLShapes::CBracePair()); case OOXMLShapes::sptCBracketPair: return CBaseShapePtr(new OOXMLShapes::CBracketPair()); case OOXMLShapes::sptCCallout1: return CBaseShapePtr(new OOXMLShapes::CCallout1()); case OOXMLShapes::sptCCallout2: return CBaseShapePtr(new OOXMLShapes::CCallout2()); case OOXMLShapes::sptCCallout3: return CBaseShapePtr(new OOXMLShapes::CCallout3()); case OOXMLShapes::sptCCan: return CBaseShapePtr(new OOXMLShapes::CCan()); case OOXMLShapes::sptCChartPlus: return CBaseShapePtr(new OOXMLShapes::CChartPlus()); case OOXMLShapes::sptCChartStar: return CBaseShapePtr(new OOXMLShapes::CChartStar()); case OOXMLShapes::sptCChartX: return CBaseShapePtr(new OOXMLShapes::CChartX()); case OOXMLShapes::sptCChevron: return CBaseShapePtr(new OOXMLShapes::CChevron()); case OOXMLShapes::sptCChord: return CBaseShapePtr(new OOXMLShapes::CChord()); case OOXMLShapes::sptCCircularArrow: return CBaseShapePtr(new OOXMLShapes::CCircularArrow()); case OOXMLShapes::sptCCloud: return CBaseShapePtr(new OOXMLShapes::CCloud()); case OOXMLShapes::sptCCloudCallout: return CBaseShapePtr(new OOXMLShapes::CCloudCallout()); case OOXMLShapes::sptCCorner: return CBaseShapePtr(new OOXMLShapes::CCorner()); case OOXMLShapes::sptCCornerTabs: return CBaseShapePtr(new OOXMLShapes::CCornerTabs()); case OOXMLShapes::sptCCube: return CBaseShapePtr(new OOXMLShapes::CCube()); case OOXMLShapes::sptCCurvedConnector2: return CBaseShapePtr(new OOXMLShapes::CCurvedConnector2()); case OOXMLShapes::sptCCurvedConnector3: return CBaseShapePtr(new OOXMLShapes::CCurvedConnector3()); case OOXMLShapes::sptCCurvedConnector4: return CBaseShapePtr(new OOXMLShapes::CCurvedConnector4()); case OOXMLShapes::sptCCurvedConnector5: return CBaseShapePtr(new OOXMLShapes::CCurvedConnector5()); case OOXMLShapes::sptCCurvedDownArrow: return CBaseShapePtr(new OOXMLShapes::CCurvedDownArrow()); case OOXMLShapes::sptCCurvedLeftArrow: return CBaseShapePtr(new OOXMLShapes::CCurvedLeftArrow()); case OOXMLShapes::sptCCurvedRightArrow: return CBaseShapePtr(new OOXMLShapes::CCurvedRightArrow()); case OOXMLShapes::sptCCurvedUpArrow: return CBaseShapePtr(new OOXMLShapes::CCurvedUpArrow()); case OOXMLShapes::sptCDecagon: return CBaseShapePtr(new OOXMLShapes::CDecagon()); case OOXMLShapes::sptCDiagStripe: return CBaseShapePtr(new OOXMLShapes::CDiagStripe()); case OOXMLShapes::sptCDiamond: return CBaseShapePtr(new OOXMLShapes::CDiamond()); case OOXMLShapes::sptCDodecagon: return CBaseShapePtr(new OOXMLShapes::CDodecagon()); case OOXMLShapes::sptCDonut: return CBaseShapePtr(new OOXMLShapes::CDonut()); case OOXMLShapes::sptCDoubleWave: return CBaseShapePtr(new OOXMLShapes::CDoubleWave()); case OOXMLShapes::sptCDownArrow: return CBaseShapePtr(new OOXMLShapes::CDownArrow()); case OOXMLShapes::sptCDownArrowCallout: return CBaseShapePtr(new OOXMLShapes::CDownArrowCallout()); //case OOXMLShapes::sptCEllipse: return CBaseShapePtr(new OOXMLShapes::CEllipse()); case OOXMLShapes::sptCEllipseRibbon: return CBaseShapePtr(new OOXMLShapes::CEllipseRibbon()); case OOXMLShapes::sptCEllipseRibbon2: return CBaseShapePtr(new OOXMLShapes::CEllipseRibbon2()); case OOXMLShapes::sptCFlowChartAlternateProcess:return CBaseShapePtr(new OOXMLShapes::CFlowChartAlternateProcess()); case OOXMLShapes::sptCFlowChartCollate: return CBaseShapePtr(new OOXMLShapes::CFlowChartCollate()); case OOXMLShapes::sptCFlowChartConnector: return CBaseShapePtr(new OOXMLShapes::CFlowChartConnector()); case OOXMLShapes::sptCFlowChartDecision: return CBaseShapePtr(new OOXMLShapes::CFlowChartDecision()); case OOXMLShapes::sptCFlowChartDelay: return CBaseShapePtr(new OOXMLShapes::CFlowChartDelay()); case OOXMLShapes::sptCFlowChartDisplay: return CBaseShapePtr(new OOXMLShapes::CFlowChartDisplay()); case OOXMLShapes::sptCFlowChartDocument: return CBaseShapePtr(new OOXMLShapes::CFlowChartDocument()); case OOXMLShapes::sptCFlowChartExtract: return CBaseShapePtr(new OOXMLShapes::CFlowChartExtract()); case OOXMLShapes::sptCFlowChartInputOutput: return CBaseShapePtr(new OOXMLShapes::CFlowChartInputOutput()); case OOXMLShapes::sptCFlowChartInternalStorage: return CBaseShapePtr(new OOXMLShapes::CFlowChartInternalStorage()); case OOXMLShapes::sptCFlowChartMagneticDisk: return CBaseShapePtr(new OOXMLShapes::CFlowChartMagneticDisk()); case OOXMLShapes::sptCFlowChartMagneticDrum: return CBaseShapePtr(new OOXMLShapes::CFlowChartMagneticDrum()); case OOXMLShapes::sptCFlowChartMagneticTape: return CBaseShapePtr(new OOXMLShapes::CFlowChartMagneticTape()); case OOXMLShapes::sptCFlowChartManualInput: return CBaseShapePtr(new OOXMLShapes::CFlowChartManualInput()); case OOXMLShapes::sptCFlowChartManualOperation: return CBaseShapePtr(new OOXMLShapes::CFlowChartManualOperation()); case OOXMLShapes::sptCFlowChartMerge: return CBaseShapePtr(new OOXMLShapes::CFlowChartMerge()); case OOXMLShapes::sptCFlowChartMultidocument: return CBaseShapePtr(new OOXMLShapes::CFlowChartMultidocument()); case OOXMLShapes::sptCFlowChartOfflineStorage: return CBaseShapePtr(new OOXMLShapes::CFlowChartOfflineStorage()); case OOXMLShapes::sptCFlowChartOffpageConnector: return CBaseShapePtr(new OOXMLShapes::CFlowChartOffpageConnector()); case OOXMLShapes::sptCFlowChartOnlineStorage: return CBaseShapePtr(new OOXMLShapes::CFlowChartOnlineStorage()); case OOXMLShapes::sptCFlowChartOr: return CBaseShapePtr(new OOXMLShapes::CFlowChartOr()); case OOXMLShapes::sptCFlowChartPredefinedProcess: return CBaseShapePtr(new OOXMLShapes::CFlowChartPredefinedProcess()); case OOXMLShapes::sptCFlowChartPreparation: return CBaseShapePtr(new OOXMLShapes::CFlowChartPreparation()); case OOXMLShapes::sptCFlowChartProcess: return CBaseShapePtr(new OOXMLShapes::CFlowChartProcess()); case OOXMLShapes::sptCFlowChartPunchedCard: return CBaseShapePtr(new OOXMLShapes::CFlowChartPunchedCard()); case OOXMLShapes::sptCFlowChartPunchedTape: return CBaseShapePtr(new OOXMLShapes::CFlowChartPunchedTape()); case OOXMLShapes::sptCFlowChartSort: return CBaseShapePtr(new OOXMLShapes::CFlowChartSort()); case OOXMLShapes::sptCFlowChartSummingJunction: return CBaseShapePtr(new OOXMLShapes::CFlowChartSummingJunction()); case OOXMLShapes::sptCFlowChartTerminator: return CBaseShapePtr(new OOXMLShapes::CFlowChartTerminator()); case OOXMLShapes::sptCFoldedCorner: return CBaseShapePtr(new OOXMLShapes::CFoldedCorner()); case OOXMLShapes::sptCFrame: return CBaseShapePtr(new OOXMLShapes::CFrame()); case OOXMLShapes::sptCFunnel: return CBaseShapePtr(new OOXMLShapes::CFunnel()); case OOXMLShapes::sptCGear6: return CBaseShapePtr(new OOXMLShapes::CGear6()); case OOXMLShapes::sptCGear9: return CBaseShapePtr(new OOXMLShapes::CGear9()); case OOXMLShapes::sptCHalfFrame: return CBaseShapePtr(new OOXMLShapes::CHalfFrame()); case OOXMLShapes::sptCHeart: return CBaseShapePtr(new OOXMLShapes::CHeart()); case OOXMLShapes::sptCHeptagon: return CBaseShapePtr(new OOXMLShapes::CHeptagon()); case OOXMLShapes::sptCHexagon: return CBaseShapePtr(new OOXMLShapes::CHexagon()); case OOXMLShapes::sptCHomePlate: return CBaseShapePtr(new OOXMLShapes::CHomePlate()); case OOXMLShapes::sptCHorizontalScroll: return CBaseShapePtr(new OOXMLShapes::CHorizontalScroll()); case OOXMLShapes::sptCIrregularSeal1: return CBaseShapePtr(new OOXMLShapes::CIrregularSeal1()); case OOXMLShapes::sptCIrregularSeal2: return CBaseShapePtr(new OOXMLShapes::CIrregularSeal2()); case OOXMLShapes::sptCLeftArrow: return CBaseShapePtr(new OOXMLShapes::CLeftArrow()); case OOXMLShapes::sptCLeftArrowCallout: return CBaseShapePtr(new OOXMLShapes::CLeftArrowCallout()); case OOXMLShapes::sptCLeftBrace: return CBaseShapePtr(new OOXMLShapes::CLeftBrace()); case OOXMLShapes::sptCLeftBracket: return CBaseShapePtr(new OOXMLShapes::CLeftBracket()); case OOXMLShapes::sptCLeftCircularArrow: return CBaseShapePtr(new OOXMLShapes::CLeftCircularArrow()); case OOXMLShapes::sptCLeftRightArrow: return CBaseShapePtr(new OOXMLShapes::CLeftRightArrow()); case OOXMLShapes::sptCLeftRightArrowCallout: return CBaseShapePtr(new OOXMLShapes::CLeftRightArrowCallout()); case OOXMLShapes::sptCLeftRightCircularArrow: return CBaseShapePtr(new OOXMLShapes::CLeftRightCircularArrow()); case OOXMLShapes::sptCLeftRightRibbon: return CBaseShapePtr(new OOXMLShapes::CLeftRightRibbon()); case OOXMLShapes::sptCLeftRightUpArrow: return CBaseShapePtr(new OOXMLShapes::CLeftRightUpArrow()); case OOXMLShapes::sptCLeftUpArrow: return CBaseShapePtr(new OOXMLShapes::CLeftUpArrow()); case OOXMLShapes::sptCLightningBolt: return CBaseShapePtr(new OOXMLShapes::CLightningBolt()); //case OOXMLShapes::sptCLine: return CBaseShapePtr(new OOXMLShapes::CLine()); case OOXMLShapes::sptCLineInv: return CBaseShapePtr(new OOXMLShapes::CLineInv()); case OOXMLShapes::sptCMathDivide: return CBaseShapePtr(new OOXMLShapes::CMathDivide()); case OOXMLShapes::sptCMathEqual: return CBaseShapePtr(new OOXMLShapes::CMathEqual()); case OOXMLShapes::sptCMathMinus: return CBaseShapePtr(new OOXMLShapes::CMathMinus()); case OOXMLShapes::sptCMathMultiply: return CBaseShapePtr(new OOXMLShapes::CMathMultiply()); case OOXMLShapes::sptCMathNotEqual: return CBaseShapePtr(new OOXMLShapes::CMathNotEqual()); case OOXMLShapes::sptCMathPlus: return CBaseShapePtr(new OOXMLShapes::CMathPlus()); case OOXMLShapes::sptCMoon: return CBaseShapePtr(new OOXMLShapes::CMoon()); case OOXMLShapes::sptCNonIsoscelesTrapezoid: return CBaseShapePtr(new OOXMLShapes::CNonIsoscelesTrapezoid()); case OOXMLShapes::sptCNoSmoking: return CBaseShapePtr(new OOXMLShapes::CNoSmoking()); case OOXMLShapes::sptCNotchedRightArrow: return CBaseShapePtr(new OOXMLShapes::CNotchedRightArrow()); case OOXMLShapes::sptCOctagon: return CBaseShapePtr(new OOXMLShapes::COctagon()); case OOXMLShapes::sptCParallelogram: return CBaseShapePtr(new OOXMLShapes::CParallelogram()); case OOXMLShapes::sptCPentagon: return CBaseShapePtr(new OOXMLShapes::CPentagon()); case OOXMLShapes::sptCPie: return CBaseShapePtr(new OOXMLShapes::CPie()); case OOXMLShapes::sptCPieWedge: return CBaseShapePtr(new OOXMLShapes::CPieWedge()); case OOXMLShapes::sptCPlaque: return CBaseShapePtr(new OOXMLShapes::CPlaque()); case OOXMLShapes::sptCPlaqueTabs: return CBaseShapePtr(new OOXMLShapes::CPlaqueTabs()); case OOXMLShapes::sptCPlus: return CBaseShapePtr(new OOXMLShapes::CPlus()); case OOXMLShapes::sptCQuadArrow: return CBaseShapePtr(new OOXMLShapes::CQuadArrow()); case OOXMLShapes::sptCQuadArrowCallout: return CBaseShapePtr(new OOXMLShapes::CQuadArrowCallout()); //case OOXMLShapes::sptCRect: return CBaseShapePtr(new OOXMLShapes::CRect()); case OOXMLShapes::sptCRibbon: return CBaseShapePtr(new OOXMLShapes::CRibbon()); case OOXMLShapes::sptCRibbon2: return CBaseShapePtr(new OOXMLShapes::CRibbon2()); case OOXMLShapes::sptCRightArrow: return CBaseShapePtr(new OOXMLShapes::CRightArrow()); case OOXMLShapes::sptCRightArrowCallout: return CBaseShapePtr(new OOXMLShapes::CRightArrowCallout()); case OOXMLShapes::sptCRightBrace: return CBaseShapePtr(new OOXMLShapes::CRightBrace()); case OOXMLShapes::sptCRightBracket: return CBaseShapePtr(new OOXMLShapes::CRightBracket()); case OOXMLShapes::sptCRound1Rect: return CBaseShapePtr(new OOXMLShapes::CRound1Rect()); case OOXMLShapes::sptCRound2DiagRect: return CBaseShapePtr(new OOXMLShapes::CRound2DiagRect()); case OOXMLShapes::sptCRound2SameRect: return CBaseShapePtr(new OOXMLShapes::CRound2SameRect()); case OOXMLShapes::sptCRoundRect: return CBaseShapePtr(new OOXMLShapes::CRoundRect()); case OOXMLShapes::sptCRtTriangle: return CBaseShapePtr(new OOXMLShapes::CRtTriangle()); case OOXMLShapes::sptCSmileyFace: return CBaseShapePtr(new OOXMLShapes::CSmileyFace()); case OOXMLShapes::sptCSnip1Rect: return CBaseShapePtr(new OOXMLShapes::CSnip1Rect()); case OOXMLShapes::sptCSnip2DiagRect: return CBaseShapePtr(new OOXMLShapes::CSnip2DiagRect()); case OOXMLShapes::sptCSnip2SameRect: return CBaseShapePtr(new OOXMLShapes::CSnip2SameRect()); case OOXMLShapes::sptCSnipRoundRect: return CBaseShapePtr(new OOXMLShapes::CSnipRoundRect()); case OOXMLShapes::sptCSquareTabs: return CBaseShapePtr(new OOXMLShapes::CSquareTabs()); case OOXMLShapes::sptCStar10: return CBaseShapePtr(new OOXMLShapes::CStar10()); case OOXMLShapes::sptCStar12: return CBaseShapePtr(new OOXMLShapes::CStar12()); case OOXMLShapes::sptCStar16: return CBaseShapePtr(new OOXMLShapes::CStar16()); case OOXMLShapes::sptCStar24: return CBaseShapePtr(new OOXMLShapes::CStar24()); case OOXMLShapes::sptCStar32: return CBaseShapePtr(new OOXMLShapes::CStar32()); case OOXMLShapes::sptCStar4: return CBaseShapePtr(new OOXMLShapes::CStar4()); case OOXMLShapes::sptCStar5: return CBaseShapePtr(new OOXMLShapes::CStar5()); case OOXMLShapes::sptCStar6: return CBaseShapePtr(new OOXMLShapes::CStar6()); case OOXMLShapes::sptCStar7: return CBaseShapePtr(new OOXMLShapes::CStar7()); case OOXMLShapes::sptCStar8: return CBaseShapePtr(new OOXMLShapes::CStar8()); case OOXMLShapes::sptCStraightConnector1: return CBaseShapePtr(new OOXMLShapes::CStraightConnector1()); case OOXMLShapes::sptCStripedRightArrow: return CBaseShapePtr(new OOXMLShapes::CStripedRightArrow()); case OOXMLShapes::sptCSun: return CBaseShapePtr(new OOXMLShapes::CSun()); case OOXMLShapes::sptCSwooshArrow: return CBaseShapePtr(new OOXMLShapes::CSwooshArrow()); case OOXMLShapes::sptCTeardrop: return CBaseShapePtr(new OOXMLShapes::CTeardrop()); case OOXMLShapes::sptCTextArchDown: return CBaseShapePtr(new OOXMLShapes::CTextArchDown()); case OOXMLShapes::sptCTextArchDownPour: return CBaseShapePtr(new OOXMLShapes::CTextArchDownPour()); case OOXMLShapes::sptCTextArchUp: return CBaseShapePtr(new OOXMLShapes::CTextArchUp()); case OOXMLShapes::sptCTextArchUpPour: return CBaseShapePtr(new OOXMLShapes::CTextArchUpPour()); case OOXMLShapes::sptCTextButton: return CBaseShapePtr(new OOXMLShapes::CTextButton()); case OOXMLShapes::sptCTextButtonPour: return CBaseShapePtr(new OOXMLShapes::CTextButtonPour()); case OOXMLShapes::sptCTextCanDown: return CBaseShapePtr(new OOXMLShapes::CTextCanDown()); case OOXMLShapes::sptCTextCanUp: return CBaseShapePtr(new OOXMLShapes::CTextCanUp()); case OOXMLShapes::sptCTextCascadeDown: return CBaseShapePtr(new OOXMLShapes::CTextCascadeDown()); case OOXMLShapes::sptCTextCascadeUp: return CBaseShapePtr(new OOXMLShapes::CTextCascadeUp()); case OOXMLShapes::sptCTextChevron: return CBaseShapePtr(new OOXMLShapes::CTextChevron()); case OOXMLShapes::sptCTextChevronInverted: return CBaseShapePtr(new OOXMLShapes::CTextChevronInverted()); case OOXMLShapes::sptCTextCircle: return CBaseShapePtr(new OOXMLShapes::CTextCircle()); case OOXMLShapes::sptCTextCirclePour: return CBaseShapePtr(new OOXMLShapes::CTextCirclePour()); case OOXMLShapes::sptCTextCurveDown: return CBaseShapePtr(new OOXMLShapes::CTextCurveDown()); case OOXMLShapes::sptCTextCurveUp: return CBaseShapePtr(new OOXMLShapes::CTextCurveUp()); case OOXMLShapes::sptCTextDeflate: return CBaseShapePtr(new OOXMLShapes::CTextDeflate()); case OOXMLShapes::sptCTextDeflateBottom: return CBaseShapePtr(new OOXMLShapes::CTextDeflateBottom()); case OOXMLShapes::sptCTextDeflateInflate: return CBaseShapePtr(new OOXMLShapes::CTextDeflateInflate()); case OOXMLShapes::sptCTextDeflateInflateDeflate:return CBaseShapePtr(new OOXMLShapes::CTextDeflateInflateDeflate()); case OOXMLShapes::sptCTextDeflateTop: return CBaseShapePtr(new OOXMLShapes::CTextDeflateTop()); case OOXMLShapes::sptCTextDoubleWave1: return CBaseShapePtr(new OOXMLShapes::CTextDoubleWave1()); case OOXMLShapes::sptCTextFadeDown: return CBaseShapePtr(new OOXMLShapes::CTextFadeDown()); case OOXMLShapes::sptCTextFadeLeft: return CBaseShapePtr(new OOXMLShapes::CTextFadeLeft()); case OOXMLShapes::sptCTextFadeRight: return CBaseShapePtr(new OOXMLShapes::CTextFadeRight()); case OOXMLShapes::sptCTextFadeUp: return CBaseShapePtr(new OOXMLShapes::CTextFadeUp()); case OOXMLShapes::sptCTextInflate: return CBaseShapePtr(new OOXMLShapes::CTextInflate()); case OOXMLShapes::sptCTextInflateBottom: return CBaseShapePtr(new OOXMLShapes::CTextInflateBottom()); case OOXMLShapes::sptCTextInflateTop: return CBaseShapePtr(new OOXMLShapes::CTextInflateTop()); case OOXMLShapes::sptCTextPlain: return CBaseShapePtr(new OOXMLShapes::CTextPlain()); case OOXMLShapes::sptCTextRingInside: return CBaseShapePtr(new OOXMLShapes::CTextRingInside()); case OOXMLShapes::sptCTextRingOutside: return CBaseShapePtr(new OOXMLShapes::CTextRingOutside()); case OOXMLShapes::sptCTextSlantDown: return CBaseShapePtr(new OOXMLShapes::CTextSlantDown()); case OOXMLShapes::sptCTextSlantUp: return CBaseShapePtr(new OOXMLShapes::CTextSlantUp()); case OOXMLShapes::sptCTextStop: return CBaseShapePtr(new OOXMLShapes::CTextStop()); case OOXMLShapes::sptCTextTriangle: return CBaseShapePtr(new OOXMLShapes::CTextTriangle()); case OOXMLShapes::sptCTextTriangleInverted: return CBaseShapePtr(new OOXMLShapes::CTextTriangleInverted()); case OOXMLShapes::sptCTextWave1: return CBaseShapePtr(new OOXMLShapes::CTextWave1()); case OOXMLShapes::sptCTextWave2: return CBaseShapePtr(new OOXMLShapes::CTextWave2()); case OOXMLShapes::sptCTextWave4: return CBaseShapePtr(new OOXMLShapes::CTextWave4()); case OOXMLShapes::sptCTrapezoid: return CBaseShapePtr(new OOXMLShapes::CTrapezoid()); case OOXMLShapes::sptCTriangle: return CBaseShapePtr(new OOXMLShapes::CTriangle()); case OOXMLShapes::sptCUpArrow: return CBaseShapePtr(new OOXMLShapes::CUpArrow()); case OOXMLShapes::sptCUpArrowCallout: return CBaseShapePtr(new OOXMLShapes::CUpArrowCallout()); case OOXMLShapes::sptCUpDownArrow: return CBaseShapePtr(new OOXMLShapes::CUpDownArrow()); case OOXMLShapes::sptCUpDownArrowCallout: return CBaseShapePtr(new OOXMLShapes::CUpDownArrowCallout()); case OOXMLShapes::sptCUturnArrow: return CBaseShapePtr(new OOXMLShapes::CUturnArrow()); case OOXMLShapes::sptCVerticalScroll: return CBaseShapePtr(new OOXMLShapes::CVerticalScroll()); case OOXMLShapes::sptCWave: return CBaseShapePtr(new OOXMLShapes::CWave()); case OOXMLShapes::sptCWedgeEllipseCallout: return CBaseShapePtr(new OOXMLShapes::CWedgeEllipseCallout()); case OOXMLShapes::sptCWedgeRectCallout: return CBaseShapePtr(new OOXMLShapes::CWedgeRectCallout()); case OOXMLShapes::sptCWedgeRoundRectCallout: return CBaseShapePtr(new OOXMLShapes::CWedgeRoundRectCallout()); } return shape; }