add first cut of zooming to fit found objects: transistors and nodes. Renamed "Highlight:" button to "Find:"
This commit is contained in:
parent
15453f4435
commit
e052255c55
|
@ -86,7 +86,7 @@ $().ready(function(){
|
||||||
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
||||||
</form>
|
</form>
|
||||||
<form action="javascript:hiliteNodeList();">
|
<form action="javascript:hiliteNodeList();">
|
||||||
<input type="button" value="Highlight:" onclick="hiliteNodeList();" />
|
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
||||||
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
||||||
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
||||||
<span class="animatebox">
|
<span class="animatebox">
|
||||||
|
|
|
@ -299,6 +299,7 @@ function recenter(){
|
||||||
var highlightThese;
|
var highlightThese;
|
||||||
|
|
||||||
// flash some set of nodes according to user input
|
// flash some set of nodes according to user input
|
||||||
|
// also zoom to fit those nodes (not presently optional)
|
||||||
function hiliteNodeList(){
|
function hiliteNodeList(){
|
||||||
var tmplist = document.getElementById('HighlightThese').value.split(/[\s,]+/);
|
var tmplist = document.getElementById('HighlightThese').value.split(/[\s,]+/);
|
||||||
if(tmplist.length==0){
|
if(tmplist.length==0){
|
||||||
|
@ -307,14 +308,26 @@ function hiliteNodeList(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
highlightThese = [];
|
highlightThese = [];
|
||||||
|
var seglist=[];
|
||||||
for(var i=0;i<tmplist.length;i++){
|
for(var i=0;i<tmplist.length;i++){
|
||||||
// get a node number from a signal name or a node number
|
// get a node number from a signal name or a node number
|
||||||
var name = tmplist[i];
|
var name = tmplist[i];
|
||||||
var value = parseInt(tmplist[i]);
|
var value = parseInt(tmplist[i]);
|
||||||
if((value!=NaN) && (typeof nodes[name] != "undefined")) {
|
if((value!=NaN) && (typeof nodes[value] != "undefined")) {
|
||||||
highlightThese.push(value);
|
highlightThese.push(value);
|
||||||
|
for(var s in nodes[value].segs)
|
||||||
|
seglist.push(nodes[value].segs[s]);
|
||||||
} else if(typeof nodenames[name] != "undefined") {
|
} else if(typeof nodenames[name] != "undefined") {
|
||||||
highlightThese.push(nodenames[name]);
|
highlightThese.push(nodenames[name]);
|
||||||
|
for(var s in nodes[nodenames[name]].segs)
|
||||||
|
seglist.push(nodes[nodenames[name]].segs[s]);
|
||||||
|
} else if(typeof transistors[name] != "undefined") {
|
||||||
|
// normally we push numbers: a non-number is a transistor name
|
||||||
|
highlightThese.push(name);
|
||||||
|
seglist.push([
|
||||||
|
transistors[name].bb[0],transistors[name].bb[2],
|
||||||
|
transistors[name].bb[1],transistors[name].bb[3]
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
// invalid input: how to tell the user?
|
// invalid input: how to tell the user?
|
||||||
}
|
}
|
||||||
|
@ -322,6 +335,17 @@ function hiliteNodeList(){
|
||||||
// all input rejected: how to tell the user?
|
// all input rejected: how to tell the user?
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var xmin=seglist[0][0], xmax=seglist[0][0];
|
||||||
|
var ymin=seglist[0][1], ymax=seglist[0][1];
|
||||||
|
for(var s in seglist){
|
||||||
|
for(var i=0;i<seglist[s].length;i+=2){
|
||||||
|
if(seglist[s][i]<xmin) xmin=seglist[s][i];
|
||||||
|
if(seglist[s][i]>xmax) xmax=seglist[s][i];
|
||||||
|
if(seglist[s][i+1]<ymin) ymin=seglist[s][i+1];
|
||||||
|
if(seglist[s][i+1]>ymax) ymax=seglist[s][i+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
zoomToBox(xmin,xmax,ymin,ymax);
|
||||||
clearHighlight(); // nullify the simulation overlay (orange/purple)
|
clearHighlight(); // nullify the simulation overlay (orange/purple)
|
||||||
hiliteNode(-1); // unhighlight all nodes
|
hiliteNode(-1); // unhighlight all nodes
|
||||||
setTimeout("hiliteNode(highlightThese);", 400);
|
setTimeout("hiliteNode(highlightThese);", 400);
|
||||||
|
|
29
wires.js
29
wires.js
|
@ -150,26 +150,33 @@ function overlayNode(w){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// originally to highlight using a list of node numbers
|
||||||
|
// but can now include transistor names
|
||||||
function hiliteNode(n){
|
function hiliteNode(n){
|
||||||
var ctx = hilite.getContext('2d');
|
var ctx = hilite.getContext('2d');
|
||||||
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
||||||
ctx.fillStyle = 'rgba(255,255,255,0.7)';
|
|
||||||
if(n==-1) return;
|
if(n==-1) return;
|
||||||
if(isNodeHigh(n[0]))
|
|
||||||
ctx.fillStyle = 'rgba(255,0,0,0.7)';
|
|
||||||
|
|
||||||
for(var i in n){
|
for(var i in n){
|
||||||
|
if(typeof n[i] != "number") {
|
||||||
|
hiliteTrans([n[i]]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(isNodeHigh(n[i])) {
|
||||||
|
ctx.fillStyle = 'rgba(255,0,0,0.7)';
|
||||||
|
} else {
|
||||||
|
ctx.fillStyle = 'rgba(255,255,255,0.7)';
|
||||||
|
}
|
||||||
var segs = nodes[n[i]].segs;
|
var segs = nodes[n[i]].segs;
|
||||||
for(var s in segs){drawSeg(ctx, segs[s]); ctx.fill();}
|
for(var s in segs){drawSeg(ctx, segs[s]); ctx.fill();}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// highlight a single transistor (additively - does not clear highlighting)
|
||||||
function hiliteTrans(n){
|
function hiliteTrans(n){
|
||||||
var ctx = hilite.getContext('2d');
|
var ctx = hilite.getContext('2d');
|
||||||
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
ctx.strokeStyle = 'rgba(255,255,255,0.7)';
|
||||||
ctx.strokeStyle = 'rgba(255,255,255,1.0)';
|
|
||||||
ctx.lineWidth = 4
|
ctx.lineWidth = 4
|
||||||
if(n==-1) return;
|
|
||||||
for(var t in n){
|
for(var t in n){
|
||||||
var bb = transistors[n[t]].bb
|
var bb = transistors[n[t]].bb
|
||||||
var segs = [[bb[0], bb[2], bb[1], bb[2], bb[1], bb[3], bb[0], bb[3]]]
|
var segs = [[bb[0], bb[2], bb[1], bb[2], bb[1], bb[3], bb[0], bb[3]]]
|
||||||
|
@ -177,6 +184,16 @@ function hiliteTrans(n){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// takes a bounding box in chip coords and centres the display over it
|
||||||
|
function zoomToBox(xmin,xmax,ymin,ymax){
|
||||||
|
var xmid=(xmin+xmax)/2;
|
||||||
|
var ymid=(ymin+ymax)/2;
|
||||||
|
var x=xmid/grChipSize*600;
|
||||||
|
var y=600-ymid/grChipSize*600;
|
||||||
|
var zoom=5; // pending a more careful calculation
|
||||||
|
moveHere([x,y,zoom]);
|
||||||
|
}
|
||||||
|
|
||||||
function drawSeg(ctx, seg){
|
function drawSeg(ctx, seg){
|
||||||
var dx = 400;
|
var dx = 400;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
|
|
Loading…
Reference in New Issue