mirror of
https://github.com/trebonian/visual6502.git
synced 2024-09-18 05:56:41 +00:00
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)
|
||||
</form>
|
||||
<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="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
||||
<span class="animatebox">
|
||||
|
@ -299,6 +299,7 @@ function recenter(){
|
||||
var highlightThese;
|
||||
|
||||
// flash some set of nodes according to user input
|
||||
// also zoom to fit those nodes (not presently optional)
|
||||
function hiliteNodeList(){
|
||||
var tmplist = document.getElementById('HighlightThese').value.split(/[\s,]+/);
|
||||
if(tmplist.length==0){
|
||||
@ -307,14 +308,26 @@ function hiliteNodeList(){
|
||||
return;
|
||||
}
|
||||
highlightThese = [];
|
||||
var seglist=[];
|
||||
for(var i=0;i<tmplist.length;i++){
|
||||
// get a node number from a signal name or a node number
|
||||
var name = tmplist[i];
|
||||
var value = parseInt(tmplist[i]);
|
||||
if((value!=NaN) && (typeof nodes[name] != "undefined")) {
|
||||
if((value!=NaN) && (typeof nodes[value] != "undefined")) {
|
||||
highlightThese.push(value);
|
||||
for(var s in nodes[value].segs)
|
||||
seglist.push(nodes[value].segs[s]);
|
||||
} else if(typeof nodenames[name] != "undefined") {
|
||||
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?
|
||||
}
|
||||
@ -322,6 +335,17 @@ function hiliteNodeList(){
|
||||
// all input rejected: how to tell the user?
|
||||
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)
|
||||
hiliteNode(-1); // unhighlight all nodes
|
||||
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){
|
||||
var ctx = hilite.getContext('2d');
|
||||
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
||||
ctx.fillStyle = 'rgba(255,255,255,0.7)';
|
||||
if(n==-1) return;
|
||||
if(isNodeHigh(n[0]))
|
||||
ctx.fillStyle = 'rgba(255,0,0,0.7)';
|
||||
|
||||
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;
|
||||
for(var s in segs){drawSeg(ctx, segs[s]); ctx.fill();}
|
||||
}
|
||||
}
|
||||
|
||||
// highlight a single transistor (additively - does not clear highlighting)
|
||||
function hiliteTrans(n){
|
||||
var ctx = hilite.getContext('2d');
|
||||
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
||||
ctx.strokeStyle = 'rgba(255,255,255,1.0)';
|
||||
ctx.strokeStyle = 'rgba(255,255,255,0.7)';
|
||||
ctx.lineWidth = 4
|
||||
if(n==-1) return;
|
||||
for(var t in n){
|
||||
var bb = transistors[n[t]].bb
|
||||
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){
|
||||
var dx = 400;
|
||||
ctx.beginPath();
|
||||
|
Loading…
Reference in New Issue
Block a user