Draw SVG Graphics using Java

来源:互联网 发布:编程视频网站 编辑:程序博客网 时间:2024/06/05 04:55

package tianye.test.rest;import java.util.Random;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;@Path ("/draw")public class DrawGraph {int[] numbers;public DrawGraph(){numbers = new int[20];Random r = new Random();for(int i=0;i<numbers.length;i++){numbers[i] = r.nextInt(30);}}private int getMax(int[] intarr){int m = intarr[0];int c = 0;for(int i=1;i<intarr.length;i++){c = intarr[i];if(c > m)m = c;}return m;}@GET@Produces(MediaType.TEXT_HTML)public String getSVGDraw(){String htmlstr;int width = 600; int height = 300;int startx = 60;int starty = 30;// if width height ==0 then => errorint maxdatavalue = this.getMax(this.numbers);int datapoints = numbers.length;String coordi = "<path d='M"+String.valueOf(startx)+" "+String.valueOf(starty)+" L"+String.valueOf(startx)+" "+ String.valueOf(height + starty)+" L"+ String.valueOf(width + startx)+" "+  String.valueOf(height + starty) +"' fill='none' stroke='black' stroke-width='2'/>" +"<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(starty -10)+"'>y=max:"+String.valueOf(maxdatavalue)+"</text>" +"<text x='"+String.valueOf(startx + width + 10)+"' y='"+String.valueOf(starty + height + 10)+"'>x=max:"+String.valueOf(datapoints-1)+"</text>" +"<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(height + starty + 10)+"'>0</text>";float rw = (float)width / (float)datapoints;float rh = (float)height / (float)maxdatavalue;String points = "";// System.out.println(height+","+maxdatavalue+","+rh);for(int i=0;i<datapoints;i++){points += " " + String.valueOf((int)(startx + i*rw)) + "," + String.valueOf((starty+height-(float)numbers[i]*(float)rh));//System.out.println( " " + String.valueOf(startx + (int)(i*rw)) + "," + String.valueOf((float)starty+(((float)numbers[i])*rh)));}int nhl = (int)(height/25); // num of horizontal lineint nvl = (int)(width/100); // num of vertical lineif(nhl >= maxdatavalue)nhl = (int)maxdatavalue;if(nvl >= datapoints)nvl = datapoints;boolean isdrawdotlinehor = false;boolean isdrawdotlinevor = false;if(nhl >= 1)isdrawdotlinehor = true;if(nvl >= 1)isdrawdotlinevor = true;String dotLinehor = "";String dotLinevor = "";if(isdrawdotlinehor){for(int i=1; i<nhl;i++){dotLinehor += "<text x='"+String.valueOf(startx - 10)+"' y='"+String.valueOf(starty + height/nhl*i)+"' text-anchor='end'>"+String.valueOf(maxdatavalue - (int)((float)maxdatavalue/(float)nhl*(float)i))+"</text>"+"<line x1='"+String.valueOf(startx)+"' y1='"+String.valueOf(starty + height/nhl*i)+"' x2='"+ String.valueOf(width + startx)+"' y2='"+String.valueOf(starty + height/nhl*i)+"' stroke='gray' stroke-dasharray='2'/>";}}//System.out.println(nvl);if(isdrawdotlinevor){for(int i=1; i<nvl;i++){dotLinehor += "<text x='"+String.valueOf(startx + width/nvl*i)+"' y='"+String.valueOf(starty + height + 20)+"' text-anchor='middle'>"+String.valueOf((int)((float)datapoints/(float)nvl*(float)i))+"</text>"+"<line x1='"+String.valueOf(startx + width/nvl*i)+"' y1='"+String.valueOf(starty)+"' x2='"+String.valueOf(startx + width/nvl*i)+"' y2='"+String.valueOf(starty + height)+"' stroke='gray' stroke-dasharray='2'/>";}}String drawline = "<polyline points='"+points+"' fill='none' stroke='red' />";String svgstr = "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"  width='"+String.valueOf(startx + width + 100)+"px' height='"+String.valueOf(starty + height + 100)+"px'>" + coordi +dotLinehor +dotLinevor +drawline +"</svg>" ; htmlstr = " <html>" + "<body>" +svgstr +"</body>" + "</html>";return htmlstr;}}



原创粉丝点击