4
<script type="text/javascript" src="jquery.js"></script>
6
<script lang='Javascript'>
12
// Multi-select move offset
16
// Drawing Globals -- For while in transit drawing
17
var drawlinesx,drawlinesy;
18
var drawlinedx,drawlinedy;
22
// List of identifiers
23
// List of selected object identifiers
26
var Objects = new Array();
27
var Selected = new Array();
28
var Identifiers = new Array();
34
// User Interface Mode Variables
36
var dragsensitivity=12;
44
User interface callbacks
49
function handler_mouseup()
52
// Either select on/off for multi or single select
54
if(Selected[downRes.objid]){
55
Selected[downRes.objid]=false;
57
Selected[downRes.objid]=true;
60
if(ContextObj==downRes.objid){
63
ContextObj=downRes.objid;
66
}else if(clickstate==8){
68
// Draw Attribute Line
70
upRes=mouseover(gridx,gridy);
72
if(upRes.code!="None"){
74
obj=Objects[downRes.objid];
76
if(upRes.typ=="ERAttribute"||upRes.typ=="Entity"||upRes.typ=="ERRel"){
78
obj.DrawtoID=upRes.objid;
79
obj.DrawfromSide = downRes.side;
81
if(upRes.side!="None"){
82
obj.DrawtoSide = upRes.side;
83
obj.DrawtoPerc = upRes.sideperc;
85
upobj=Objects[downRes.objid];
90
var x1g=Math.abs(upRes.x1-gridx);
91
var x2g=Math.abs(upRes.x2-gridx);
92
var y1g=Math.abs(upRes.y1-gridy);
93
var y2g=Math.abs(upRes.y2-gridy);
95
if(x1g<=x2g&&x1g<=y1g&&x1g<=y2g){
97
perco=makesideperc(gridy,upRes.y1,upRes.y2);
98
}else if(x2g<=x1g&&x2g<=y1g&&x2g<=y2g){
100
perco=makesideperc(gridy,upRes.y1,upRes.y2);
101
}else if(y1g<=x1g&&y1g<=x2g&&y1g<=y2g){
103
perco=makesideperc(gridx,upRes.x1,upRes.x2);
104
}else if(y2g<=x1g&&y2g<=x2g&&y2g<=y1g){
106
perco=makesideperc(gridx,upRes.x1,upRes.x2);
109
obj.DrawtoSide = sid;
110
obj.DrawtoPerc = perco;
113
if(upRes.typ=="ERAttribute"||upRes.typ=="ERRel") obj.DrawtoPerc=0.5;
118
}else if(clickstate==9){
120
// Draw Relationship line
122
upRes=mouseover(gridx,gridy);
124
if(upRes.code!="None"){
126
obj=Objects[downRes.objid];
128
if(upRes.side!="None"){
129
if(obj.DrawtoID=="None"){
130
obj.DrawtoID=upRes.objid;
131
obj.DrawtoSide = upRes.side;
132
obj.DrawtoPerc = upRes.sideperc;
133
obj.DrawfromSide = downRes.side;
135
obj.DrawtoIDDest=upRes.objid;
136
obj.DrawtoSideDest = upRes.side;
137
obj.DrawtoPercDest = upRes.sideperc;
138
obj.DrawfromSideDest = downRes.side;
141
upobj=Objects[downRes.objid];
146
var x1g=Math.abs(upRes.x1-gridx);
147
var x2g=Math.abs(upRes.x2-gridx);
148
var y1g=Math.abs(upRes.y1-gridy);
149
var y2g=Math.abs(upRes.y2-gridy);
151
if(x1g<=x2g&&x1g<=y1g&&x1g<=y2g){
153
perco=makesideperc(gridy,upRes.y1,upRes.y2);
154
}else if(x2g<=x1g&&x2g<=y1g&&x2g<=y2g){
156
perco=makesideperc(gridy,upRes.y1,upRes.y2);
157
}else if(y1g<=x1g&&y1g<=x2g&&y1g<=y2g){
159
perco=makesideperc(gridx,upRes.x1,upRes.x2);
160
}else if(y2g<=x1g&&y2g<=x2g&&y2g<=y1g){
162
perco=makesideperc(gridx,upRes.x1,upRes.x2);
165
if(obj.DrawtoID=="None"){
166
obj.DrawtoID=upRes.objid;
167
obj.DrawtoSide = sid;
168
obj.DrawtoPerc = perco;
169
obj.DrawfromSide = downRes.side;
171
obj.DrawtoIDDest=upRes.objid;
172
obj.DrawtoSideDest = sid;
173
obj.DrawtoPercDest = perco;
174
obj.DrawfromSideDest = downRes.side;
188
function handler_mousedown()
192
downRes=mouseover(gridx,gridy);
199
function handler_mousemove(cx,cy)
202
// gridx=Math.round((cx-(gridsize/2.0))/gridsize)*gridsize;
203
// gridy=Math.round((cy-(gridsize/2.0))/gridsize)*gridsize;
211
// We start drag mode
212
if((distance(gridx,gridy,startx,starty)>dragsensitivity)&&clickstate==1){
216
// We are in drag mode
219
// Single Object Move - If Not Selected, Or if Selected and Center Area Is Dragged
220
if((downRes.typ=="Entity"||downRes.typ=="ERAttribute"||downRes.typ=="ERRel")&&(downRes.code=="NonSel"||(downRes.code=="Cont"&&downRes.side=="None")||(downRes.code=="ContDraw"&&downRes.side=="None"))){
224
if((downRes.typ=="Entity"||downRes.typ=="ERAttribute")&&(downRes.code=="Cont"&&downRes.side=="1")) clickstate=4; // Single Object Scale Left
225
if((downRes.typ=="Entity"||downRes.typ=="ERAttribute")&&(downRes.code=="Cont"&&downRes.side=="2")) clickstate=5; // Single Object Scale Bottom
226
if((downRes.typ=="Entity"||downRes.typ=="ERAttribute")&&(downRes.code=="Cont"&&downRes.side=="3")) clickstate=6; // Single Object Scale Right
227
if((downRes.typ=="Entity"||downRes.typ=="ERAttribute")&&(downRes.code=="Cont"&&downRes.side=="4")) clickstate=7; // Single Object Scale Top
229
if(downRes.typ=="ERAttribute"&&downRes.code=="ContDraw"&&downRes.side!="None"){
231
clickstate=8; // Attribute Connection Draw
232
drawlinekind=1; // Tell drawing engine to draw attribute line symbol
234
if(downRes.side=="1"){
235
drawlinesx=downRes.x1; // Initiate start parameters for line drawing left side
236
drawlinesy=downRes.y1+((downRes.y2-downRes.y1)*0.5);
237
}else if(downRes.side=="2"){
238
drawlinesx=downRes.x1+((downRes.x2-downRes.x1)*0.5); // Initiate start parameters for line drawing bottom side
239
drawlinesy=downRes.y2;
240
}else if(downRes.side=="3"){
241
drawlinesx=downRes.x2; // Initiate start parameters for line drawing left side
242
drawlinesy=downRes.y1+((downRes.y2-downRes.y1)*0.5);
243
}else if(downRes.side=="4"){
244
drawlinesx=downRes.x1+((downRes.x2-downRes.x1)*0.5); // Initiate start parameters for line drawing bottom side
245
drawlinesy=downRes.y1;
248
drawlinedx=drawlinesx;
249
drawlinedy=drawlinesy;
253
if(downRes.typ=="ERRel"&&downRes.code=="ContDraw"&&downRes.side!="None"){
255
var obj=Objects[downRes.objid];
257
if(downRes.side!=obj.DrawfromSide&&downRes.side!=obj.DrawfromSideDest){
259
clickstate=9; // Attribute Connection Draw
260
drawlinekind=1; // Tell drawing engine to draw relation line symbol
262
if(downRes.side=="1"){
263
drawlinesx=downRes.x1; // Initiate start parameters for line drawing left side
264
drawlinesy=downRes.y1+((downRes.y2-downRes.y1)*0.5);
265
}else if(downRes.side=="2"){
266
drawlinesx=downRes.x1+((downRes.x2-downRes.x1)*0.5); // Initiate start parameters for line drawing bottom side
267
drawlinesy=downRes.y2;
268
}else if(downRes.side=="3"){
269
drawlinesx=downRes.x2; // Initiate start parameters for line drawing left side
270
drawlinesy=downRes.y1+((downRes.y2-downRes.y1)*0.5);
271
}else if(downRes.side=="4"){
272
drawlinesx=downRes.x1+((downRes.x2-downRes.x1)*0.5); // Initiate start parameters for line drawing bottom side
273
drawlinesy=downRes.y1;
276
drawlinedx=drawlinesx;
277
drawlinedy=drawlinesy;
287
var obj=Objects[downRes.objid];
290
if(clickstate==3){ // We are in single rectangular object move
291
obj.x1=downRes.x1-deltax;
292
obj.y1=downRes.y1-deltay;
293
obj.x2=downRes.x2-deltax;
294
obj.y2=downRes.y2-deltay;
295
}else if(clickstate==4){ // We are in single rectangular object scale left
296
if((obj.x2-downRes.x1+deltax)>60) obj.x1=downRes.x1-deltax;
297
}else if(clickstate==5){ // We are in single rectangular object scale bottom
298
if((downRes.y2-obj.y1-deltay)>40) obj.y2=downRes.y2-deltay;
299
}else if(clickstate==6){ // We are in single rectangular object scale right
300
if((downRes.x2-obj.x1-deltax)>60) obj.x2=downRes.x2-deltax;
301
}else if(clickstate==7){ // We are in single rectangular object scale top
302
if((obj.y2-downRes.y1+deltay)>40) obj.y1=downRes.y1-deltay;
303
}else if(clickstate==8||clickstate==9){ // We are in straight connective line drawing mode
311
// Call-forward for mouse-over event
313
function mouseover(x,y)
316
// Code of touch, and if available object id and id of side of object that was touched
317
// Tolerances included as constant
321
var obj_sidentifier="None";
323
var obj_centerdist=0;
325
var obj_x1=0; var obj_y1=0; var obj_x2=0; var obj_y2=0;
332
for(j=0;j<Identifiers.length;j++){
334
var objid=Identifiers[j];
335
var obj=Objects[objid];
336
var Sel=Selected[objid];
337
if(ContextObj==objid) Cont=1
340
// Compute coordinates including offset
341
if(obj.type=="Entity"||obj.type=="ERAttribute"||obj.type=="ERRel"){
355
// For each kind of clickable object, check if we are inside object and if so assign variables
356
// Any general properties for all object types are set when "found" is true
358
if(obj.type=="Entity"){
359
if(x>(x1-sidetol)&&y>(y1-sidetol)&&x<(x2+sidetol)&&y<(y2+sidetol)){
362
if(Sel) obj_code="Sel";
363
if(Cont) obj_code="Cont";
365
side=computeside(x,y,x1,y1,x2,y2,sidetol);
366
obj_sidentifier=side.side;
367
obj_sideperc=side.perc;
368
obj_centerdist=side.dist;
372
}else if(obj.type=="ERAttribute"){
373
if(x>(x1-sidetol)&&y>(y1-sidetol)&&x<(x2+sidetol)&&y<(y2+sidetol)){
375
if(Sel) obj_code="Sel";
378
if(obj.DrawtoID=="None"){
385
side=computeside(x,y,x1,y1,x2,y2,sidetol);
386
obj_sidentifier=side.side;
387
obj_sideperc=side.perc;
388
obj_centerdist=side.dist;
393
}else if(obj.type=="ERRel"){
394
if(x>(x1-sidetol)&&y>(y1-sidetol)&&x<(x2+sidetol)&&y<(y2+sidetol)){
398
// Colision detection against diamond
401
if(y>(y1+ry-xk-sidetol)&&y<(y1+ry+xk+sidetol)) inside=1;
403
if(y>(y1-rx+xk-sidetol)&&y<(y2+rx-xk+sidetol)) inside=1;
408
if((x>(x1-sidetol))&&(x<(x1+sidetol))&&(y>(y1+ry-sidetol))&&(y<(y1+ry+sidetol))) obj_sidentifier=1;
409
if((x>(x1+rx-sidetol))&&(x<(x1+rx+sidetol))&&(y>(y2-sidetol))&&(y<(y2+sidetol))) obj_sidentifier=2;
410
if((x>(x2-sidetol))&&(x<(x2+sidetol))&&(y>(y1+ry-sidetol))&&(y<(y1+ry+sidetol))) obj_sidentifier=3;
411
if((x>(x1+rx-sidetol))&&(x<(x1+rx+sidetol))&&(y>(y1-sidetol))&&(y<(y1+sidetol))) obj_sidentifier=4;
415
if(Sel) obj_code="Sel";
418
if(obj.DrawtoID=="None"){
420
}else if(obj.DrawtoIDDest=="None"){
438
// Save coordinates at time of click
447
printstr=obj_id+" "+obj_sidentifier+" "+obj_sideperc;
457
side:obj_sidentifier,
458
sideperc:obj_sideperc,
459
centerdist:obj_centerdist,
469
function importdata()
473
if(i==0) obj = jQuery.parseJSON('{"type":"ERAttribute","id":"ATT1","kind":"Multiple","name":"Addressfosoppooo","x1":220,"y1":100,"x2":300,"y2":140, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"None", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":""}');
474
if(i==1) obj = jQuery.parseJSON('{"type":"Entity","id":"ENT2","kind":"Weak","name":"Carsmashoepppoloo","x1":100,"y1":160,"x2":220,"y2":220}');
475
if(i==2) obj = jQuery.parseJSON('{"type":"ERAttribute","id":"ATT3","kind":"Key","name":"SSNFooomesPoo","x1":160,"y1":260,"x2":260,"y2":300, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"None", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":""}');
476
if(i==3) obj = jQuery.parseJSON('{"type":"Entity","id":"ENT4","kind":"Strong","name":"Trailerfpdddpeoooooe","x1":320,"y1":260,"x2":420,"y2":320}');
477
if(i==4) obj = jQuery.parseJSON('{"type":"Entity","id":"ENT5","kind":"Strong","name":"Grail","x1":120,"y1":440,"x2":220,"y2":480}');
478
if(i==5) obj = jQuery.parseJSON('{"type":"ERRel","id":"REL6","kind":"Strong","name":"FGFool","x1":460,"y1":160,"x2":520,"y2":220, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"0", "DrawtoCard":"N", "DrawtoRole":"Fumo", "DrawtoXoffs":"20", "DrawtoYoffs":"50", "DrawtoIDDest":"None", "DrawfromSideDest":"None","DrawtoSideDest":"None", "DrawtoPercDest":"0", "DrawtoDestCard":"N", "DrawtoDestRole":"Luma", "DrawtoDestXoffs":"0", "DrawtoDestYoffs":"-50", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":"","DrawX3":"", "DrawY3":"", "DrawX4":"","DrawY4":""}');
479
if(i==6) obj = jQuery.parseJSON('{"type":"ERRel","id":"REL7","kind":"Weak","name":"PODrool","x1":360,"y1":360,"x2":420,"y2":420, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"0", "DrawtoCard":"N", "DrawtoRole":"Kumo", "DrawtoXoffs":"60", "DrawtoYoffs":"70", "DrawtoIDDest":"None", "DrawfromSideDest":"None","DrawtoSideDest":"None", "DrawtoPercDest":"0", "DrawtoDestCard":"N", "DrawtoDestRole":"Zuuma", "DrawtoDestXoffs":"40", "DrawtoDestYoffs":"50", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":"","DrawX3":"", "DrawY3":"", "DrawX4":"","DrawY4":""}');
483
Identifiers.push(objid);
489
// Prepares all kinds of objects, with local movement-offset (scrolling offset is handled with transforms??)
490
// Ofss in prepare are not finished.
492
function prepareobj(obji)
494
var fromobj=Objects[obji];
496
// Attributes are prepared by re-pointing the DrawX1, DrawY1, DrawX2 and DrawY2 variables and Relationships are prepared by re-pointing DrawX1-DrawX4 and DrawY1-DrawY4
498
if((fromobj.type=="ERAttribute"||fromobj.type=="ERRel")&&fromobj.DrawtoID!="None"){
500
var toid=fromobj.DrawtoID;
501
var toobj=Objects[toid];
505
if(fromobj.DrawtoIDDest!="None"&&fromobj.DrawtoIDDest!=undefined){
506
var toiddest=fromobj.DrawtoIDDest;
507
var toobjdest=Objects[toiddest];
509
sidek=makeside(fromobj.DrawfromSideDest,fromobj.x1,fromobj.y1,fromobj.x2,fromobj.y2,0.5);
510
fromobj.DrawX3=sidek.x;
511
fromobj.DrawY3=sidek.y;
513
sidek=makeside(fromobj.DrawtoSideDest,toobjdest.x1,toobjdest.y1,toobjdest.x2,toobjdest.y2,fromobj.DrawtoPercDest);
514
fromobj.DrawX4=sidek.x;
515
fromobj.DrawY4=sidek.y;
519
//printstr=fromobj.DrawfromSide+" "+fromobj.x1+" "+fromobj.y1+" "+fromobj.x2+" "+fromobj.y2+" :: "+fromobj.DrawtoSide+" "+toobj.x1+" "+toobj.y1+" "+toobj.x2+" "+toobj.y2+" "+fromobj.DrawtoPerc;
521
sidek=makeside(fromobj.DrawfromSide,fromobj.x1,fromobj.y1,fromobj.x2,fromobj.y2,0.5);
522
fromobj.DrawX1=sidek.x;
523
fromobj.DrawY1=sidek.y;
526
sidek=makeside(fromobj.DrawtoSide,toobj.x1,toobj.y1,toobj.x2,toobj.y2,fromobj.DrawtoPerc);
527
fromobj.DrawX2=sidek.x;
528
fromobj.DrawY2=sidek.y;
535
// Draws all kinds of objects, with local movement-offset (scrolling offset is handled with transforms??)
537
function drawobj(obji)
540
var obj=Objects[obji];
542
var Sel=Selected[obji];
544
if(ContextObj==obji) Cont=1
547
context.strokeStyle = '#000';
548
context.lineWidth = 2.0;
550
// Compute coordinates including offset
551
if(obj.type=="Entity"||obj.type=="ERAttribute"||obj.type=="ERRel"){
562
if(obj.type=="Entity"){
565
drawrect(x1,y1,x2,y2,"#000");
567
if(obj.kind=="Weak"){
568
drawrect(x1+5,y1+5,x2-5,y2-5,"#000");
569
cliptext(x1+5,y1+5,x2-5,y2-5,obj.name,"20px Calibri","center",8,6,"#000",1,0);
572
cliptext(x1,y1,x2,y2,obj.name,"20px Calibri","center",8,6,"#000",1,0);
575
// Draw Select Marker
577
fourpoints(x1,y1+ry,x2,y1+ry,x1+rx,y1,x1+rx,y2,"#5f8");
580
}else if(obj.type=="ERAttribute"){
582
drawellipse(x1,y1,x2,y2);
585
cliptext(x1,y1,x2,y2,obj.name,"20px Calibri","center",8,6,"#000",2,1);
587
cliptext(x1,y1,x2,y2,obj.name,"20px Calibri","center",8,6,"#000",2,0);
590
if(obj.DrawtoID!="None"){
591
drawline(obj.DrawX1,obj.DrawY1,obj.DrawX2,obj.DrawY2,"#000",2.0);
594
// Draw Select Marker
595
if(Cont&&obj.DrawtoID=="None"){
596
fourpoints(x1,y1+ry,x2,y1+ry,x1+rx,y1,x1+rx,y2,"#fa2");
597
}else if(Sel||(Cont&&obj.DrawtoID!="None")){
598
fourpoints(x1,y1+ry,x2,y1+ry,x1+rx,y1,x1+rx,y2,"#5f8");
601
}else if(obj.type=="ERRel"){
603
if(obj.DrawtoID!="None"){
604
drawline(obj.DrawX1,obj.DrawY1,obj.DrawX2,obj.DrawY2,"#000",2.0);
605
drawcardinality(obj.DrawX2,obj.DrawY2,obj.DrawtoSide,obj.DrawtoCard,obj.DrawtoXoffsCard,obj.DrawtoYoffsCard,"20px Calibri",20,1,"#0a0");
606
drawcardinality(obj.DrawX2,obj.DrawY2,obj.DrawtoSide,obj.DrawtoRole,obj.DrawtoXoffsRole,obj.DrawtoYoffsRole,"20px Calibri",20,2,"#0a0");
608
// function drawcardinality(x,y,side,tex,xoffs,yoffs,font,baseline,sign,color)
611
// if(i==5) obj = jQuery.parseJSON('{"type":"ERRel","id":"REL6","kind":"Strong","name":"FGFool","x1":460,"y1":160,"x2":520,"y2":220, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"0", "DrawtoCard":"N", "DrawtoRole":"Fumo", "DrawtoXoffsCard":"20", "DrawtoYoffsCard":"50","DrawtoXoffsRole":"20", "DrawtoYoffsRole":"-50", "DrawtoIDDest":"None", "DrawfromSideDest":"None","DrawtoSideDest":"None", "DrawtoPercDest":"0", "DrawtoDestCard":"1", "DrawtoDestRole":"Luma", "DrawtoDestXoffsCard":"0", "DrawtoDestYoffsCard":"-50","DrawtoDestXoffsRole":"0", "DrawtoDestYoffsRole":"-50", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":"","DrawX3":"", "DrawY3":"", "DrawX4":"","DrawY4":""}');
612
// if(i==6) obj = jQuery.parseJSON('{"type":"ERRel","id":"REL7","kind":"Weak","name":"PODrool","x1":360,"y1":360,"x2":420,"y2":420, "DrawtoID":"None", "DrawfromSide":"None","DrawtoSide":"None", "DrawtoPerc":"0", "DrawtoCard":"1", "DrawtoRole":"Kumo", "DrawtoXoffsCard":"60", "DrawtoYoffsCard":"70", "DrawtoXoffsCard":"80", "DrawtoYoffsCard":"-70", "DrawtoIDDest":"None", "DrawfromSideDest":"None","DrawtoSideDest":"None", "DrawtoPercDest":"0", "DrawtoDestCard":"N", "DrawtoDestRole":"Zuuma", "DrawtoDestXoffsCard":"40", "DrawtoDestYoffsCard":"50", "DrawtoDestXoffsRole":"40", "DrawtoDestYoffsRole":"50", "DrawX1":"", "DrawY1":"", "DrawX2":"","DrawY2":"","DrawX3":"", "DrawY3":"", "DrawX4":"","DrawY4":""}');
615
if(obj.DrawtoIDDest!="None"){
616
drawline(obj.DrawX3,obj.DrawY3,obj.DrawX4,obj.DrawY4,"#000",2.0);
619
if(obj.kind=="Weak"){
620
drawdiamond(x1-4,y1-4,x2+4,y2+4);
621
drawdiamond(x1+4,y1+4,x2-4,y2-4);
622
cliptext(x1+8,y1+8,x2-8,y2-8,obj.name,"20px Calibri","center",8,6,"#000",3,0);
624
drawdiamond(x1,y1,x2,y2,0);
625
cliptext(x1,y1,x2,y2,obj.name,"20px Calibri","center",8,6,"#000",3,0);
628
// Draw Select Markers
629
if(Sel||(Cont&&obj.DrawtoID!="None"&&obj.DrawtoIDDest!="None")){
630
fourpoints(x1,y1+ry,x2,y1+ry,x1+rx,y1,x1+rx,y2,"#5f8");
632
if(obj.DrawfromSide!=1&&obj.DrawfromSideDest!=1) point(x1,y1+ry,"#fa2");
633
if(obj.DrawfromSide!=2&&obj.DrawfromSideDest!=2) point(x1+rx,y2,"#fa2");
634
if(obj.DrawfromSide!=3&&obj.DrawfromSideDest!=3) point(x2,y1+ry,"#fa2");
635
if(obj.DrawfromSide!=4&&obj.DrawfromSideDest!=4) point(x1+rx,y1,"#fa2");
645
context.clearRect(0,0,600,600);
647
// overline(gridx,gridy,150,550,550,300,8.0);
650
context.strokeStyle = '#ddd';
651
context.lineWidth = 0.5;
653
for(i=0;i<600;i+=20){
655
context.lineTo(i,600);
657
context.lineTo(600,i);
663
drawline(drawlinesx,drawlinesy,drawlinedx,drawlinedy,"#000",1.0);
666
// Prepare model objects
667
for(i=0;i<Identifiers.length;i++){
668
var objid=Identifiers[i];
672
// Draw model objects
673
for(i=0;i<Identifiers.length;i++){
674
var objid=Identifiers[i];
680
context.strokeStyle = '#444';
681
context.lineWidth = 1.0;
682
context.moveTo(gridx-gridsize,gridy);
683
context.lineTo(gridx+gridsize,gridy);
684
context.moveTo(gridx,gridy-gridsize);
685
context.lineTo(gridx,gridy+gridsize);
688
context.strokeStyle = '#ddd';
690
context.fillStyle='#000';
691
context.font = "bold 16px Arial";
692
context.textAlign = "left";
693
context.fillText("currop: "+printstr, 20, 576);
695
setTimeout("foo();",100);
4
<link rel="stylesheet" type="text/css" href="canvas.css">
5
<script type="text/javascript" src="../js/jquery.js"></script>
6
<script type="text/javascript" src="canvas.js"></script>
701
7
<script type="text/javascript" src="dugga.js"></script>
704
9
<body onload="setupcanvas();">
709
<canvas id='a' width='600' height='600' style='border:2px solid black;'>
713
<div style="border:2px solid black;background-color:#fed;width:300;height:450;">
714
<div id="infobox" style="padding:4px;">
716
Change values to update diagram.<br>
13
<canvas id='a' width='600' height='600'>
19
Change values to update diagram.<br>