|
|
@@ -341,9 +341,18 @@ export default class Draw {
|
|
|
this.context.fillStyle = Style.Select.Rectangle.fillStyle
|
|
|
fillFlag = true;
|
|
|
}
|
|
|
- else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1||selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1){
|
|
|
this.context.strokeStyle = Style.Select.Rectangle.strokeStyle
|
|
|
}
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Rectangle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
} else if (draggingItem && draggingItem.type == VectorType.Rectangle) {
|
|
|
if (geometry.vectorId == draggingItem.vectorId) {
|
|
|
@@ -352,9 +361,18 @@ export default class Draw {
|
|
|
this.context.fillStyle = Style.Select.Rectangle.fillStyle
|
|
|
fillFlag = true;
|
|
|
}
|
|
|
- else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1||selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1){
|
|
|
this.context.strokeStyle = Style.Select.Rectangle.strokeStyle
|
|
|
}
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Rectangle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -365,13 +383,21 @@ export default class Draw {
|
|
|
this.context.fillStyle = Style.Focus.Rectangle.fillStyle
|
|
|
fillFlag = true;
|
|
|
}
|
|
|
- else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1||selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Side)>-1){
|
|
|
this.context.strokeStyle = Style.Focus.Rectangle.strokeStyle
|
|
|
}
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Focus.Rectangle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
this.context.moveTo(points[0].x, points[0].y)
|
|
|
for (let i = 1; i < points.length; ++i) {
|
|
|
this.context.lineTo(points[i].x, points[i].y)
|
|
|
@@ -384,36 +410,286 @@ export default class Draw {
|
|
|
this.context.restore()
|
|
|
}
|
|
|
|
|
|
- // drawFurniture2(geometry) {
|
|
|
- // // //this.app.store.getAppImage(`images/cad/signs/${this.uiControl.selectUI}.svg`).then(img => {})
|
|
|
- // // var img = new Image()
|
|
|
- // // // img.src = 'chart.svg';
|
|
|
- // // // if(geometry.geoType == ''){
|
|
|
- // // // img.src = '';
|
|
|
- // // // }
|
|
|
- // // document.body.appendChild(img)
|
|
|
- // // img.onload = function () {
|
|
|
- // // var width = img.clientWidth * 1.5
|
|
|
- // // var height = img.clientHeight * 1.5
|
|
|
- // // var x = 2
|
|
|
- // // var y = 2
|
|
|
- // // this.context.drawImage(img, x, y, width, height)
|
|
|
- // // }
|
|
|
- // this.context.save()
|
|
|
-
|
|
|
- // let imgWidth = geometry.sideLength * coordinate.res*50
|
|
|
- // let imgHeight = geometry.sideLength * coordinate.res*50
|
|
|
- // const pt = coordinate.getScreenXY({
|
|
|
- // x: geometry.center.x - geometry.sideLength *50/ 2,
|
|
|
- // y: geometry.center.y + geometry.sideLength *50/ 2,
|
|
|
- // })
|
|
|
- // // signService.getSign(geometry.geoType).then(img => {
|
|
|
- // // this.context.drawImage(img, pt.x, pt.y, imgWidth, imgHeight)
|
|
|
- // // })
|
|
|
- // let img = signService.getSign(geometry.geoType)
|
|
|
- // this.context.drawImage(img, pt.x, pt.y, imgWidth, imgHeight)
|
|
|
- // this.context.restore()
|
|
|
- // }
|
|
|
+ drawCircleGeo(geometry)
|
|
|
+ {
|
|
|
+ let radius = geometry.radius * coordinate.res
|
|
|
+ const twoPi = Math.PI * 2
|
|
|
+ const pt = coordinate.getScreenXY(geometry.center)
|
|
|
+
|
|
|
+ this.context.save()
|
|
|
+ this.context.strokeStyle = Style.Circle.strokeStyle
|
|
|
+
|
|
|
+ const selectItem = stateService.getSelectItem()
|
|
|
+ const draggingItem = stateService.getDraggingItem()
|
|
|
+ const focusItem = stateService.getFocusItem()
|
|
|
+ let fillFlag = false
|
|
|
+
|
|
|
+ if (selectItem && selectItem.type == VectorType.Circle) {
|
|
|
+ if (geometry.vectorId == selectItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Select.Circle.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Select.Circle.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Circle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (draggingItem && draggingItem.type == VectorType.Circle) {
|
|
|
+ if (geometry.vectorId == draggingItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Select.Circle.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Select.Circle.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Circle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (focusItem && focusItem.type == VectorType.Circle) {
|
|
|
+ if (geometry.vectorId == focusItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Focus.Circle.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Focus.Circle.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Focus.Circle.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.context.beginPath()
|
|
|
+ this.context.arc(pt.x, pt.y, radius, 0, twoPi, true)
|
|
|
+ this.context.stroke()
|
|
|
+ if(fillFlag){
|
|
|
+ this.context.fill()
|
|
|
+ }
|
|
|
+ this.context.restore()
|
|
|
+ }
|
|
|
+
|
|
|
+ drawIcon(geometry)
|
|
|
+ {
|
|
|
+ let radius = geometry.radius * coordinate.res
|
|
|
+ const twoPi = Math.PI * 2
|
|
|
+ const pt = coordinate.getScreenXY(geometry.center)
|
|
|
+
|
|
|
+ this.context.save()
|
|
|
+ this.context.strokeStyle = Style.Icon.strokeStyle
|
|
|
+
|
|
|
+ const selectItem = stateService.getSelectItem()
|
|
|
+ const draggingItem = stateService.getDraggingItem()
|
|
|
+ const focusItem = stateService.getFocusItem()
|
|
|
+ let fillFlag = false
|
|
|
+
|
|
|
+ if (selectItem && selectItem.type == VectorType.Icon) {
|
|
|
+ if (geometry.vectorId == selectItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Select.Icon.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Select.Icon.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Icon.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (draggingItem && draggingItem.type == VectorType.Icon) {
|
|
|
+ if (geometry.vectorId == draggingItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Select.Icon.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Select.Icon.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Select.Icon.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (focusItem && focusItem.type == VectorType.Icon) {
|
|
|
+ if (geometry.vectorId == focusItem.vectorId) {
|
|
|
+ if(selectItem.selectIndex == SelectState.All){
|
|
|
+ this.context.strokeStyle = Style.Focus.Icon.strokeStyle
|
|
|
+ this.context.fillStyle = Style.Focus.Icon.fillStyle
|
|
|
+ fillFlag = true;
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex.indexOf(SelectState.Vertex)>-1){
|
|
|
+ this.context.strokeStyle = Style.Focus.Icon.strokeStyle
|
|
|
+ let vertexIndex = selectItem.selectIndex.replace(SelectState.Vertex+'_','');
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.points[vertexIndex].x,
|
|
|
+ y:geometry.points[vertexIndex].y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ this.drawRec(geometry.points)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.context.beginPath()
|
|
|
+ this.context.arc(pt.x, pt.y, radius, 0, twoPi, true)
|
|
|
+ this.context.stroke()
|
|
|
+ if(fillFlag){
|
|
|
+ this.context.fill()
|
|
|
+ }
|
|
|
+ this.context.restore()
|
|
|
+
|
|
|
+ this.context.save()
|
|
|
+ this.setCanvasStyle(Style.Font)
|
|
|
+
|
|
|
+ let fonSize = Math.ceil(radius * 14/20);
|
|
|
+ this.context.font = fonSize + Style.Font.font;
|
|
|
+ let center = coordinate.getScreenXY(geometry.center);
|
|
|
+ this.context.fillText(geometry.value, center.x , center.y)
|
|
|
+ this.context.restore()
|
|
|
+ }
|
|
|
+
|
|
|
+ drawArrow(geometry){
|
|
|
+
|
|
|
+ this.context.save()
|
|
|
+ this.context.beginPath()
|
|
|
+ this.context.lineCap = 'round' //线段端点的样式
|
|
|
+ this.context.strokeStyle = Style.Arrow.strokeStyle
|
|
|
+ this.context.lineWidth = Style.Arrow.lineWidth * coordinate.ratio
|
|
|
+
|
|
|
+ const selectItem = stateService.getSelectItem()
|
|
|
+ const draggingItem = stateService.getDraggingItem()
|
|
|
+ const focusItem = stateService.getFocusItem()
|
|
|
+
|
|
|
+ if (selectItem && selectItem.type == VectorType.Arrow) {
|
|
|
+ if (geometry.vectorId == selectItem.vectorId) {
|
|
|
+ this.context.strokeStyle = Style.Select.Arrow.strokeStyle
|
|
|
+ if(selectItem.selectIndex == SelectState.Start){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.startPoint.x,
|
|
|
+ y:geometry.startPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else if(selectItem.selectIndex == SelectState.End){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.endPoint.x,
|
|
|
+ y:geometry.endPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (draggingItem && draggingItem.type == VectorType.Arrow) {
|
|
|
+ if (geometry.vectorId == draggingItem.vectorId) {
|
|
|
+ this.context.strokeStyle = Style.Select.Arrow.strokeStyle
|
|
|
+ if(draggingItem.selectIndex == SelectState.Start){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.startPoint.x,
|
|
|
+ y:geometry.startPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else if(draggingItem.selectIndex == SelectState.End){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.endPoint.x,
|
|
|
+ y:geometry.endPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (focusItem && focusItem.type == VectorType.Arrow) {
|
|
|
+ if (geometry.vectorId == focusItem.vectorId) {
|
|
|
+ this.context.strokeStyle = Style.Focus.Arrow.strokeStyle
|
|
|
+ if(focusItem.selectIndex == SelectState.Start){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.startPoint.x,
|
|
|
+ y:geometry.startPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else if(focusItem.selectIndex == SelectState.End){
|
|
|
+ this.drawCircle({
|
|
|
+ x:geometry.endPoint.x,
|
|
|
+ y:geometry.endPoint.y,
|
|
|
+ name: ElementEvents.StartAddWall
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ let point1 = coordinate.getScreenXY(geometry.startPoint)
|
|
|
+ let point2 = coordinate.getScreenXY(geometry.endPoint)
|
|
|
+
|
|
|
+ var headlen = 10; //自定义箭头线的长度
|
|
|
+ var theta = 20; //自定义箭头线与直线的夹角,个人觉得45°刚刚好
|
|
|
+ //箭头线终点坐标
|
|
|
+ var arrowX, arrowY;
|
|
|
+ let fromX = point2.x;
|
|
|
+ let fromY = point2.y;
|
|
|
+ let toX = point1.x;
|
|
|
+ let toY = point1.y;
|
|
|
+ // 计算各角度和对应的箭头终点坐标
|
|
|
+ var angle = Math.atan2(fromY - toY, fromX - toX) * 180 / Math.PI;
|
|
|
+ var angle1 = (angle + theta) * Math.PI / 180;
|
|
|
+ var angle2 = (angle - theta) * Math.PI / 180;
|
|
|
+ var topX = headlen * Math.cos(angle1);
|
|
|
+ var topY = headlen * Math.sin(angle1);
|
|
|
+ var botX = headlen * Math.cos(angle2);
|
|
|
+ var botY = headlen * Math.sin(angle2);
|
|
|
+ this.context.beginPath();
|
|
|
+ //画直线
|
|
|
+ this.context.moveTo(fromX, fromY);
|
|
|
+ this.context.lineTo(toX, toY);
|
|
|
+
|
|
|
+ arrowX = toX + topX;
|
|
|
+ arrowY = toY + topY;
|
|
|
+ //画上边箭头线
|
|
|
+ this.context.moveTo(arrowX, arrowY);
|
|
|
+ this.context.lineTo(toX, toY);
|
|
|
+
|
|
|
+ arrowX = toX + botX;
|
|
|
+ arrowY = toY + botY;
|
|
|
+ //画下边箭头线
|
|
|
+ this.context.lineTo(arrowX, arrowY);
|
|
|
+ this.context.stroke()
|
|
|
+ this.context.restore()
|
|
|
+ }
|
|
|
|
|
|
drawCircle(element) {
|
|
|
let radius = null
|
|
|
@@ -434,6 +710,17 @@ export default class Draw {
|
|
|
this.context.restore()
|
|
|
}
|
|
|
|
|
|
+ drawRec(points){
|
|
|
+ let point = coordinate.getScreenXY(points[0])
|
|
|
+ this.context.moveTo(point.x, point.y)
|
|
|
+ for (let i = 1; i < points.length; ++i) {
|
|
|
+ point = coordinate.getScreenXY(points[i])
|
|
|
+ this.context.lineTo(point.x, point.y)
|
|
|
+ }
|
|
|
+ this.context.closePath();
|
|
|
+ this.context.stroke()
|
|
|
+ }
|
|
|
+
|
|
|
drawLine(element) {
|
|
|
let start = coordinate.getScreenXY(element.start)
|
|
|
let end = coordinate.getScreenXY(element.end)
|