Перейти к содержанию
    

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

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

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

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

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

Не помогло.

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал :)

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал :)

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не-не-не.

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

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

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

....

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не-не-не.

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

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

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

....

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался.

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

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

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

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

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

 

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

 

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

 

Тестируйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

гуд

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

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

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

 

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

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

- включите Gap

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...