- Сообщения
- 423
- Реакции
- 197
При рисовании контура инструментом Pen Tool все PathPoint создаются как SMOOTH, даже если по факту делать угловые точки (например, просто пером тыкать не вытягивая направляющих).
Мне нужно определить реальный тип точки (CORNER или SMOOTH). Затем, в зависимости от типа точки, произвести какие-то действия...
Для начала написал функцию, которая вроде бы правильно определяет тип точки по координатам трёх точек: PathPoint.anchor, PathPoint.leftDirection, PathPoint.RightDirection.
Вопрос: есть ли способ проще и точнее определить настоящий PathPoint.pointType?
PS.Возможно, я чего-то не понимаю и у Adobe всё правильно. Буду признателен за комментарии
PPS. Тема на forums.adobe.com, где это обсуждается
Спасибо!
Мне нужно определить реальный тип точки (CORNER или SMOOTH). Затем, в зависимости от типа точки, произвести какие-то действия...
Для начала написал функцию, которая вроде бы правильно определяет тип точки по координатам трёх точек: PathPoint.anchor, PathPoint.leftDirection, PathPoint.RightDirection.
Код:
/**
* Unfortunately the Pen Tool creates all the points as smooth.
* Even if in fact they are corner.
* One way to solve this problem -
* check all the points with this helper.
*
* @param {Object} pnt - object of class PathPoint
* @return {Boolean}
* */
function isCornerPoint (pnt) {
if (pnt.pointType == PointType.CORNER) return true;
var x_1, x_2, x_3,
y_1, y_2, y_3,
prec = 100000,
precLow = 10;
x_1 = Math.round (pnt.leftDirection [0] * prec) / prec; // x
y_1 = Math.round (pnt.leftDirection [1] * prec) / prec; // y
x_2 = Math.round (pnt.rightDirection [0] * prec) / prec;
y_2 = Math.round (pnt.rightDirection [1] * prec) / prec;
x_3 = Math.round (pnt.anchor [0] * prec) / prec;
y_3 = Math.round (pnt.anchor [1] * prec) / prec;
if ((x_1 == x_2 && x_2 == x_3) && (y_1 == y_2 && y_2 == y_3)) return true;
if ((x_1 == x_2) && (y_1 == y_2)) return true; // directions is equals
if ((x_1 == x_3) && (y_1 == y_3)) return true; // left directon equals with anchor
if ((x_2 == x_3) && (y_2 == y_3)) return true; // right direction equals with anchor
// The equation of a straight line
// points 1, 2, 3 are not equal and don't lie on one straight line
if (
Math.ceil (((x_3 - x_1) * (y_2 - y_1)) * precLow) / precLow !=
Math.ceil (((x_2 - x_1) * (y_3 - y_1)) * precLow) / precLow
) return true;
return false;
}
Вопрос: есть ли способ проще и точнее определить настоящий PathPoint.pointType?
PS.Возможно, я чего-то не понимаю и у Adobe всё правильно. Буду признателен за комментарии
PPS. Тема на forums.adobe.com, где это обсуждается
Спасибо!