/* * Copy constructor. */ GeneralGlyph::GeneralGlyph(const GeneralGlyph& source):GraphicalObject(source) { this->mReference=source.getReferenceId(); this->mCurve=*source.getCurve(); this->mReferenceGlyphs=*source.getListOfReferenceGlyphs(); this->mSubGlyphs=*source.getListOfSubGlyphs(); this->mCurveExplicitlySet = source.mCurveExplicitlySet; connectToChild(); }
void CLGeneralGlyph::exportToSBML(GraphicalObject * g, //TODO const std::map<const CCopasiObject*, SBase*> & copasimodelmap, std::map<std::string, const SBase*>& sbmlIDs, std::map<const CLBase*, const SBase*> & layoutmap) const { if (!g) return; //call the coresponding method of the base class CLGraphicalObject::exportToSBML(g, copasimodelmap, sbmlIDs); #if LIBSBML_VERSION >= 50800 GeneralGlyph *general = dynamic_cast<GeneralGlyph *>(g); if (!general) return; //reference to model objects CCopasiObject* tmp = getModelObject(); if (tmp) { std::map<const CCopasiObject*, SBase*>::const_iterator it = copasimodelmap.find(tmp); if (it != copasimodelmap.end()) { if (it->second) general->setReferenceId(it->second->getId()); } const CLBase* base = dynamic_cast<const CLBase*>(tmp); if (base) { std::map<const CLBase*, const SBase*>::const_iterator it2 = layoutmap.find(base); if (it2 != layoutmap.end()) { if (it2->second) general->setReferenceId(it2->second->getId()); } } } //curve mCurve.exportToSBML(general->getCurve(), copasimodelmap); //reference glyphs size_t i, imax = mvReferences.size(); for (i = 0; i < imax; ++i) { CLReferenceGlyph * tmp = mvReferences[i]; //check if the glyph exists in the libsbml data std::map<const CCopasiObject*, SBase*>::const_iterator it; it = copasimodelmap.find(tmp); ReferenceGlyph * pG; if (it == copasimodelmap.end()) //not found { pG = general->createReferenceGlyph(); } else { pG = dynamic_cast<ReferenceGlyph*>(it->second); } layoutmap.insert(std::pair<const CLBase*, const SBase*>(tmp, pG)); tmp->exportToSBML(pG, copasimodelmap, sbmlIDs, layoutmap); } imax = mvSubglyphs.size(); for (i = 0; i < imax; ++i) { CLGraphicalObject * tmp = mvSubglyphs[i]; CLMetabGlyph * metab = dynamic_cast<CLMetabGlyph*>(tmp); CLCompartmentGlyph* comp = dynamic_cast<CLCompartmentGlyph*>(tmp); CLGeneralGlyph* gg = dynamic_cast<CLGeneralGlyph*>(tmp); CLTextGlyph* text = dynamic_cast<CLTextGlyph*>(tmp); //check if the glyph exists in the libsbml data std::map<const CCopasiObject*, SBase*>::const_iterator it; it = copasimodelmap.find(tmp); GraphicalObject * pG; if (it == copasimodelmap.end()) //not found { if (metab) pG = ((Layout*)g->getParentSBMLObject()->getParentSBMLObject())->createSpeciesGlyph(); else if (comp) pG = ((Layout*)g->getParentSBMLObject()->getParentSBMLObject())->createCompartmentGlyph(); else if (gg) pG = ((Layout*)g->getParentSBMLObject()->getParentSBMLObject())->createGeneralGlyph(); else if (text) pG = ((Layout*)g->getParentSBMLObject()->getParentSBMLObject())->createTextGlyph(); else pG = ((Layout*)g->getParentSBMLObject()->getParentSBMLObject())->createAdditionalGraphicalObject(); } else { pG = dynamic_cast<GraphicalObject*>(it->second); } layoutmap.insert(std::pair<const CLBase*, const SBase*>(tmp, pG)); if (metab) metab->exportToSBML(static_cast<SpeciesGlyph*>(pG), copasimodelmap, sbmlIDs); else if (comp) comp->exportToSBML(static_cast<CompartmentGlyph*>(pG), copasimodelmap, sbmlIDs); else if (text) text->exportToSBML(static_cast<TextGlyph*>(pG), copasimodelmap, sbmlIDs); else if (gg) gg->exportToSBML(pG, copasimodelmap, sbmlIDs, layoutmap); else tmp->exportToSBML(pG, copasimodelmap, sbmlIDs); } #endif // LIBSBML_VERSION >= 50800 }