From 3c063d717c07192b2a1b2870354586ec6ee456f4 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 13 May 2019 19:15:58 +0200 Subject: [PATCH] center line is properly break between product operator and reactant operator --- .../sbml/reaction/SbmlReactionParser.java | 46 ++++++++----------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java index d50f1c68a5..f9a80ab38f 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java @@ -306,6 +306,10 @@ public class SbmlReactionParser extends SbmlBioEntityParser { operator = new AndOperator(); } PolylineData line = extractCurve(reactionGlyph, reactionWithLayout, operator.getClass()); + if (line.getPoints().size() == 0) { + line.addPoint(reactionWithLayout.getReactants().get(0).getLine().getEndPoint()); + line.addPoint(reactionWithLayout.getReactants().get(0).getLine().getEndPoint()); + } operator.addInputs(reactionWithLayout.getReactants()); operator.setLine(line); return operator; @@ -344,7 +348,7 @@ public class SbmlReactionParser extends SbmlBioEntityParser { return new PolylineData(); } - int requiredLines = 1; + int requiredLines = 0; if (reaction.getReactants().size() > 1) { requiredLines++; } @@ -353,20 +357,18 @@ public class SbmlReactionParser extends SbmlBioEntityParser { } int existingLines = curve.getCurveSegmentCount(); - int reactantBreak; - int productBreak; - if (requiredLines == 3) { - reactantBreak = (existingLines - 1) / 2; - } else if (requiredLines == 2 && reaction.getReactants().size() > 1) { - reactantBreak = existingLines - 1; - } else if (requiredLines == 2 && reaction.getProducts().size() > 1) { - reactantBreak = 0; + int breakPoint; + if (requiredLines == 2) { + breakPoint = existingLines / 2; + } else if (reaction.getReactants().size() > 1) { + breakPoint = existingLines; + } else if (reaction.getProducts().size() > 1) { + breakPoint = 0; } else { throw new InvalidArgumentException( new ElementUtils().getElementTag(reaction) + "Reaction has no products and reactants"); } - productBreak = reactantBreak + 1; - + PolylineData result = new PolylineData(); if (operator == TruncationOperator.class || operator == DissociationOperator.class || @@ -374,22 +376,18 @@ public class SbmlReactionParser extends SbmlBioEntityParser { // Product operator if (existingLines >= requiredLines) { - CurveSegment segment = curve.getCurveSegment(productBreak); + CurveSegment segment = curve.getCurveSegment(breakPoint); result.addPoint(new Point2D.Double(segment.getStart().getX(), segment.getStart().getY())); - for (int i = productBreak; i < curve.getCurveSegmentCount(); i++) { + for (int i = breakPoint; i < curve.getCurveSegmentCount(); i++) { segment = curve.getCurveSegment(i); result.addPoint(new Point2D.Double(segment.getEnd().getX(), segment.getEnd().getY())); } - } else if (existingLines == 1) { + } else { CurveSegment segment = curve.getCurveSegment(0); - double startX = segment.getStart().getX() + (segment.getEnd().getX() - segment.getStart().getX()) * (requiredLines-1) / requiredLines; - double startY = segment.getStart().getY() + (segment.getEnd().getY() - segment.getStart().getY()) * (requiredLines-1) / requiredLines; + double startX = segment.getStart().getX() + (segment.getEnd().getX() - segment.getStart().getX()) / 2; + double startY = segment.getStart().getY() + (segment.getEnd().getY() - segment.getStart().getY()) / 2; result.addPoint(new Point2D.Double(startX, startY)); result.addPoint(new Point2D.Double(segment.getEnd().getX(), segment.getEnd().getY())); - } else { - CurveSegment segment = curve.getCurveSegment(1); - result.addPoint(new Point2D.Double(segment.getStart().getX(), segment.getStart().getY())); - result.addPoint(new Point2D.Double(segment.getEnd().getX(), segment.getEnd().getY())); } } else if (operator == AssociationOperator.class || operator == AndOperator.class) { @@ -398,16 +396,10 @@ public class SbmlReactionParser extends SbmlBioEntityParser { if (existingLines >= requiredLines) { CurveSegment segment = curve.getCurveSegment(0); result.addPoint(new Point2D.Double(segment.getStart().getX(), segment.getStart().getY())); - for (int i = 0; i < reactantBreak; i++) { + for (int i = 0; i < breakPoint; i++) { segment = curve.getCurveSegment(i); result.addPoint(new Point2D.Double(segment.getEnd().getX(), segment.getEnd().getY())); } - } else if (existingLines == 1) { - CurveSegment segment = curve.getCurveSegment(0); - result.addPoint(new Point2D.Double(segment.getStart().getX(), segment.getStart().getY())); - double endX = segment.getStart().getX() + (segment.getEnd().getX() - segment.getStart().getX()) / requiredLines; - double endY = segment.getStart().getY() + (segment.getEnd().getY() - segment.getStart().getY()) / requiredLines; - result.addPoint(new Point2D.Double(endX, endY)); } else { CurveSegment segment = curve.getCurveSegment(0); result.addPoint(new Point2D.Double(segment.getStart().getX(), segment.getStart().getY())); -- GitLab