|
@@ -0,0 +1,209 @@
|
|
|
+var __extends = (this && this.__extends) || (function () {
|
|
|
+ var extendStatics = function (d, b) {
|
|
|
+ extendStatics = Object.setPrototypeOf ||
|
|
|
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
|
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
|
+ return extendStatics(d, b);
|
|
|
+ };
|
|
|
+ return function (d, b) {
|
|
|
+ extendStatics(d, b);
|
|
|
+ function __() { this.constructor = d; }
|
|
|
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
|
+ };
|
|
|
+})();
|
|
|
+import { SGraphyItem } from '@sybotan-web/graphy';
|
|
|
+import { SRect, SPoint } from "@sybotan-web/base";
|
|
|
+import { SColor } from "@sybotan-web/draw";
|
|
|
+/**
|
|
|
+ * 不规则多边形Item类
|
|
|
+ *
|
|
|
+ */
|
|
|
+var SGraphyPolygonItem = /** @class */ (function (_super) {
|
|
|
+ __extends(SGraphyPolygonItem, _super);
|
|
|
+ // actived: boolean = false; //是否激活
|
|
|
+ /**
|
|
|
+ * 构造函数
|
|
|
+ *
|
|
|
+ * @param pointArr 点坐标list
|
|
|
+ * @param width 边框的宽度
|
|
|
+ * @param color 边框的颜色
|
|
|
+ * @param fillColor 多边形填充的颜色
|
|
|
+ * @param businessId 空间id
|
|
|
+ * @param businessName 空间名称
|
|
|
+ * @param centerOfGravityPoint 中心点
|
|
|
+ * @param isBusiness 状态
|
|
|
+ * @param parent
|
|
|
+ */
|
|
|
+ function SGraphyPolygonItem(PolygonItemData) {
|
|
|
+ var _this = _super.call(this, PolygonItemData.parent) || this;
|
|
|
+ _this.fillColor = new SColor('#F2F6FC');
|
|
|
+ _this.color = SColor.Black;
|
|
|
+ _this.width = 200;
|
|
|
+ _this.viewText = ''; //绘出的文案
|
|
|
+ _this.isBusiness = 1;
|
|
|
+ _this.cacheColor = SColor.Black; //需要缓存的边框
|
|
|
+ _this.cacheFillColor = new SColor('#F2F6FC'); //需要缓存的填充色
|
|
|
+ _this.cacheWidth = 100;
|
|
|
+ // 修改绘制路径格式
|
|
|
+ var newSpacePaths = PolygonItemData.space.Paths[0].map(function (item) {
|
|
|
+ return new SPoint(item.X, item.Y);
|
|
|
+ });
|
|
|
+ _this.pointArr = newSpacePaths;
|
|
|
+ // // 填充色
|
|
|
+ PolygonItemData.fillColor ? _this.fillColor = PolygonItemData.fillColor : _this.fillColor = new SColor('#F2F6FC');
|
|
|
+ // 边框色
|
|
|
+ PolygonItemData.color ? _this.color = PolygonItemData.color : _this.color = SColor.Black;
|
|
|
+ //边框宽度
|
|
|
+ PolygonItemData.width ? _this.width = PolygonItemData.width : _this.width = 100;
|
|
|
+ //中心点
|
|
|
+ _this.centerOfGravityPoint = {
|
|
|
+ x: PolygonItemData.space.LocationPoint.X,
|
|
|
+ y: -PolygonItemData.space.LocationPoint.Y
|
|
|
+ };
|
|
|
+ //业务空间类型
|
|
|
+ PolygonItemData.isBusiness ? _this.isBusiness = PolygonItemData.isBusiness : _this.isBusiness = 1;
|
|
|
+ //业务空间id
|
|
|
+ PolygonItemData.businessId ? _this.businessId = PolygonItemData.businessId : _this.businessId = null;
|
|
|
+ //业务空间名称
|
|
|
+ _this.businessName = PolygonItemData.space.Name;
|
|
|
+ _this.initName = PolygonItemData.space.Name;
|
|
|
+ // 空间id
|
|
|
+ _this.id = PolygonItemData.space.id;
|
|
|
+ _this.viewText = PolygonItemData.space.Name;
|
|
|
+ return _this;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Item对象边界区域
|
|
|
+ *
|
|
|
+ * @return SRect
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.boundingRect = function () {
|
|
|
+ var minX = this.pointArr[0].x;
|
|
|
+ var maxX = minX;
|
|
|
+ var minY = this.pointArr[0].y;
|
|
|
+ var maxY = minY;
|
|
|
+ for (var i = 1; i < this.pointArr.length; i++) {
|
|
|
+ if (this.pointArr[i].x < minX) {
|
|
|
+ minX = this.pointArr[i].x;
|
|
|
+ }
|
|
|
+ if (this.pointArr[i].y < minY) {
|
|
|
+ minY = this.pointArr[i].y;
|
|
|
+ }
|
|
|
+ if (this.pointArr[i].x > maxX) {
|
|
|
+ maxX = this.pointArr[i].x;
|
|
|
+ }
|
|
|
+ if (this.pointArr[i].y > maxY) {
|
|
|
+ maxY = this.pointArr[i].y;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new SRect(minX, minY, maxX - minX, maxY - minY);
|
|
|
+ }; // Function boundingRect()
|
|
|
+ /**
|
|
|
+ * 判断点是否在区域内
|
|
|
+ *
|
|
|
+ * @param x
|
|
|
+ * @param y
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.contains = function (x, y) {
|
|
|
+ var nCross = 0, point = [x, y], APoints = this.pointArr, length = APoints.length, p1, p2, i, xinters;
|
|
|
+ p1 = APoints[0];
|
|
|
+ for (i = 1; i <= length; i++) {
|
|
|
+ p2 = APoints[i % length];
|
|
|
+ if (point[0] > Math.min(p1.x, p2.x) &&
|
|
|
+ point[0] <= Math.max(p1.x, p2.x)) {
|
|
|
+ if (point[1] <= Math.max(p1.y, p2.y)) {
|
|
|
+ if (p1.x != p2.x) {
|
|
|
+ //计算位置信息
|
|
|
+ xinters = (point[0] - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
|
|
|
+ if (p1.y == p2.y || point[1] <= xinters) {
|
|
|
+ nCross++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ p1 = p2;
|
|
|
+ }
|
|
|
+ return nCross % 2 === 1;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param text 修改的文字
|
|
|
+ * @param centerOfGravityPoint 文字的坐标
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.addText = function (text, centerOfGravityPoint) {
|
|
|
+ this.viewText = text;
|
|
|
+ if (centerOfGravityPoint) {
|
|
|
+ this.centerOfGravityPoint = centerOfGravityPoint;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * Item绘制操作
|
|
|
+ *
|
|
|
+ * @param painter painter对象
|
|
|
+ * @param rect 绘制区域
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.onDraw = function (painter, rect) {
|
|
|
+ if (this.pointArr.length) {
|
|
|
+ painter.pen.color = this.color;
|
|
|
+ painter.brush.color = this.fillColor;
|
|
|
+ painter.pen.lineWidth = this.width;
|
|
|
+ painter.drawPolygon(this.pointArr);
|
|
|
+ // let text = ''
|
|
|
+ // if (this.businessName || this.businessId) {
|
|
|
+ // text = '👇 ' + this.businessName
|
|
|
+ // } else {
|
|
|
+ // text = '⬇️ ' + this.initName
|
|
|
+ // }
|
|
|
+ painter.font.size = this.scale * 200;
|
|
|
+ painter.brush.color = SColor.Black;
|
|
|
+ // painter.drawText(text,this.centerOfGravityPoint.x,this.centerOfGravityPoint.y)
|
|
|
+ painter.drawText(this.viewText, this.centerOfGravityPoint.x, this.centerOfGravityPoint.y);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ SGraphyPolygonItem.prototype.onClick = function (event) {
|
|
|
+ this.$emit('click', { item: this, event: event });
|
|
|
+ return true;
|
|
|
+ }; // Function onClick()
|
|
|
+ /**
|
|
|
+ * 鼠标双击事件
|
|
|
+ *
|
|
|
+ * @param event 保存事件参数
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.onDoubleClick = function (event) {
|
|
|
+ this.$emit('doubleClick', { item: this, event: event });
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ /**
|
|
|
+ * 鼠标按下事件
|
|
|
+ *
|
|
|
+ * @param event 保存事件参数
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.onMouseDown = function (event) {
|
|
|
+ this.$emit('mouseDown', { item: this, event: event });
|
|
|
+ return true;
|
|
|
+ }; // Function onMouseDown()
|
|
|
+ /**
|
|
|
+ * 鼠标移动事件
|
|
|
+ *
|
|
|
+ * @param event 保存事件参数
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.onMouseMove = function (event) {
|
|
|
+ this.$emit('mouseMove', { item: this, event: event });
|
|
|
+ return true;
|
|
|
+ }; // Function onMouseMove()
|
|
|
+ /**
|
|
|
+ * 释放鼠标事件
|
|
|
+ *
|
|
|
+ * @param event 保存事件参数
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ SGraphyPolygonItem.prototype.onMouseUp = function (event) {
|
|
|
+ this.$emit('mouseUp', { item: this, event: event });
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ return SGraphyPolygonItem;
|
|
|
+}(SGraphyItem)); // Class SGraphyPolygonItem
|
|
|
+export default SGraphyPolygonItem;
|