From 7ec9326ce00d08f9d957981f2edff6df26f24a28 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期四, 26 九月 2024 13:25:02 +0800 Subject: [PATCH] 修改 --- web/public/SVGOrigin/Method-Draw-master/method-draw/extensions/ext-connector.js | 158 ++++++++++++++++++++++++++-------------------------- 1 files changed, 79 insertions(+), 79 deletions(-) diff --git a/web/public/SVGOrigin/Method-Draw-master/method-draw/extensions/ext-connector.js b/web/public/SVGOrigin/Method-Draw-master/method-draw/extensions/ext-connector.js index ffd54df..52f77eb 100644 --- a/web/public/SVGOrigin/Method-Draw-master/method-draw/extensions/ext-connector.js +++ b/web/public/SVGOrigin/Method-Draw-master/method-draw/extensions/ext-connector.js @@ -6,7 +6,7 @@ * Copyright(c) 2010 Alexis Deveria * */ - + methodDraw.addExtension("Connector", function(S) { var svgcontent = S.svgcontent, svgroot = S.svgroot, @@ -26,9 +26,9 @@ se_ns, // connect_str = "-SE_CONNECT-", selElems = []; - + elData = $.data; - + var lang_list = { "en":[ {"id": "mode_connect", "title": "Connect two objects" } @@ -37,7 +37,7 @@ {"id": "mode_connect", "title": "Connecter deux objets"} ] }; - + function getOffset(side, line) { var give_offset = !!line.getAttribute('marker-' + side); // var give_offset = $(line).data(side+'_off'); @@ -46,16 +46,16 @@ var size = line.getAttribute('stroke-width') * 5; return give_offset ? size : 0; } - + function showPanel(on) { var conn_rules = $('#connector_rules'); if(!conn_rules.length) { conn_rules = $('<style id="connector_rules"><\/style>').appendTo('head'); - } + } conn_rules.text(!on?"":"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }"); $('#connector_panel').toggle(on); } - + function setPoint(elem, pos, x, y, setMid) { var pts = elem.points; var pt = svgroot.createSVGPoint(); @@ -73,9 +73,9 @@ pt_arr[i] = x + ',' + y; } } - elem.setAttribute("points",pt_arr.join(" ")); + elem.setAttribute("points",pt_arr.join(" ")); } - + if(setMid) { // Add center point var pt_start = pts.getItem(0); @@ -83,7 +83,7 @@ setPoint(elem, 1, (pt_end.x + pt_start.x)/2, (pt_end.y + pt_start.y)/2); } } - + function updateLine(diff_x, diff_y) { // Update line with element var i = connections.length; @@ -91,34 +91,34 @@ var conn = connections[i]; var line = conn.connector; var elem = conn.elem; - + var pre = conn.is_start?'start':'end'; // var sw = line.getAttribute('stroke-width') * 5; - + // Update bbox for this element var bb = elData(line, pre+'_bb'); bb.x = conn.start_x + diff_x; bb.y = conn.start_y + diff_y; elData(line, pre+'_bb', bb); - + var alt_pre = conn.is_start?'end':'start'; - + // Get center pt of connected element var bb2 = elData(line, alt_pre+'_bb'); var src_x = bb2.x + bb2.width/2; var src_y = bb2.y + bb2.height/2; - + // Set point of element being moved var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0 setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true); - + // Set point of connected element var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line)); setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true); } } - + function findConnectors(elems) { if(!elems) elems = selElems; var connectors = $(svgcontent).find(conn_sel); @@ -128,7 +128,7 @@ connectors.each(function() { var start = elData(this, "c_start"); var end = elData(this, "c_end"); - + var parts = [getElem(start), getElem(end)]; for(var i=0; i<2; i++) { var c_elem = parts[i]; @@ -140,7 +140,7 @@ add_this = true; } }); - + if(!c_elem || !c_elem.parentNode) { $(this).remove(); continue; @@ -153,12 +153,12 @@ is_start: (i === 0), start_x: bb.x, start_y: bb.y - }); + }); } } }); } - + function updateConnectors(elems) { // Updates connector lines based on selected elements // Is not used on mousemove, as it runs getStrokedBBox every time, @@ -174,29 +174,29 @@ var sw = line.getAttribute('stroke-width') * 5; var pre = conn.is_start?'start':'end'; - + // Update bbox for this element var bb = svgCanvas.getStrokedBBox([elem]); bb.x = conn.start_x; bb.y = conn.start_y; elData(line, pre+'_bb', bb); var add_offset = elData(line, pre+'_off'); - + var alt_pre = conn.is_start?'end':'start'; - + // Get center pt of connected element var bb2 = elData(line, alt_pre+'_bb'); var src_x = bb2.x + bb2.width/2; var src_y = bb2.y + bb2.height/2; - + // Set point of element being moved var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true); - + // Set point of connected element var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line)); setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true); - + // Update points attribute manually for webkit if(navigator.userAgent.indexOf('AppleWebKit') != -1) { var pts = line.points; @@ -205,14 +205,14 @@ for(var j=0; j< len; j++) { var pt = pts.getItem(j); pt_arr[j] = pt.x + ',' + pt.y; - } - line.setAttribute("points",pt_arr.join(" ")); + } + line.setAttribute("points",pt_arr.join(" ")); } } } } - + function getBBintersect(x, y, bb, offset) { if(offset) { offset -= 0; @@ -222,54 +222,54 @@ bb.x -= offset/2; bb.y -= offset/2; } - + var mid_x = bb.x + bb.width/2; var mid_y = bb.y + bb.height/2; var len_x = x - mid_x; var len_y = y - mid_y; - + var slope = Math.abs(len_y/len_x); - + var ratio; - + if(slope < bb.height/bb.width) { ratio = (bb.width/2) / Math.abs(len_x); } else { ratio = (bb.height/2) / Math.abs(len_y); } - - + + return { x: mid_x + len_x * ratio, y: mid_y + len_y * ratio } } - + // Do once (function() { var gse = svgCanvas.groupSelectedElements; - + svgCanvas.groupSelectedElements = function() { svgCanvas.removeFromSelection($(conn_sel).toArray()); return gse.apply(this, arguments); } - + var mse = svgCanvas.moveSelectedElements; - + svgCanvas.moveSelectedElements = function() { svgCanvas.removeFromSelection($(conn_sel).toArray()); var cmd = mse.apply(this, arguments); updateConnectors(); return cmd; } - + se_ns = svgCanvas.getEditorNS(); }()); - + // Do on reset function init() { // Make sure all connectors have data set - $(svgcontent).find('*').each(function() { + $(svgcontent).find('*').each(function() { var conn = this.getAttributeNS(se_ns, "connector"); if(conn) { this.setAttribute('class', conn_sel.substr(1)); @@ -285,18 +285,18 @@ }); // updateConnectors(); } - + // $(svgroot).parent().mousemove(function(e) { -// // if(started +// // if(started // // || svgCanvas.getMode() != "connector" // // || e.target.parentNode.parentNode != svgcontent) return; -// +// // console.log('y') // // if(e.target.parentNode.parentNode === svgcontent) { -// // +// // // // } // }); - + return { name: "Connector", svgicons: "images/conn.svg", @@ -326,27 +326,27 @@ start_x = opts.start_x, start_y = opts.start_y; var mode = svgCanvas.getMode(); - + if(mode == "connector") { - + if(started) return; - + var mouse_target = e.target; - + var parents = $(mouse_target).parents(); - + if($.inArray(svgcontent, parents) != -1) { // Connectable element - + // If child of foreignObject, use parent var fo = $(mouse_target).closest("foreignObject"); start_elem = fo.length ? fo[0] : mouse_target; - + // Get center of source element var bb = svgCanvas.getStrokedBBox([start_elem]); var x = bb.x + bb.width/2; var y = bb.y + bb.height/2; - + started = true; cur_line = addElem({ "element": "polyline", @@ -374,27 +374,27 @@ var e = opts.event; var x = opts.mouse_x/zoom; var y = opts.mouse_y/zoom; - + var diff_x = x - start_x, diff_y = y - start_y; - + var mode = svgCanvas.getMode(); - + if(mode == "connector" && started) { - + var sw = cur_line.getAttribute('stroke-width') * 3; // Set start point (adjusts based on bb) var pt = getBBintersect(x, y, elData(cur_line, 'start_bb'), getOffset('start', cur_line)); start_x = pt.x; start_y = pt.y; - + setPoint(cur_line, 0, pt.x, pt.y, true); - + // Set end point setPoint(cur_line, 'end', x, y, true); } else if(mode == "select") { var slen = selElems.length; - + while(slen--) { var elem = selElems[slen]; // Look for selected connector elements @@ -408,9 +408,9 @@ if(connections.length) { updateLine(diff_x, diff_y); - + } - } + } }, mouseUp: function(opts) { var zoom = svgCanvas.getZoom(); @@ -418,11 +418,11 @@ x = opts.mouse_x/zoom, y = opts.mouse_y/zoom, mouse_target = e.target; - + if(svgCanvas.getMode() == "connector") { var fo = $(mouse_target).closest("foreignObject"); if(fo.length) mouse_target = fo[0]; - + var parents = $(mouse_target).parents(); if(mouse_target == start_elem) { @@ -432,7 +432,7 @@ keep: true, element: null, started: started - } + } } else if($.inArray(svgcontent, parents) === -1) { // Not a valid target element, so remove line $(cur_line).remove(); @@ -445,7 +445,7 @@ } else { // Valid end element end_elem = mouse_target; - + var start_id = start_elem.id, end_id = end_elem.id; var conn_str = start_id + " " + end_id; var alt_str = end_id + " " + start_id; @@ -462,9 +462,9 @@ started: false } } - + var bb = svgCanvas.getStrokedBBox([end_elem]); - + var pt = getBBintersect(start_x, start_y, bb, getOffset('start', cur_line)); setPoint(cur_line, 'end', pt.x, pt.y, true); $(cur_line) @@ -490,16 +490,16 @@ selectedChanged: function(opts) { // TODO: Find better way to skip operations if no connectors are in use if(!$(svgcontent).find(conn_sel).length) return; - + if(svgCanvas.getMode() == 'connector') { svgCanvas.setMode('select'); } - + // Use this to update the current selected elements selElems = opts.elems; - + var i = selElems.length; - + while(i--) { var elem = selElems[i]; if(elem && elData(elem, 'c_start')) { @@ -523,7 +523,7 @@ svgcontent = elem; init(); } - + // Has marker, so change offset if(elem && ( elem.getAttribute("marker-start") || @@ -537,16 +537,16 @@ $(elem) .data("start_off", !!start) .data("end_off", !!end); - + if(elem.tagName == "line" && mid) { // Convert to polyline to accept mid-arrow - + var x1 = elem.getAttribute('x1')-0; var x2 = elem.getAttribute('x2')-0; var y1 = elem.getAttribute('y1')-0; var y2 = elem.getAttribute('y2')-0; var id = elem.id; - + var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' '); var pline = addElem({ "element": "polyline", -- Gitblit v1.9.1