Jump to content

    

Выравнивание объектов в Allegro PCB

Вроде такой вариант пробовал :(. Там есть закомментированные рудименты.

Точно помню, что делал:

создаются сегменты -> удаляются сегменты -> перемещается объект

создаются сегменты -> перемещается объект -> удаляются сегменты

Не помогло.

А ваще надо еще разок пройтись по всем вариантам.

 

Еще вопрос. Ведь надо сначала найти все сегменты, сохранить их, выйти из всех циклов, и только тогда можно двигать объект.

Как это изящьней реализовать, куда сохранять сегменты и новые точки. Что то не лежит душа к структуре, как потом удалить тип структуры?

Share this post


Link to post
Share on other sites
...

Еще вопрос. Ведь надо сначала найти все сегменты, сохранить их, выйти из всех циклов, и только тогда можно двигать объект.

Как это изящьней реализовать, куда сохранять сегменты и новые точки...

Можно использовать список ( list ) , он вроде-бы может содержать любые типы данных, включая списки...

Share this post


Link to post
Share on other sites

Делал :)

Во время итерации для удаления, выдается варнинг об отсутствующем ID (который удалили на предыдущем шаге).

Не красиво, загрязняют консоль.

Share this post


Link to post
Share on other sites
Делал :)

Во время итерации для удаления, выдается варнинг об отсутствующем ID (который удалили на предыдущем шаге).

Не красиво, загрязняют консоль.

перед тем как что-то делать проверяй этот dbid существует или нет, тогда ворнингов не будет...

Share this post


Link to post
Share on other sites

Не-не-не.

Я иду по списку:

1 взял сегмент, удалил, в списке осталась запись, но ID:removed

2 взял сегмент, получил варнинг о первой записи, ...

....

Ни обновить ID, ни удалить из списка.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

В первом посте есть ссылка, там идете на вкладку Downloads, и выкачиваете необходимую версию.

Устаканившемуся коду я присваиваю tag, например "0.5".

Текущая версия имеет тег "tip".

Иногда (редко) bitbucket не доступен, как сегодня перед обедом было. Но это очень редко и не надолго.

Share this post


Link to post
Share on other sites
Не-не-не.

Я иду по списку:

1 взял сегмент, удалил, в списке осталась запись, но ID:removed

2 взял сегмент, получил варнинг о первой записи, ...

....

Ни обновить ID, ни удалить из списка.

Такое может быть при определенных условиях, но этого можно избежать... все зависит от того как организовать список (списки) и как потом с ними работать. Я стараюсь использовать списки в первую очередь и пока ворнингов удается избегать...

Кстати элементы из списков удалять можно, но опять же при определенных условиях...

Share this post


Link to post
Share on other sites

Разобрался.

Попробуй сделать так: удаляется сегмент на старом месте -> перемещается объект -> создается сегмент на новом месте.

Вот так все заработало. :wacko:

Оказывается если создать сегмент, и его конец попадает на заливку, то теряется Net.

Сдесь же получается, что конец попадает на уже сдвинутый пин, и все гуд.

Еще наблюдение, если не делать вызов axlDBCloak(), то потеряем Netы.

 

Варнинги появлялись когда терялись Net. Так и не понял в каком месте они вызывались.

 

Сделал принудительный режим "rough" для шейпов, при нажатом чекбоксе Stretch etch. Иначе тоже можно потерять Net.

 

Тестируйте.

Share this post


Link to post
Share on other sites

Пофиксил баг. Если к пину подходит несколько дорожек, то при перемещении тянется только одна.

Share this post


Link to post
Share on other sites

Потестил. Применительно к stretch etch ничего не нашел.

Возвращаясь к моему посту №22..

Добавлю - при отрицательных значениях координаты Distribute не работает галочка Gap.

 

Share this post


Link to post
Share on other sites
Потестил. Применительно к stretch etch ничего не нашел.

гуд

 

Возвращаясь к моему посту №22..

Добавлю - при отрицательных значениях координаты Distribute не работает галочка Gap.

Не понял, можно по шагам?

Таки мы выяснили, что сползание это фича?

Share this post


Link to post
Share on other sites

Скажем так, меня как пользователя немного смущает что если я задам разный шаг(в одном случае положительный а в другом отрицательный), то команда Distribute ведет себя по разному... Получается что команды distribute = +10 и distribute = -10 не симметричны! Выполняя например 4 команды: d = +10; d = +5; d = -5; d = -10 компоненты никогда не вернутся в туже исходную точку.

 

Про Gap: насколько я понял функция этой галочки не допускать чтобы компоненты накладывались друг на друга... Когда координаты положительны это так и есть - между компонентами всегда есть какое то расстояние. А вот если задать отрицательную координату, то компоненты легко друг на друга наложить, например задав Gap = -1(если компонент конечно не меньше 1мм).

 

З.Ы с фичей можно смириться(это верхний абзац поста) но есть НО - эта фича судя по всему влияет на Gap, точнее скажет так: поведение Gap это последствие фичи :(

Share this post


Link to post
Share on other sites

Все равно не понял в чем баг.

 

Функция Gap состоит в другом:

- используется только для DistributeH и DistributeV

- служит для распределения зазоров между границами компонентов

Т.о. при включенном Gap можно взять разнородные компоненты, распределить, и зазоры станут равны.

Если же не использовать Gap, то распределение будет вестись между точками (например центрами), и зазоры между границами разнородных компонентов будут разными.

Посмотрите в коде align_do.il, как используется переменная _formData->useGap.

 

Использование отрицательных координат:

- выстройте по горизонтали 10 элементов (резистор 0805)

- включите Gap

- в поле DistributeV введите "-20" mill (активируйте поле)

- нажмите Distribute, получится красивая лесенка. Зазор у соседних элементов между верхней границей нижнего элемента и нижней границей верхнего элемента будет =-20mill.

Share this post


Link to post
Share on other sites

Очень симпатичная штука, спасибо!

А такой вопрос (может и ламерский): как выделить несколько компонентов для выравнивания не окном, а "поштучно" ?

ctrl+pick не работает..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this