void MolDraw2DSVG::tagAtoms(const ROMol &mol, double radius, const std::map<std::string, std::string> &events) { PRECONDITION(d_os, "no output stream"); for (const auto &at : mol.atoms()) { auto this_idx = at->getIdx(); auto pos = getDrawCoords(atomCoords()[this_idx]); d_os << "<circle " << " cx='" << pos.x << "'" << " cy='" << pos.y << "'" << " r='" << (scale() * radius) << "'"; d_os << " class='atom-selector atom-" << this_idx; if (d_activeClass != "") { d_os << " " << d_activeClass; } d_os << "'"; d_os << " style='fill:#fff;stroke:#fff;stroke-width:1px;fill-opacity:0;" "stroke-opacity:0' "; for (const auto &event : events) { d_os << " " << event.first << "='" << event.second << "(" << this_idx << ");" << "'"; } d_os << "/>\n"; } }
bool isOrganic(const ROMol &frag) { // Returns true if fragment contains at least one carbon atom. for (const auto at : frag.atoms()) { if (at->getAtomicNum() == 6) { return true; } } return false; }
void MolDraw2DSVG::addMoleculeMetadata(const ROMol &mol, int confId) const { PRECONDITION(d_os, "no output stream"); d_os << "<metadata>" << std::endl; d_os << "<rdkit:mol" << " xmlns:rdkit = \"http://www.rdkit.org/xml\"" << " version=\"" << RDKIT_SVG_VERSION << "\"" << ">" << std::endl; for (const auto atom : mol.atoms()) { d_os << "<rdkit:atom idx=\"" << atom->getIdx() + 1 << "\""; bool doKekule = false, allHsExplicit = true, isomericSmiles = true; d_os << " atom-smiles=\"" << SmilesWrite::GetAtomSmiles(atom, doKekule, nullptr, allHsExplicit, isomericSmiles) << "\""; auto tag = boost::str(boost::format("_atomdrawpos_%d") % confId); const Conformer &conf = mol.getConformer(confId); RDGeom::Point3D pos = conf.getAtomPos(atom->getIdx()); Point2D dpos(pos.x, pos.y); if (atom->hasProp(tag)) dpos = atom->getProp<Point2D>(tag); else dpos = getDrawCoords(dpos); d_os << " drawing-x=\"" << dpos.x << "\"" << " drawing-y=\"" << dpos.y << "\""; d_os << " x=\"" << pos.x << "\"" << " y=\"" << pos.y << "\"" << " z=\"" << pos.z << "\""; d_os << " />" << std::endl; } for (const auto bond : mol.bonds()) { d_os << "<rdkit:bond idx=\"" << bond->getIdx() + 1 << "\""; d_os << " begin-atom-idx=\"" << bond->getBeginAtomIdx() + 1 << "\""; d_os << " end-atom-idx=\"" << bond->getEndAtomIdx() + 1 << "\""; bool doKekule = false, allBondsExplicit = true; d_os << " bond-smiles=\"" << SmilesWrite::GetBondSmiles(bond, -1, doKekule, allBondsExplicit) << "\""; d_os << " />" << std::endl; } d_os << "</rdkit:mol></metadata>" << std::endl; }