This is very nice!
Here is a shim to draw to wxWidgets, header-file only.
If anyone needs an example how to use it please let me know.

Igor

On Tue, Jan 20, 2015 at 2:41 AM, Greg Landrum <greg.land...@gmail.com>
wrote:

> I merged the pull request this morning. The new C++ drawing code is now
> available on master.
>
> Best,
> -greg
>
>
> On Thu, Jan 15, 2015 at 5:20 AM, Greg Landrum <greg.land...@gmail.com>
> wrote:
>
>> Dear all,
>>
>> I just created a pull request for integration of some new C++ drawing
>> code into the RDKit:
>> https://github.com/rdkit/rdkit/pull/412
>>
>> This is a big one, so I will leave the PR active until the weekend for
>> people to look at and comment on before I merge onto the master.
>>
>> The new code supports rendering to SVG, Cairo (optional), and Qt
>> (optional). Adding support for a new backend is pretty straightforward.
>>
>> There's still work to be done to allow this to be a replacement for the
>> Python-based rendering code in rdkit.Chem.Draw, but it's a big step forward.
>>
>> The original design and code is from Dave Cosgrove. Many thanks to Dave
>> for the contribution, which is really going to help improve the quality of
>> the molecule drawings the RDKit produces.
>>
>> Best,
>> -greg
>>
>>
>
>
> ------------------------------------------------------------------------------
> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
> GigeNET is offering a free month of service with a new server in Ashburn.
> Choose from 2 high performing configs, both with 100TB of bandwidth.
> Higher redundancy.Lower latency.Increased capacity.Completely compliant.
> http://p.sf.net/sfu/gigenet
> _______________________________________________
> Rdkit-devel mailing list
> Rdkit-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/rdkit-devel
>
>
//
//   @@ All Rights Reserved @@
//  This file is part of the RDKit.
//  The contents are covered by the terms of the BSD license
//  which is included in the file license.txt, found at the root
//  of the RDKit source tree.
// 
// Author: Igor Filippov based on the work of David Cosgrove (AstraZeneca)
//
// This is a concrete class derived from MolDraw2D that uses RDKit to draw a
// molecule into a wxDC

#ifndef MOLDRAW2DWX_H
#define MOLDRAW2DWX_H

#include <GraphMol/MolDraw2D/MolDraw2D.h>
#include <wx/dc.h>
#include <wx/font.h>
#include <wx/pen.h>
#include <wx/colour.h>
#include <wx/brush.h>

// ****************************************************************************

namespace RDKit {
  
  class MolDraw2Dwx : public MolDraw2D {

  public :

  MolDraw2Dwx( int width , int height , wxDC &dc ) : MolDraw2D( width , height ), m_dc(dc) 
    {
      //m_Font = wxFont(10, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
      //m_dc.SetFont(m_Font, *wxBLACK);
    }

    // set font size in molecule coordinate units. That's probably Angstrom for
    // RDKit. It will turned into drawing units using scale_, which might be
    // changed as a result, to make sure things still appear in the window.

    void setFontSize( float new_size )
    {
      MolDraw2D::setFontSize( new_size );
      float font_size_in_points = fontSize() * scale();
      wxFont font = m_dc.GetFont(); 
      //font.SetPointSize(font_size_in_points);
      font.SetPixelSize(wxSize(0,font_size_in_points));
      m_dc.SetFont(font);
    }

    void setColour( const DrawColour &col )
    {
      MolDraw2D::setColour( col );
      float r = col.get<0>();
      float g = col.get<1>();
      float b = col.get<2>();
      wxColour colour(r * 255, g * 255, b * 255);
      m_dc.SetTextForeground(colour);
      m_dc.SetPen(wxPen(colour));
      m_dc.SetBrush(wxBrush(colour));      
    }


  private :

    wxDC &m_dc;

    void drawLine( const std::pair<float,float> &cds1,  const std::pair<float,float> &cds2 )
    {
      std::pair<float,float> c1 = getDrawCoords( cds1 );
      std::pair<float,float> c2 = getDrawCoords( cds2 ); 
      m_dc.DrawLine(c1.first,c1.second,c2.first,c2.second);
    }

    void drawChar( char c , const std::pair<float,float> &cds )
    {
      m_dc.DrawText(wxString(c),cds.first,cds.second);
    }

    void drawTriangle( const std::pair<float,float> &cds1, const std::pair<float,float> &cds2, const std::pair<float,float> &cds3 )
    {
      std::pair<float,float> c1 = getDrawCoords( cds1 );
      std::pair<float,float> c2 = getDrawCoords( cds2 );
      std::pair<float,float> c3 = getDrawCoords( cds3 );
      wxPoint lines[] = {wxPoint(c1.first,c1.second), wxPoint(c2.first,c2.second), wxPoint(c3.first,c3.second)};
      m_dc.DrawLines(3,lines);  
    }

    void clearDrawing()
    {
      wxColour backgroundColour = m_dc.GetTextBackground();
      if (!backgroundColour.Ok())
        backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);    
      const wxBrush &brush = m_dc.GetBrush();
      const wxPen &pen = m_dc.GetPen(); 
      m_dc.SetBrush(wxBrush(backgroundColour));
      m_dc.SetPen(wxPen(backgroundColour, 1));
      m_dc.DrawRectangle(0,0, width(), height());
      m_dc.SetBrush(brush);
      m_dc.SetPen(pen);
    }

    // using the current scale, work out the size of the label in molecule coordinates
    void getStringSize( const std::string &label, float &label_width,  float &label_height ) const
    {
      if (m_dc.CanGetTextExtent())
	{
	  wxCoord width, height;
	  m_dc.GetTextExtent(wxString(label), &width, &height);
	  label_width = float(width) / scale();
	  label_height = float(height) / scale();
	}
    }

  };

}
#endif // MOLDRAW2DWX_H
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
Rdkit-devel mailing list
Rdkit-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-devel

Reply via email to