listOfBounds.put(diagramBoundsXml.getId(), diagramBoundsXml);
protected DiagramNode transformBoundsForImage(DiagramNode diagramBoundsImage, DiagramNode diagramBoundsXml, DiagramNode elementBounds) { double scalingFactorX = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); double scalingFactorY = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); DiagramNode elementBoundsForImage = new DiagramNode(elementBounds.getId()); elementBoundsForImage.setX((double) Math.round((elementBounds.getX() - diagramBoundsXml.getX()) * scalingFactorX + diagramBoundsImage.getX())); elementBoundsForImage.setY((double) Math.round((elementBounds.getY() - diagramBoundsXml.getY()) * scalingFactorY + diagramBoundsImage.getY())); elementBoundsForImage.setWidth((double) Math.round(elementBounds.getWidth() * scalingFactorX)); elementBoundsForImage.setHeight((double) Math.round(elementBounds.getHeight() * scalingFactorY)); return elementBoundsForImage; }
/** * Provides positions and dimensions of elements in a BPMN process diagram as provided by {@link RepositoryService#getProcessDiagram(String)}. * * @param bpmnModel BPMN 2.0 XML document * @param imageStream BPMN 2.0 diagram in PNG format (JPEG and other formats supported by {@link ImageIO} may also work) * @return Layout of the process diagram; null when parameter imageStream is null */ public DiagramLayout getBpmnProcessDiagramLayout(Document bpmnModel, InputStream imageStream) { if (imageStream == null) { return null; } DiagramNode diagramBoundsXml = getDiagramBoundsFromBpmnDi(bpmnModel); DiagramNode diagramBoundsImage; if (isExportedFromAdonis50(bpmnModel)) { int offsetTop = 29; // Adonis header int offsetBottom = 61; // Adonis footer diagramBoundsImage = getDiagramBoundsFromImage(imageStream, offsetTop, offsetBottom); } else { diagramBoundsImage = getDiagramBoundsFromImage(imageStream); } Map<String, DiagramNode> listOfBounds = new HashMap<>(); listOfBounds.put(diagramBoundsXml.getId(), diagramBoundsXml); // listOfBounds.putAll(getElementBoundsFromBpmnDi(bpmnModel)); listOfBounds.putAll(fixFlowNodePositionsIfModelFromAdonis(bpmnModel, getElementBoundsFromBpmnDi(bpmnModel))); Map<String, DiagramElement> listOfBoundsForImage = transformBoundsForImage(diagramBoundsImage, diagramBoundsXml, listOfBounds); return new DiagramLayout(listOfBoundsForImage); }
/** * Provides positions and dimensions of elements in a BPMN process diagram as provided by {@link RepositoryService#getProcessDiagram(String)}. * * @param bpmnXmlStream * BPMN 2.0 XML document * @param imageStream * BPMN 2.0 diagram in PNG format (JPEG and other formats supported by {@link ImageIO} may also work) * @return Layout of the process diagram * @return null when parameter imageStream is null */ public DiagramLayout getBpmnProcessDiagramLayout(Document bpmnModel, InputStream imageStream) { if (imageStream == null) { return null; } DiagramNode diagramBoundsXml = getDiagramBoundsFromBpmnDi(bpmnModel); DiagramNode diagramBoundsImage; if (isExportedFromAdonis50(bpmnModel)) { int offsetTop = 29; // Adonis header int offsetBottom = 61; // Adonis footer diagramBoundsImage = getDiagramBoundsFromImage(imageStream, offsetTop, offsetBottom); } else { diagramBoundsImage = getDiagramBoundsFromImage(imageStream); } Map<String, DiagramNode> listOfBounds = new HashMap<String, DiagramNode>(); listOfBounds.put(diagramBoundsXml.getId(), diagramBoundsXml); // listOfBounds.putAll(getElementBoundsFromBpmnDi(bpmnModel)); listOfBounds.putAll(fixFlowNodePositionsIfModelFromAdonis(bpmnModel, getElementBoundsFromBpmnDi(bpmnModel))); Map<String, DiagramElement> listOfBoundsForImage = transformBoundsForImage(diagramBoundsImage, diagramBoundsXml, listOfBounds); return new DiagramLayout(listOfBoundsForImage); }
protected DiagramNode transformBoundsForImage(DiagramNode diagramBoundsImage, DiagramNode diagramBoundsXml, DiagramNode elementBounds) { double scalingFactorX = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); double scalingFactorY = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); DiagramNode elementBoundsForImage = new DiagramNode(elementBounds.getId()); elementBoundsForImage.setX((double) Math.round((elementBounds.getX() - diagramBoundsXml.getX()) * scalingFactorX + diagramBoundsImage.getX())); elementBoundsForImage.setY((double) Math.round((elementBounds.getY() - diagramBoundsXml.getY()) * scalingFactorY + diagramBoundsImage.getY())); elementBoundsForImage.setWidth((double) Math.round(elementBounds.getWidth() * scalingFactorX)); elementBoundsForImage.setHeight((double) Math.round(elementBounds.getHeight() * scalingFactorY)); return elementBoundsForImage; }
protected DiagramNode transformBoundsForImage(DiagramNode diagramBoundsImage, DiagramNode diagramBoundsXml, DiagramNode elementBounds) { double scalingFactorX = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); double scalingFactorY = diagramBoundsImage.getWidth() / diagramBoundsXml.getWidth(); DiagramNode elementBoundsForImage = new DiagramNode(elementBounds.getId()); elementBoundsForImage.setX((double) Math.round((elementBounds.getX() - diagramBoundsXml.getX()) * scalingFactorX + diagramBoundsImage.getX())); elementBoundsForImage.setY((double) Math.round((elementBounds.getY() - diagramBoundsXml.getY()) * scalingFactorY + diagramBoundsImage.getY())); elementBoundsForImage.setWidth((double) Math.round(elementBounds.getWidth() * scalingFactorX)); elementBoundsForImage.setHeight((double) Math.round(elementBounds.getHeight() * scalingFactorY)); return elementBoundsForImage; }