Удобный скрипт для EAGLE

Предлагаю удобный скрипт для смены слоёв top/bottom.
Скрипт меняет только те слои, которые сейчас используются.

Часто при разводке плат нам приходится переключать слои. Многие биндят набор верхнего и нижнего слоёв на хоткеи и довольствуются этим. Мне же это не удобно. Иногда мне нужно работать только со слоями top, bottom, dimention, via. Иногда к этому присоеденяются ещё и origin с border. И использовать для этого разные бинды — фууу.
Гораздо удобнее настроить нужные слои, а скрипт сам решает, какие слои используются, а какие нет. И переключает только используемые слои.
Используем скрипт так: кладём в папку «ulp» в папке программы, и из консоли EAGLE пишем:
run switchLr
Когда надоест писать в консоль — лезем в меню, там в «Options»->«Assign», вызываем диалог назначения нового хоткея. Выбираем комбинацию клавиш и вписываем команду. Всё.

Также у данного скрипта есть бонус. С аргументом 2 (run switchLr 2) скрипт отображает и верх, и низ, опять выбирая только активные слои.

Сам скрипт, с коментариями
#usage "<b>Switch layer top/bottom</b>\n"
       "<p>"
       "<author>Author: dekar@freemail.ru</author>"

// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED

// Инициализирую массивы, содержащие номера слоёв. 
//Все слои из массива 1 - слои top. 
//Массив 2 - комплиментарные им слои bottom
int switchedLayers1[] = {1 ,21,23,25,27,29,31,33,35,37,39,41,51,101};
int switchedLayers2[] = {16,22,24,26,28,30,32,34,36,38,40,42,52,116};
int switchedLayersCount =14;

// Создаю массив используемых слоёв, куда буду писать статус. статуса 3
// -1 - не используется
// 1 - top
// 0 - bottom
int layerStatus[]; 
//Инициализирую массив 
for (int i=0; i<switchedLayersCount; i++)
{
  layerStatus [i] = -1;
}

// Создаю переменную, отвечающую за то, какой слой сейчас будем считать активным.
// -1 - не известно
// 0 - bottom
// 1 - top
// 2 - включить оба слоя
int topBottom = -1;
if (argc >1)
	if(argv[1]=="2")
		topBottom = 2;

// Описываем функцию определения того, к какой поверхности относится слой, номер которого передан аргументом
int loadStstusByNum(int number)
{
  for (int i=0; i<switchedLayersCount; i++)
  {
    if (number == switchedLayers1[i])
    {
      layerStatus[i] = 1;
      return 1;
      //dlgMessageBox("Top");
    }
    if (number == switchedLayers2[i])
    {
      layerStatus[i] = 0;
      return 0;
      //dlgMessageBox("Bottom");
    }
  }
return -1;  
}

//Сама процедура
if (board) // Если скрипт запущен в редакторе печатных плат
{
  //"Проходим" по платам. 
  board(B) // Так в скриптовом языке выглядит итератор. Плата доступна по переменной B
  
  {
    string res = "DISPLAY";// Создаём переменную res, куда будем собирать команду, которую исполнит наш скрипт.
    B.layers(L) // Итератор по слоям. Слой доступен по переменной L
    {
      if (L.used)
      {
	if (L.visible)
	{
	  int tmp = loadStstusByNum(L.number);
          // Если мы не выбрали текущий слой, то выбираем его по первому попавшемуся. Как правило, это слой меди.
	  if(topBottom == -1) 
	  {
	        topBottom = tmp;
	  }
	}
      }
    }
    // По слоям прошлись. Теперь готовим набор команд.

    // Проходимся по активным слоям и добавляем информацию о том, какие слои надо включить, а какие выключить в res.
    for (int i=0; i<switchedLayersCount; i++)
    {
      string tmp;
      if (layerStatus[i] >= 0)
      {
	if(topBottom == 1)
		sprintf(tmp," -%u +%u",switchedLayers1[i],switchedLayers2[i]);
	else if(topBottom == 0)
		sprintf(tmp," -%u +%u",switchedLayers2[i],switchedLayers1[i]);
	     else if(topBottom == 2)
		sprintf(tmp," +%u +%u",switchedLayers2[i],switchedLayers1[i]);
      }
      res += tmp;
    }
    // По завершеию нашего скрипта мы "выплёвываем" команду для EAGLE.
    exit (res);
  }
}
  • +3
  • 29 августа 2012, 14:18
  • dekar
  • 1
Файлы в топике: switchLr.ulp.gz

Комментарии (6)

RSS свернуть / развернуть
Могет быть могет быть. Но, зачастую переключать надо не только слои разводки с компонентами, но и по отдельности включать только медь, только компоненты. А у меня дополнительно еще 6 слоев введено — медь и компоненты импортированные из спринта для отрисовки схемы по сплану + 2 слоя силкскрина для вывода в гербер. Так что для меня удобнее настроить меню в различными вариантами переключения. Туда же еще введено меню для SeedStudio для проверки слоев и прочего. Тут вариант удобности. Хотя работа проделана хорошая. Молодец.
0
Для отдельных слоёв всегда есть свои комбинации. Я просто с такими необходимостями не сталкивался.
0
Это тот, что ты мне высылал или уже обновленная версия?
0
Обновил. Устранил глюк с путаицей слоёв (когда часть слоёв была с одного уровня, а другая — с другого) и добавил отображение обоих слоёв.
0
О, гуд. А то этот глюк меня замучал. А как насчет сброса инструмента? например тащу я дорожку, меняю слой и теряю дорожку, приходится заново выбирать.
0
С этим пока не знаю, что и поделать. Он сбрасывается при запуске скрипта. Думал сделать отдельный скрипт, который при запуске продолжает тянуть проводник с последнего соедениния, но не смог пока нацти, как это сделать.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.