Commit Graph

49 Commits

Author SHA1 Message Date
Greg Landrum
009e593b5c MolDraw2D: first pass at rendering atom lists (#3804)
* first pass at rendering atom lists

* a bit of additional cleanup
2021-02-17 15:25:53 +01:00
Paolo Tosco
b78ff8faa6 Fixes #3744 (#3748)
* fixes #3744

* added a unit test

* fix by stopping with the unnecessary copies

Co-authored-by: greg landrum <greg.landrum@gmail.com>
2021-01-20 11:05:07 +01:00
Greg Landrum
53782cc751 Support rendering LinkNodes (#3662)
* break out the LinkNode processing code

* initial version of linknode rendering

* add another test and fix a minor issue

* boost::format

* fix a bad merge
2020-12-21 15:29:17 +01:00
Greg Landrum
7d3ce119e6 Add molecule annotations/notes to MolDraw2D (#3651)
* first basic pass at molecule notes

FIX problem with updating bounding box based on non-centered annotations

* add chiral flags and simplified stereo annotations

* tests

* molecule annotations are the same font size as atom labels
2020-12-21 11:24:17 +01:00
greg landrum
7564a4af8b Merge branch 'feat/bond_query_drawing' of https://github.com/greglandrum/rdkit into greglandrum-feat/bond_query_drawing 2020-12-17 06:43:49 +01:00
greg landrum
21788d285b Merge branch 'feat/noatomlabels' of https://github.com/greglandrum/rdkit into greglandrum-feat/noatomlabels 2020-12-12 12:07:58 +01:00
greg landrum
aeb8a0d79a Merge branch 'feat/draw_variableattachments' of https://github.com/greglandrum/rdkit into greglandrum-feat/draw_variableattachments 2020-12-12 12:02:21 +01:00
greg landrum
3382458312 Merge branch 'feat/draw_sgroup_data' of https://github.com/greglandrum/rdkit into greglandrum-feat/draw_sgroup_data 2020-12-12 11:52:35 +01:00
greg landrum
15ccf87862 add configuration option to disable atom symbols in the rendering 2020-12-10 18:27:05 +01:00
greg landrum
8527f0bf55 a bit more cleanup 2020-12-09 13:25:35 +01:00
greg landrum
52cb6c7a85 additional cleanup 2020-12-09 10:27:51 +01:00
greg landrum
805a0bce4b initial pass at variable attachment point bonds 2020-12-09 09:28:21 +01:00
greg landrum
ab93b8ddf6 reorg 2020-12-08 15:50:43 +01:00
greg landrum
c30b96e25c bit of code cleanup and testing with highlights 2020-12-08 15:39:45 +01:00
greg landrum
7bc13df800 more progress 2020-12-08 15:39:45 +01:00
greg landrum
169860a4b1 backup 2020-12-08 15:39:45 +01:00
greg landrum
517db5ad76 backup 2020-12-08 15:39:45 +01:00
greg landrum
55bc8d7ec1 backup 2020-12-08 15:39:45 +01:00
Greg Landrum
bed5b95ae4 Fixes #3543 (#3615)
* does not work

* Fixes #3543

* remove debug printing
2020-12-08 08:45:46 -05:00
greg landrum
a60721623f add an example 2020-12-08 08:37:21 +01:00
greg landrum
f1475307ff mostly works 2020-12-08 08:18:35 +01:00
Greg Landrum
938563c5ac Get MolDraw2DQt working again (#3592)
* Qt drawing works with freetype.
needs polish and testing
non-freetype drawing doesn't work still

* make the Qt rendering anti-aliased

* non-freetype fonts work in Qt
With the giant caveat that you need a QGuiApplication to use fonts. We try to detect that

* cleanup

* changes in response to review

* add qt support to CI builds

* fix VS build problem

* try resolving a linux link error

* Update linux_build.yml

* Update linux_build.yml

* another attempt to get the linux CI builds working

* getting closer?

* Update linux_build.yml

* disable the qt CI builds on windows
2020-12-03 17:28:01 +01:00
Greg Landrum
9ab84f0884 Add rendering of SGroup brackets to MolDraw2D (#3586)
* backup

* further progress

* backup

* refactor handling of atom/bond annotations

move to a single annotation list to make it easier to add new annotation
types

* backup, doesn't actually work

* not unhappy with how the bracket rendering now works
still need to do bracket annotations

* backup

* commit first pass at brackets annotations

* add a bit more flexibility to how we handle annotations
Stll needs to be elaborated a bit, but the tests currently pass

* cleanup

* support comic mode with brackets

moves the handdrawnLine code to MolDraw2D_detail, which is a better place for it

* updates in response to review
2020-11-28 08:03:20 +01:00
Greg Landrum
85d4d714d1 add a "comic mode" to MolDraw2D (#3584)
* works

* auto download of comic-neue font

* support it in the python layer

* getting ready for a PR

* tone down the wobbly line effect a bit

* add end-point shifts
tone the wiggles down a bit
2020-11-25 09:00:39 +01:00
Greg Landrum
427c0fa2c0 Fixes #3577 (#3578) 2020-11-24 04:55:05 +01:00
Greg Landrum
d594998dda legend_height_ should be preserved after drawing the molecule (#3520) 2020-10-27 06:35:05 +01:00
Greg Landrum
d1be88c39a A few small tweaks to the drawing code (#3464)
* change min font size to 6

* tweak dash counts in wedged bonds

* tweak dative arrows

* allow radicals to be turned off in MolDraw2D
2020-10-04 10:28:50 -04:00
Greg Landrum
db68b217b9 Fixes #3392 (#3395)
a bit of code modernization too
2020-09-07 08:01:02 +02:00
Greg Landrum
8bcb625d1c Fix #3369 (#3370)
* show stereogroup labels when they are present

* Fixes #3369
2020-09-04 12:34:53 -04:00
Greg Landrum
1a3ce773cf Molecule metadata in PNGs (#3316)
* reader stub. Navigates the file successfullly

* works

* works

* read out all metadata, not just ours

* first pass at reading out molecules

* support mol blocks too

* add python wrapper for parser

* add direct writer

* get rid of multiple definitions in PNParser.h

* update from code review

* robustification

* handle reading compressed metadata

* support compressing metadata too

* reorder arguments to make this more consistent

* add writers to python wrappers

* forgotten file

* add pickle support

* explicit zlib dependency

* get windows builds working
at least with conda boost+zlib

* switch to using boost::iostreams to do the compression/decompression

* switch to using a vector of string pairs to store the metadata

need this so that we can contain "duplicate" keys

* add metadata output to MolDraw2DCairo
still need python test

* add a python test

* initial work at reading/writing reactions from PNGs

refactor the ReactionParser.h header a bit

* cleanup debug messages

* reaction PNG support -> python

* ReactionPickler no longer includes all ProductTemplate props

* handle metadata at the MolDraw2D level
Currently only supported by MolDraw2DCairo, it's worth extending this to SVG too

* support reading multiple molecules from a png

* support multiple molecules from files and in python

* stop duplicating tags with multiple molecules

* update to get windll builds working
this change should be propagated to more cmakelists.txt files

* make sure the metadata ends up in the notebook

* make sure PNGs in the notebook also have metadata

efficiency improvements for some notebook bits (i.e stop going PNG->Image->PNG)

* no need to pretend that we might be using PIL anymore

* documentation

* update docs to show new functionality

* not sure why the doctests failed on linux

* still trying to diagnose those failures

* protect doctests in case python interpreters are being re-used

* switch tags

* the wrapped functions to read png data from files weren't working

* <sigh>... windows dlls
2020-08-25 07:51:18 +02:00
Greg Landrum
a4d1e7e884 Fixes #3258 (#3259)
* Fixes #3258

* test #3258

* one additional little test
2020-06-27 19:45:26 +02:00
David Cosgrove
bc9e4d6478 Support using FreeType for text rendering (#3237)
* First working version with DrawText classes, original functionality only.  No font scaling.

* Added font scaling.

* Added atom colours.

* First stab at freetype text drawing.  A stash prior to major surgery.

* Freetype seems to be working.  On to whack-a-mole.

* Added class flag to atom labels and annotations.

* Another intermim commit whilst re-factoring all string drawing code from MolDraw2D.

* Fixed scaling and implemented max font size.

* Fixed bugs in non-FT Cairo and SVG drawing.

* More re-factoring of drawStrings - now creates StringRwct for each char in all strings.

* More re-factoring of string drawing - all mentions removed from MolDraw2D, I think..

* Working native Cairo, simple tests.

* Working native Cairo, simple tests.

* Padding roumd rectangles.

* Working FT Cairo, FT SVG, native SVG, simple tests.

* Two line labels mostly sorted. Native SVG wrong.

* Two line SVG labels sorted.

* Two line SVG labels sorted.

* Tidied out debug writes.

* Tweaked merge.

* Annotations working, radicals now failing.

* Fixed radicals crash.

* All tests passed for freetype drawings.  Grid drawings not right.

* Fixed bug in grid drawings.

* Better font size.

* Fixed legends in grids.

* Fixed rect intersection bug.

* Tidied up font sizes.

* moldraw2DTest1 all passing.

* All catch tests pass.

* Few rixes, and reactions look ok.

* Added minimum font size.

* Fixed radical drawing when max/min font size hit.

* Interim cmmmit, most test1.cpp working.

* Fixed uninitialised min_font_size_ in DrawText.  Took out use of MolDraw2D::setFontSize() which probably needs to go back in at some point.

* More test1.cpp passing.

* test1.cpp all pass, freetype and non-freetype

* Fixed superscripts hitting min font size in test860.  Made superscripts and subscripts same size.

* testc.pp all pass.

* Fixed bug in freetype text. All testt1.cpp pass.

* All tests passed.d

* Added option for different font.

* Added option for explicit terminal methyls.

* Added option to explicitly not use Freetype in drawers.  Used same in catch_tests.cpp.

* Got sense of NO_FREETYPE wrong in catch_tests.cpp.  D'oh!

* Fixed Python draw tests.

* Added new options to JSON interpreter.

* Fixed scale of text in contoured plots.

* Added optional molecule to grid drawer to help set scale.

* Fixed Python wrappers  for drawing 2D grids .

* Added Greg's CMakeLists.txt

* Moved fonts out of code tree.
Improved handling of font files not found, including logging to rdWarningLog.

* Interim commit.

* Tidied up some namespace std issues.

* Reverted to previous version.
Took out 'using namespace std;'

* update expected java results

* Added multi-line legends.  Also carves out a reserved bit for the legend, and sets the font size so the legend will fit.

* enable annotations on windows with freetype

* Removed stray font file.

* Removed stray font file.

* Re-instanted fontSize() and setFontSize(), though with change of units.

* Added RDK_BUILD_FREETYPE_SUPPORT to cmake.

* re-expose the fontsize controls to python.
document API change w.r.t. font size

* Update ReleaseNotes.md

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: greg landrum <greg.landrum@gmail.com>
2020-06-23 17:31:50 +02:00
Greg Landrum
8507bded0d Fixes #3226 (#3227) 2020-06-13 04:54:16 +02:00
David Cosgrove
5f7affafb6 Fix drawing of N plus (#3165)
* Fixed poor position of + charge in S NH2+ group.  Also made it say Cu2+ rather than Cu+2.

* Fixed bug where H of [NH+](C)(C)C sometimes went on top of bond.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2020-05-25 09:07:03 +02:00
Greg Landrum
24dc66fb02 Fixes #3126 (#3133)
* Fixes #3126

* make the default value zero
2020-05-07 22:21:03 -04:00
Eisuke Kawashima
be9349b3bb Correct TEST_CASE tags for Catch2 (#3069)
https://github.com/catchorg/Catch2/blob/v2.1.2/docs/test-cases-and-sections.md#tags
2020-04-08 15:43:38 +02:00
David Cosgrove
f8ca23fd2b Fixed dative bonds so they are 2-colour if the atom colourrs warrant it. (#3066)
Pull point of arrow back because the arrowhead goes beyond the end of the plain line.
Changed/simplified way ends of bonds are adjusted for atoms labels.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2020-04-08 15:29:56 +02:00
Greg Landrum
1fcf7d65d2 Tweaks and refinements to new drawing code. (#3034)
* Several things here

1) move "atomNote" and "bondNote" to common_properties
2) move addStereoAnnotation to the MolDraw2DUtils namespace
3) add addAtomIndices and addBondIndices
4) initialize MolDrawOptions members directly instead of via the ctor
5) add tests for all that
6) the usual reformatting

* Move the annotations functions to MolDraw2DDetails,
no need for them to be in the public API

Remove MolDraw2DDetails.h from the installed headers.

* turn off redundant prepareMolsForDrawing in _moltoimg
2020-03-26 10:40:06 +01:00
Greg Landrum
082b7e940f we weren't unsetting the dash pattern after drawing aromatic bonds. (#3032)
This also has a bunch of reformatting mixed in
2020-03-24 11:45:46 -04:00
David Cosgrove
ea54f66558 Commit of 2D draw annotation. (#3010)
* Commit of 2D draw annotation.

* update expected psql results

* First pass at improved radical drawing.

* Fix?

* Fixed different string draw behaviour.

* Removed vestiges of previous radical handling.

* Fixed bug with annnotation placement and added fallback postion.

* Removed unused var.

* update expected reaction svg

* Added option for always having circular highlights.

* Updated JSON to drawOptionns.

* Fixed bug in scale calculation.  Centres drawn molecule with option not to.

* Tidied up scale calculation.

* Changed atomHighlightCircles to atomHighlightsAreCircles.
Used shared_ptr for StringRect as VS barfed on unique_ptr.

* Fixed bug with reaction cruft not following now-centred molecules.

* temporary stash

* Stepped back centring of molecule by drawMolecule and fixes to drawReaction prompted by it.

* allow annotations to be disabled at the class level.
disable them for MolDraw2DCairo on win32 (where they just don't work)

* some test cleanup

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: greg landrum <greg.landrum@gmail.com>
2020-03-20 13:54:45 +01:00
David Cosgrove
774892a9ab 2ddrawenhancements2931 (#2979)
* First pass of fixing layout of OH/NH type drawing.

* Fixed scale for N/S NH type groups.

* Fixed bond end points with new display of heteroatoms.

* Fixed case where it drew aromatic dashed bonds in wrong ring for morphine.

* Minor edit.

* Fixed non-drawing of chiral bonds.

* Removed use of boost for_each.

* Modern atom traversal.

* Put in fixed scale for drawings.
Made drawMolecule() take note of prepareMolsBeforeDrawing.
Updated more iterators to modern idiom.

* Added fixed bond length for drawing.

* Fixed drawing of CH4, NH3 etc.

* Stash of working but ugly, prior to re-work.

* Better, simpler splitting of atom symbols.

* Took clang-tidy's advice about use of override.

* Tidied up drawing of text strings.

* Tweaked what is classed as vertical bond in drawing.

* fixedBondLength now down-scales if it would overflow the draw window.

* Some tidying.

* Tests for new parameters in JSON.
Fixed some existing tests where, for example, scale on picture is now different.

* Added option to rotate 2D draw coords before drawing.

* First pass at highlighting atoms in multiple colours.  Circles only at the moment.

* Line width scales if big enough.

* Tweaked SVG text drawing.

* Added highlighting with more than 1 colour on an atom.  C++ only.

* Fixed some issues with widths of highlights in a frustrating game of whackamole.
Updated some tests accordingly.

* Added Python wrapper for new drawing code.

* Removed debugging writes.

* Added C++ test for multi-coloured highlights.

* Added python test for multi-coloured highlights.

* Attempt to show radicals.

* Tidied up radicals in drawing, including a bullet instead of full stop in SVG.

* Fixed catch_tests.cpp for MolDraw2D.

* Fixed crash in Python wrappers on OSX.

* Fixed test5_2.svg bug (trailing </tspan>).
Made wavy line width scale as other lines do.

* Improved placing of charges.

* We're already in the future.

* Fixed a number of bugs that made drawMolecules not set the scales properly.

* Fixed Cairo wavy line width.

* Fixed non-closure of collision boxes.

* Added maximum font size for text, with tests.

* Addressed all Greg's first PR change requests.

* Fixed crash in extractAtomsymbols.

* stop using coordgen and adjust tests to reflect that
there's a bit of reformatting in here too

* Fixed layout of reactions.

* Fiddled with moldraw2DTest1 tests again.

* Fiddled with catch test.

* Fixed istope postion in W atom labels.

* Minor tweak to cairo,

* update expected results

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
2020-03-10 17:33:59 +01:00
Greg Landrum
d41752d558 run clang-tidy with readability-braces-around-statements (#2899)
* run clang-tidy with readability-braces-around-statements
clang-format the results
clean up all the parts that clang-tidy-8 broke

* fix problem on windows
2020-01-25 14:19:32 +01:00
Greg Landrum
272aa26205 Add a drawOptions object to IPythonConsole (#2691)
* add a C++ test to confirm that copying the drawOptions object works

* add SetDrawOptions() to python API

* add a drawOptions object to IPythonConsole
This allows global drawing settings to be more easily changed
2019-10-10 10:18:33 -04:00
Greg Landrum
946458c08f add bond-selector info to SVGs (#2664)
* add bond-selector information to the SVG too

* changes in response to review
2019-10-02 15:30:37 -04:00
Greg Landrum
576506206a draw zero-order bonds (#2630) 2019-08-28 18:11:12 -04:00
Greg Landrum
a0314c244a Allows dative bonds to be drawn (#2573)
* backup: move arrow drawing out

* add a drawArrow() method
draw dative bonds using an arrow

* backup, need to rebase

* add test/demo
get two of the calls properly working

* update expected test results

* update documentation
2019-08-05 15:47:38 -04:00
Greg Landrum
881d4e2b42 Enable SimilarityMaps in C++ (#2562)
* basic conrec integration

* basic conrec integration

* add molecule contouring

* update

* add an alpha channel to the color

* allow filling the grid

* cleanup

* remove some debugging output

* first pass at getting similarity maps to actually work

* updates

* add another test
explicitly set linewidth to 1

* some SVG cleanup

* add option for extra padding

* update expected test results

* efficiency

* at least something of a test

* forgot an import

* fix SWIG wrappers

* cleanups in response to review

* allow calling the functions without providing levels

* allow contouring numpy grids
2019-07-28 08:59:06 -04:00
Greg Landrum
7869e086cd Improve interactivity of output SVG (#2253)
* Add clickable atoms when tagAtoms() is called

* add python tests

* add class tags for atoms and bonds

* add marker to allow easy insertion of extra text
2019-02-15 15:41:10 -05:00
Greg Landrum
395c312345 Fixes #2220 (#2221)
* untested

* test works now

* add python wrapper
2019-01-14 12:58:50 -05:00