14 #ifndef RDKIT_DRAWTEXT_H
15 #define RDKIT_DRAWTEXT_H
40 static constexpr
double FONT_SIZE = 0.6;
42 DrawText(
double max_fnt_sz,
double min_fnt_sz);
72 virtual void getStringSize(
const std::string &label,
double &label_width,
73 double &label_height)
const;
77 double &x_min,
double &y_min,
double &x_max,
78 double &y_max,
bool dontSplit =
false)
const;
80 std::vector<std::shared_ptr<StringRect>> &rects,
81 std::vector<TextDrawType> &draw_modes,
82 std::vector<char> &draw_chars,
83 bool dontSplit =
false)
const;
120 const Point2D &end2,
double padding)
const;
123 const Point2D &end2,
double padding)
const;
125 const std::vector<std::shared_ptr<StringRect>> &rects,
129 const Point2D &cds1,
const std::string &label2,
134 constexpr
static double SUBS_SCALE = 0.66;
135 constexpr
static double SUPER_SCALE = 0.66;
138 TextAlignType align,
const std::vector<TextDrawType> &draw_modes,
139 std::vector<std::shared_ptr<StringRect>> &rects)
const;
142 const std::vector<TextDrawType> &draw_modes,
143 std::vector<std::shared_ptr<StringRect>> &rects)
const;
151 double max_font_size_;
152 double min_font_size_;
153 double base_font_size_ = FONT_SIZE;
158 virtual void getStringRects(
const std::string &text,
159 std::vector<std::shared_ptr<StringRect>> &rects,
160 std::vector<TextDrawType> &draw_modes,
161 std::vector<char> &draw_chars)
const = 0;
162 void drawChars(
const Point2D &a_cds,
163 const std::vector<std::shared_ptr<StringRect>> &rects,
164 const std::vector<TextDrawType> &draw_modes,
165 const std::vector<char> &draw_chars);
#define RDUNUSED_PARAM(x)
double baseFontSize() const
virtual void setFontFile(const std::string &font_file)
void setMaxFontSize(double new_max)
bool doesLineIntersect(const std::vector< std::shared_ptr< StringRect >> &rects, const Point2D &cds, const Point2D &end1, const Point2D &end2, double padding) const
double minFontSize() const
bool doesLineIntersect(const std::string &label, OrientType orient, const Point2D &cds, const Point2D &end1, const Point2D &end2, double padding) const
double maxFontSize() const
void adjustStringRectsForSuperSubScript(const std::vector< TextDrawType > &draw_modes, std::vector< std::shared_ptr< StringRect >> &rects) const
virtual void drawChar(char c, const Point2D &cds)=0
void getStringExtremes(const std::string &label, OrientType orient, double &x_min, double &y_min, double &x_max, double &y_max, bool dontSplit=false) const
virtual std::string getFontFile() const
DrawText(double max_fnt_sz, double min_fnt_sz)
void drawString(const std::string &label, const Point2D &cds, OrientType orient)
void setBaseFontSize(double new_size)
void getStringRects(const std::string &text, OrientType orient, std::vector< std::shared_ptr< StringRect >> &rects, std::vector< TextDrawType > &draw_modes, std::vector< char > &draw_chars, bool dontSplit=false) const
bool doesRectIntersect(const std::string &label, OrientType orient, const Point2D &cds, const StringRect &rect) const
bool doesRectIntersect(const std::vector< std::shared_ptr< StringRect >> &rects, const Point2D &cds, const StringRect &rect) const
DrawColour const & colour() const
virtual void alignString(TextAlignType align, const std::vector< TextDrawType > &draw_modes, std::vector< std::shared_ptr< StringRect >> &rects) const
virtual void drawString(const std::string &str, const Point2D &cds, TextAlignType align)
drawString centres the string on cds.
double selectScaleFactor(char c, TextDrawType draw_type) const
void setMinFontSize(double new_max)
void setColour(const DrawColour &col)
bool doesStringIntersect(const std::vector< std::shared_ptr< StringRect >> &rects, const Point2D &cds1, const std::string &label2, OrientType orient2, const Point2D &cds2) const
void setFontScale(double new_scale)
virtual void getStringSize(const std::string &label, double &label_width, double &label_height) const
using the current scale, work out the size of the label
void setFontSize(double new_size)
void drawStringRects(const std::string &label, OrientType orient, const Point2D &cds, MolDraw2D &mol_draw) const
void adjustLineForString(const std::string &label, OrientType orient, const Point2D &end1, Point2D &end2) const
bool doesStringIntersect(const std::string &label1, OrientType orient1, const Point2D &cds1, const std::string &label2, OrientType orient2, const Point2D &cds2) const
MolDraw2D is the base class for doing 2D renderings of molecules.
#define RDKIT_MOLDRAW2D_EXPORT
RDKIT_MOLDRAW2D_EXPORT bool setStringDrawMode(const std::string &instring, TextDrawType &draw_mode, size_t &i)
std::vector< std::string > atomLabelToPieces(const std::string &label, OrientType orient)
std::ostream & operator<<(std::ostream &oss, const TextAlignType &tat)