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 void setLineWidth(int width)
sets the current line width
boost::shared_ptr< Bond > BOND_SPTR
virtual int height() const
return the height of the drawing area.
std::pair< std::string, OrientType > getAtomSymbolAndOrientation(const Atom &atom, RDGeom::Point2D nbrSum)
virtual DrawColour colour() const
returns the current draw color
std::vector< unsigned int > DashPattern
virtual void setDash(const DashPattern &patt)
sets the current dash pattern
virtual void setFillPolys(bool val)
returns ehther or not polygons should be filled
virtual int panelHeight() const
return the height of the drawing panels.
void assignBWPalette(ColourPalette &palette)
virtual const DashPattern & dash() const
returns the current dash pattern
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
virtual bool fillPolys() const
set whether or not polygons are being filled
const MolDrawOptions & drawOptions() const
virtual int lineWidth() const
returns the current line width
double scale() const
returns the drawing scale (conversion from molecular coords -> drawing
double additionalAtomLabelPadding
void assignDefaultPalette(ColourPalette &palette)
virtual int width() const
return the width of the drawing area.
#define RDUNUSED_PARAM(x)
bool dummiesAreAttachments
virtual int panelWidth() const
return the width of the drawing panels.
MolDraw2D is the base class for doing 2D renderings of molecules.
double multipleBondOffset
ColourPalette atomColourPalette
#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
virtual double fontSize() const
returns the font size (in nolecule units)
const std::vector< std::pair< std::string, OrientType > > & atomSyms() const
returns the atomic symbols of the current molecule
const std::vector< Point2D > & atomCoords() const
int flagCloseContactsDist
Point2D offset()
returns the drawing offset (in drawing coords)
The class for representing atoms.
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)