Commit Graph

88 Commits

Author SHA1 Message Date
David Cosgrove
383af8895c Fix trans double bonds in large rings. (#5493) 2022-09-06 15:54:56 +02:00
Paolo Tosco
22e99f5e6e MolDraw2D::drawMolecules() should not crash on null molecules (#5503)
* MolDraw2D::drawMolecules() should not crash on null molecules

* changes in response to review

Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
2022-09-06 14:42:47 +02:00
David Cosgrove
d209cbd196 Improved bond highlights (#5484)
* First draft.
Polyline round bond joins is smaller.
Continuous highlight bonds mitre.

* Remove historical and now misleading comment.

* Mitre the continuous bond highlights.

* Better bond highlighting with not continuous highlighting.

* Updated hash codes.  Extra test.

* Updated hash codes.

* Script to update hash codes automatically.

* Fix test.

* Fix test.

* Remove debugging file write.

* Removed redundant code.

* More auto.

* Removed newly redundant function.

* More explanation and an extra example/test.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-09-06 12:55:38 +02:00
David Cosgrove
d32cf91c2c Fix bug in bond joins (#5482)
* Fix bug in smoothBondJoins caused by not clearing singleBondLines_ in resetEverything.
Updated test results.

* Changes as result of review.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-08-03 13:16:49 +02:00
David Cosgrove
226ac9eab3 Draws a hydrogen atom light blue if not drawing labels. (#5454)
* Draws a hydrogen atom light blue if not drawing labels.

* Newline at end of file.

* Changes requested from review.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-08-03 04:47:55 +02:00
Greg Landrum
222e55485d Fixes #5156 (#5412)
* make 2D coord gen more robust w.r.t. sanitization

* Fixes #5156

prepareMolForDrawing() was being called for mols without coords even if the option was disabled
This resolves that

* update expected hashes
2022-07-27 08:21:28 +02:00
David Cosgrove
36a345a3cd Fix poor join between wedge and double bond. (#5452)
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-07-24 06:45:58 +02:00
David Cosgrove
f9b47d907f Add ACS1996 drawing style (#5425)
* Started on ACS 1996 drawing mode.
Significant change (not by itself, sadly) is that MolDrawOptions::lineWidth has changed from int to double to allow for ACS requirement of 0.6px bond widths.

* Wavy lines and dashed wedges.

* Better dashed wedges.

* Rounder wavy bonds, same as SVG.

* Added FreeSans font for ACS1996 mode.

* Add help functions to write enum classes to ostream.

* Dashed wedge separation now 2.5px between line edges rather than line middles.  Therefore wider gap between lines.

* Increase offset for wavy bond.  Get classes for atoms and bonds in wavy bond correct.

* For SMILES input, option to force wavy and crossed bonds for unspecified stereochem.

* Tidy debugging.

* Extra space round atom labels.

* Extra space between chars in freetype string.

* Reformats.

* Change double bond offset.

* Improve ring double bonds.

* Simple non-ring double bonds all working.

* Tidy.

* All double bonds seem good.

* Remove redundant function.
Move calcTripleBondLines into DrawMol for consistency with calcDoubleBondLines.
Use doubleBondOffset for wavy lines.

* Correct spacing between FT chars.

* Tidying.

* Use MolBlock wedging if there is any.  Needs to be made an option.

* If dashed wedge thick end has bonds of it, stop one dash short.

* Adjust solid wedge ends to line with attached bonds.

* Width of wedge ends now based on double bond separation.

* Change catch_tests.cpp

* Rounder waves in wavy lines.

* Dashed wedges same width even if one dash less..

* Embedded Roboto-Regular font in code.

* Fix docstrings.

* doubleBondTerminal swapped ends.
Deal with O2 - 2 terminal atoms of degree 1.

* Fix terminal double bonds.

* Slightly fatter truncated wedge bonds.

* Fix crash on complicated double bonds.

* Control more assert tests with DO_TEST_ASSERT.

* Fix 2 colour solid wedges.
Fix slanted wedge for morphine (test1_5).

* Change definittion of multipleBondOffset to fraction of mean bond length.

* Don't slant end of solid wedge to atom symbol.

* Fix wiggle separation.

* Fix 2-colour terminal double bonds.

* Fix colours on triple bonds.

* Don't attempt to draw non-existent points in triangle..

* Symmetric bond for P=O and like.

* Fix query bonds.

* Reformatting.

* Tidy up use of font.

* Add FreeSans font and license to $RDBASE/Data/Fonts.

* Draw unspecified stereo as unknown.

* Add check_file_hash.

* Tidying.

* Tidying.

* Start Python wrappers.

* Fix solid wedges for 3-connected atoms.

* Docstrings.

* Tidying.

* Alter width of bond highlights in ACS 1996 mode.

* Expose setACS1996Options and mean BondLength in Python.

* Expose drawMolACS1996Cairo in Python.
Docstrings.

* Extra padding between legend and picture in flexicanvas.

* Python tests.

* Tidy catch tests.

* Tidying.

* Fix catch tests.

* Fix no Freetype tests.

* Draw solid wedge more sensibly..

* Fix bond end at solid wedge.

* Tidy.

* Fix Python Cairo build issues.

* Fix wedge end shape for terminal double bonds.

* Hide the joins at the bond ends.

* Fix gcc pickiness.

* Extra test for no atom labels.

* Change where it looks for FreeSans.ttf for ACS1996 drawings.

* Same number of waves for wavy bonds in SVG and Cairo.

* Same number of waves for wavy bonds in SVG and Cairo.

* rename unspecifiedStereoIsUnknown to markUnspecifiedStereoAsUnknown and move to MolFileStereochem.h

* refactor use of iterators

* py docs update

* undo a bunch of bad formatting changes

* remove FreeSans

* get windows builds working

* Fix problem with Windows build.

* Changes in response to review.

* Align description of unspecifiedStereoIsUnknown in C++ to match Python.

* Still working on file open modes.

* Took out extraneous functions for drawing in ACS1996 mode, including the one that was breaking the windows build.

* Add RDKIT_MOLDRAW2D_EXPORT.

* Fix expected test results.

* Clarified warning.

* RDKIT_MOLDRAW2D_EXPORT missing.

* Windows!

* Update Code/GraphMol/MolDraw2D/rxn_test1.cpp

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: greg landrum <greg.landrum@gmail.com>
2022-07-21 18:11:33 +02:00
David Cosgrove
4352b38574 Add draw option to force use of wedge information in MolBlock if pres… (#5417)
* Add draw option to force use of wedge information in MolBlock if present.

* Add check_file_hash.

* Move reapplyMolBlockWedging to MolFileStereochem and test case.
Expose to Python as ReapplyMolBlockWedging.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-07-11 13:52:58 +02:00
Greg Landrum
6a56f02a84 Fixes #5383 (#5391)
* Fixes #5383

* response to review
this is a better fix
2022-07-05 12:55:33 +02:00
Greg Landrum
8676e3da64 Fixes #5386 and #5389 (#5387) 2022-07-01 06:36:26 +02:00
David Cosgrove
b7c9a8b3b7 Add class info for wavy bonds in SVGs. (#5358)
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-06-13 11:16:51 +02:00
David Cosgrove
6b8c35791f Fix bad layout of atom notes with highlights. (#5272)
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-05-13 06:08:28 +02:00
Paolo Tosco
8a4c208a19 fixes #5259 (#5260)
Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
2022-05-05 10:14:48 +02:00
David Cosgrove
44a91e190b Add test for string rectangle clashing with vector bwtween bonded atoms. (#5186)
* Add test for string rectangle clashing with vector bwtween bonded atoms.

* Restrict the test to double bonds.

* Fix test for no-Freetype build.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-04-12 13:55:15 +02:00
Paolo Tosco
67d8dd3dcd Add a couple of depiction helper functions and some JS bindings (#5115)
* - adds normalizeDepiction() and Python wrappers
- adds straightenDepiction() and Python wrappers
- adds an early check for R-labels to be in the accepted range to avoid throwing an exception later on
- adds a kekulize flag to process_details() to enable depicting molecules which fail to kekulize from JavaScript
- adds JavaScript functions to get fingerprints as Uint8Array
- adds JavaScript function to generate pickled molecule as Uint8Array
- adds JavaScript function to restore molecule from Uint8Array pickled
- adds has_coords() JavaScript function
- adds set_new_coords() to set JSMol coordinates in-place
- adds get_mol_copy() to obtain a JSMol copy

* fix build failures

* changes in response to review

Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
2022-03-22 14:18:30 +01:00
Greg Landrum
36b9669179 modify the way legends are handled with the flexicanvas mode (#5082)
* modify the way legends are handled with the flexicanvas mode

* support partially flexicanvases

* changes in response to review
also update expected hashes
2022-03-13 07:15:16 +01:00
David Cosgrove
cd6c915c9e Fix github 5061. (#5063)
* Fix github 5061.

* Update hash code.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-03-07 11:06:51 +01:00
David Cosgrove
f93016a77f Refactor mol draw2 d (#4948)
* MolDraw2D refactoring
- rename setupMoleculeDraw->initMoleculeDraw
- track whether or not initDrawing() has been called
- centralize calls to initDrawing() and clearDrawing() into initMoleculeDraw()
- update svg hashes in tests

* update some expected test results

* support changing font scale and default scale
add reaction test

* does not work... this is hard

* all tests pass

* do something about legends

* docs

* more tests

* more docs

* cleanup

* going around in circles...
hopefully converging

* cleanup

* Single bond skeleton works.

* Simple bond drawing seems to be working.

* Initial addition of atom symbols.

* Stash of not-quite-working atom symbols prior to major surgery.

* Atom symbols seem to be working.  Major surgery not required, just inverted Y coords at the outset.

* Add classes to atom labels.

* Renamed AtomLabel AtomSymbol.

* Add highlights.

* Fix bug from PR4839.

* Molecule note.

* Added atom notes.

* Added bond notes.

* Extract radicals.

* Annotation via new DrawAnnotation class.

* Add brackets.

* Add linknodes.

* Add close contacts.

* Add attachment points.  Fix wavy lines.

* Draw molecules in grid.

* Tidy.

* Fix radicals when font has hit maxFontSize.
Make getDrawCoords work.

* Draw primitives take atom or draw coords.

* Fix legends.

* More fixing for tests.  DrawMol::setScale now takes font scale as well.

* tidy debug writes

* Variable fraction of panel for legend.

* Better legend positioning.

* Fix sub- and super-script spacing.
Added spaces to Freetype strings.

* Basic reaction drawing.

* Reaction highlighting.

* Minor tweak to reacctions.

* Tweaked reaction DrawMol widths.

* Fix atomTags.

* Fix catch tests except contours.

* Contouring working in catch_tests.cpp.

* Fix catch tests.

* AtomSymbol and DrawAnnotation into MolDraw2D_detail.

* DrawMol and DrawShape into MolDraw2D_detail.

* DrawText inot MolDraw2D_detail.

* Machete out.

* DrawText goes private.

* Move some stuff about, such as StringRect to its own header.

* Python wrapper compiles (but crashes when Draw imported).

* More tidying.  Python DrawArrow failing.

* Linux changes.

* Fixed error in DrawShapeArrow spotted by valgrind.
Fixed some warnings from gcc.

* Maybe fixed DrawArrow.

* Added basic argparse interface.

* Added newlines.

* Changes in response to review.
Non-const args in move constructors and operator=.
Added missing classes to MolDraw2D_detail.
Deleted move operator= where it had been forgotten.
Fixed copyright dates.

* Deleted all default c'tors in derived classes.

* Changes in response to review:
Wedge widths now a proportion of mean bond length in draw coords..
Add padding below legend when positioning it.

* Fix tests.

* Fix the private/protected mess of the new classes.

* Moved doesLineIntersect etc.

* Reinstate original alignString for non-FT drawings.

* More faffing about with reaction layouts.

* Fix font sizes in testGitHub3391.

* Fix atom notes fitting inside fat wedges.

* Fix molecule annotation font size.

* More fixes of rectangle/triangle collision detection.

* Test for highlight linewidth multiplier.

* Use push_back not emplace_back.

* Attempt at better Freetype char spacing.

* Option to turn off TEST_ASSERT. Currently off.

* Fixed embarrassing maths to do with wedge fatness.

* More tidying post-review.

* Document highlight_linewidth_multipliers.

* Expose baseFontSize to Python.

* Changes in response to review.

* Allow DrawMolecules molecules to be drawn to different scales.

* Fix bond sneaking between C:8 in, for example, reactions.

* Fix bad re-factoring.

* Fix globbing.

* Changes in response to review.

* Add invariant check.

* Add draw option to fix font size.

* suggested changes

* Update catch test results.

* Fix expected freetype results.

* Fix non-freetype drawers.

* Fin non-freetype test results.

* get the Qt drawer working too

* Fix disappearing reaction highlights.

* Changes as result of review.

* Fixed non-FreeType hash codes for reaction SVGs.  Extra comment in catch_tests.

* reactant highlighting was clearning properties

* Fix for failing contour python test.

* fix a non-freetype problem

* swig wrappers working

* Bump timeouts in test.

Co-authored-by: greg landrum <greg.landrum@gmail.com>
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2022-02-18 16:30:21 +01:00
Greg Landrum
67f877b7ca fix bug with wedges being drawn backwards (#4868) 2022-01-10 09:05:28 +01:00
Greg Landrum
f007a93790 Fixes a few MolDraw2D problems (#4839)
* Fixes #4838
DrawString() with alignment argument does not work from Python

* Fixes #4837
MolDraw2D::DrawArc() not exposed to Python

* Fixes #4836
drawArc() starting at wrong angle

* add docs and tests for the alignment argument
2022-01-04 13:28:59 +01:00
Greg Landrum
727ca8ddd5 Fixes #4764 (#4807)
That was a silly one
2021-12-17 15:16:17 +01:00
Greg Landrum
71b518c67b Allow MolDraw2DCairo and MolDraw2DSVG to determine canvas size based on the molecule (#4772)
* MolDraw2D refactoring
- rename setupMoleculeDraw->initMoleculeDraw
- track whether or not initDrawing() has been called
- centralize calls to initDrawing() and clearDrawing() into initMoleculeDraw()
- update svg hashes in tests

* update some expected test results

* support changing font scale and default scale
add reaction test

* does not work... this is hard

* all tests pass

* do something about legends

* docs

* more tests

* more docs

* cleanup

* going around in circles...
hopefully converging

* cleanup

* response to review
along with a bit of cleanup
2021-12-14 05:22:34 +01:00
David Cosgrove
20a7e00ca0 Github4519 (#4726)
* Fixed calculation of position of SGroup data.

* Updated hash codes.

* Fixed poor placement of SGroupData when drawing in grid.

* Tidier way of setting font size ignoring min and max font sizes.

* More sensible calling of string clash checks.

* Update updated test values.

* Updated comments.

* Changes in response to review.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
2021-12-02 14:39:17 +01:00
Gareth Jones
42c8e011e1 Molfile SDD records not properly displayed (#4690)
* Fix and test for Molfile SDD record

* Fix typo
2021-11-16 13:46:27 +01:00
Greg Landrum
83047fadfe Add some new color palettes to MolDraw2D (#4668)
* some rendering style improvements:
dark mode
monochrome mode
avalon palette
CDK palette

* update legends

* fix python wrappers
2021-11-08 06:33:42 +01:00
Greg Landrum
9ba0e70d58 use V3K mol blocks in PNG metadata (#4588) 2021-10-08 04:15:35 +02:00
Greg Landrum
074fe80d9a Fixes #4538 (#4539) 2021-09-21 18:16:25 +02:00
Greg Landrum
d6a89b6e61 Fixes #4508 (#4512)
* Fixes #4508

* more testing

* don't be repetitive

* allow logging to work in the catch tests
2021-09-15 16:06:36 +02:00
Greg Landrum
4f96ac0210 Fixes #4323 (#4340)
* use alpha values in the MolDraw2D classes

* fully support alpha from python too

* debugging print

* ensure tests work on nodeps system

* update expectations
2021-07-15 15:10:08 +02:00
Greg Landrum
91d2093dd0 Fixes #4238 (#4255)
* prefer to not wedge bonds to double bonds

* addWavyBondsForStereoAny() works

* add option to clear bond stereo

* support wavy bonds in prepareMolForDrawing()

get rid of MolDraw2D/catch_main.cpp

* add a drawing example

* name the bug correctly

* add that new functionality to the python wrapper

* remove some debugging cruft
2021-06-22 10:51:09 +02:00
David Cosgrove
efa20a811c Test comparing SVGs via hash code - ready for review (#4199)
* Changed SVG output so all coordinates are to 1 decimal place.
Adjusted tests accordingly.

* Checking test1 SVGs via hashcode.

* Added testing of all generated test files by comparing hash-codes.
The few cases where this doesn't work are mentioned in the code.

* close streams

* Close files after writing - Windows won't delete them otherwise.

* Changes post-review.

* Proposed change post-review for further discussion.

* Use MolDraw2D_details::doubleFormat.

* Copied improved check_file_hash() from catch_tests.cpp.
Updated a few hash codes.

* Copied improved check_file_hash() from catch_tests.cpp.
Updated a few hash codes.
Added hash codes for no-Freetype version.

Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
2021-06-17 16:01:26 +02:00
Greg Landrum
872b7386ff MolDraw2D: support changing annotation colours (#3919)
* support changing annotation colours

* actuall expose that
2021-03-17 15:20:20 +01:00
Greg Landrum
fbc76aea18 MolDraw2D: collected tweaks and bug fixes (#3930)
* Fixes #2976
Stops re-generating reaction coordinates when that's not required

* add better test

* try to deal with bad font sizes from mol files

* one more expected result update

* try to be smarter about font changes

* suppress a compiler warning

* remove debug output

* update some expected test results
2021-03-17 04:47:44 +01:00
Greg Landrum
fa6de7b423 Fixes #3912 (#3914) 2021-03-11 17:15:08 +01:00
Greg Landrum
36c7c04344 basic h bond support (#3871) 2021-03-06 09:39:13 -05:00
SPKorhonen
e21e2c2af6 MolDraw2D, for svg inject metadata and class values from props (#3834)
* Inject class and metadata from props

* Merge fixes and code cleanup

* Added tests

* Moved definition of output functions to cpp

* Fix GCC build

* Code refactors
2021-03-03 15:02:18 +01:00
Paolo Tosco
5c2a3a8a93 Adds isotopeLabels and dummyIsotopeLabels MolDrawOptions (#3825)
* adds isotopeLabels and dummyIsotopeLabels MolDrawOptions

* changes in response to review

* more changes in respons to review

Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
2021-02-24 21:20:01 +01:00
SPKorhonen
14f4b34a6c Facilities for interactive modification of molecule drawing (#3833)
* Split bonds to per-atom parts for interaction

* It would help to commit test fixes also

* Update Code/GraphMol/MolDraw2D/MolDraw2D.h

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2DSVG.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2DSVG.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2DSVG.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Update Code/GraphMol/MolDraw2D/MolDraw2D.cpp

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>

* Refactored code

* Add space to prevent svg rendering problems

* Fix tests

Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
2021-02-24 16:40:24 +01:00
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