22 #ifndef RDKITMOLDRAW2D_H 23 #define RDKITMOLDRAW2D_H 31 #include <boost/tuple/tuple.hpp> 46 palette[1] = palette[6] =
DrawColour(0.0, 0.0, 0.0);
100 : atomLabelDeuteriumTritium(false),
101 dummiesAreAttachments(false),
103 highlightColour(1, .5, .5),
104 continuousHighlight(true),
105 fillHighlights(true),
106 flagCloseContactsDist(3),
107 includeAtomTags(false),
108 clearBackground(true),
111 legendColour(0, 0, 0),
112 multipleBondOffset(0.15),
114 additionalAtomLabelPadding(0.0),
116 highlightColourPalette.push_back(
118 highlightColourPalette.push_back(
DrawColour(1., .8, .6));
119 highlightColourPalette.push_back(
DrawColour(1., .71, .76));
120 highlightColourPalette.push_back(
DrawColour(.8, 1., .8));
121 highlightColourPalette.push_back(
DrawColour(.87, .63, .87));
122 highlightColourPalette.push_back(
DrawColour(.76, .94, .96));
123 highlightColourPalette.push_back(
DrawColour(.67, .67, 1.));
124 highlightColourPalette.push_back(
DrawColour(.64, .76, .34));
125 highlightColourPalette.push_back(
DrawColour(.56, .93, .56));
126 highlightColourPalette.push_back(
DrawColour(.20, .63, .79));
152 MolDraw2D(
int width,
int height,
int panelWidth = -1,
int panelHeight = -1);
175 virtual void drawMolecule(
176 const ROMol &mol,
const std::string &legend,
177 const std::vector<int> *highlight_atoms,
178 const std::vector<int> *highlight_bonds,
179 const std::map<int, DrawColour> *highlight_atom_map = NULL,
180 const std::map<int, DrawColour> *highlight_bond_map = NULL,
181 const std::map<int, double> *highlight_radii = NULL,
int confId = -1);
184 virtual void drawMolecule(
185 const ROMol &mol,
const std::vector<int> *highlight_atoms = NULL,
186 const std::map<int, DrawColour> *highlight_map = NULL,
187 const std::map<int, double> *highlight_radii = NULL,
int confId = -1);
190 virtual void drawMolecule(
191 const ROMol &mol,
const std::string &legend,
192 const std::vector<int> *highlight_atoms = NULL,
193 const std::map<int, DrawColour> *highlight_map = NULL,
194 const std::map<int, double> *highlight_radii = NULL,
int confId = -1);
197 virtual void drawMolecule(
198 const ROMol &mol,
const std::vector<int> *highlight_atoms,
199 const std::vector<int> *highlight_bonds,
200 const std::map<int, DrawColour> *highlight_atom_map = NULL,
201 const std::map<int, DrawColour> *highlight_bond_map = NULL,
202 const std::map<int, double> *highlight_radii = NULL,
int confId = -1);
230 virtual void drawMolecules(
231 const std::vector<ROMol *> &mols,
232 const std::vector<std::string> *legends = NULL,
233 const std::vector<std::vector<int> > *highlight_atoms = NULL,
234 const std::vector<std::vector<int> > *highlight_bonds = NULL,
235 const std::vector<std::map<int, DrawColour> > *highlight_atom_maps = NULL,
236 const std::vector<std::map<int, DrawColour> > *highlight_bond_maps = NULL,
237 const std::vector<std::map<int, double> > *highlight_radii = NULL,
238 const std::vector<int> *confIds = NULL);
252 virtual void drawReaction(
254 const std::vector<DrawColour> *highlightColorsReactants = NULL,
255 const std::vector<int> *confIds = NULL);
271 virtual Point2D getDrawCoords(
int at_num)
const;
272 virtual Point2D getAtomCoords(
const std::pair<int, int> &screen_cds)
const;
276 const std::pair<double, double> &screen_cds)
const;
278 virtual Point2D getAtomCoords(
int at_num)
const;
282 virtual int width()
const {
return width_; }
284 virtual int height()
const {
return height_; }
292 double scale()
const {
return scale_; }
295 void calculateScale(
int width,
int height);
299 void setScale(
int width,
int height,
const Point2D &minv,
309 virtual double fontSize()
const {
return font_size_; }
312 virtual void setFontSize(
double new_size);
315 virtual void setColour(
const DrawColour &col) { curr_colour_ = col; }
317 virtual DrawColour
colour()
const {
return curr_colour_; }
319 virtual void setDash(
const DashPattern &patt) { curr_dash_ = patt; }
321 virtual const DashPattern &
dash()
const {
return curr_dash_; }
332 bool setStringDrawMode(
const std::string &instring, TextDrawType &draw_mode,
335 virtual void clearDrawing() = 0;
346 virtual void getStringSize(
const std::string &label,
double &label_width,
347 double &label_height)
const = 0;
349 virtual void drawString(
const std::string &str,
const Point2D &cds);
352 virtual void drawPolygon(
const std::vector<Point2D> &cds) = 0;
354 virtual void drawTriangle(
const Point2D &cds1,
const Point2D &cds2,
357 virtual void drawEllipse(
const Point2D &cds1,
const Point2D &cds2);
362 virtual void drawAttachmentLine(
const Point2D &cds1,
const Point2D &cds2,
363 const DrawColour &col,
double len = 1.0,
364 unsigned int nSegments = 16);
366 virtual void drawWavyLine(
const Point2D &cds1,
const Point2D &cds2,
367 const DrawColour &col1,
const DrawColour &col2,
368 unsigned int nSegments = 16,
369 double vertOffset = 0.05);
387 return at_cds_[activeMolIdx_];
390 const std::vector<std::pair<std::string, OrientType> > &
atomSyms()
const {
392 return atom_syms_[activeMolIdx_];
397 int width_, height_, panel_width_, panel_height_;
399 double x_min_, y_min_, x_range_, y_range_;
400 double x_trans_, y_trans_;
401 int x_offset_, y_offset_;
409 DrawColour curr_colour_;
410 DashPattern curr_dash_;
413 std::vector<std::vector<Point2D> > at_cds_;
414 std::vector<std::vector<int> > atomic_nums_;
415 std::vector<std::vector<std::pair<std::string, OrientType> > > atom_syms_;
419 virtual void drawChar(
char c,
const Point2D &cds) = 0;
423 DrawColour getColour(
int atom_idx,
424 const std::vector<int> *highlight_atoms = NULL,
425 const std::map<int, DrawColour> *highlight_map = NULL);
426 DrawColour getColourByAtomicNum(
int atomic_num);
428 void extractAtomCoords(
const ROMol &mol,
int confId,
bool updateBBox);
429 void extractAtomSymbols(
const ROMol &mol);
432 const DrawColour &col1,
const DrawColour &col2);
433 void drawBond(
const ROMol &mol,
const BOND_SPTR &bond,
int at1_idx,
434 int at2_idx,
const std::vector<int> *highlight_atoms = NULL,
435 const std::map<int, DrawColour> *highlight_atom_map = NULL,
436 const std::vector<int> *highlight_bonds = NULL,
437 const std::map<int, DrawColour> *highlight_bond_map = NULL);
439 bool draw_dashed,
const DrawColour &col1,
440 const DrawColour &col2);
441 void drawAtomLabel(
int atom_num,
442 const std::vector<int> *highlight_atoms = NULL,
443 const std::map<int, DrawColour> *highlight_map = NULL);
462 void adjustBondEndForLabel(
int atnum,
const Point2D &nbr_cds,
470 virtual void doContinuousHighlighting(
471 const ROMol &mol,
const std::vector<int> *highlight_atoms,
472 const std::vector<int> *highlight_bonds,
473 const std::map<int, DrawColour> *highlight_atom_map,
474 const std::map<int, DrawColour> *highlight_bond_map,
475 const std::map<int, double> *highlight_radii);
477 virtual void highlightCloseContacts();
484 #endif // RDKITMOLDRAW2D_H virtual void setColour(const DrawColour &col)
sets the current draw color
virtual int lineWidth() const
returns the current line width
virtual void setLineWidth(int width)
sets the current line width
boost::shared_ptr< Bond > BOND_SPTR
virtual double fontSize() const
returns the font size (in nolecule units)
std::pair< std::string, OrientType > getAtomSymbolAndOrientation(const Atom &atom, RDGeom::Point2D nbrSum)
virtual int height() const
return the height of the drawing area.
std::vector< unsigned int > DashPattern
virtual int panelWidth() const
return the width of the drawing panels.
virtual void setDash(const DashPattern &patt)
sets the current dash pattern
const std::vector< Point2D > & atomCoords() const
virtual void setFillPolys(bool val)
returns ehther or not polygons should be filled
virtual DrawColour colour() const
returns the current draw color
void assignBWPalette(ColourPalette &palette)
virtual bool fillPolys() const
set whether or not polygons are being filled
This is a class for storing and applying general chemical reactions.
pulls in the core RDKit functionality
void setOffset(int x, int y)
sets the drawing offset (in drawing coords)
ROMol is a molecule class that is intended to have a fixed topology.
MolDrawOptions & drawOptions()
returns our current drawing options
DrawColour backgroundColour
const MolDrawOptions & drawOptions() const
virtual int panelHeight() const
return the height of the drawing panels.
double additionalAtomLabelPadding
void assignDefaultPalette(ColourPalette &palette)
#define RDUNUSED_PARAM(x)
bool dummiesAreAttachments
double scale() const
returns the drawing scale (conversion from molecular coords -> drawing
virtual const DashPattern & dash() const
returns the current dash pattern
MolDraw2D is the base class for doing 2D renderings of molecules.
double multipleBondOffset
ColourPalette atomColourPalette
virtual int width() const
return the width of the drawing area.
#define PRECONDITION(expr, mess)
std::map< int, std::string > atomLabels
std::map< int, DrawColour > ColourPalette
std::vector< std::vector< int > > atomRegions
DrawColour highlightColour
std::vector< DrawColour > highlightColourPalette
int flagCloseContactsDist
Point2D offset()
returns the drawing offset (in drawing coords)
The class for representing atoms.
const std::vector< std::pair< std::string, OrientType > > & atomSyms() const
returns the atomic symbols of the current molecule
boost::tuple< float, float, float > DrawColour
void drawLine(std::vector< ElementType > &res, int atnum1, int atnum2, int lineWidth, int dashed, double x1, double y1, double x2, double y2)
bool atomLabelDeuteriumTritium
virtual void tagAtoms(const ROMol &mol)