JohnSilver 1 30 мая, 2011 Опубликовано 30 мая, 2011 (изменено) · Жалоба Представляю на ваш суд скрипт для выранивания и распределения объектов в Allegro PCB. Возможности: - объекты Group, Component, Pad, Via, Text - выравнивание по горизонтали и вертикали (привязка к Origin, Body, Pin1) - привязка к сетке - выравнивание по краю (пока реализовано только Top) - распределение автоматическое (между крайним левым/правым и крайним нижним/верхним объектом) - рапределение с фиксированным шагом - в планах распределение с использованием Boundary Box, автоматическое и с фиксированным шагом. Проблемы: - привязка к сетке сделана через *?:№;%%!". Как взять значение сетки? - основной цикл программы постоянно висит в ожидании выбора объектов, отсюда некоторые проблемы... - нет отката последних действий. Как это сделать стандартными средствами? - выход из скрипта только по кнопке или из контекстного меню, т.е. при выборе другого инструмента скрипт не закрывается, а потом при нажатии кнопки мы выходим, но у нас уже выбран другой инструмент. Не красиво и не удобно, как это победить? - после выполнения любой операции сбрасывается выделение и подсветка. Установка и использование: - файл формы и картинки положить в папку каденса по пути %formpath% - файлы скриптов (3 шт) загрузить в Allegro - запустить скрипт из ком. строки - align, или Alt+e+a, или через меню Edit - выбрать объкты, на форме нажать кнопку с необходимым действием (форма встраивается в панель Options) Высказвайте свои мнения, предложения, баги. Можно присоединиться к разработке на _https://bitbucket.org/Kapustin/align. Там же можно забрать и свежую версию. align.zip Изменено 30 мая, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 30 мая, 2011 Опубликовано 30 мая, 2011 (изменено) · Жалоба PS посмотрите как скрипт работает в других программах, например в редакторе футпринтов, проверьте выравнивание для падов. А то я даже ни разу и не попробовал... PPS как сделать, что бы при перемещении компонента разведенные дорожки тянулись за ним, а не оставались на месте? перебирать все соединения вручную и двигать дорожки? Или есть какой-нить стандартный механизм? Изменено 30 мая, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 31 мая, 2011 Опубликовано 31 мая, 2011 (изменено) · Жалоба Много чего пофиксил, да порефакторил. Сделал распределение по зазору между объектами. Сделал восстановление выделения. А вот как все выглядит: align.zip Изменено 31 мая, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 31 мая, 2011 Опубликовано 31 мая, 2011 · Жалоба Давно хотел что-то подобное сделать, только все никак руки не доходили. Выравниваю по-старинке, кликами мышкой по компонентам с привязкой к сетке... Скажите, а особых требований к версии нету (по скриншотам вижу, что 16)? У меня просто 15.х... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 31 мая, 2011 Опубликовано 31 мая, 2011 · Жалоба Насчет версии не скажу, я взялся за skill начиная с 16,3 Пробуйте, если что, пишите, будем разбираться. Обновил репозиторий. Все, что знал и представлял как сделать, сделал. помогите решить оставшиеся проблемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 31 мая, 2011 Опубликовано 31 мая, 2011 · Жалоба Попробую обязательно. Судя по картинкам сделано неплохо. Да и выложить не пожалели, за что спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ant_m 0 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба Попробовал, кажется все работает (16,3 h28). Особенно радует функция Distribute. Спасибо за подарок :santa2: Есть несколько наблюдений: - В командую строку, при запуске pcb, выводится "0 ==== ("move" nil (("&Align" "align")))" - Не работает встроенная, стандартная, функция align components (которая доступна по правой клавише мыши, в режиме расстановки компонентов) пишет "E- *Error* align: too many arguments (0 expected, 1 given) - ("components")" И еще хочется более развернутые рекомендации по установке... Например для быстрой проверки сделал так: - закинул все файлы из архива в папку с файлом brd - в командной строке загрузил скрипты: skill load "align.il" skill load "align_do.il" skill load "align_utils.il" Скрипты можно загрузить и используя файл allegro.ilinit. Тогда они будут читаться сами, при каждом открытии pcb редактора. В файле нужно указать: load( "D:\\Some_Path\\align.il") load( "D:\\Some_Path\\align_do.il") load( "D:\\Some_Path\\align_utils.il") Проблемы: - основной цикл программы постоянно висит в ожидании выбора объектов, отсюда некоторые проблемы... Добавлю еще одну: Если не завершить скрипт(прав. кл. - Done), то нельзя даже выйти из редактора. На кнопочку с крестиком не реагирует. File->Exit тоже не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 1 июня, 2011 Опубликовано 1 июня, 2011 (изменено) · Жалоба "0 ==== ("move" nil (("&Align" "align")))" Появляется при регистрации пункта меню, и кто-нить знает, что это? Если сделать например так: axlCmdRegister( "alignDDD" 'alignDDD ) axlUIMenuRegister( "moveDDD" '( ("&Align" "alignDDD") ) ) то будет работать и стандартная функция. Я это видел, но после изучения стандартной функции решил, что моя лучше и стандартная не нужна. В readme.txt есть соответствующее предепреждение. По установке может добавлю более полное описание... потОм... Это может сделать любой, readme я вкомитаю. Изменил установку картинок, теперь их нужно ложить по пути %bmppath%. Ну и для быстрой проверки специально в каментах лежат записи типа skill load "o:\\Sripts\\align\\align_utils.il" основной цикл программы постоянно висит в ожидании выбора объектов, отсюда некоторые проблемы... Если не завершить скрипт(прав. кл. - Done), то нельзя даже выйти из редактора. На кнопочку с крестиком не реагирует. File->Exit тоже не работает. "некоторые проблемы" - это я мягко выразился. Вообще ничего не работает пока не выйдешь из скрипта. Может кто предложит более симпатичные иконки? Перевод надо бы проверить, например "Align by TOP boundary" - выровнять по верхней границе. Изменено 1 июня, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ant_m 0 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба Еще заметил: Если сразу после открытия редактора сделать выравнивание distribute то компоненты выстраиваются не лесенкой! И только потом, если сделать align, например по центру, distribute равняет лесенкой. З.Ы. Иконки для кнопок вполне хороши, все сразу понятно из того что на них нарисовано. (В open office draw 3,0 например сделаны безобразно, пока названия не прочтешь, не поймешь) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба Да, воспроизвел у себя, буду разбираться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 1 июня, 2011 Опубликовано 1 июня, 2011 (изменено) · Жалоба Пофиксил. Это происходило потому что: - элементы выровнены по горизонтали, у всех одинаковая Y - выбираем распределение по вертикали - вызывается функуция для сортировки по координате Y - т.к. Y у всех одинаковый, сортировка не происходит - вызывается функци непосредственно сортировки, и видим фигню Теперь при сортировке по Y, если Y-ки равны, дополнительно проверяется координата X. Тоже и при сортировке по X, дополнительно проверяем Y. !!! Но, если хоть один объект будет иметь Y отличный от остальных, он выпадет из общего ряда и распределение опять отработает криво (или нормально??? :laughing: ) Изменено 1 июня, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 2 июня, 2011 Опубликовано 2 июня, 2011 · Жалоба ... - привязка к сетке сделана через *?:№;%%!". Как взять значение сетки? Если нужен размер сетки, то используй функцию axlDBGridGet - нет отката последних действий. Как это сделать стандартными средствами? Смотри функции axlDBTransactionCommit axlDBTransactionMark axlDBTransactionOops axlDBTransactionStart axlDBTransactionRollback - выход из скрипта только по кнопке или из контекстного меню, т.е. при выборе другого инструмента скрипт не закрывается, а потом при нажатии кнопки мы выходим, но у нас уже выбран другой инструмент. Не красиво и не удобно, как это победить? В твоем случае как минимум нужно сделать так: axlCmdRegister( "align" 'align ?doneCmd 'alignDone ) тогда твоя скилл процедура будет автоматом закрываться по событию DONE при вызове какой либо другой команды или по нажатию F6. А еще лучше так: axlCmdRegister( "align" 'align ?doneCmd 'alignDone ?cancelCmd 'alignСancel ) и написать обработчик для Cancel. Тогда при нажатии стандартной горячей клавиши F9 (Cancel) процедура должна адекватно выгрузиться. Сейчас этого не происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 2 июня, 2011 Опубликовано 2 июня, 2011 (изменено) · Жалоба Спасибо, Леша. Где ж ты раньше был... Если нужен размер сетки, то используй функцию axlDBGridGet И ни в одном мануале ее нету, негодяи... Посмотрел, примерил, таки придется делать анализ объекта, выбор необходимой сетки. А сейчас все делается само, таки решил оставить как есть. Смотри функции axlDBTransactionCommit ... Это уже давно использовано. Работает как "Oops" внутри скрипта. А вот Undo не работает, пробовал и так, и сяк, не получилось. Где собака порылась? А еще лучше так: axlCmdRegister( "align" 'align ?doneCmd 'alignDone ?cancelCmd 'alignСancel ) и написать обработчик для Cancel. Тогда при нажатии стандартной горячей клавиши F9 (Cancel) процедура должна адекватно выгрузиться. Сейчас этого не происходит. Вот за это отдельное спасибо. Тепеть можно работать. Может знаешь, как взять текущую горячую клавишу, по имени команды? Дабы повесить "Oops" на клаву. А проблема в следующем: я, например, до сих пор использую старый набор, и на Oops висит F3. А кто-то использует другой набор. По-хорошему надо узнать какая кнопка сейчас на команде "oops" и переассайнить ее на себя, а при выходе восстановить. PS Вкомитал свежак. Изменено 2 июня, 2011 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Old1 0 3 июня, 2011 Опубликовано 3 июня, 2011 · Жалоба ... Может знаешь, как взять текущую горячую клавишу, по имени команды? Дабы повесить "Oops" на клаву. ... как вариант для oops - axlGetAlias, сначала получаешь список всех псевдонимов, затем перебирай пока не найдешь тот, который соответствует oops Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 3 июня, 2011 Опубликовано 3 июня, 2011 · Жалоба Да, это вариант. А как сделать, что бы дорожки не рвались, а тянулись за компонентом, переходным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться