123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /*
- * ********************************************************************************************************************
- *
- * :*$@@%$*: ;: ;; ;;
- * :@@%! :!@@%: %! ;%%@@%$ =@@@@@@@%; @%@@@%%%%@@@@@
- * :@%; :$= %%$$$%$$ ;$$ ;$@= !@$
- * =@! %! @ $=;% !@@@%: !$$$$$$$$$$$$$$=
- * =@* %! @ $= % %@= =%@! %=
- * *$%%! @@= ;=$%%%$*: %! @ $= % =%%%%%%@$ *%: =%
- * %@@!: !@@@%=$@@@@%! :*@@$: %! @ $= % $* ;@ @* :%*
- * ;@@! ;!!!;: ;@%: =======@%========* @ $$ % $%*****$@ :@$=*********=@$
- * $@* ;@@@%=!: *@*
- * =@$ ;;;!=%@@@@=! =@!
- * %@$: =@%: :*@@@* %@= Copyright (c) 2016-2019. 北京上格云技术有限公司
- * ;%@@$=$@@%* *@@@$=%@@%;
- * ::;:: ::;:: All rights reserved.
- *
- * ********************************************************************************************************************
- */
- import { SGraphyItem, SMouseEvent } from "@sybotan-web/graphy/lib";
- import { SColor, SPainter, SPoint, SRect } from "@sybotan-web/draw/lib";
- class PolygonItemInterface {
- space: any;
- parent: SGraphyItem | undefined;
- }
- /**
- * 墙item
- *
- * @author 郝建龙
- */
- export class WallItem extends SGraphyItem {
- /** 点坐标list */
- pointArr: SPoint[];
- /** 填充色 */
- fillColor: SColor = new SColor("#F2F6FC");
- /** 边框色 */
- color: SColor = SColor.Black;
- /** 边框宽度 */
- width: number = 200;
- /** 墙id */
- id: string;
- /** 中心坐标 */
- centerOfGravityPoint: { x: number; y: number };
- /** 墙名称 */
- initName: null | string | undefined;
- /** 绘制文案 */
- viewText: string = "";
- /** 需要缓存的边框颜色 */
- cacheColor: SColor = SColor.Black;
- /** 需要缓存的填充色 */
- cacheFillColor: SColor = new SColor("#F2F6FC");
- /** 需要缓存的边框宽度 */
- cacheWidth: number = 100;
- /** 是否激活 */
- actived: boolean = false;
- /**
- * 构造函数
- *
- * @param PolygonItemData
- */
- constructor(PolygonItemData: PolygonItemInterface) {
- super(PolygonItemData.parent);
- // 修改绘制路径格式
- let newSpacePaths: SPoint[] = PolygonItemData.space.Paths[0].map(
- (item: SPoint) => {
- return new SPoint(item.x, item.y);
- }
- );
- this.pointArr = newSpacePaths;
- // 填充色
- this.fillColor = PolygonItemData.space.fillColor
- ? PolygonItemData.space.fillColor
- : new SColor("#F2F6FC");
- // 边框色
- this.color = PolygonItemData.space.color
- ? PolygonItemData.space.color
- : SColor.Black;
- //边框宽度
- this.width = PolygonItemData.space.width
- ? PolygonItemData.space.width
- : 100;
- //中心点
- this.centerOfGravityPoint = {
- x: PolygonItemData.space.LocationPoint.X,
- y: -PolygonItemData.space.LocationPoint.Y
- };
- this.initName = PolygonItemData.space.Name;
- this.id = PolygonItemData.space.id;
- this.viewText = PolygonItemData.space.Name;
- }
- /**
- * Item对象边界区域
- *
- * @return SRect
- */
- boundingRect(): SRect {
- let minX = this.pointArr[0].x;
- let maxX = minX;
- let minY = this.pointArr[0].y;
- let maxY = minY;
- for (let 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
- */
- contains(x: number, y: number): boolean {
- let 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 文字的坐标
- */
- addText(text: string, centerOfGravityPoint?: { x: number; y: number }) {
- this.viewText = text;
- if (centerOfGravityPoint) {
- this.centerOfGravityPoint = centerOfGravityPoint;
- }
- }
- /**
- * Item绘制操作
- *
- * @param painter painter对象
- * @param rect 绘制区域
- */
- onDraw(painter: SPainter, rect?: SRect): void {
- 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
- );
- }
- }
- } // Class WallItem
|