[AI CC-CC2021] [±]Неверный PathPoint.pointType при создании контура пером

Статус
Закрыто для дальнейших ответов.

dumbm1

Топикстартер
10 лет на форуме
Сообщения
421
Реакции
196
При рисовании контура инструментом Pen Tool все PathPoint создаются как SMOOTH, даже если по факту делать угловые точки (например, просто пером тыкать не вытягивая направляющих).
Мне нужно определить реальный тип точки (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, где это обсуждается

Спасибо!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Возможно, я чего-то не понимаю и у Adobe всё правильно.
Да нет, не правильно. У адобы этот самый pointType в объектной модели чисто для мебели - если его даже менять бессмысленно, эффекта ноль.
 
  • Спасибо
Реакции: Skvoznyak и dumbm1
Статус
Закрыто для дальнейших ответов.