添加polygon shape

main
zcy 2024-03-06 23:40:58 +08:00
parent 254d4df203
commit aec7de62d4
3 changed files with 56 additions and 100 deletions

View File

@ -63,10 +63,12 @@ class AltiumSchematicRenderer
render() {
let oldMove = mxGraphHandler.prototype.mouseMove
mxGraphHandler.prototype.mouseMove = function(sender, me){
// console.log("mouse move",sender,me)
console.log("mouse move",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);
}else if(this.shape != null){
console.log("mouseMove",this)
}
oldMove.call(this, sender, me);
}
@ -108,7 +110,7 @@ class AltiumSchematicRenderer
this.graph.foldingEnabled = false;
this.graph.gridSize = 1
//Maximum size
this.graph.maximumGraphBounds = new mxRectangle(0, 0, 1920, 800)
this.graph.maximumGraphBounds = new mxRectangle(0, 0, 1920, 1024)
this.graph.border = 0;
var fontColor = '#FFFFFF' ;
var strokeColor = '#C0C0C0' ;
@ -153,12 +155,10 @@ class AltiumSchematicRenderer
return;
}
}
connectionHandlerMouseUp.apply(this, arguments);
};
mxVertexHandler.prototype.rotationEnabled = true;
mxVertexHandler.prototype.rotationEnabled = false;
// Alternative solution for implementing connection points without child cells.
// This can be extended as shown in portrefs.html example to allow for per-port
@ -191,7 +191,6 @@ class AltiumSchematicRenderer
var parent = this.graph.getDefaultParent();
mxVertexHandler.prototype.livePreview = true;
mxVertexHandler.prototype.rotationEnabled = true;
var labelBackground = (false) ? '#000000' : '#FFFFFF';
var fontColor = (false) ? '#FFFFFF' : '#000000';
@ -476,7 +475,6 @@ class AltiumSchematicRenderer
// if (!obj.transparent)
// ctx.fill();
}
console.log(doc.objects)
for (let obj of doc.objects.filter((o) => o instanceof AltiumPin))
{
var style = 'shape=line;fontColor=#000000;strokeColor=#000000;'
@ -492,7 +490,6 @@ class AltiumSchematicRenderer
style += 'rotation=90'
obj.y = obj.y - obj.length/2
obj.x = obj.x - obj.length/2
}
obj.y = 840 - obj.y
@ -521,19 +518,35 @@ class AltiumSchematicRenderer
for (let obj of doc.objects.filter((o) => o instanceof AltiumLine)) {
mxCellRenderer.registerShape('polyline', mxPolyline);
obj.x2 = 840 - obj.x2
obj.y2 = 840 - obj.y2
const cell = new mxCell('', new mxGeometry(), 'strokeWidth=1;');
style = 'shape=polyline;strokeColor=#0000ff;'
// console.log(style)
var v11 = this.graph.insertVertex(parent, null, '', obj.x1, obj.x2,
1,1,style);
v11.points = [new mxPoint(obj.y1 - obj.x1,obj.y2 - obj.x2)]
v11.geometry.relative = false;
if(chips[obj.owner_record_index] == undefined){
chips[obj.owner_record_index] = []
}
if(chips[obj.owner_record_index] == undefined){
chips[obj.owner_record_index] = []
}
v11.setConnectable(false);
chips[obj.owner_record_index].push(v11)
// 将cell设定为线段
// cell.edge = true;
// 设置起始点
cell.geometry.setTerminalPoint(new mxPoint(obj.x1, obj.x2), true);
// cell.geometry.setTerminalPoint(new mxPoint(obj.x1, obj.x2), true);
// 设置终结点
cell.geometry.setTerminalPoint(new mxPoint(obj.y1, obj.y2), false);
// cell.geometry.setTerminalPoint(new mxPoint(obj.y1, obj.y2), false);
// 使用 points 定义多个中间节点
this.graph.model.root.insert(cell);
// this.graph.model.root.insert(cell);
// this.graph.model.root.insert(cell);
// chips[obj.owner_record_index].push(cell)
@ -559,86 +572,10 @@ class AltiumSchematicRenderer
// ctx.lineWidth = 1;
}
for (let obj of doc.objects.filter((o) => o instanceof AltiumPolyline))
{
// if (!this.#shouldShow(obj)) continue;
// ctx.strokeStyle = this.#altiumColourToHex(obj.colour);
// ctx.fillStyle = this.#altiumColourToHex(obj.colour);
// ctx.lineWidth = obj.width;
// switch (obj.line_style)
// {
// case 1:
// ctx.setLineDash([4, 4]);
// break;
// case 2:
// ctx.setLineDash([2, 2]);
// break;
// case 3:
// ctx.setLineDash([4, 2, 2, 4]);
// break;
// }
// ctx.beginPath();
// ctx.moveTo(obj.points[0].x, obj.points[0].y);
// for (let i = 1; i < obj.points.length; i++)
// {
// ctx.lineTo(obj.points[i].x, obj.points[i].y);
// }
// ctx.stroke();
// ctx.setLineDash([]);
// let pa = null;
// let pb = null;
// let shapeSize = obj.shape_size + 1;
// ctx.lineWidth = shapeSize;
// if (obj.start_shape > 0)
// {
// let pa = obj.points[1];
// let pb = obj.points[0];
// let dx = pb.x - pa.x;
// let dy = pb.y - pa.y;
// let angle = Math.atan2(dy, dx);
// const baseSize = 3 + shapeSize;
// let tax = pb.x - Math.cos(angle - Math.PI/6) * baseSize;
// let tay = pb.y - Math.sin(angle - Math.PI/6) * baseSize;
// let tbx = pb.x - Math.cos(angle + Math.PI/6) * baseSize;
// let tby = pb.y - Math.sin(angle + Math.PI/6) * baseSize;
// ctx.beginPath();
// ctx.moveTo(tax, tay);
// ctx.lineTo(pb.x + Math.cos(angle) * 0.5, pb.y + Math.sin(angle) * 0.5);
// ctx.lineTo(tbx, tby);
// ctx.stroke();
// if (obj.start_shape == 2 || obj.start_shape == 4)
// ctx.fill();
// }
// if (obj.end_shape > 0)
// {
// let pa = obj.points[obj.points.length - 2];
// let pb = obj.points[obj.points.length - 1];
// let dx = pb.x - pa.x;
// let dy = pb.y - pa.y;
// let angle = Math.atan2(dy, dx);
// const baseSize = 3 + shapeSize;
// let tax = pb.x - Math.cos(angle - Math.PI/6) * baseSize;
// let tay = pb.y - Math.sin(angle - Math.PI/6) * baseSize;
// let tbx = pb.x - Math.cos(angle + Math.PI/6) * baseSize;
// let tby = pb.y - Math.sin(angle + Math.PI/6) * baseSize;
// ctx.beginPath();
// ctx.moveTo(tax, tay);
// ctx.lineTo(pb.x + Math.cos(angle) * 0.5, pb.y + Math.sin(angle) * 0.5);
// ctx.lineTo(tbx, tby);
// ctx.stroke();
// if (obj.end_shape == 2 || obj.end_shape == 4)
// ctx.fill();
// }
// ctx.lineWidth = 1;
}
for (let obj of doc.objects.filter((o) => o instanceof AltiumPolygon))
{
// if (!this.#shouldShow(obj)) continue;
// ctx.strokeStyle = this.#altiumColourToHex(obj.line_colour);
@ -658,6 +595,7 @@ class AltiumSchematicRenderer
for (let obj of doc.objects.filter((o) => o instanceof AltiumJunction))
{
// if (!this.#shouldShow(obj)) continue;
// ctx.fillStyle = this.#altiumColourToHex(obj.colour);
@ -668,6 +606,7 @@ class AltiumSchematicRenderer
for (let obj of doc.objects.filter((o) => o instanceof AltiumPowerPort))
{
// if (!this.#shouldShow(obj)) continue;
// ctx.strokeStyle = this.#altiumColourToHex(obj.colour);
@ -761,6 +700,15 @@ class AltiumSchematicRenderer
for (let obj of doc.objects.filter((o) => o instanceof AltiumLabel))
{
obj.y = 840 - obj.y
var v11 = this.graph.insertVertex(parent, null, obj.text, obj.x, obj.y,
0, 0,
"shape=label");
v11.geometry.relative = false;
v11.setConnectable(false);
if(obj.owner_record_index != 1)
chips[obj.owner_record_index].push(v11)
// if (!this.#shouldShow(obj)) continue;
// if (obj.hidden)
@ -791,8 +739,7 @@ class AltiumSchematicRenderer
// ctx.textAlign = "left";
// ctx.textBaseline = "bottom";
for (let obj of doc.objects.filter((o) => o instanceof AltiumParameter))
{
for (let obj of doc.objects.filter((o) => o instanceof AltiumParameter)) {
// if (!this.#shouldShow(obj)) continue;
// if (obj.hidden || obj.is_implementation_parameter)
@ -825,8 +772,8 @@ class AltiumSchematicRenderer
// ctx.textAlign = "left";
// ctx.textBaseline = "bottom";
for (let obj of doc.objects.filter((o) => o instanceof AltiumNetLabel))
{
for (let obj of doc.objects.filter((o) => o instanceof AltiumNetLabel)) {
obj = obj
// if (!this.#shouldShow(obj)) continue;
// if (obj.hidden)
@ -862,8 +809,8 @@ class AltiumSchematicRenderer
// ctx.textAlign = "left";
// ctx.textBaseline = "bottom";
for (let obj of doc.objects.filter((o) => o instanceof AltiumPowerPort))
{
for (let obj of doc.objects.filter((o) => o instanceof AltiumPowerPort)) {
obj = obj
// if (!this.#shouldShow(obj)) continue;
// if (!obj.show_text)
@ -879,8 +826,7 @@ class AltiumSchematicRenderer
// ctx.textAlign = "left";
// ctx.textBaseline = "middle";
// let savedFont = ctx.font;
for (let obj of doc.objects.filter((o) => o instanceof AltiumTextFrame))
{
for (let obj of doc.objects.filter((o) => o instanceof AltiumTextFrame)) {
// if (!this.#shouldShow(obj)) continue;
// if (obj.font_id > 0 && doc.sheet.fonts[obj.font_id] != null)
@ -1005,7 +951,6 @@ class AltiumSchematicRenderer
for (let i in chips){
let chip = this.graph.groupCells(null,0,chips[i])
chip.setStyle("border=0;strokeColor=none")
}
}
finally{

View File

@ -1253,7 +1253,8 @@ mxConnectionHandler.prototype.mouseMove = function(sender, me)
var tr = view.translate;
var point = new mxPoint(me.getGraphX(), me.getGraphY());
this.error = null;
// 修正到grid
if (this.graph.isGridEnabledEvent(me.getEvent()))
{
point = new mxPoint((this.graph.snap(point.x / scale - tr.x) + tr.x) * scale,

View File

@ -74,7 +74,6 @@ mxPolyline.prototype.paintEdgeShape = function(c, pts)
{
var prev = c.pointerEventsValue;
c.pointerEventsValue = 'stroke';
if (this.style == null || this.style[mxConstants.STYLE_CURVED] != 1)
{
this.paintLine(c, pts, this.isRounded);
@ -130,3 +129,14 @@ mxPolyline.prototype.paintCurvedLine = function(c, pts)
c.quadTo(p0.x, p0.y, p1.x, p1.y);
c.stroke();
};
// 修改 polyline原本无法渲染vertex类型,只能渲染edge
//
mxPolyline.prototype.paintVertexShape = function(c, x, y, w, h)
{
console.log("paintVertexShape",this.state.cell.geometry.x,this.state.cell.geometry.y,this.state.cell.points[0])
c.begin();
c.moveTo(x,y);
c.lineTo(x + this.state.cell.points[0].x,y + this.state.cell.points[0].y);
c.stroke();
};