设计器快捷调整间距优化直线拐点
This commit is contained in:
parent
ce8b780fc6
commit
b38e4a78a1
@ -98,7 +98,7 @@ Designer.addFunction("selectVertical", function() {
|
||||
container.unbind("mousemove.drag");
|
||||
let pos1 = Utils.getRelativePos(b.pageX, b.pageY, canvas)
|
||||
sublinePos = pos1.y
|
||||
obj = filterShapeAndLine('y',sublinePos)
|
||||
obj = getShapeEdge('y',sublinePos)
|
||||
subline1.css({
|
||||
display : "block",
|
||||
"z-index" : Model.orderList.length + 4,
|
||||
@ -138,7 +138,7 @@ Designer.addFunction("selectVertical", function() {
|
||||
top : newPos.y,
|
||||
});
|
||||
} else { // 减少
|
||||
let maxY = obj.passedShapesEdge - obj.sublineSideEdge > 0 ? obj.passedShapesEdge : obj.sublineSideEdge
|
||||
let maxY = obj.passedShapesEdge - obj.sublineSideEdge > 0 ? obj.passedShapesEdge + 3 : obj.sublineSideEdge + 3 // +3 不能完全碰到边界
|
||||
if (newPos.y < maxY) {
|
||||
newPos.y = maxY
|
||||
}
|
||||
@ -210,7 +210,7 @@ Designer.addFunction("selectVertical", function() {
|
||||
含有泳池泳道时要改变泳池泳道的高(宽)
|
||||
*/
|
||||
|
||||
function isLineBelowOrRight(line,type,pos) { // 筛选出要移动的线
|
||||
function isLineBelowOrRight(line,type,pos,movedDistance) { // 筛选出要移动的线
|
||||
let flag = false
|
||||
if(line.from[type] >= pos) {
|
||||
flag = true
|
||||
@ -221,21 +221,20 @@ function isLineBelowOrRight(line,type,pos) { // 筛选出要移动的线
|
||||
for (let i = 0; i < line.points.length; i++) {
|
||||
if (line.points[i][type] >= pos) {
|
||||
flag = true
|
||||
} else if(movedDistance < 0 && (pos + movedDistance < line.points[i][type]) && (line.points[i][type] < pos)) {
|
||||
flag = true
|
||||
}
|
||||
}
|
||||
return flag
|
||||
}
|
||||
|
||||
function filterShapeAndLine(type,sublinePos) {
|
||||
function filterShapeAndLine(type,sublinePos,movedDistance) {
|
||||
var elements = Model.define.elements;
|
||||
var shapeArr = []
|
||||
var lineArr = []
|
||||
var laneArr = [] // 泳池泳道
|
||||
var passedShapes = [] // 穿过辅助线上(左)半部分的图形 要移动
|
||||
var passedMoreShapes = [] // 穿过辅助线下(右)半部分的图形 不要移动
|
||||
var passedShapesEdge = 0
|
||||
var sublineSideShape = [] // 辅助线上(左)的图形
|
||||
var sublineSideEdge = 0
|
||||
var movingShapes = []; // 移动的图形
|
||||
var movingLines = []
|
||||
|
||||
@ -260,9 +259,6 @@ function filterShapeAndLine(type,sublinePos) {
|
||||
} else if(shapeArr[i].props.x + shapeArr[i].props.w/2 < sublinePos && shapeArr[i].props.x + shapeArr[i].props.w >= sublinePos) { // 辅助线穿过图形右半部分---不移动
|
||||
passedMoreShapes.push(shapeArr[i])
|
||||
}
|
||||
else {
|
||||
sublineSideShape.push(shapeArr[i]) // 在辅助线左侧--不需要移动
|
||||
}
|
||||
} else if(type == 'y') {
|
||||
if (shapeArr[i].props[type] > sublinePos) { // 辅助线以下
|
||||
movingShapes.push(shapeArr[i])
|
||||
@ -272,26 +268,15 @@ function filterShapeAndLine(type,sublinePos) {
|
||||
} else if(shapeArr[i].props.y + shapeArr[i].props.h/2 < sublinePos && shapeArr[i].props.y + shapeArr[i].props.h >= sublinePos) {
|
||||
passedMoreShapes.push(shapeArr[i])
|
||||
}
|
||||
else {
|
||||
sublineSideShape.push(shapeArr[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < lineArr.length; i++) { // 在所有的线中筛选出要移动的线
|
||||
let index = movingLines.findIndex(item => item.id == lineArr[i].id)
|
||||
if(isLineBelowOrRight(lineArr[i],type,sublinePos) && index == -1) {
|
||||
if(isLineBelowOrRight(lineArr[i],type,sublinePos,movedDistance) && index == -1) {
|
||||
movingLines.push(lineArr[i])
|
||||
}
|
||||
}
|
||||
|
||||
if (sublineSideShape.length > 0 && type == 'y') {
|
||||
sublineSideEdge = Math.max.apply(Math,sublineSideShape.map(item => { return (item.props.y + item.props.h) }))
|
||||
} else if (sublineSideShape.length > 0 && type == 'x') {
|
||||
sublineSideEdge = Math.max.apply(Math,sublineSideShape.map(item => { return (item.props.x + item.props.w) }))
|
||||
}
|
||||
if (passedShapes.concat(passedMoreShapes).length > 0) {
|
||||
passedShapesEdge = Math.max.apply(Math,passedShapes.concat(passedMoreShapes).map(item => { return item.props[type] }))
|
||||
}
|
||||
if (passedShapes.length > 0) {
|
||||
// 获取选中形状上的连接线
|
||||
let linkers = Utils.getOutlinkers(passedShapes);
|
||||
@ -305,17 +290,73 @@ function filterShapeAndLine(type,sublinePos) {
|
||||
return {
|
||||
passedShapes,
|
||||
passedMoreShapes,
|
||||
passedShapesEdge,
|
||||
sublineSideEdge,
|
||||
movingShapes,
|
||||
movingLines,
|
||||
laneArr
|
||||
}
|
||||
}
|
||||
|
||||
function getShapeEdge(type,sublinePos) {
|
||||
var elements = Model.define.elements;
|
||||
var shapeArr = []
|
||||
var passedShapes = [] // 穿过辅助线上(左)半部分的图形 要移动
|
||||
var passedMoreShapes = [] // 穿过辅助线下(右)半部分的图形 不要移动
|
||||
var sublineSideShape = [] // 辅助线上(左)的图形
|
||||
var passedShapesEdge = 0
|
||||
var sublineSideEdge = 0
|
||||
|
||||
|
||||
for(let shapeId in elements) {
|
||||
if (elements[shapeId].points == undefined) {
|
||||
shapeArr.push(elements[shapeId])
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < shapeArr.length; i++) {
|
||||
if(type == 'x') {
|
||||
if (shapeArr[i].props[type] > sublinePos) {
|
||||
|
||||
} else if((shapeArr[i].props.x <= sublinePos) && (shapeArr[i].props.x + shapeArr[i].props.w/2>= sublinePos)) { // 辅助线穿过图形左半部分---移动
|
||||
passedShapes.push(shapeArr[i])
|
||||
} else if(shapeArr[i].props.x + shapeArr[i].props.w/2 < sublinePos && shapeArr[i].props.x + shapeArr[i].props.w >= sublinePos) { // 辅助线穿过图形右半部分---不移动
|
||||
passedMoreShapes.push(shapeArr[i])
|
||||
}
|
||||
else {
|
||||
sublineSideShape.push(shapeArr[i]) // 在辅助线左侧--不需要移动
|
||||
}
|
||||
} else if(type == 'y') {
|
||||
if (shapeArr[i].props[type] > sublinePos) { // 辅助线以下
|
||||
|
||||
} else if((shapeArr[i].props.y <= sublinePos) && (shapeArr[i].props.y + shapeArr[i].props.h/2>= sublinePos)) { // 辅助线穿过图形上半
|
||||
passedShapes.push(shapeArr[i])
|
||||
} else if(shapeArr[i].props.y + shapeArr[i].props.h/2 < sublinePos && shapeArr[i].props.y + shapeArr[i].props.h >= sublinePos) {
|
||||
passedMoreShapes.push(shapeArr[i])
|
||||
}
|
||||
else {
|
||||
sublineSideShape.push(shapeArr[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (sublineSideShape.length > 0 && type == 'y') {
|
||||
sublineSideEdge = Math.max.apply(Math,sublineSideShape.map(item => { return (item.props.y + item.props.h) }))
|
||||
} else if (sublineSideShape.length > 0 && type == 'x') {
|
||||
sublineSideEdge = Math.max.apply(Math,sublineSideShape.map(item => { return (item.props.x + item.props.w) }))
|
||||
}
|
||||
if (passedShapes.concat(passedMoreShapes).length > 0) {
|
||||
passedShapesEdge = Math.max.apply(Math,passedShapes.concat(passedMoreShapes).map(item => { return item.props[type] }))
|
||||
}
|
||||
|
||||
return {
|
||||
passedShapesEdge,
|
||||
sublineSideEdge,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function moveShapeAndFile(type,sublinePos,movedDistance) {
|
||||
console.log('间距调节方法调用')
|
||||
var obj = filterShapeAndLine(type,sublinePos)
|
||||
var obj = filterShapeAndLine(type,sublinePos,movedDistance)
|
||||
var movingLines = obj.movingLines
|
||||
var movingShapes = obj.movingShapes
|
||||
var passedShapes = obj.passedShapes
|
||||
@ -335,35 +376,22 @@ function moveShapeAndFile(type,sublinePos,movedDistance) {
|
||||
})
|
||||
}
|
||||
for (let i = 0; i < movingLines.length; i++) {
|
||||
let fromIndex = passedShapes.findIndex(item => item.id == movingLines[i].from.id)
|
||||
let fromIndex = passedShapes.findIndex(item => item.id == movingLines[i].from.id) // 该线是否是需要移动的形状上的起点
|
||||
let toIndex = passedShapes.findIndex(item => item.id == movingLines[i].to.id)
|
||||
|
||||
let moreFromIndex = passedMoreShapes.findIndex(item => item.id == movingLines[i].from.id) // 该线是否是不需要移动的形状上的起点
|
||||
let moreToIndex = passedMoreShapes.findIndex(item => item.id == movingLines[i].to.id) // 上同
|
||||
let moreToIndex = passedMoreShapes.findIndex(item => item.id == movingLines[i].to.id)
|
||||
|
||||
for (let j = 0; j < movingLines[i].points.length; j++) {
|
||||
if(movingLines[i].points[j][type] > sublinePos ) {
|
||||
movingLines[i].points[j][type] += movedDistance
|
||||
} else if(movedDistance < 0 && (sublinePos + movedDistance < movingLines[i].points[j][type]) && (movingLines[i].points[j][type] < sublinePos)) {
|
||||
movingLines[i].points[j][type] += sublinePos + movedDistance - movingLines[i].points[j][type]
|
||||
}
|
||||
}
|
||||
|
||||
if (movingLines[i].from[type] > sublinePos && moreFromIndex == -1) {
|
||||
movingLines[i].from[type] += movedDistance
|
||||
if(type == 'y') {
|
||||
if(movingLines[i].from.x == movingLines[i].to.x && movingLines[i].points.length == 2) { // 直线拐点为中点
|
||||
for (let k = 0; k < movingLines[i].points.length; k++) {
|
||||
movingLines[i].points[k].x = movingLines[i].from.x
|
||||
movingLines[i].points[k].y = (movingLines[i].from.y + movingLines[i].to.y) / 2
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(movingLines[i].from.y == movingLines[i].to.y && movingLines[i].points.length == 2) { // 直线拐点为中点
|
||||
for (let k = 0; k < movingLines[i].points.length; k++) {
|
||||
movingLines[i].points[k].y = movingLines[i].from.y
|
||||
movingLines[i].points[k].x = (movingLines[i].from.x + movingLines[i].to.x) / 2
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(movingLines[i].from[type] <= sublinePos && fromIndex !== -1) {
|
||||
for (let j = 0; j < movingLines[i].points.length; j++) {
|
||||
if(movingLines[i].points[j][type] == movingLines[i].from[type]) {
|
||||
@ -372,23 +400,9 @@ function moveShapeAndFile(type,sublinePos,movedDistance) {
|
||||
}
|
||||
movingLines[i].from[type] += movedDistance
|
||||
}
|
||||
|
||||
if (movingLines[i].to[type] > sublinePos && moreToIndex == -1) {
|
||||
movingLines[i].to[type] += movedDistance
|
||||
if(type == 'y') {
|
||||
if(movingLines[i].from.x == movingLines[i].to.x && movingLines[i].points.length == 2) { // 直线拐点为中点
|
||||
for (let j = 0; j < movingLines[i].points.length; j++) {
|
||||
movingLines[i].points[j].x = movingLines[i].from.x
|
||||
movingLines[i].points[j].y = (movingLines[i].from.y + movingLines[i].to.y) / 2
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(movingLines[i].from.y == movingLines[i].to.y && movingLines[i].points.length == 2) { // 直线拐点为中点
|
||||
for (let j = 0; j < movingLines[i].points.length; j++) {
|
||||
movingLines[i].points[j].y = movingLines[i].from.y
|
||||
movingLines[i].points[j].x = (movingLines[i].from.x + movingLines[i].to.x) / 2
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(passedShapes.length > 0 && movingLines[i].to[type] <= sublinePos && toIndex !== -1) {
|
||||
for (let j = 0; j < movingLines[i].points.length; j++) {
|
||||
if(movingLines[i].points[j][type] == movingLines[i].to[type]) {
|
||||
@ -396,8 +410,8 @@ function moveShapeAndFile(type,sublinePos,movedDistance) {
|
||||
}
|
||||
}
|
||||
movingLines[i].to[type] += movedDistance
|
||||
|
||||
}
|
||||
|
||||
Designer.painter.renderLinker(movingLines[i])
|
||||
}
|
||||
Designer.op.hideTip();
|
||||
@ -414,7 +428,7 @@ function moveShapeAndFile(type,sublinePos,movedDistance) {
|
||||
}
|
||||
|
||||
function moveLanes(type,sublinePos,movedDistance) {
|
||||
var obj = filterShapeAndLine(type,sublinePos)
|
||||
var obj = filterShapeAndLine(type,sublinePos,movedDistance)
|
||||
var movingLines = obj.movingLines
|
||||
var movingShapes = obj.movingShapes
|
||||
var passedShapes = obj.passedShapes
|
||||
@ -718,7 +732,7 @@ Designer.addFunction("selectHorizontal", function() {
|
||||
container.unbind("mousemove.drag");
|
||||
let pos1 = Utils.getRelativePos(b.pageX, b.pageY, canvas)
|
||||
sublinePos = pos1.x
|
||||
obj = filterShapeAndLine('x',sublinePos)
|
||||
obj = getShapeEdge('x',sublinePos)
|
||||
subline1.css({
|
||||
display : "block",
|
||||
"z-index" : Model.orderList.length + 4,
|
||||
@ -758,7 +772,7 @@ Designer.addFunction("selectHorizontal", function() {
|
||||
left : newPos.x,
|
||||
});
|
||||
} else { // 减少
|
||||
let max = obj.passedShapesEdge - obj.sublineSideEdge > 0 ? obj.passedShapesEdge : obj.sublineSideEdge
|
||||
let max = obj.passedShapesEdge - obj.sublineSideEdge > 0 ? obj.passedShapesEdge + 3 : obj.sublineSideEdge + 3 // +3 不能完全碰到边界
|
||||
if (newPos.x < max) {
|
||||
newPos.x = max
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user