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/editor/src/path.js | 110 +++++++++++++++++++++++++++--------------------------- 1 files changed, 55 insertions(+), 55 deletions(-) diff --git a/web/public/SVGOrigin/Method-Draw-master/editor/src/path.js b/web/public/SVGOrigin/Method-Draw-master/editor/src/path.js index 5b3cd5d..15b432a 100644 --- a/web/public/SVGOrigin/Method-Draw-master/editor/src/path.js +++ b/web/public/SVGOrigin/Method-Draw-master/editor/src/path.js @@ -58,7 +58,7 @@ svgedit.path.init = function(editorContext) { editorContext_ = editorContext; - + pathFuncs = [0,'ClosePath']; var pathFuncsStrs = ['Moveto', 'Lineto', 'CurvetoCubic', 'CurvetoQuadratic', 'Arc', 'LinetoHorizontal', 'LinetoVertical','CurvetoCubicSmooth','CurvetoQuadraticSmooth']; @@ -170,7 +170,7 @@ svgedit.path.addCtrlGrip = function(id) { var pointGrip = svgedit.utilities.getElem("ctrlpointgrip_"+id); if(pointGrip) return pointGrip; - + pointGrip = document.createElementNS(svgns, "circle"); svgedit.utilities.assignAttributes(pointGrip, { 'id': "ctrlpointgrip_" + id, @@ -222,7 +222,7 @@ var item = seg.item; var index = seg.index; if(!item || !("x1" in item) || !("x2" in item)) return null; - var cpt = {}; + var cpt = {}; var pointGripContainer = svgedit.path.getGripContainer(); // Note that this is intentionally not seg.prev.item @@ -287,7 +287,7 @@ 'd': 'M0,0 0,0' }); pointGripContainer.appendChild(segLine); - } + } if(update) { var prev = seg.prev; @@ -314,13 +314,13 @@ // Function: smoothControlPoints // Takes three points and creates a smoother line based on them -// -// Parameters: +// +// Parameters: // ct1 - Object with x and y values (first control point) // ct2 - Object with x and y values (second control point) // pt - Object with x and y values (third point) // -// Returns: +// Returns: // Array of two "smoothed" point objects svgedit.path.smoothControlPoints = this.smoothControlPoints = function(ct1, ct2, pt) { // each point must not be the origin @@ -328,20 +328,20 @@ y1 = ct1.y - pt.y, x2 = ct2.x - pt.x, y2 = ct2.y - pt.y; - + if ( (x1 != 0 || y1 != 0) && (x2 != 0 || y2 != 0) ) { var anglea = Math.atan2(y1,x1), angleb = Math.atan2(y2,x2), r1 = Math.sqrt(x1*x1+y1*y1), r2 = Math.sqrt(x2*x2+y2*y2), nct1 = editorContext_.getSVGRoot().createSVGPoint(), - nct2 = editorContext_.getSVGRoot().createSVGPoint(); + nct2 = editorContext_.getSVGRoot().createSVGPoint(); if (anglea < 0) { anglea += 2*Math.PI; } if (angleb < 0) { angleb += 2*Math.PI; } - + var angleBetween = Math.abs(anglea - angleb), angleDiff = Math.abs(Math.PI - angleBetween)/2; - + var new_anglea, new_angleb; if (anglea - angleb > 0) { new_anglea = angleBetween < Math.PI ? (anglea + angleDiff) : (anglea - angleDiff); @@ -351,13 +351,13 @@ new_anglea = angleBetween < Math.PI ? (anglea - angleDiff) : (anglea + angleDiff); new_angleb = angleBetween < Math.PI ? (angleb + angleDiff) : (angleb - angleDiff); } - + // rotate the points nct1.x = r1 * Math.cos(new_anglea) + pt.x; nct1.y = r1 * Math.sin(new_anglea) + pt.y; nct2.x = r2 * Math.cos(new_angleb) + pt.x; nct2.y = r2 * Math.sin(new_angleb) + pt.y; - + return [nct1, nct2]; } return undefined; @@ -368,7 +368,7 @@ this.index = index; this.item = item; this.type = item.pathSegType; - + this.ctrlpts = []; this.ptgrip = null; this.segsel = null; @@ -426,7 +426,7 @@ this.type = this.item.pathSegType; } svgedit.path.getControlPoints(this); - } + } // this.segsel.setAttribute("display", y?"inline":"none"); } }; @@ -435,17 +435,17 @@ var item = this.item; // fix for path tool dom breakage, amending item does bad things now, so we take a copy and use that. Can probably improve to just take a shallow copy of object var cloneItem = $.extend({}, item); - var cur_pts = (this.ctrlpts) - ? [cloneItem.x += dx, cloneItem.y += dy, - cloneItem.x1, cloneItem.y1, + var cur_pts = (this.ctrlpts) + ? [cloneItem.x += dx, cloneItem.y += dy, + cloneItem.x1, cloneItem.y1, cloneItem.x2 += dx, cloneItem.y2 += dy] : [cloneItem.x += dx, cloneItem.y += dy]; - + svgedit.path.replacePathSeg(this.type, this.index, cur_pts); if(this.next && this.next.ctrlpts) { var next = this.next.item; - var next_pts = [next.x, next.y, + var next_pts = [next.x, next.y, next.x1 += dx, next.y1 += dy, next.x2, next.y2]; svgedit.path.replacePathSeg(this.next.type, this.next.index, next_pts); } @@ -482,7 +482,7 @@ cloneItem['x' + anum ] = pt.x + (pt.x - this.item['x' + num]); cloneItem['y' + anum ] = pt.y + (pt.y - this.item['y' + num]); - var pts = [ + var pts = [ cloneItem.x, cloneItem.y, cloneItem.x1, cloneItem.y1, cloneItem.x2, cloneItem.y2 @@ -500,7 +500,7 @@ var pts = [item.x,item.y, item.x1,item.y1, item.x2,item.y2]; - + svgedit.path.replacePathSeg(this.type, this.index, pts); this.update(true); }; @@ -536,23 +536,23 @@ this.segs = []; this.selected_pts = []; this.first_seg = null; - + // Set up segs array for(var i=0; i < len; i++) { var item = segList.getItem(i); var segment = new svgedit.path.Segment(i, item); segment.path = this; this.segs.push(segment); - } - + } + var segs = this.segs; var start_i = null; for(var i=0; i < len; i++) { - var seg = segs[i]; + var seg = segs[i]; var next_seg = (i+1) >= len ? null : segs[i+1]; var prev_seg = (i-1) < 0 ? null : segs[i-1]; - + if(seg.type === 2) { if(prev_seg && prev_seg.type !== 1) { // New sub-path, last one is open, @@ -568,7 +568,7 @@ // This is the last real segment of a closed sub-path // Next is first seg after "M" seg.next = segs[start_i+1]; - + // First seg after "M"'s prev is this seg.next.prev = seg; seg.mate = segs[start_i]; @@ -594,7 +594,7 @@ } else if(seg.type !== 1){ // Regular segment, so add grip and its "next" seg.addGrip(); - + // Don't set its "next" if it's an "M" if(next_seg && next_seg.type !== 2) { seg.next = next_seg; @@ -652,17 +652,17 @@ svgedit.path.Path.prototype.deleteSeg = function(index) { var seg = this.segs[index]; var list = this.elem.pathSegList; - + seg.show(false); var next = seg.next; if(seg.mate) { // Make the next point be the "M" point var pt = [next.item.x, next.item.y]; svgedit.path.replacePathSeg(2, next.index, pt); - + // Reposition last node svgedit.path.replacePathSeg(4, seg.index, pt); - + list.removeItem(seg.mate.index); } else if(!seg.prev) { // First node of open path, make next point the M @@ -670,7 +670,7 @@ var pt = [next.item.x, next.item.y]; svgedit.path.replacePathSeg(2, seg.next.index, pt); list.removeItem(index); - + } else { list.removeItem(index); } @@ -690,7 +690,7 @@ return false; } }); - + return closed; }; @@ -698,7 +698,7 @@ var pos = this.selected_pts.indexOf(index); if(pos == -1) { return; - } + } this.segs[index].select(false); this.selected_pts.splice(pos, 1); }; @@ -727,7 +727,7 @@ return this; }; -// Move selected points +// Move selected points svgedit.path.Path.prototype.movePts = function(d_x, d_y) { var i = this.selected_pts.length; while(i--) { @@ -750,23 +750,23 @@ var text; while(i--) { var sel_pt = this.selected_pts[i]; - + // Selected seg var cur = this.segs[sel_pt]; var prev = cur.prev; if(!prev) continue; - + if(!new_type) { // double-click, so just toggle text = "Toggle Path Segment Type"; // Toggle segment to curve/straight line var old_type = cur.type; - + new_type = (old_type == 6) ? 4 : 6; - } - + } + new_type = new_type-0; - + var cur_x = cur.item.x; var cur_y = cur.item.y; var prev_x = prev.item.x; @@ -797,12 +797,12 @@ break; case 4: points = [cur_x,cur_y]; - + // Store original prevve segment nums cur.olditem = cur.item; break; } - + cur.setType(new_type, points); } svgedit.path.path.endChanges(text); @@ -821,7 +821,7 @@ this.addPtsToSelection(pt); if(ctrl_num) { this.dragctrl = ctrl_num; - + if(link_control_pts) { this.segs[pt].setLinked(ctrl_num); } @@ -860,20 +860,20 @@ var getRotVals = function(x, y, oldcx, oldcy, newcx, newcy, angle) { dx = x - oldcx; dy = y - oldcy; - + // rotate the point around the old center r = Math.sqrt(dx*dx + dy*dy); theta = Math.atan2(dy,dx) + angle; dx = r * Math.cos(theta) + oldcx; dy = r * Math.sin(theta) + oldcy; - + // dx,dy should now hold the actual coordinates of each // point after being rotated // now we want to rotate them around the new center in the reverse direction dx -= newcx; dy -= newcy; - + r = Math.sqrt(dx*dx + dy*dy); theta = Math.atan2(dy,dx) - angle; return {'x':(r * Math.cos(theta) + newcx)/1, @@ -881,7 +881,7 @@ }; // If the path was rotated, we must now pay the piper: -// Every path point must be rotated into the rotated coordinate system of +// Every path point must be rotated into the rotated coordinate system of // its old center, then determine the new center, then rotate it back // This is because we want the path to remember its rotation @@ -898,16 +898,16 @@ oldcy = oldbox.y + oldbox.height/2, newcx = box.x + box.width/2, newcy = box.y + box.height/2, - + // un-rotate the new center to the proper position dx = newcx - oldcx, dy = newcy - oldcy, r = Math.sqrt(dx*dx + dy*dy), theta = Math.atan2(dy,dx) + angle; - + newcx = r * Math.cos(theta) + oldcx; newcy = r * Math.sin(theta) + oldcy; - + var list = current_path.pathSegList, i = list.numberOfItems; while (i) { @@ -915,7 +915,7 @@ var seg = list.getItem(i), type = seg.pathSegType; if(type == 1) continue; - + var rvals = getRotVals(seg.x,seg.y, oldcx, oldcy, newcx, newcy, angle), points = [rvals.x, rvals.y]; if(seg.x1 != null && seg.x2 != null) { @@ -926,10 +926,10 @@ svgedit.path.replacePathSeg(type, i, points); } // loop for each point - box = svgedit.utilities.getBBox(current_path); + box = svgedit.utilities.getBBox(current_path); // selectedBBoxes[0].x = box.x; selectedBBoxes[0].y = box.y; // selectedBBoxes[0].width = box.width; selectedBBoxes[0].height = box.height; - + // now we must set the new transform to be rotated around the new center var R_nc = svgroot.createSVGTransform(), tlist = svgedit.transformlist.getTransformList(current_path); -- Gitblit v1.9.1