添加鼠标监听事件 解决rectangle 随着鼠标移动

main
zcy 2024-03-04 20:51:04 +08:00
parent 54b7322916
commit 8226dd09f8
1 changed files with 94 additions and 27 deletions

View File

@ -61,6 +61,9 @@ class AltiumSchematicRenderer
} }
initGraph() { initGraph() {
this.graph = new mxGraph(document.getElementById('graphContainer')); this.graph = new mxGraph(document.getElementById('graphContainer'));
this.graph.setPanning(true); this.graph.setPanning(true);
this.graph.setConnectable(true); this.graph.setConnectable(true);
@ -86,6 +89,13 @@ class AltiumSchematicRenderer
mxVertexHandler.prototype.rotationEnabled = true; mxVertexHandler.prototype.rotationEnabled = true;
this.graph.addListener(mxEvent.DOUBLE_CLICK, function(sender, evt)
{
var cell = evt.getProperty('cell');
// do something with the cell and consume the
// event to prevent in-place editing from start
});
// Alternative solution for implementing connection points without child cells. // Alternative solution for implementing connection points without child cells.
// This can be extended as shown in portrefs.html example to allow for per-port // This can be extended as shown in portrefs.html example to allow for per-port
// incoming/outgoing direction. // incoming/outgoing direction.
@ -157,6 +167,29 @@ class AltiumSchematicRenderer
} }
render() { render() {
mxGraphHandler.prototype.mouseMove = function(sender, me){
console.log(sender,me)
// https://github.com/jgraph/mxgraph/blob/master/javascript/src/js/handler/mxGraphHandler.js#L901
if (!this.livePreviewUsed && this.shape == null) {
this.shape = this.createPreviewShape(this.bounds);
}
}
// https://github.com/jgraph/mxgraph/blob/master/javascript/src/js/handler/mxGraphHandler.js#L1036
mxGraphHandler.prototype.updatePreview = function(remote) {
if (this.livePreviewUsed && !remote) {
if (this.cells != null)
{
this.setHandlesVisibleForCells(this.graph.getSelectionCells(), false);
this.updateLivePreview(this.currentDx, this.currentDy);
}
}
else
{
this.updatePreviewShape();
}
};
this.graph = new mxGraph(document.getElementById('graphContainer')); this.graph = new mxGraph(document.getElementById('graphContainer'));
this.graph.setPanning(true); this.graph.setPanning(true);
this.graph.setConnectable(true); this.graph.setConnectable(true);
@ -180,6 +213,41 @@ class AltiumSchematicRenderer
// Adds rubberband selection // Adds rubberband selection
new mxRubberband(this.graph); new mxRubberband(this.graph);
this.graph.addListener(mxEvent.CLICK, function(sender, evt)
{
var e = evt.getProperty('event'); // mouse event
var cell = evt.getProperty('cell'); // cell may be null
if (cell != null)
{
// Do something useful with cell and consume the event
// evt.consume();
}
});
var connectionHandlerMouseUp = this.graph.connectionHandler.mouseUp;
this.graph.connectionHandler.mouseUp = function(sender, me)
{
if (this.first != null && this.previous != null)
{
var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY());
var dx = Math.abs(point.x - this.first.x);
var dy = Math.abs(point.y - this.first.y);
if (dx < this.graph.tolerance && dy < this.graph.tolerance)
{
// Selects edges in non-wire mode for single clicks, but starts
// connecting for non-edges regardless of wire-mode
console.log("sss")
return;
}
}
connectionHandlerMouseUp.apply(this, arguments);
};
mxVertexHandler.prototype.rotationEnabled = true; mxVertexHandler.prototype.rotationEnabled = true;
// Alternative solution for implementing connection points without child cells. // Alternative solution for implementing connection points without child cells.
@ -344,29 +412,29 @@ class AltiumSchematicRenderer
} }
results.innerText = bom.join("\n"); results.innerText = bom.join("\n");
for (let obj of doc.objects.filter((o) => o instanceof AltiumWire)) // for (let obj of doc.objects.filter((o) => o instanceof AltiumWire))
{ // {
// for (let i = 1; i < obj.points.length; i++) // // for (let i = 1; i < obj.points.length; i++)
// { // // {
// obj.points[i].y = 840 - obj.points[i].y // // obj.points[i].y = 840 - obj.points[i].y
// } // // }
var obj1 = this.graph.getCellAt(obj.points[0].x,obj.points[0].y,parent) // var obj1 = this.graph.getCellAt(obj.points[0].x,obj.points[0].y,parent)
var obj2 = this.graph.getCellAt(obj.points[obj.points.length - 1].x, // var obj2 = this.graph.getCellAt(obj.points[obj.points.length - 1].x,
obj.points[obj.points.length - 1].y,parent) // obj.points[obj.points.length - 1].y,parent)
console.log(obj1,obj2) // console.log(obj1,obj2)
// if (!this.#shouldShow(obj)) continue; // // if (!this.#shouldShow(obj)) continue;
// ctx.strokeStyle = this.#altiumColourToHex(obj.colour); // // ctx.strokeStyle = this.#altiumColourToHex(obj.colour);
// ctx.lineWidth = obj.width; // // ctx.lineWidth = obj.width;
// ctx.beginPath(); // // ctx.beginPath();
// ctx.moveTo(obj.points[0].x, obj.points[0].y); // // ctx.moveTo(obj.points[0].x, obj.points[0].y);
// for (let i = 1; i < obj.points.length; i++) // // for (let i = 1; i < obj.points.length; i++)
// { // // {
// ctx.lineTo(obj.points[i].x, obj.points[i].y); // // ctx.lineTo(obj.points[i].x, obj.points[i].y);
// } // // }
// ctx.stroke(); // // ctx.stroke();
} // }
for (let obj of doc.objects.filter((o) => o instanceof AltiumBus)) for (let obj of doc.objects.filter((o) => o instanceof AltiumBus))
{ {
// if (!this.#shouldShow(obj)) continue; // if (!this.#shouldShow(obj)) continue;
@ -416,7 +484,6 @@ class AltiumSchematicRenderer
// ctx.stroke(); // ctx.stroke();
} }
let chips = {} let chips = {}
var v1
for (let obj of doc.objects.filter((o) => o instanceof AltiumRectangle)) for (let obj of doc.objects.filter((o) => o instanceof AltiumRectangle))
{ {
obj.top = 840 - obj.top obj.top = 840 - obj.top
@ -424,7 +491,7 @@ class AltiumSchematicRenderer
console.log('verticalLabelPosition=top;verticalAlign=bottom;fillColor=' console.log('verticalLabelPosition=top;verticalAlign=bottom;fillColor='
+ this.#altiumColourToHex(obj.attributes.areacolor)) + this.#altiumColourToHex(obj.attributes.areacolor))
v1 = this.graph.insertVertex(parent, null, '', let v1 = this.graph.insertVertex(parent, null, '',
obj.left, obj.top, obj.left, obj.top,
(obj.right - obj.left), (obj.right - obj.left),
(obj.bottom - obj.top), (obj.bottom - obj.top),
@ -434,9 +501,10 @@ class AltiumSchematicRenderer
if(chips[obj.owner_record_index] == undefined){ if(chips[obj.owner_record_index] == undefined){
chips[obj.owner_record_index] = [] chips[obj.owner_record_index] = []
} }
v1.geometry.relative = false
chips[obj.owner_record_index].push(v1) chips[obj.owner_record_index].push(v1)
// if (!this.#shouldShow(obj)) // if (!this.#shouldShow(obj))
// continue; // continue;
// ctx.fillStyle = this.#altiumColourToHex(obj.attributes.areacolor); // ctx.fillStyle = this.#altiumColourToHex(obj.attributes.areacolor);
@ -530,6 +598,7 @@ class AltiumSchematicRenderer
chips[obj.owner_record_index] = [] chips[obj.owner_record_index] = []
} }
chips[obj.owner_record_index].push(v11) chips[obj.owner_record_index].push(v11)
// v11.geometry.offset = new mxPoint(-v11.geometry.width, 2); // ctx.strokeStyle = "#000000"; // v11.geometry.offset = new mxPoint(-v11.geometry.width, 2); // ctx.strokeStyle = "#000000";
// ctx.beginPath(); // ctx.beginPath();
// ctx.moveTo(obj.x, obj.y); // ctx.moveTo(obj.x, obj.y);
@ -1104,9 +1173,7 @@ class AltiumSchematicRenderer
} }
for (let i in chips){ for (let i in chips){
let chip = this.graph.groupCells(null,0,chips[i]) let chip = this.graph.groupCells(null,0,chips[i])
chip.setStyle("border = 0") chip.setStyle("border=0;strokeColor=none")
console.log(chip.getStyle())
console.log(chip.getStyle())
} }
} }