@mint-ui/map 1.2.0-test.4 → 1.2.0-test.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,7 +14,15 @@ export declare const computeMarkerOffset: (markerData: KonvaCanvasMarkerData<any
|
|
|
14
14
|
*/
|
|
15
15
|
export declare const isPointInPolygon: (point: Offset, polygon: number[][]) => boolean;
|
|
16
16
|
/**
|
|
17
|
-
* 폴리곤 히트 테스트
|
|
17
|
+
* 폴리곤 히트 테스트 (도넛 폴리곤 지원)
|
|
18
|
+
*
|
|
19
|
+
* 로직:
|
|
20
|
+
* 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
|
|
21
|
+
* 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
|
|
22
|
+
*
|
|
23
|
+
* 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
|
|
24
|
+
* - 도넛 폴리곤 A: isDonutPolygon=true
|
|
25
|
+
* - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
|
|
18
26
|
*/
|
|
19
27
|
export declare const isPointInPolygonData: (clickedOffset: Offset, polygonData: KonvaCanvasMarkerData<any>, getPolygonOffsets: (data: KonvaCanvasMarkerData<any>) => number[][][][] | null) => boolean;
|
|
20
28
|
/**
|
|
@@ -72,18 +72,67 @@ var isPointInPolygon = function (point, polygon) {
|
|
|
72
72
|
return inside;
|
|
73
73
|
};
|
|
74
74
|
/**
|
|
75
|
-
* 폴리곤 히트 테스트
|
|
75
|
+
* 폴리곤 히트 테스트 (도넛 폴리곤 지원)
|
|
76
|
+
*
|
|
77
|
+
* 로직:
|
|
78
|
+
* 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
|
|
79
|
+
* 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
|
|
80
|
+
*
|
|
81
|
+
* 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
|
|
82
|
+
* - 도넛 폴리곤 A: isDonutPolygon=true
|
|
83
|
+
* - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
|
|
76
84
|
*/
|
|
77
85
|
|
|
78
86
|
var isPointInPolygonData = function (clickedOffset, polygonData, getPolygonOffsets) {
|
|
79
87
|
var polygonOffsets = getPolygonOffsets(polygonData);
|
|
80
|
-
if (!polygonOffsets) return false;
|
|
88
|
+
if (!polygonOffsets) return false; // 🍩 도넛 폴리곤 처리 (isDonutPolygon === true)
|
|
81
89
|
|
|
82
|
-
|
|
83
|
-
var
|
|
90
|
+
if (polygonData.isDonutPolygon) {
|
|
91
|
+
for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
|
|
92
|
+
var multiPolygon = polygonOffsets_1[_i];
|
|
93
|
+
if (multiPolygon.length === 0) continue; // 외부 폴리곤만 있는 경우 (구멍 없음) - 일반 폴리곤처럼 처리
|
|
84
94
|
|
|
85
|
-
|
|
86
|
-
|
|
95
|
+
if (multiPolygon.length === 1) {
|
|
96
|
+
if (isPointInPolygon(clickedOffset, multiPolygon[0])) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
continue;
|
|
101
|
+
} // 1. 외부 폴리곤(첫 번째)에 포함되는지 확인
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
var outerPolygon = multiPolygon[0];
|
|
105
|
+
|
|
106
|
+
if (!isPointInPolygon(clickedOffset, outerPolygon)) {
|
|
107
|
+
continue; // 외부 폴리곤 밖이면 다음 multiPolygon 확인
|
|
108
|
+
} // 2. 내부 구멍들(나머지)에 포함되는지 확인
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
for (var i = 1; i < multiPolygon.length; i++) {
|
|
112
|
+
var hole = multiPolygon[i];
|
|
113
|
+
|
|
114
|
+
if (isPointInPolygon(clickedOffset, hole)) {
|
|
115
|
+
// ❌ 구멍 안에 있음 → 이 도넛 폴리곤은 히트 안 됨
|
|
116
|
+
// 다른 multiPolygon 체크하지 않고 바로 false 반환
|
|
117
|
+
// (도넛 폴리곤의 구멍 안은 무조건 클릭 불가)
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
} // ✅ 외부 폴리곤 안 + 구멍 밖 = 히트!
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return false;
|
|
127
|
+
} // 일반 폴리곤 처리 (isDonutPolygon === false 또는 undefined)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
for (var _a = 0, polygonOffsets_2 = polygonOffsets; _a < polygonOffsets_2.length; _a++) {
|
|
131
|
+
var multiPolygon = polygonOffsets_2[_a];
|
|
132
|
+
|
|
133
|
+
for (var _b = 0, multiPolygon_2 = multiPolygon; _b < multiPolygon_2.length; _b++) {
|
|
134
|
+
var polygonGroup = multiPolygon_2[_b];
|
|
135
|
+
if (polygonGroup.length === 0) continue;
|
|
87
136
|
|
|
88
137
|
if (isPointInPolygon(clickedOffset, polygonGroup)) {
|
|
89
138
|
return true;
|
package/dist/index.es.js
CHANGED
|
@@ -860,18 +860,67 @@ var isPointInPolygon = function (point, polygon) {
|
|
|
860
860
|
return inside;
|
|
861
861
|
};
|
|
862
862
|
/**
|
|
863
|
-
* 폴리곤 히트 테스트
|
|
863
|
+
* 폴리곤 히트 테스트 (도넛 폴리곤 지원)
|
|
864
|
+
*
|
|
865
|
+
* 로직:
|
|
866
|
+
* 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
|
|
867
|
+
* 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
|
|
868
|
+
*
|
|
869
|
+
* 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
|
|
870
|
+
* - 도넛 폴리곤 A: isDonutPolygon=true
|
|
871
|
+
* - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
|
|
864
872
|
*/
|
|
865
873
|
|
|
866
874
|
var isPointInPolygonData = function (clickedOffset, polygonData, getPolygonOffsets) {
|
|
867
875
|
var polygonOffsets = getPolygonOffsets(polygonData);
|
|
868
|
-
if (!polygonOffsets) return false;
|
|
876
|
+
if (!polygonOffsets) return false; // 🍩 도넛 폴리곤 처리 (isDonutPolygon === true)
|
|
877
|
+
|
|
878
|
+
if (polygonData.isDonutPolygon) {
|
|
879
|
+
for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
|
|
880
|
+
var multiPolygon = polygonOffsets_1[_i];
|
|
881
|
+
if (multiPolygon.length === 0) continue; // 외부 폴리곤만 있는 경우 (구멍 없음) - 일반 폴리곤처럼 처리
|
|
882
|
+
|
|
883
|
+
if (multiPolygon.length === 1) {
|
|
884
|
+
if (isPointInPolygon(clickedOffset, multiPolygon[0])) {
|
|
885
|
+
return true;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
continue;
|
|
889
|
+
} // 1. 외부 폴리곤(첫 번째)에 포함되는지 확인
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
var outerPolygon = multiPolygon[0];
|
|
893
|
+
|
|
894
|
+
if (!isPointInPolygon(clickedOffset, outerPolygon)) {
|
|
895
|
+
continue; // 외부 폴리곤 밖이면 다음 multiPolygon 확인
|
|
896
|
+
} // 2. 내부 구멍들(나머지)에 포함되는지 확인
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
for (var i = 1; i < multiPolygon.length; i++) {
|
|
900
|
+
var hole = multiPolygon[i];
|
|
901
|
+
|
|
902
|
+
if (isPointInPolygon(clickedOffset, hole)) {
|
|
903
|
+
// ❌ 구멍 안에 있음 → 이 도넛 폴리곤은 히트 안 됨
|
|
904
|
+
// 다른 multiPolygon 체크하지 않고 바로 false 반환
|
|
905
|
+
// (도넛 폴리곤의 구멍 안은 무조건 클릭 불가)
|
|
906
|
+
return false;
|
|
907
|
+
}
|
|
908
|
+
} // ✅ 외부 폴리곤 안 + 구멍 밖 = 히트!
|
|
909
|
+
|
|
910
|
+
|
|
911
|
+
return true;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
return false;
|
|
915
|
+
} // 일반 폴리곤 처리 (isDonutPolygon === false 또는 undefined)
|
|
916
|
+
|
|
869
917
|
|
|
870
|
-
for (var
|
|
871
|
-
var multiPolygon =
|
|
918
|
+
for (var _a = 0, polygonOffsets_2 = polygonOffsets; _a < polygonOffsets_2.length; _a++) {
|
|
919
|
+
var multiPolygon = polygonOffsets_2[_a];
|
|
872
920
|
|
|
873
|
-
for (var
|
|
874
|
-
var polygonGroup = multiPolygon_2[
|
|
921
|
+
for (var _b = 0, multiPolygon_2 = multiPolygon; _b < multiPolygon_2.length; _b++) {
|
|
922
|
+
var polygonGroup = multiPolygon_2[_b];
|
|
923
|
+
if (polygonGroup.length === 0) continue;
|
|
875
924
|
|
|
876
925
|
if (isPointInPolygon(clickedOffset, polygonGroup)) {
|
|
877
926
|
return true;
|
package/dist/index.umd.js
CHANGED
|
@@ -864,18 +864,67 @@
|
|
|
864
864
|
return inside;
|
|
865
865
|
};
|
|
866
866
|
/**
|
|
867
|
-
* 폴리곤 히트 테스트
|
|
867
|
+
* 폴리곤 히트 테스트 (도넛 폴리곤 지원)
|
|
868
|
+
*
|
|
869
|
+
* 로직:
|
|
870
|
+
* 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
|
|
871
|
+
* 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
|
|
872
|
+
*
|
|
873
|
+
* 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
|
|
874
|
+
* - 도넛 폴리곤 A: isDonutPolygon=true
|
|
875
|
+
* - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
|
|
868
876
|
*/
|
|
869
877
|
|
|
870
878
|
var isPointInPolygonData = function (clickedOffset, polygonData, getPolygonOffsets) {
|
|
871
879
|
var polygonOffsets = getPolygonOffsets(polygonData);
|
|
872
|
-
if (!polygonOffsets) return false;
|
|
880
|
+
if (!polygonOffsets) return false; // 🍩 도넛 폴리곤 처리 (isDonutPolygon === true)
|
|
881
|
+
|
|
882
|
+
if (polygonData.isDonutPolygon) {
|
|
883
|
+
for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
|
|
884
|
+
var multiPolygon = polygonOffsets_1[_i];
|
|
885
|
+
if (multiPolygon.length === 0) continue; // 외부 폴리곤만 있는 경우 (구멍 없음) - 일반 폴리곤처럼 처리
|
|
886
|
+
|
|
887
|
+
if (multiPolygon.length === 1) {
|
|
888
|
+
if (isPointInPolygon(clickedOffset, multiPolygon[0])) {
|
|
889
|
+
return true;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
continue;
|
|
893
|
+
} // 1. 외부 폴리곤(첫 번째)에 포함되는지 확인
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
var outerPolygon = multiPolygon[0];
|
|
897
|
+
|
|
898
|
+
if (!isPointInPolygon(clickedOffset, outerPolygon)) {
|
|
899
|
+
continue; // 외부 폴리곤 밖이면 다음 multiPolygon 확인
|
|
900
|
+
} // 2. 내부 구멍들(나머지)에 포함되는지 확인
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
for (var i = 1; i < multiPolygon.length; i++) {
|
|
904
|
+
var hole = multiPolygon[i];
|
|
905
|
+
|
|
906
|
+
if (isPointInPolygon(clickedOffset, hole)) {
|
|
907
|
+
// ❌ 구멍 안에 있음 → 이 도넛 폴리곤은 히트 안 됨
|
|
908
|
+
// 다른 multiPolygon 체크하지 않고 바로 false 반환
|
|
909
|
+
// (도넛 폴리곤의 구멍 안은 무조건 클릭 불가)
|
|
910
|
+
return false;
|
|
911
|
+
}
|
|
912
|
+
} // ✅ 외부 폴리곤 안 + 구멍 밖 = 히트!
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
return true;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
return false;
|
|
919
|
+
} // 일반 폴리곤 처리 (isDonutPolygon === false 또는 undefined)
|
|
920
|
+
|
|
873
921
|
|
|
874
|
-
for (var
|
|
875
|
-
var multiPolygon =
|
|
922
|
+
for (var _a = 0, polygonOffsets_2 = polygonOffsets; _a < polygonOffsets_2.length; _a++) {
|
|
923
|
+
var multiPolygon = polygonOffsets_2[_a];
|
|
876
924
|
|
|
877
|
-
for (var
|
|
878
|
-
var polygonGroup = multiPolygon_2[
|
|
925
|
+
for (var _b = 0, multiPolygon_2 = multiPolygon; _b < multiPolygon_2.length; _b++) {
|
|
926
|
+
var polygonGroup = multiPolygon_2[_b];
|
|
927
|
+
if (polygonGroup.length === 0) continue;
|
|
879
928
|
|
|
880
929
|
if (isPointInPolygon(clickedOffset, polygonGroup)) {
|
|
881
930
|
return true;
|