group object 좌표 재계산 로직 수정
This commit is contained in:
parent
97a444bccd
commit
53a1f4ed00
@ -29,22 +29,39 @@ fabric.Rect.prototype.getCurrentPoints = function () {
|
||||
|
||||
/**
|
||||
* fabric.Group에 getCurrentPoints 메서드를 추가 (도머 그룹용)
|
||||
* 그룹의 groupPoints를 다시 계산하여 반환
|
||||
* 그룹 내 객체들의 점들을 수집하여 현재 월드 좌표를 반환
|
||||
*/
|
||||
fabric.Group.prototype.getCurrentPoints = function () {
|
||||
// groupPoints를 다시 계산
|
||||
// 그룹 내 객체들로부터 실시간으로 점들을 계산
|
||||
if (this._objects && this._objects.length > 0) {
|
||||
let allPoints = []
|
||||
|
||||
// 그룹에 groupPoints가 있으면 해당 점들을 사용 (도머의 경우)
|
||||
if (this.groupPoints && Array.isArray(this.groupPoints)) {
|
||||
const matrix = this.calcTransformMatrix()
|
||||
console.log('this.groupPoints', this.groupPoints)
|
||||
return this.groupPoints.map(function (p) {
|
||||
const point = new fabric.Point(p.x, p.y)
|
||||
return fabric.util.transformPoint(point, matrix)
|
||||
// 그룹 내 모든 객체의 점들을 수집
|
||||
this._objects.forEach(function (obj) {
|
||||
if (obj.getCurrentPoints && typeof obj.getCurrentPoints === 'function') {
|
||||
const objPoints = obj.getCurrentPoints()
|
||||
allPoints = allPoints.concat(objPoints)
|
||||
} else if (obj.points && Array.isArray(obj.points)) {
|
||||
const pathOffset = obj.pathOffset || { x: 0, y: 0 }
|
||||
const matrix = obj.calcTransformMatrix()
|
||||
const transformedPoints = obj.points
|
||||
.map(function (p) {
|
||||
return new fabric.Point(p.x - pathOffset.x, p.y - pathOffset.y)
|
||||
})
|
||||
.map(function (p) {
|
||||
return fabric.util.transformPoint(p, matrix)
|
||||
})
|
||||
allPoints = allPoints.concat(transformedPoints)
|
||||
}
|
||||
})
|
||||
|
||||
if (allPoints.length > 0) {
|
||||
// Convex Hull 알고리즘을 사용하여 외곽 점들만 반환
|
||||
return this.getConvexHull(allPoints)
|
||||
}
|
||||
}
|
||||
|
||||
// groupPoints가 없으면 바운딩 박스를 사용
|
||||
// 객체가 없으면 바운딩 박스를 사용
|
||||
const bounds = this.getBoundingRect()
|
||||
const points = [
|
||||
{ x: bounds.left, y: bounds.top },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user