void CLGraphicalObject::exportToSBML(GraphicalObject * sbmlobject, const std::map<const CCopasiObject*, SBase*> & /* copasimodelmap */, std::map<std::string, const SBase*>& sbmlIDs) const { if (!sbmlobject) return; //Name and ID std::string id = CSBMLExporter::createUniqueId(sbmlIDs, "layout_glyph_"); sbmlobject->setId(id); sbmlIDs.insert(std::pair<const std::string, const SBase*>(id, sbmlobject)); //Bounding box BoundingBox tmpbox = mBBox.getSBMLBoundingBox(); sbmlobject->setBoundingBox(&tmpbox); #ifdef USE_CRENDER_EXTENSION if (this->mObjectRole.find_first_not_of(" \t\r\n") != std::string::npos) { RenderGraphicalObjectPlugin* rgoPlugin = (RenderGraphicalObjectPlugin*) sbmlobject->getPlugin("render"); if (rgoPlugin != NULL) rgoPlugin->setObjectRole(this->mObjectRole); } #endif // USE_CRENDER_EXTENSION }
CLGraphicalObject::CLGraphicalObject(const GraphicalObject & sbml, std::map<std::string, std::string> & layoutmap, const CCopasiContainer * pParent) : CLBase(sbml), CCopasiContainer(sbml.getId(), pParent, "LayoutElement"), mKey(CCopasiRootContainer::getKeyFactory()->add("Layout", this)), mModelObjectKey(""), mBBox(*sbml.getBoundingBox()) { RenderGraphicalObjectPlugin* rgoPlugin = (RenderGraphicalObjectPlugin*) sbml.getPlugin("render"); if (rgoPlugin != NULL) mObjectRole = rgoPlugin->getObjectRole(); //add the copasi key to the map layoutmap[sbml.getId()] = mKey; };
END_TEST START_TEST ( test_RenderExtension_graphicalObject ) { RenderPkgNamespaces renderns; LayoutPkgNamespaces layoutns; SBMLDocument doc(3,1); doc.enablePackage(layoutns.getURI(), "layout", true); doc.enablePackage(renderns.getURI(), "render", true); Model* model = doc.createModel(); LayoutModelPlugin *lPlugin = (LayoutModelPlugin*)model->getPlugin("layout"); fail_unless(lPlugin != NULL); Layout* layout = lPlugin->createLayout(); Dimensions dim(&layoutns, 100,100 ); layout->setDimensions(&dim); GraphicalObject* additional = layout->createAdditionalGraphicalObject(); additional->setId("go1"); BoundingBox bb(&layoutns, "bb1", 10, 10, 90, 90); additional->setBoundingBox(&bb); RenderGraphicalObjectPlugin* goPlugin = (RenderGraphicalObjectPlugin*)additional->getPlugin("render"); fail_unless(goPlugin != NULL); goPlugin->setObjectRole("myRole"); RenderLayoutPlugin *rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render"); fail_unless(rPlugin != NULL); LocalRenderInformation* local = rPlugin->createLocalRenderInformation(); ColorDefinition *black = local->createColorDefinition(); black->setId("black"); black->setColorValue("#000000"); LocalStyle *lStyle = local->createStyle("style_go1"); lStyle->addId("go1"); RenderGroup* group = lStyle->getGroup(); group->setStroke("black"); std::string sbml = writeSBMLToStdString(&doc); fail_unless (sbml.length() != 0); // read back SBMLDocument *doc2 = readSBMLFromString(sbml.c_str()); LayoutModelPlugin *lPlugin2 = (LayoutModelPlugin*)doc2->getModel()->getPlugin("layout"); fail_unless(lPlugin2 != NULL); GraphicalObject *go2 = lPlugin2->getLayout(0)->getAdditionalGraphicalObject(0); fail_unless(go2 != NULL); RenderGraphicalObjectPlugin* goPlugin2 = (RenderGraphicalObjectPlugin*)go2->getPlugin("render"); fail_unless(goPlugin2 != NULL); fail_unless(goPlugin2->getObjectRole() == "myRole"); delete doc2; }
END_TEST START_TEST ( test_RenderExtension_gradient ) { RenderPkgNamespaces renderns; LayoutPkgNamespaces layoutns; SBMLDocument doc(3,1); doc.enablePackage(layoutns.getURI(), "layout", true); doc.enablePackage(renderns.getURI(), "render", true); Model* model = doc.createModel(); LayoutModelPlugin *lPlugin = (LayoutModelPlugin*)model->getPlugin("layout"); fail_unless(lPlugin != NULL); Layout* layout = lPlugin->createLayout(); Dimensions dim(&layoutns, 100,100 ); layout->setDimensions(&dim); GraphicalObject* additional = layout->createAdditionalGraphicalObject(); additional->setId("go1"); BoundingBox bb(&layoutns, "bb1", 10, 10, 90, 90); additional->setBoundingBox(&bb); RenderGraphicalObjectPlugin* goPlugin = (RenderGraphicalObjectPlugin*)additional->getPlugin("render"); fail_unless(goPlugin != NULL); goPlugin->setObjectRole("myRole"); RenderLayoutPlugin *rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render"); fail_unless(rPlugin != NULL); LocalRenderInformation* local = rPlugin->createLocalRenderInformation(); ColorDefinition *black = local->createColorDefinition(); black->setId("black"); black->setColorValue("#000000"); ColorDefinition *grey = local->createColorDefinition(); grey->setId("grey"); grey->setColorValue("#F0F0F0"); LinearGradient* gradient = local->createLinearGradientDefinition(); gradient->setId("test"); gradient->setPoint1(RelAbsVector(), RelAbsVector()); gradient->setPoint2(RelAbsVector(0,100), RelAbsVector(0,100)); GradientStop *stop = gradient->createGradientStop(); stop->setOffset(RelAbsVector()); stop->setStopColor("white"); stop = gradient->createGradientStop(); stop->setOffset(RelAbsVector(0, 100)); stop->setStopColor("silver"); std::string smodel = writeSBMLToStdString(&doc); fail_unless( stop->getStopColor() == "silver" ); }