Skip to content

Commit 21de172

Browse files
committed
Reuse the relatively expensive ring set if it was already calculated for the donuts.
1 parent 3005b1c commit 21de172

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

display/renderbasic/src/main/java/org/openscience/cdk/renderer/generators/standard/StandardBondGenerator.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ private StandardBondGenerator(IAtomContainer container,
146146
// index atoms and rings
147147
for (int i = 0; i < container.getAtomCount(); i++)
148148
atomIndexMap.put(container.getAtom(i), i);
149-
ringMap = ringPreferenceMap(container);
149+
ringMap = ringPreferenceMap(container, donutGenerator.smallest);
150150

151151
// set parameters
152152
this.scale = parameters.get(BasicSceneGenerator.Scale.class);
@@ -1588,12 +1588,16 @@ static int winding(IBond bond1, IBond bond2) {
15881588
* Creates a mapping of bonds to preferred rings (stored as IAtomContainers).
15891589
*
15901590
* @param container structure representation
1591+
* @param smallest smallest ring set to use (e.g. through each bond)
15911592
* @return bond to ring map
15921593
*/
1593-
static Map<IBond, IAtomContainer> ringPreferenceMap(IAtomContainer container) {
1594+
static Map<IBond, IAtomContainer> ringPreferenceMap(IAtomContainer container,
1595+
IRingSet smallest) {
1596+
1597+
if (smallest == null)
1598+
smallest = Cycles.edgeShort(container).toRingSet();
15941599

1595-
final IRingSet relevantRings = Cycles.edgeShort(container).toRingSet();
1596-
final List<IAtomContainer> rings = AtomContainerSetManipulator.getAllAtomContainers(relevantRings);
1600+
final List<IAtomContainer> rings = AtomContainerSetManipulator.getAllAtomContainers(smallest);
15971601

15981602
Collections.sort(rings, new RingBondOffsetComparator());
15991603

@@ -1611,6 +1615,16 @@ static Map<IBond, IAtomContainer> ringPreferenceMap(IAtomContainer container) {
16111615
return Collections.unmodifiableMap(ringMap);
16121616
}
16131617

1618+
/**
1619+
* Creates a mapping of bonds to preferred rings (stored as IAtomContainers).
1620+
*
1621+
* @param container structure representation
1622+
* @return bond to ring map
1623+
*/
1624+
static Map<IBond, IAtomContainer> ringPreferenceMap(IAtomContainer container) {
1625+
return ringPreferenceMap(container, Cycles.edgeShort(container).toRingSet());
1626+
}
1627+
16141628
/**
16151629
* Normalise the ring ordering in a ring such that the overall winding is anti clockwise.
16161630
* The normalisation exploits the fact that (most) rings will be drawn with more convex

0 commit comments

Comments
 (0)