[AI CC-CC2021] Что сделать чтобы скрипт заработал?

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

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
Добрый день! Пытаюсь адаптировать скрипт. Задача следующая. Выделяем первый слой и все контуры меньше заданного значения кидаем на другой слой. Потом значение меняется и снова отсеиваются на другой слой и так далее. Посмотрите пожалуйста! В чем ошибки?
Код:
k =0;

for(j=0; j<5; j++)    {
mySelection = activeDocument.layers[0].hasSelectedArtwork=true;
newlayer4 = activeDocument.layers.add();

 if (mySelection.length>0){
  if (mySelection instanceof Array){
   k=k+ 1000;
   for (i=1; i<(mySelection.length); i++){
     obj=mySelection[i];
    obj_gabarit=Math.abs(obj.area);
    if(obj_gabarit<k){
     obj.duplicate(newlayer4);
     obj.remove()
    }
   }
  }
 
 }else{}
 }
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Вам ВСЕ ОШИБКИ? 'stick''fp'
Вообще говоря, правильным хорошим тоном считается все переменные объявлять через var, дабы в будущем не было мучительно больно выискивать по всему коду тупые индусские баги с пересечением локальных переменных, но это фигня
В чем сакральный смысл числа 5?
mySelection = activeDocument.layers[0].hasSelectedArtwork=true;
Смысл сей странной конструкции тоже ускользает от меня... 'hz'
if (mySelection.length>0){ if (mySelection instanceof Array){
...но данная связка переплевывает ее по нетрадиционности ориентации
Почему именно с 1? Не с какой другой цифры? 'otbline'
Зачем тут скобки? (но это я придираюсь)
obj=mySelection; obj_gabarit=Math.abs(obj.area);
Вы в курсе, что свойство area есть далеко не у любого объекта? Очень у редкого объекта скажем так
Точка с запятой разделяет операторы языков Си, Яваскрипт и многих других
И еще хозяйке на заметку - удаление объектов внутри цикла перебора рушит последующий перебор наповал. Кэп гарантирует это
...
Вердикт: может, нуегона, программирование? Это не ваше, занимайтесь чем нибудь другим, что у вас получше получается, а предоставьте это специально обученным людям 'alil''shok2'
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
Сакрального смысла 5 нет. Только прикидки. В дальнейшем возможно поставлю на ввод или сделаю много вариантов кода .
mySelection = activeDocument.layers[0].hasSelectedArtwork=true; Смысл этой конструкции чтобы выделялся первый слой в иллюстраторе и в дальнейшем в цикле тоже выделялся первый слой. Изначально был mySelection = activeDocument.selection, но мне нужно чтобы выделялся только первый слой.
if (mySelection.length>0){ if (mySelection instanceof Array){ эта штука была в коде изначально и работала.
Код вообще работает для единичного случая. Мне нужно в цикл засунуть.
obj=mySelection; obj_gabarit=Math.abs(obj.area); Ну составные пути я думаю не затронет.
И еще хозяйке на заметку - удаление объектов внутри цикла перебора рушит последующий перебор наповал. Кэп гарантирует это
На этом месте мне и нужно заново выделить первый слой.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Смысл этой конструкции чтобы выделялся первый слой
Зачем выделялся? Вам ведь с него просто объекты перетащить надо?
Тем более, поверьте мне - конструкция безумная '%)'
эта штука была в коде изначально и работала.
Эта штука - клинический идиотизм
То ли тупо скопировали не подумав (откуда?) то ли изначально писал индус-идиот
Код вообще работает для единичного случая.
Он не может работать
Там есть ошибки, которые даже по синтаксису его не пропустят
На этом месте мне и нужно заново выделить первый слой.
Еще раз повторяю - вам не нужно ничего выделять
Объекты копируются безо всякого выделения
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
Мне не нудно гулять по всем слоям. Только с одного - первого слоя. Скрипт проверит на соответствие условию и перекинет нужные вектора на новый слой.
Как же будет выглядеть рабочий код?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Задача не так проста, как кажется
Во первых, как я уже говорил,
свойство area есть далеко не у любого объекта
Оно есть только у PathItem
У вас на слое исключительно PathItemы безо всяких групп, клипов, растров и т.д.?
Если так, то не все потеряно, но тогда код надо строить совершенно по другому: вместо нагромождения безумных конструкций
mySelection = activeDocument.layers[0].hasSelectedArtwork=true; newlayer4 = activeDocument.layers.add(); if (mySelection.length>0){ if (mySelection instanceof Array){ k=k+ 1000; for (i=1; i<(mySelection.length); i++){
вам надо просто напросто перебирать activeDocument.layers[0].pageItems в цикле, дублируя их на предварительно созданный новый слой
Готовый код писать и тестировать принципиально не буду - во первых, спать хочу, во вторых, сама затея мне кажется безумной, бессмысленной и беспощадной :(
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
А что такого фантастического в том что в документе находятся настоящие вектора?!
Попробовал доработать код. Теперь он работает вообще неправильно. Вместо сортировки по размерам закидывает по одному вектору на слой по неизвестному алгоритму. Кто может подскажите?
Код:
var k =0;
for(j=0; j<5; j++)    {
mySelection = activeDocument.layers[0].pageItems;
newlayer4 = activeDocument.layers.add();

 if (mySelection.length>0){
   k=k+ 10000;
   for (i=0; i<(mySelection.length); i++){
    obj_gabarit=Math.abs(mySelection[i].area);
    if(obj_gabarit<k){
     mySelection[i].duplicate(newlayer4);
     mySelection[i].remove();
    }
   }
 }
 }
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Уже лучше
.
В начале var , переменные объявлять надо
activeDocument.layers[0].pageItems;
activeDocument.layers[0].pathItems
Это условие в данном контексте бессмысленно вообще и даже (учитывая, что увеличение k стоит внутри него) вредно
Не надо убирать объекты - вы же этим рубите сук на котором сидите.
Я же вам все это в своем первом ответе написал - внимательно читайте, раз уж решили программирование освоить в рамках данной темы.
 
Последнее редактирование:

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
С тобой каши не сваришь.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Во первых, если вы обратили внимание, здесь принято к незнакомым людям на Вы обращаться, а мы с вами пока на брудершафт не пили. Во-вторых, это не кулинарный форум (и даже не программистский) а дизайнерско-полиграфический, поэтому, то чем я сейчас с вами тут занимаюсь - исключительно рождественская благотворительность от нефиг делать. В-третьих, что конкретно из вышеописанного вам настолько непонятно, что вызывает настолько глубокую безысходность? По моему, вы двигаетесь в нужном направлении, немножко старания и мы совместными услилиями допилим ваш ламерский дерьмокод до работоспособной кондиции.
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
В начале var , переменные объявлять надо - Не обязательно.
Это условие в данном контексте бессмысленно вообще и даже (учитывая, что увеличение k стоит внутри него) вредно -ну и помощь от фразы!
Не надо убирать объекты - вы же этим рубите сук на котором сидите. - Это еще почему? На следующем витке я уже хочу выбрать элементы которые остались.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
1) Не обязательно, но правильно делать так. Вы ведь научиться хотите, как я понимаю? 2) Если я говорю что эти операторы лишние и вредные - значит надо их убрать, помощь вполне конкретная 3) Еще раз повторяю - убирать обьекты с активного слоя НЕ НАДО. Это - самая главная ошибка в данном индокоде, именно изза нее он судя по всему и работает неверно. Эту строку тоже убрать надо. В общем, пробуйте и пишите что получилось будем курить дальше
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
Не правильно понимаете. Мне нужно не научиться, а сделать пусть корявый, кривой но правильно работающий код.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Тогда ответ на ваш топиковый вопрос - заказать скрипт специально обученным людям. Тут и тема на форуме соответствующая есть, предложения работы называется. Я взялся вам помогать только от того, что решил, что вы сами научиться хотите. Видимо, ошибся?
 

Maslow

Участник
Топикстартер
Сообщения
11
Реакции
0
Ну тогда Вам большое спасибо! Вся помощь от Вас свелась к следующему : -Да ты не умеешь программировать, ха-ха-ха, да у тебя сраный говнокод ха-ха-ха, и не лезь и не занимайся, и помощи от меня ты не дождешься, ха-ха.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
По моему, я достаточно конструктивно вам помогаю. Но вы, судя по всему, хотите не удочку, но готовую рыбку сьесть. А код действительно никуда не годится, программировать не умеете и, как выяснилось, учиться не хотите. А если хотите дальнейшего конструктивного диалога, внесите в код мои последние пожелания и будем разговаривать дальше.
 

dumbm1

10 лет на форуме
Сообщения
421
Реакции
196
Мне нужно не научиться, а сделать правильно работающий код.
хм... если вопрос стоит "хочу чтоб было, но учиться не хочу", тогда зачем трогаете код, вводите в заблуждение: найдите специалиста, который по вашему подробному и грамотному ТЗ сделает; бесплатно или за $ - это уж как получится.
пусть корявый, кривой
Не пусть, если Вы хотите Ваш код обсуждать, модифицировать и т.п.
Пытаюсь адаптировать скрипт.
Но судя по первому посту (и другим Вашим постам) Вы всё же сами пытаетесь, значит хотите научиться; во всяком случае интерес чувствуется ;)
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
а сделайте так
Код:
if(obj_gabarit<k)
     mySelection[i].move(newlayer4);

тогда исходный массив объектов не будет модифицироваться в процессе выполнения
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Это предполагалось сделать следующим шагом. На данном этапе поциент обиделсо и не хочет сотрудничать со службой поддержки ;)
 
  • Спасибо
Реакции: Linxy

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Это предполагалось сделать следующим шагом. На данном этапе поциент обиделсо и не хочет сотрудничать со службой поддержки ;)
нездоровая тенденция какая-то, людям объясняешь объясняешь, а они в обидки. при том сами же настойчиво требуют конструктива
 
Статус
Закрыто для дальнейших ответов.