25#ifndef RDKITMOLDRAW2D_H
26#define RDKITMOLDRAW2D_H
41namespace MolDraw2D_detail {
62 MolDraw2D(
int width,
int height,
int panelWidth,
int panelHeight);
89 const ROMol &mol,
const std::string &legend,
90 const std::vector<int> *highlight_atoms,
91 const std::vector<int> *highlight_bonds,
92 const std::map<int, DrawColour> *highlight_atom_map =
nullptr,
93 const std::map<int, DrawColour> *highlight_bond_map =
nullptr,
94 const std::map<int, double> *highlight_radii =
nullptr,
int confId = -1);
98 const ROMol &mol,
const std::vector<int> *highlight_atoms =
nullptr,
99 const std::map<int, DrawColour> *highlight_map =
nullptr,
100 const std::map<int, double> *highlight_radii =
nullptr,
int confId = -1);
104 const ROMol &mol,
const std::string &legend,
105 const std::vector<int> *highlight_atoms =
nullptr,
106 const std::map<int, DrawColour> *highlight_map =
nullptr,
107 const std::map<int, double> *highlight_radii =
nullptr,
int confId = -1);
111 const ROMol &mol,
const std::vector<int> *highlight_atoms,
112 const std::vector<int> *highlight_bonds,
113 const std::map<int, DrawColour> *highlight_atom_map =
nullptr,
114 const std::map<int, DrawColour> *highlight_bond_map =
nullptr,
115 const std::map<int, double> *highlight_radii =
nullptr,
int confId = -1);
135 const ROMol &mol,
const std::string &legend,
136 const std::map<
int, std::vector<DrawColour>> &highlight_atom_map,
137 const std::map<
int, std::vector<DrawColour>> &highlight_bond_map,
138 const std::map<int, double> &highlight_radii,
139 const std::map<int, int> &highlight_linewidth_multipliers,
169 const std::vector<ROMol *> &mols,
170 const std::vector<std::string> *legends =
nullptr,
171 const std::vector<std::vector<int>> *highlight_atoms =
nullptr,
172 const std::vector<std::vector<int>> *highlight_bonds =
nullptr,
173 const std::vector<std::map<int, DrawColour>> *highlight_atom_maps =
175 const std::vector<std::map<int, DrawColour>> *highlight_bond_maps =
177 const std::vector<std::map<int, double>> *highlight_radii =
nullptr,
178 const std::vector<int> *confIds =
nullptr);
194 const std::vector<DrawColour> *highlightColorsReactants =
nullptr,
195 const std::vector<int> *confIds =
nullptr);
205 bool rawCoords =
false) = 0;
213 bool rawCoords =
false) = 0;
225 bool rawCoords =
false);
228 const Point2D &cds3,
bool rawCoords =
false);
231 bool rawCoords =
false);
237 double ang2,
bool rawCoords =
false);
240 double ang1,
double ang2,
bool rawCoords =
false);
243 bool rawCoords =
false);
248 unsigned int nSegments = 16,
249 bool rawCoords =
false);
253 unsigned int nSegments = 16,
254 double vertOffset = 0.05,
bool rawCoords =
false);
257 bool asPolygon =
false,
double frac = 0.05,
258 double angle =
M_PI / 6,
260 bool rawCoords =
false);
263 const DrawColour &col,
bool rawCoords =
false);
267 bool rawCoords =
false);
272 bool rawCoords =
false);
298 const std::pair<double, double> &screen_cds)
const;
307 const std::vector<std::pair<std::string, MolDraw2D_detail::OrientType>>
311 virtual int width()
const {
return width_; }
313 virtual int height()
const {
return height_; }
318 virtual int drawHeight()
const {
return panel_height_ - legend_height_; }
328 const ROMol *mol =
nullptr);
356 virtual void setLineWidth(
int width) { drawOptions().bondLineWidth = width; }
358 virtual int lineWidth()
const {
return drawOptions().bondLineWidth; }
368 double &label_height)
const;
373 double &label_height)
const;
377 const Point2D &cds,
double &x_min,
double &y_min,
378 double &x_max,
double &y_max)
const;
403 activeBndIdx_ = (bnd_idx < 0 ? -1 : bnd_idx);
406 d_activeClass = actClass;
413 bool needs_init_ =
true;
415 unsigned int d_numMetadataEntries = 0;
420 virtual void initDrawing() = 0;
421 virtual void initTextDrawer(
bool noFreetype) = 0;
429 void getReactionDrawMols(
431 const std::vector<DrawColour> *highlightColorsReactants,
432 const std::vector<int> *confIds,
433 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &reagents,
434 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &products,
435 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &agents,
439 void makeReactionComponents(
440 std::vector<RDKit::ROMOL_SPTR>
const &bits,
441 const std::vector<int> *confIds,
int heightToUse,
442 std::map<int, DrawColour> &atomColours,
443 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &dms,
444 double &minScale,
double &minFontScale);
447 void makeReactionDrawMol(
448 RWMol &mol,
int confId,
int molHeight,
449 const std::vector<int> &highlightAtoms,
450 const std::vector<int> &highlightBonds,
451 const std::map<int, DrawColour> &highlightAtomMap,
452 const std::map<int, DrawColour> &highlightBondMap,
453 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &mols);
457 void calcReactionOffsets(
458 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &reagents,
459 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &products,
460 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &agents,
461 int &plusWidth, std::vector<Point2D> &offsets,
Point2D &arrowBeg,
464 int drawReactionPart(
465 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> &reactBit,
466 int plusWidth,
int initOffset,
const std::vector<Point2D> &offsets);
469 void findReactionHighlights(
471 const std::vector<DrawColour> *highlightColorsReactants,
472 std::map<int, DrawColour> &atomColours)
const;
474 int width_, height_, panel_width_, panel_height_, legend_height_;
477 bool forceScale_ =
false;
478 double scale_, fontScale_;
479 int x_offset_, y_offset_;
487 std::vector<std::shared_ptr<MolDraw2D_detail::DrawMol>> drawMols_;
493 std::unique_ptr<MolDraw2D_detail::DrawMol> globalDrawTrans_;
502 void setupTextDrawer();
504 virtual void updateMetadata(
const ROMol &mol,
int confId) {
#define RDUNUSED_PARAM(x)
pulls in the core RDKit functionality
This is a class for storing and applying general chemical reactions.
MolDraw2D is the base class for doing 2D renderings of molecules.
virtual void drawMoleculeWithHighlights(const ROMol &mol, const std::string &legend, const std::map< int, std::vector< DrawColour > > &highlight_atom_map, const std::map< int, std::vector< DrawColour > > &highlight_bond_map, const std::map< int, double > &highlight_radii, const std::map< int, int > &highlight_linewidth_multipliers, int confId=-1)
draw molecule with multiple colours allowed per atom.
virtual void tagAtoms(const ROMol &mol)
void setActiveBndIdx(int bnd_idx=-1)
MolDraw2D & operator=(MolDraw2D &&rhs)=delete
void setScale(int width, int height, const Point2D &minv, const Point2D &maxv, const ROMol *mol=nullptr)
virtual int panelWidth() const
return the width of the drawing panels.
virtual void drawLine(const Point2D &cds1, const Point2D &cds2, const DrawColour &col1, const DrawColour &col2, bool rawCoords=false)
draw a line where the ends are different colours
virtual void drawMolecule(const ROMol &mol, const std::string &legend, const std::vector< int > *highlight_atoms, const std::vector< int > *highlight_bonds, const std::map< int, DrawColour > *highlight_atom_map=nullptr, const std::map< int, DrawColour > *highlight_bond_map=nullptr, const std::map< int, double > *highlight_radii=nullptr, int confId=-1)
draw a single molecule
virtual double getDrawLineWidth() const
virtual void setFontSize(double new_size)
virtual Point2D getAtomCoords(int at_num) const
virtual void getStringSize(const std::string &label, double &label_width, double &label_height) const
virtual void drawArrow(const Point2D &cds1, const Point2D &cds2, bool asPolygon=false, double frac=0.05, double angle=M_PI/6, const DrawColour &col=DrawColour(0.0, 0.0, 0.0), bool rawCoords=false)
Draw an arrow with either lines or a filled head (when asPolygon is true)
virtual void drawMolecule(const ROMol &mol, const std::vector< int > *highlight_atoms, const std::vector< int > *highlight_bonds, const std::map< int, DrawColour > *highlight_atom_map=nullptr, const std::map< int, DrawColour > *highlight_bond_map=nullptr, const std::map< int, double > *highlight_radii=nullptr, int confId=-1)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool hasActiveBndIdx() const
virtual void drawMolecules(const std::vector< ROMol * > &mols, const std::vector< std::string > *legends=nullptr, const std::vector< std::vector< int > > *highlight_atoms=nullptr, const std::vector< std::vector< int > > *highlight_bonds=nullptr, const std::vector< std::map< int, DrawColour > > *highlight_atom_maps=nullptr, const std::vector< std::map< int, DrawColour > > *highlight_bond_maps=nullptr, const std::vector< std::map< int, double > > *highlight_radii=nullptr, const std::vector< int > *confIds=nullptr)
draw multiple molecules in a grid
virtual int drawHeight() const
int getActiveAtmIdx2() const
virtual void drawReaction(const ChemicalReaction &rxn, bool highlightByReactant=false, const std::vector< DrawColour > *highlightColorsReactants=nullptr, const std::vector< int > *confIds=nullptr)
draw a ChemicalReaction
virtual void drawLine(const Point2D &cds1, const Point2D &cds2, bool rawCoords=false)=0
MolDraw2D(int width, int height, int panelWidth, int panelHeight)
constructor for a particular size
void getLabelSize(const std::string &label, MolDraw2D_detail::OrientType orient, double &label_width, double &label_height) const
virtual void drawMolecule(const ROMol &mol, const std::vector< int > *highlight_atoms=nullptr, const std::map< int, DrawColour > *highlight_map=nullptr, const std::map< int, double > *highlight_radii=nullptr, int confId=-1)
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::unique_ptr< MolDraw2D_detail::DrawText > text_drawer_
void getStringExtremes(const std::string &label, MolDraw2D_detail::OrientType orient, const Point2D &cds, double &x_min, double &y_min, double &x_max, double &y_max) const
virtual bool fillPolys() const
set whether or not polygons are being filled
virtual void drawWavyLine(const Point2D &cds1, const Point2D &cds2, const DrawColour &col1, const DrawColour &col2, unsigned int nSegments=16, double vertOffset=0.05, bool rawCoords=false)
draw a wavy line like that used to indicate unknown stereochemistry
virtual void drawPlus(const Point2D &cds, int plusWidth, const DrawColour &col, bool rawCoords=false)
virtual bool supportsAnnotations() const
virtual void drawMolecule(const ROMol &mol, const std::string &legend, const std::vector< int > *highlight_atoms=nullptr, const std::map< int, DrawColour > *highlight_map=nullptr, const std::map< int, double > *highlight_radii=nullptr, int confId=-1)
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual void clearDrawing()=0
clears the contents of the drawing
virtual int height() const
return the height of the drawing area.
virtual void setDash(const DashPattern &patt)
sets the current dash pattern
virtual void drawString(const std::string &str, const Point2D &cds, bool rawCoords=false)
drawString centres the string on cds.
MolDraw2D(MolDraw2D &&rhs)=delete
virtual DrawColour colour() const
returns the current draw color
virtual void drawArc(const Point2D ¢re, double radius, double ang1, double ang2, bool rawCoords=false)
virtual void setColour(const DrawColour &col)
sets the current draw color
const std::vector< Point2D > & atomCoords() const
int getActiveAtmIdx1() const
Point2D range() const
returns the width and height of the grid (in molecular coords)
MolDraw2D(const MolDraw2D &rhs)=delete
virtual Point2D getDrawCoords(const Point2D &mol_cds) const
virtual void drawTriangle(const Point2D &cds1, const Point2D &cds2, const Point2D &cds3, bool rawCoords=false)
draw a triangle
const MolDrawOptions & drawOptions() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual void drawString(const std::string &str, const Point2D &cds, MolDraw2D_detail::TextAlignType align, bool rawCoords=false)
virtual Point2D getDrawCoords(int at_num) const
returns the drawing coordinates of a particular atom
virtual Point2D getAtomCoords(const std::pair< int, int > &screen_cds) const
std::string d_activeClass
virtual void drawAttachmentLine(const Point2D &cds1, const Point2D &cds2, const DrawColour &col, double len=1.0, unsigned int nSegments=16, bool rawCoords=false)
void setOffset(int x, int y)
sets the drawing offset (in drawing coords)
void setActiveClass(std::string actClass=std::string(""))
virtual Point2D getAtomCoords(const std::pair< double, double > &screen_cds) const
virtual int width() const
return the width of the drawing area.
virtual void setFillPolys(bool val)
returns either or not polygons should be filled
virtual void drawRect(const Point2D &cds1, const Point2D &cds2, bool rawCoords=false)
draw a rectangle given two opposite corners
virtual void drawPolygon(const std::vector< Point2D > &cds, bool rawCoords=false)=0
virtual void drawEllipse(const Point2D &cds1, const Point2D &cds2, bool rawCoords=false)
draw an ellipse
void setActiveMolIdx(int newIdx)
virtual int panelHeight() const
return the height of the drawing panels.
Point2D minPt() const
returns the minimum point of the drawing (in molecular coords)
const std::vector< std::pair< std::string, MolDraw2D_detail::OrientType > > & atomSyms() const
returns the atomic symbols of the activeMolIdx_ molecule
virtual void setLineWidth(int width)
sets the current line width
void setActiveAtmIdx(int at_idx1=-1, int at_idx2=-1)
Point2D offset() const
returns the drawing offset (in drawing coords)
virtual const DashPattern & dash() const
returns the current dash pattern
bool hasActiveAtmIdx() const
MolDraw2D & operator=(const MolDraw2D &rhs)=delete
std::vector< std::pair< std::string, std::string > > d_metadata
int getActiveBndIdx() const
virtual double fontSize() const
font size in drawing coordinate units. That's probably pixels.
std::string getActiveClass() const
void setScale(double newScale)
explicitly sets the scaling factors for the drawing
virtual void drawArc(const Point2D ¢re, double xradius, double yradius, double ang1, double ang2, bool rawCoords=false)
MolDrawOptions & drawOptions()
returns our current drawing options
virtual int lineWidth() const
returns the current line width
RWMol is a molecule class that is intended to be edited.
#define RDKIT_MOLDRAW2D_EXPORT
std::vector< double > DashPattern
void setMonochromeMode(MolDrawOptions &opts, const DrawColour &fgColour, const DrawColour &bgColour)
void assignDarkModePalette(ColourPalette &palette)
void setDarkMode(MolDrawOptions &opts)
DrawColour variableAttachmentColour
ColourPalette atomColourPalette
DrawColour backgroundColour
DrawColour annotationColour