реклама на сайте
подробности

 
 
7 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Выравнивание объектов в Allegro PCB, Align in Allegro PCB
John Silver
сообщение May 30 2011, 10:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Представляю на ваш суд скрипт для выранивания и распределения объектов в 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. Там же можно забрать и свежую версию.

Сообщение отредактировал John Silver - May 30 2011, 23:10
Прикрепленные файлы
Прикрепленный файл  align.zip ( 9.02 килобайт ) Кол-во скачиваний: 55
 
Go to the top of the page
 
+Quote Post
John Silver
сообщение May 30 2011, 11:33
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



PS посмотрите как скрипт работает в других программах, например в редакторе футпринтов, проверьте выравнивание для падов. А то я даже ни разу и не попробовал...
PPS как сделать, что бы при перемещении компонента разведенные дорожки тянулись за ним, а не оставались на месте? перебирать все соединения вручную и двигать дорожки? Или есть какой-нить стандартный механизм?

Сообщение отредактировал John Silver - May 30 2011, 23:09
Go to the top of the page
 
+Quote Post
John Silver
сообщение May 31 2011, 16:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Много чего пофиксил, да порефакторил.
Сделал распределение по зазору между объектами.
Сделал восстановление выделения.
А вот как все выглядит:


Сообщение отредактировал John Silver - May 31 2011, 16:17
Прикрепленные файлы
Прикрепленный файл  align.zip ( 10.61 килобайт ) Кол-во скачиваний: 38
 
Go to the top of the page
 
+Quote Post
vitan
сообщение May 31 2011, 19:40
Сообщение #4


не указал(а) ничего о себе.
******

Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887



Давно хотел что-то подобное сделать, только все никак руки не доходили. Выравниваю по-старинке, кликами мышкой по компонентам с привязкой к сетке...
Скажите, а особых требований к версии нету (по скриншотам вижу, что 16)? У меня просто 15.х...
Go to the top of the page
 
+Quote Post
John Silver
сообщение May 31 2011, 19:59
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Насчет версии не скажу, я взялся за skill начиная с 16,3
Пробуйте, если что, пишите, будем разбираться.

Обновил репозиторий. Все, что знал и представлял как сделать, сделал.
help.gif помогите решить оставшиеся проблемы.
Go to the top of the page
 
+Quote Post
vitan
сообщение May 31 2011, 20:32
Сообщение #6


не указал(а) ничего о себе.
******

Группа: Свой
Сообщений: 3 325
Регистрация: 6-04-06
Пользователь №: 15 887



Попробую обязательно. Судя по картинкам сделано неплохо. Да и выложить не пожалели, за что спасибо.
Go to the top of the page
 
+Quote Post
Ant_m
сообщение Jun 1 2011, 06:39
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 765



Попробовал, кажется все работает (16,3 h28). Особенно радует функция Distribute. Спасибо за подарок santa2.gif

Есть несколько наблюдений:
- В командую строку, при запуске 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")


Цитата(John Silver @ May 30 2011, 14:08) *
Проблемы:
- основной цикл программы постоянно висит в ожидании выбора объектов, отсюда некоторые проблемы...

Добавлю еще одну: Если не завершить скрипт(прав. кл. - Done), то нельзя даже выйти из редактора. На кнопочку с крестиком не реагирует. File->Exit тоже не работает.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 1 2011, 07:49
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



"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" - выровнять по верхней границе.

Сообщение отредактировал John Silver - Jun 1 2011, 08:07
Go to the top of the page
 
+Quote Post
Ant_m
сообщение Jun 1 2011, 09:18
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 765



Еще заметил:
Если сразу после открытия редактора сделать выравнивание distribute то компоненты выстраиваются не лесенкой!
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

И только потом, если сделать align, например по центру, distribute равняет лесенкой.
Прикрепленное изображение


З.Ы. Иконки для кнопок вполне хороши, все сразу понятно из того что на них нарисовано. (В open office draw 3,0 например сделаны безобразно, пока названия не прочтешь, не поймешь)
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 1 2011, 10:18
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Да, воспроизвел у себя, буду разбираться
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 1 2011, 11:42
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Пофиксил.
Это происходило потому что:
- элементы выровнены по горизонтали, у всех одинаковая Y
- выбираем распределение по вертикали
- вызывается функуция для сортировки по координате Y
- т.к. Y у всех одинаковый, сортировка не происходит
- вызывается функци непосредственно сортировки, и видим фигню

Теперь при сортировке по Y, если Y-ки равны, дополнительно проверяется координата X. Тоже и при сортировке по X, дополнительно проверяем Y.
!!! Но, если хоть один объект будет иметь Y отличный от остальных, он выпадет из общего ряда и распределение опять отработает криво (или нормально??? laughing.gif )

Сообщение отредактировал John Silver - Jun 1 2011, 23:58
Go to the top of the page
 
+Quote Post
Old1
сообщение Jun 2 2011, 20:28
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(John Silver @ May 30 2011, 12:08) *
...
- привязка к сетке сделана через *?:№;%%!". Как взять значение сетки?

Если нужен размер сетки, то используй функцию axlDBGridGet
Цитата
- нет отката последних действий. Как это сделать стандартными средствами?

Смотри функции
axlDBTransactionCommit
axlDBTransactionMark
axlDBTransactionOops
axlDBTransactionStart
axlDBTransactionRollback
Цитата
- выход из скрипта только по кнопке или из контекстного меню, т.е. при выборе другого инструмента
скрипт не закрывается, а потом при нажатии кнопки мы выходим, но у нас уже выбран другой инструмент.
Не красиво и не удобно, как это победить?

В твоем случае как минимум нужно сделать так:
Код
axlCmdRegister( "align" 'align  ?doneCmd 'alignDone )

тогда твоя скилл процедура будет автоматом закрываться по событию DONE при вызове какой либо другой команды или по нажатию F6.
А еще лучше так:
Код
axlCmdRegister( "align" 'align  ?doneCmd 'alignDone ?cancelCmd 'alignСancel )

и написать обработчик для Cancel.
Тогда при нажатии стандартной горячей клавиши F9 (Cancel) процедура должна адекватно выгрузиться. Сейчас этого не происходит.
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 2 2011, 23:39
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Спасибо, Леша. Где ж ты раньше был...

Цитата(Old1 @ Jun 2 2011, 23:28) *
Если нужен размер сетки, то используй функцию axlDBGridGet

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

Цитата
Смотри функции
axlDBTransactionCommit
...

Это уже давно использовано. Работает как "Oops" внутри скрипта. А вот Undo не работает, пробовал и так, и сяк, не получилось. Где собака порылась?

Цитата
А еще лучше так:
Код
axlCmdRegister( "align" 'align  ?doneCmd 'alignDone ?cancelCmd 'alignСancel )

и написать обработчик для Cancel.
Тогда при нажатии стандартной горячей клавиши F9 (Cancel) процедура должна адекватно выгрузиться. Сейчас этого не происходит.

Вот за это отдельное спасибо. Тепеть можно работать.
Может знаешь, как взять текущую горячую клавишу, по имени команды?
Дабы повесить "Oops" на клаву.
А проблема в следующем: я, например, до сих пор использую старый набор, и на Oops висит F3. А кто-то использует другой набор.
По-хорошему надо узнать какая кнопка сейчас на команде "oops" и переассайнить ее на себя, а при выходе восстановить.

PS Вкомитал свежак.

Сообщение отредактировал John Silver - Jun 2 2011, 23:40
Go to the top of the page
 
+Quote Post
Old1
сообщение Jun 3 2011, 06:09
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(John Silver @ Jun 3 2011, 01:39) *
...
Может знаешь, как взять текущую горячую клавишу, по имени команды?
Дабы повесить "Oops" на клаву.
...

как вариант для oops - axlGetAlias, сначала получаешь список всех псевдонимов, затем перебирай пока не найдешь тот, который соответствует oops
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 3 2011, 07:46
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



Да, это вариант.
А как сделать, что бы дорожки не рвались, а тянулись за компонентом, переходным?
Go to the top of the page
 
+Quote Post

7 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016