20 #include <sbml/ListOf.h>
21 #include <sbml/packages/layout/sbml/Layout.h>
22 #include <sbml/packages/layout/sbml/SpeciesGlyph.h>
23 #include <sbml/packages/layout/sbml/ReactionGlyph.h>
25 #include <sbml/packages/layout/sbml/SpeciesReferenceGlyph.h>
26 #include <sbml/packages/layout/sbml/TextGlyph.h>
27 #include <sbml/packages/render/sbml/Text.h>
28 #include <sbml/packages/render/sbml/LocalStyle.h>
39 #include <sbml/packages/render/extension/RenderListOfLayoutsPlugin.h>
40 #include <sbml/packages/render/extension/RenderLayoutPlugin.h>
48 const ListOf & sbmlList,
49 const std::map<CCopasiObject*, SBase*> & copasimodelmap)
54 const ListOfLayouts* pLoL =
dynamic_cast<const ListOfLayouts*
>(&sbmlList);
56 RenderListOfLayoutsPlugin* rlolPlugin = (RenderListOfLayoutsPlugin*) pLoL ->getPlugin(
"render");
58 if (rlolPlugin == NULL)
60 const_cast<SBMLDocument *
>(pLoL->getSBMLDocument())->enablePackage(RenderExtension::getXmlnsL3V1V1(),
"render",
true);
61 rlolPlugin = (RenderListOfLayoutsPlugin*) pLoL ->getPlugin(
"render");
64 iMax = rlolPlugin->getNumGlobalRenderInformationObjects();
65 std::map<std::string, std::string> idToKeyMap;
76 for (i = 0; i < iMax; ++i)
84 if (rlolPlugin->getRenderInformation(i)->isSetId())
85 idToKeyMap.insert(std::pair<std::string, std::string>(rlolPlugin->getRenderInformation(i)->getId(), pGRI->
getKey()));
87 idToKeyMap.insert(std::pair<std::string, std::string>(pGRI->
getKey(), pGRI->
getKey()));
100 std::map<std::string, std::string> modelmap;
103 std::map<CCopasiObject*, SBase*>::const_iterator it;
104 std::map<CCopasiObject*, SBase*>::const_iterator itEnd = copasimodelmap.end();
106 for (it = copasimodelmap.begin(); it != itEnd; ++it)
111 s2 = it->first->getKey();
115 if ((s1 !=
"") && (s2 !=
""))
120 iMax = sbmlList.size();
122 for (i = 0; i < iMax; ++i)
124 std::map<std::string, std::string> layoutmap;
126 =
dynamic_cast<const Layout*
>(sbmlList.get(i));
143 const std::map<std::string, std::string> & modelmap,
144 std::map<std::string, std::string> & layoutmap
145 ,
const std::map<std::string, std::string>& globalIdToKeyMap
152 unsigned C_INT32 i, iMax = sbmlLayout.getListOfCompartmentGlyphs()->size();
154 for (i = 0; i < iMax; ++i)
156 const CompartmentGlyph* tmp
157 =
dynamic_cast<const CompartmentGlyph*
>(sbmlLayout.getListOfCompartmentGlyphs()->get(i));
164 iMax = sbmlLayout.getListOfSpeciesGlyphs()->size();
166 for (i = 0; i < iMax; ++i)
168 const SpeciesGlyph* tmp
169 =
dynamic_cast<const SpeciesGlyph*
>(sbmlLayout.getListOfSpeciesGlyphs()->get(i));
176 iMax = sbmlLayout.getListOfReactionGlyphs()->size();
178 for (i = 0; i < iMax; ++i)
180 const ReactionGlyph* tmp
181 =
dynamic_cast<const ReactionGlyph*
>(sbmlLayout.getListOfReactionGlyphs()->get(i));
188 iMax = sbmlLayout.getListOfTextGlyphs()->size();
190 for (i = 0; i < iMax; ++i)
193 =
dynamic_cast<const TextGlyph*
>(sbmlLayout.getListOfTextGlyphs()->get(i));
200 iMax = sbmlLayout.getListOfAdditionalGraphicalObjects()->size();
202 for (i = 0; i < iMax; ++i)
204 const GraphicalObject* graphical
205 =
dynamic_cast<const GraphicalObject*
>(sbmlLayout.getListOfAdditionalGraphicalObjects()->get(i));
213 iMax = sbmlLayout.getListOfTextGlyphs()->size();
215 for (i = 0; i < iMax; ++i)
218 =
dynamic_cast<const TextGlyph*
>(sbmlLayout.getListOfTextGlyphs()->get(i));
224 RenderLayoutPlugin* rlPlugin = (RenderLayoutPlugin*) sbmlLayout.getPlugin(
"render");
225 assert(rlPlugin != NULL);
228 iMax = rlPlugin->getNumLocalRenderInformationObjects();
229 std::map<std::string, std::string> idToKeyMap;
232 for (i = 0; i < iMax; ++i)
240 if (rlPlugin->getRenderInformation(i)->isSetId())
241 idToKeyMap.insert(std::pair<std::string, std::string>(rlPlugin->getRenderInformation(i)->getId(), pLRI->
getKey()));
243 idToKeyMap.insert(std::pair<std::string, std::string>(pLRI->
getKey(), pLRI->
getKey()));
251 for (j = 0; j < jMax; j++)
262 size_t count = idToKeyMap.size() + globalIdToKeyMap.size();
263 idToKeyMap.insert(globalIdToKeyMap.begin(), globalIdToKeyMap.end());
265 assert(idToKeyMap.size() == count);
274 const std::map<std::string, std::string> & layoutmap)
279 if (sbml.getId() !=
"")
281 std::map<std::string, std::string>::const_iterator it = layoutmap.find(sbml.getId());
283 if (it != layoutmap.end())
301 if (sbml.getGraphicalObjectId() !=
"")
303 std::map<std::string, std::string>::const_iterator it = layoutmap.find(sbml.getGraphicalObjectId());
305 if (it != layoutmap.end())
315 std::set<std::string> keys;
316 std::map<std::string, std::string>::const_iterator pos;
317 std::set<std::string>::const_iterator it = style.
getKeyList().begin(), endit = style.
getKeyList().end();
321 pos = idToKeyMap.find(*it);
322 assert(pos != idToKeyMap.end());
323 keys.insert(pos->second);
459 std::set<std::string> ids;
460 std::map<std::string, std::string>::const_iterator pos;
461 std::set<std::string>::const_iterator it = style.getIdList().begin(), endit = style.getIdList().end();
465 pos = keyToIdMap.find(*it);
466 assert(pos != keyToIdMap.end());
467 ids.insert(pos->second);
471 style.setIdList(ids);
602 const std::map<std::string, std::string>& sourceMap,
603 std::map<std::string, std::string>& destMap
606 std::map<std::string, std::string>::const_iterator it = sourceMap.begin(), endit = sourceMap.end();
610 if (destMap.find(it->first) == destMap.end())
void addReactionGlyph(CLReactionGlyph *glyph)
void addGeneralGlyph(CLGeneralGlyph *glyph)
void addLocalRenderInformation(CLLocalRenderInformation *pRenderInfo)
const CCopasiVector< CLLocalRenderInformation > & getListOfLocalRenderInformationObjects() const
CCopasiObject * get(const std::string &key)
static void convertLayoutObjectKeys(LocalStyle &style, const std::map< std::string, std::string > &keyToIdMap)
const std::set< std::string > & getKeyList() const
void addGlobalRenderInformation(CLGlobalRenderInformation *pRenderInfo)
void addMetaboliteGlyph(CLMetabGlyph *glyph)
static CLayout * createLayout(const Layout &sbmlLayout, const std::map< std::string, std::string > &modelmap, std::map< std::string, std::string > &layoutmap, const std::map< std::string, std::string > &globalIdToKeyMap, const CCopasiContainer *pParent=NULL)
void addTextGlyph(CLTextGlyph *glyph)
static void convertLayoutObjectIds(CLLocalStyle &style, const std::map< std::string, std::string > &idToKeyMap)
void setGraphicalObjectKey(const std::string &k)
void addLayout(CLayout *layout, const std::map< std::string, std::string > &m)
void addCompartmentGlyph(CLCompartmentGlyph *glyph)
static void combineMaps(const std::map< std::string, std::string > &sourceMap, std::map< std::string, std::string > &destMap)
static CKeyFactory * getKeyFactory()
static std::string getIdFromSBase(const SBase *s)
static void postprocessTextGlyph(const TextGlyph &sbml, const std::map< std::string, std::string > &layoutmap)
static void readListOfLayouts(CListOfLayouts &lol, const ListOf &sbmlList, const std::map< CCopasiObject *, SBase * > &copasimodelmap)
void setKeyList(const std::set< std::string > &keyList)
const CCopasiVector< CLGlobalRenderInformation > & getListOfGlobalRenderInformationObjects() const