var hier="off"; var zoom=1.0; var frame_w=$(window).get(0).innerWidth*0.99; var frame_h=$(window).get(0).innerHeight*0.95; var x0=frame_w/2; var y0=frame_h/2; var gb_color='#000000'; function load_cell_js (name,x,y,strans) { cell_js = []; $.getJSON("cell?name=" + name + "&x=" + x + "&y=" + y + "&strans=" + strans + "" , function(data) { $.each(data,function(i,e) { cell_js.push(e); }); }); } function assoc_cell_js (name) { cell_js = []; $.each(lib_js,function(i,e) { var n = e[0]; var s = e[1]; if (name == n) { cell_js = s; } }); } function load_lib_js() { lib_js=[]; $.getJSON("cellnames", function(cellnames) { $.each(cellnames,function(i,cellname) { load_cell_js(cellname,0,0,"none"); lib_js.push([cellname,cell_js]); }); }); } function load_srefs() { srefs_js=[]; var cell_js0=cell_js; $.each(cell_js,function(i,e) { var rt=e[0]; if(rt == "rt_sref") { var xy=[0,0]; var strans="none"; var angle=0.0; var s=""; var inst=""; $.each(e,function(i1,e1) { var vp=$.isArray(e1); if(vp) { rt1=e1[0]; if(rt1=="rt_xy") { xy=e1[1]; } if(rt1=="rt_strans") { if(e1[1] == 32768) { strans = "y_mirror"; } if(e1[1] == 16384) { strans = "x_mirror"; } if(e1[1] == 49152) { strans = "xy_mirror"; } } if(rt1=="rt_angle") { angle=e1[1]; } if(rt1=="rt_sname") { s=e1[1]; } if(rt1=="rt_propvalue") { inst=e1[1]; } } }); load_cell_js(s,xy[0],xy[1],strans); srefs_js.push([s,xy[0],xy[1],strans,cell_js]); } }); cell_js=cell_js0; } function load_init() { if(title != 'list') { $.getJSON("display",function(data){display=data;}); $.getJSON("lys",function(data){display_lys=data;}); load_cell_js(title,0,0,"none"); load_srefs(); //srefs_js = []; } } //load_init(); function px(x) { return zoom*x+x0; } function py(y) { return -zoom*y+y0; } function px1(x) { return (x-x0)/zoom; } function py1(y) { return -(y-y0)/zoom; } function init_canvas() { $('#workarea').append("
"); var c=document.createElement("canvas"); frame_w=$(window).get(0).innerWidth - (20 + 120); frame_h=$(window).get(0).innerHeight - 50; c.setAttribute("width",frame_w); c.setAttribute("height",frame_h); c.setAttribute("style","border:1px solid black;background:" + gb_color); c.setAttribute("id","frame1"); $("#dsp").append(c); x0=c.width/2 - c.offsetLeft; y0=c.height/2 - c.offsetTop; } function clear_canvas(frame) { var c=document.getElementById(frame); var ctx=c.getContext("2d"); ctx.clearRect(0,0,c.width,c.height); } function draw_boundary(frame,x0,y0,width,style,xys) { var canvas=document.getElementById(frame); var ctx=canvas.getContext('2d'); ctx.lineWidth=width; ctx.strokeStyle=style; ctx.beginPath(); var x=xys[0]; var y=xys[1]; ctx.moveTo(px(x),py(y)); for(var i=2;i
"); $('#menu_tr').append("REHASH"); $('#menu_tr').append("SAVE"); $.getJSON("cellnames", function(cellnames) { $.each(cellnames,function(i,cellname) { $("#workarea").append("
" + cellname + "
"); }); }); } function cell_menu(name) { $('#menu').append("
"); $("#menu_table tr").append("/" + libname + "/" + name + "/|"); $("#menu_table tr").append("TEXT|"); $("#menu_table tr").append("zoom:0.0|"); $("#menu_table tr").append("mouse:(0.0,0.0)|"); $("#menu_table tr").append("hier:" + hier + "|"); //$("#menu_table tr").append(" layers:"); $.getJSON("lys",function(lys) { //$("#lws").append("

layers
"); $.each(lys,function(i,e) { //$("#lsw").append(""); $("#lws").append("
" + e[1] + "" + e[0] + "
"); }); $("#lws").height(frame_h); }); } function draw_cell_1(frame,x1,y1,cjs,ly) { $.each(cjs,function(i,e) { var rt=e[0]; if(rt=="rt_path") { var layer=0; var width=0; var xys=[0,0,0,0]; var typ=0; $.each(e,function(i1,e1) { var vp=$.isArray(e1); if(vp) { rt1=e1[0]; if(rt1=="rt_layer") { layer=e1[1]; } if(rt1=="rt_width") { width=zoom*e1[1]; } if(rt1=="rt_xy") { xys=e1[1]; } if(rt1=="rt_pathtype") { typ=e1[1]; } } }); if(layer == ly) { var display_def=display[layer]; var fill=display_def[0]; var stroke=display_def[1]; draw_lines(frame,x1,y1,width,fill,xys); if(typ == 1) { draw_circle(frame,x1,y1,width,fill,xys[0],xys[1]); var xys_k = xys.length; draw_circle(frame,x1,y1,width,fill,xys[xys_k - 2],xys[xys_k - 1]); } if(typ == 2) { draw_cube(frame,x1,y1,width,fill,xys[0],xys[1]); var xys_k = xys.length; draw_cube(frame,x1,y1,width,fill,xys[xys_k - 2],xys[xys_k - 1]); } draw_lines(frame,x1,y1,0.1,stroke,xys); } } if(rt=="rt_boundary") { var layer=0; var xys=[0,0,0,0]; $.each(e,function(i1,e1) { var vp=$.isArray(e1); if(vp) { rt1=e1[0]; if(rt1=="rt_layer") { layer=e1[1]; } if(rt1=="rt_xy") { xys=e1[1]; } } }); if(layer == ly) { var display_def=display[layer]; var fill=display_def[0]; var stroke=display_def[1]; fill_boundary(frame,x1,y1,fill,xys); draw_boundary(frame,x1,y1,1,stroke,xys); } } if(rt=="rt_text") { var layer=0; var xy=[0,0]; var mag=0.1; var angle=0.0; var s=""; $.each(e,function(i1,e1) { var vp=$.isArray(e1); if(vp) { rt1=e1[0]; if(rt1=="rt_layer") { layer=e1[1]; } if(rt1=="rt_xy") { xy=e1[1]; } if(rt1=="rt_mag") { mag=e1[1]; if ((mag < 0.1)|(mag > 100)) { mag = 0.1; } } if(rt1=="rt_angle") { angle=e1[1]; } if(rt1=="rt_string") { s=e1[1]; } } }); if(layer == ly) { var display_def=display[layer]; var fill=display_def[0]; var stroke=display_def[1]; draw_text(frame,x1,y1,stroke,mag,angle,xy,s); } } }); } function draw_cell_2(frame,x1,y1,cjs,ly) { $.each(cjs,function(i,e) { var rt=e[0]; if(rt=="rt_sref") { var xy=[0,0]; var strans="none"; var angle=0.0; var s=""; var inst=""; $.each(e,function(i1,e1) { var vp=$.isArray(e1); if(vp) { rt1=e1[0]; if(rt1=="rt_xy") { xy=e1[1]; } if(rt1=="rt_strans") { if(e1[1] == 32768) { strans = "y_mirror"; } if(e1[1] == 16384) { strans = "x_mirror"; } if(e1[1] == 49152) { strans = "xy_mirror"; } } if(rt1=="rt_angle") { angle=e1[1]; } if(rt1=="rt_sname") { s=e1[1]; } if(rt1=="rt_propvalue") { inst=e1[1]; } } }); if(hier == "off") { draw_sref(frame,x1,y1,angle,xy,s,strans,inst); } else { if (srefs_js.length == 0) { load_srefs(); } $.each(srefs_js,function(i2,sref_js) { var cjs1 = sref_js[4]; if((sref_js[0] == s)&(sref_js[1] == xy[0])&(sref_js[2] == xy[1])&(sref_js[3] == strans)) { draw_cell_1(frame1,x1,y1,cjs1,ly); } }); } } }); draw_cell_1(frame,x1,y1,cjs,ly); } function draw_cell(frame,x1,y1,cjs) { var $lws = $('#lws').children('.lwsd'); $lws.each(function() { var $lwss = $(this).children('.lwsds'); var $lwsi = $(this).children('.lwsdi'); var $lwsk = 0; $lwss.each(function() { $(this).text(function(txti,txt) { $lwsk = parseInt(txt,10); }); }); $lwsi.each(function() { if ($(this).is(':checked')) { draw_cell_2(frame,x1,y1,cjs,$lwsk); } }); }); } function flush(frame) { clear_canvas(frame); draw_coordinate(frame); draw_cell(frame,0,0,cell_js); } function mouse_bind(frame,name) { document.addEventListener('mousemove',function(evt){ var p=mouse_p(frame,evt); $("#mouse_xy").html("mouse:(" + p.x + "," + p.y + ")"); $("#zoom").html("zoom:" + zoom); },true); } function key_bind(frame,name) { var canvas=document.getElementById(frame); document.addEventListener('keydown',function(evt){ if(evt.keyCode == 37) { x0=x0+100; flush(frame,name); } if(evt.keyCode == 38) { y0=y0+100; flush(frame,name); } if(evt.keyCode == 39) { x0=x0-100; flush(frame,name); } if(evt.keyCode == 40) { y0=y0-100; flush(frame,name); } if(evt.key == "z") { zoom=zoom*2; x0=2*(x0-frame_w/2)+frame_w/2; y0=2*(y0-frame_h/2)+frame_h/2; $("#zoom").html("zoom:" + zoom); flush(frame,name); } if(evt.key == "Z") { if(zoom > 0.001) { zoom=zoom*0.5; x0=0.5*(x0-frame_w/2)+frame_w/2; y0=0.5*(y0-frame_h/2)+frame_h/2; } $("#zoom").html("zoom:" + zoom); flush(frame,name); } if(evt.key == "H") { hier = "on"; $("#hier").html("hier:" + hier); flush(frame,name); } if(evt.key == "h") { hier = "off"; clear_canvas(frame); load_cell_js(title,0,0,"none"); load_srefs(); $("#hier").html("hier:" + hier); flush(frame,name); } if(evt.key == "t") { frame_w=$(window).get(0).innerWidth - (20 + 120); frame_h=$(window).get(0).innerHeight - 50; canvas.width=frame_w; canvas.height=frame_h; clear_canvas(frame); load_cell_js(title,0,0,"none"); load_srefs(); flush(frame,name); } if(evt.key == "f") { frame_w=$(window).get(0).innerWidth - (20 + 120); frame_h=$(window).get(0).innerHeight - 50; canvas.width=frame_w; canvas.height=frame_h; var mimwh = Math.min(frame_w,frame_h); $.getJSON("cellborder0?name=" + title + "&x=0&y=0&strans=none", function(border) { var maxwh = Math.max(Math.abs(border[0] - border[2]),Math.abs(border[1] - border[3])); zoom = mimwh/maxwh; x0 = frame_w/2; y0 = frame_h/2; x0 = px(-0.5*maxwh); y0 = py(-0.5*maxwh); }); clear_canvas(frame); load_cell_js(title,0,0,"none"); load_srefs(); flush(frame,name); } },true); }