flowable设置流程跟踪高亮线的颜色
背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良)
效果如下:
1、定义 MyDefaultProcessDiagramCanvas
public class MyDefaultProcessDiagramCanvas extends DefaultProcessDiagramCanvas { //设置高亮线的颜色 这里我设置成绿色 protected static Color HIGHLIGHT_SEQUENCEFLOW_COLOR = Color.GREEN; public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) { super(width, height, minX, minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader); } public MyDefaultProcessDiagramCanvas(int width, int height, int minX, int minY, String imageType) { super(width, height, minX, minY, imageType); } /** * 画线颜色设置 */ public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor) { Paint originalPaint = g.getPaint(); Stroke originalStroke = g.getStroke(); g.setPaint(CONNECTION_COLOR); if (connectionType.equals("association")) { g.setStroke(ASSOCIATION_STROKE); } else if (highLighted) { //设置线的颜色 g.setPaint(HIGHLIGHT_SEQUENCEFLOW_COLOR); g.setStroke(HIGHLIGHT_FLOW_STROKE); } for (int i = 1; i < xPoints.length; i++) { Integer sourceX = xPoints[i - 1]; Integer sourceY = yPoints[i - 1]; Integer targetX = xPoints[i]; Integer targetY = yPoints[i]; Line2D.Double line = new Line2D.Double(sourceX, sourceY, targetX, targetY); g.draw(line); } if (isDefault) { Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); drawDefaultSequenceFlowIndicator(line, scaleFactor); } if (conditional) { Line2D.Double line = new Line2D.Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]); drawConditionalSequenceFlowIndicator(line, scaleFactor); } if (associationDirection == AssociationDirection.ONE || associationDirection == AssociationDirection.BOTH) { Line2D.Double line = new Line2D.Double(xPoints[xPoints.length - 2], yPoints[xPoints.length - 2], xPoints[xPoints.length - 1], yPoints[xPoints.length - 1]); drawArrowHead(line, scaleFactor); } if (associationDirection == AssociationDirection.BOTH) { Line2D.Double line = new Line2D.Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]); drawArrowHead(line, scaleFactor); } g.setPaint(originalPaint); g.setStroke(originalStroke); } /** * 高亮节点设置 */ public void drawHighLight(int x, int y, int width, int height) { Paint originalPaint = g.getPaint(); Stroke originalStroke = g.getStroke(); //设置高亮节点的颜色 g.setPaint(HIGHLIGHT_COLOR); g.setStroke(THICK_TASK_BORDER_STROKE); RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20); g.draw(rect); g.setPaint(originalPaint); g.setStroke(originalStroke); }
2、定义一个 MyDefaultProcessDiagramGenerator
这里只是修改一下名称 把
DefaultProcessDiagramGenerator的代码搬进去即可 然后把
DefaultProcessDiagramCanvas 改成 MyDefaultProcessDiagramCanvas 即可
public class MyDefaultProcessDiagramGenerator implements ProcessDiagramGenerator {
}
3、生成图片
@Service
public class FlowProcessDiagramGenerator extends MyDefaultProcessDiagramGenerator {
private static final String IMAGE_TYPE = "png";
@Value("${flowable.activityFontName}")
private String activityFontName;
@Value("${flowable.labelFontName}")
private String labelFontName;
@Value("${flowable.annotationFontName}")
private String annotationFontName;
/**
* 生成图片流
*
* @param bpmnModel 模型
* @param highLightedActivities 活动节点
* @param highLightedFlows 高亮线
* @return
*/
public InputStream generateDiagram(BpmnModel bpmnModel, List<String> highLightedActivities, List<String> highLightedFlows) {
return generateDiagram(bpmnModel, IMAGE_TYPE, highLightedActivities,
highLightedFlows, activityFontName, labelFontName, annotationFontName,
null, 1.0, true);
}
}