Illustrator: Как рисовать круги в контрольных точках?

Я нарисовал многоугольник с помощью инструмента «Перо». Теперь я хотел бы нарисовать маленькие круги (иллюстрирующие вершины) в контрольных точках многоугольника.

В новейшем иллюстраторе есть ошибка, из-за которой это немного неудобно делать без дополнительных инструментов. Также все текущие ответы неправильно поняли ваш вопрос.
Возможно, вы знаете, как запросить положение контрольных точек полигона в скрипте? С остальным я бы, наверное, справился.
@ZoharLevi, если ваш вопрос получил удовлетворительный ответ ниже, примите тот, который, по вашему мнению, сработал лучше всего. Вы делаете это, нажимая на зеленую галочку рядом с этим ответом. Это хорошо для вас, меня и, прежде всего, для сообщества и других, которые ищут решения той же проблемы.

Ответы (4)

По запросу скрипт для этого на выбранных путях. Это альтернатива ответу @CConroy, которая может упростить задачу в долгосрочной перспективе. Он рисует символы в точках и касательных и соединяет касательные линиями. Вы можете использовать палитру символов, чтобы изменить их внешний вид после факта. Может кому пригодится.

Поместите следующее в файл .jsx и запустите его с выбранными путями:

#target illustrator

main();

function main(){
  var sym = createSymbolsIfNeeded(activeDocument);
  handlePaths(activeDocument.selection, 
              sym.anchor, sym.tangent); 
  // pass undefined for sym tangent if you dont want 
  // tangent handles.
}

function handlePaths(sel, symAcnhor, symDir) {
  for(var i = 0; i < sel.length; i++){
      if(sel[i].typename == "PathItem"){
          symbolsOnPoints(sel[i], symAcnhor, symDir);
      }
      // you would possibly need to recurse
      // the groups and compound paths in some 
      // cases.
  }
}

function symbolsOnPoints(path, symAcnhor, symDir) {
  var pts = path.pathPoints;
  for(var i = 0; i < pts.length; i++){
      var pos = pts[i].anchor

      if(!(symDir === undefined)) {
        var pos2 = pts[i].rightDirection;
        if (dist(pos, pos2) > 0.1){
          drawLine(pos, pos2);
          centeredSymbol(pos2, symDir);
        }

        pos2 = pts[i].leftDirection;
        if (dist(pos, pos2) > 0.1){
          drawLine(pos, pos2);
          centeredSymbol(pos2, symDir);
        }
      }

      centeredSymbol(pos, symAcnhor);
  }
}

function centeredSymbol(pos, symbol) {
  var p = pos.slice(0);
  sym = activeDocument.symbolItems.add(symbol);
  p[0] -= sym.width/2.0;
  p[1] += sym.height/2.0;   
  sym.position = p;
  return sym;
}

function drawLine(p1, p2) {
    var line = activeDocument.pathItems.add();
    line.setEntirePath([p1,p2]);
    return line;
}

function dist(a, b){

  return Math.sqrt(Math.pow(b[0]-a[0], 2) + 
                   Math.pow(b[1]-a[1], 2));        
}

function createSymbolsIfNeeded(doc){
    var symAnchor;
    try {
        symAnchor = doc.symbols.getByName("Anchor");
    }
    catch(err) {
        var circle = doc.pathItems.ellipse(5,5,5,5);
        symAnchor = doc.symbols.add(circle);
        symAnchor.name = "Anchor";
        circle.remove();
    }

    var symTangent;
    try {
        symTangent = doc.symbols.getByName("Tangent");
    }
    catch(err) {
        var rect = doc.pathItems.rectangle(5,5,5,5);
        var symTangent = doc.symbols.add(rect);
        symTangent.name = "Tangent";
        rect.remove();
    }
    return {anchor : symAnchor, tangent: symTangent};
}

    касательные

Изображение 1: Пример результата. Вы можете легко изменить различные символы маркера, выиграв палитру символов.

PS: Скрипт не очень безопасный и стабильный, потому что это один из моих собственных скриптов для быстрой документации, так что будьте осторожны.

PPS: я отправил этот код в битбакет

так на скринке смоделированы гаджеты управления и всплывающие ракурсы? гений.
Хороший! Если бы я увидел этот пост немного раньше, я бы упомянул, что мой старичок делает то же самое . «Возможно, в этом Java [так в оригинале] что-то есть». ;)
@Jongware хорошо, у меня уже было это на моем жестком диске, и я действительно не видел причин не делиться им. Это вполне очевидная необходимость. В какой-то момент я тоже пытался сделать это эффектом.

Начните с рисования линии и окружности, а затем придайте каждому из них стиль, как бы вы хотели, чтобы стороны и вершины многоугольника выглядели.

Перетащите линию на панель «Кисти» и выберите «Узорчатая кисть». В диалоговом окне «Параметры узорчатой ​​кисти» установите для первой плитки (внешний угол) значение «Нет» и нажмите «ОК».

Затем, удерживая клавишу Option, перетащите круг на панель кистей в первый слот плитки . Вы вернетесь в диалоговое окно «Параметры узорчатой ​​кисти», но теперь ваши круги будут вместо всех вершин (в основном углов). Повторите перетаскивание опций для 3 оставшихся фрагментов кисти.

введите описание изображения здесь

Не уверен, почему это получает меньше голосов. Оно работает. Я не думаю, что пользователи читают достаточно внимательно.
@scott я согласен с этим утверждением
на самом деле круги не точно лежат на контрольных точках. Но я не голосовал против, я голосовал за, чтобы отменить ошибочный мод
Кисть можно изменить, чтобы правильно выровнять круги. Я добавил скриншот, чтобы сдержать проголосовавших.
Спасибо за улучшение моего ответа, Скотт. Я новичок на сайте и все еще изучаю веревки.
@ Скотт, к сожалению, не для открытых концов, но вы могли бы использовать для этого наконечник стрелы?
Не проблема @CConroy Ваш ответ был в порядке. Я отредактировал его только потому, что не мог понять, почему он получает меньше голосов. Поэтому я попытался уточнить, чтобы остановить это. Хотя это был хороший ответ. Добро пожаловать!
@Joojaa даже для открытых концов. Просто поаккуратнее с обрезкой кистей. Но это можно сделать достаточно легко.
@jooja нельзя настроить заглушки? т.е. внутри/снаружи/по центру
Не автоматически для кистей @Yorik
Это возможно, если вы тщательно сконструируете кисть и ее углы. Как это Но вы склонны получать «шаткие» круги, если углы углов слишком малы. Не было бы проблемы, если бы все углы были равны 90°. И он пропускает любые внутренние якоря или гладкие якоря, как на круге.
Это ловкий трюк, если я хочу поставить круги по углам; но: i) я хочу во всех контрольных точках, ii) как уже упоминалось, он становится шатким под острыми углами, iii) я не могу впоследствии получить доступ к кругам и отредактировать их - например, перевод. Спасибо

вот еще один способ рисовать круги или квадраты в каждой опорной точке (хотя без указателей направления)

  • выберите свой путь
  • Ctrl+C, чтобы скопировать
  • Ctrl+F, чтобы вставить копию впереди
  • Выделение->Объект->Ручки направления
  • Ctrl+X, чтобы удалить сегменты и оставить только якоря.

введите описание изображения здесь

  • Эффект->Преобразовать в форму->Эллипс... 2 очка дополнительной ширины/высоты

введите описание изображения здесь

  • вы можете сделать круги или квадраты

введите описание изображения здесь

Используйте Плагин подписки , который является бесплатным плагином иллюстратора, созданным именно для этой цели (среди прочего).

В ссылке, которую я добавляю, вы найдете учебные пособия для всего, что делает плагин, но специально для ваших нужд вы будете использовать этот инструмент:

введите описание изображения здесь

Не могли бы вы рассказать о других плагинах, которые вы используете?
Существуют сотни плагинов и скриптов для программ Adobe, вы должны быть более конкретными
В руководствах по прикрепленной ссылке объясняется, как использовать этот инструмент, чтобы круг идеально вписывался в фигуру.
Да, но он не спрашивает об окружности, а об окружностях в контрольных точках кривой и, возможно, о касательных. не обводить по точкам, а обводить в точках? или, возможно, я просто сумасшедший.