вторник, 17 апреля 2012 г.

Excel2Grid

Обычная задачка, которая возникает наверное у каждого проектировщика каждый день. Выполнил некий табличный расчет в Microsoft Excel, а оформить его надо бы в чертеже AutoCAD. Вот только копирование через буфер из Microsoft Excel в Autodesk AutoCAD не очень красивое. Кто-то мирится с получаемым результатом, кто-то ищет обходные пути, в конечном счете, оба пути верные.
Я предпочел пойти вторым путем и написал модуль Excel2Grid, который позволяет перенести выбранный диапазон ячеек из Microsoft Excel в редактор таблиц ATable с минимальным искажением результата.
Вот пример таблицы, которую используют специалисты строительного отдела:


 Вот так выглядит лист, на котором надо разместить эту таблицу.


Прежде всего, в Microsoft Excel надо выбрать диапазон ячеек подлежащих экспорту-импорту.


В редакторе таблиц ATable в меню Таблица выбрать пункт Импорт из Excel....


В диалоговом окне Excel2Grid необходимые вернуть ссылку нажатием кнопки Ссылка и указать параметры импорта.
Многие параметры говорят сами за себя, а некоторые я поясню:
Использовать размер диапазона из Excel - означает, что размер импортируемой таблицы будет определен исходя из диапазона выбранных ячеек в Microsoft Excel, а не исходя из размера таблицы ATable.
Коэф. преобразования размеров - коэффициент применяемый для преобразования ширины и высоты ячеек из единиц измерения Microsoft Excel в единицы измерения AutoCAD.
Вписать ширину таблицы в - игнорирует коэффициент преобразования размеров и рассчитывает его исходя из размера в который надо вписать таблицу. Например, в моем случае, таблица будет вписана в 395 мм по ширине.


Если все параметры указаны и ссылка определена можно смело жать Обновить и наслаждаться процессом переноса таблицы в ATable.


Несколько секунд и таблица уже в чертеже! Можно закрыть Excel2Grid и довести таблицу до кондиции дополнительным манипуляциями, если они на самом деле нужны.


Нарочно показываю результат импорта крупно, чтобы было видно, что учтено и объединение ячеек, и поворот текста и т.п.


Добавлю, что Excel2Grid позволяет не только выполнить единовременный импорт данных из Microsoft Excel в ATable, но и установить связь между таблицей и файлом xls. После закрытия Excel2Grid записывает ссылку и параметры импорта в свойства таблицы ATable. Таким образом, если "экселевский" файл претерпит изменения, все их можно увидеть в чертеже вызвав команду обновления таблицы не открывая ATable!

Итак, две команды:
atUpdateExcel2Grid - обновить выбранные таблицы в соответствии с ссылками.
atUpdateAllExcel2Grid - обновить все таблиц в соответствии с ссылками.
В итоге, все изменения "экселевских" файлов отразятся в таблицах ATable!
Одно лишь требование, пути к файлам Excel'а не должны меняться, иначе обновление не получится. Но это не проблема для тех, у кого четко структурировано хранение документов. :)
Удачи!


Pseudo2Grid

Pseudo2Grid - уникальный модуль, посредством которого можно перенести псевдо-таблицы из чертежа AutoCAD в таблицу ATable for AutoCAD. Но прежде, чем дальше объяснять как им пользоваться, сперва надо определиться с терминами.
Псевдо-таблица - это таблица начерченная примитивами AutoCAD'а, т.е. линиями, полилиниями и текстом. Внешне набор примитивов похож на таблицу, но работать с ним как с таблицей не получится.
В общем, выглядит это примерно так:

Знакомо? Часто попадаются такие таблицы и их надо поправить или дополнить? Начнем?

Предполагается, что в ATable уже есть подходящий стиль таблицы. Если его нет - не беда, можно и без выбора стиля. Но я все таки покажу, как выбрать стиль таблицы.
В меню Стиль выбираем пункт Выбрать стиль....


В появившемся диалоговом окне надо найти подходящий стиль. В моем случае, он находится в папке Технология производства.


Применяю его к текущей таблице и получаю в чертеже таблицу с шапкой и колонками нужной ширины. Красота!


В меню Таблица выбираю пункт Импорт ручной таблицы.... Вызов команды отправит меня в командную строку AutoCAD'а.

Выбираю секущей рамкой примитивы таблицы. Все разом без разбора: линии, текст, полилинии.


На рисунке ниже видно, что именно попало в выборку. Если результат выбора устроил, можно жать Enter.


Магические преобразования и псевдо-таблица превратилась в таблицу ATable. 


Разумеется, не стоит ожидать однозначного переноса внешнего вида таблицы в редактор таблиц ATable. Но главное, перенесен текст. Он разнесен по колонкам и ячейкам. Теперь таблицу уже несложно причесать до нужного вида и можно вносить изменения любой сложности.
А если исходная таблица большая? Представьте себе, сколько времени экономит этот модуль!
Кстати, преобразованную таким образом псевдо-таблицу можно из ATable скопировать через буфер обмена в Microsoft Excel или Microsoft Word! Тоже неплохое подспорье!

понедельник, 16 апреля 2012 г.

TDMS2Grid

TDMS - система электронного архива и документооборота, которую мы применяем в ЗАО "Тюменьнефтегазпроект" для хранения всей проектно-сметной документации предприятия. Хранение четко структурировано, например, в системе присутствуют такие объекты, как марка, комплект чертежей, чертеж, спецификация и т.п. В общем, с помощью TDMS можно легко получить отчеты соответствующие ГОСТ Р 21.1101-2009:
Ведомость рабочих чертежей основного комплекта
Ведомость ссылочных и прилагаемых документов
Ведомость основных комплектов чертежей.
ATable for AutoCAD - один из первых редакторов таблиц для AutoCAD. Именно для него написан модуль TDMS2Grid, который позволяет перенести результат отчета из TDMS в ATable. Работа модуля напрямую зависит от наличия на компьютере установленных AutoCAD 2012, ATable for AutoCAD 2012 и TDMS 3.
Чтобы TDMS2Grid из всей массы выборок хранящихся в TDMS смог понять, какие имеет смысл импортировать в ATable, они должны удовлетворять следующим условиям:
1. Выборки должны иметь SysId вида ATable:Query_name.
2. Выборки должны иметь параметр, у которого SysId равен Object.
3. Выборки должны в комментарии содержать полный путь к стилю импортируемой таблицы.
Вот и все условия. Просто!



Вызовем модуль из меню ATable for AutoCAD.


После вызова модуля TDMS2Grid на экране появится диалоговое окно на котором будет виден процесс обработки всех выборок существующих в TDMS.
Когда этот процесс окончится, в списке будут доступны выборки для импорта. Также будет выведена информация о выбранном объекте.


Нажатием кнопки Обновить модуль выполнит выбранную выборку передав ей выбранный объект. Если выборка выполнится с ошибкой или вернет пустой результат, таблица в ATable не изменится. Однако, если выборка успешно вернет результат, то и таблица в ATable претерпит соответствующие изменения.

Таким образом, в ЗАО "Тюменьнефтегазпроект" мы облегчаем жизнь сотрудникам проектных отделов, которые регулярно оформляют листы общих данных наполняя их одними и теми же ведомостями.
А представьте, насколько рутинной может быть заполнение ведомости рабочих чертежей, если чертежей в комплекте порядка сотни? А если две сотни? На ручное создание такой таблицы уйдут часы работы и литры скучного чая! А с TDMS2Grid перенос данных займет только 3-5 минут и никаких нервных расстройств. :)

вторник, 10 января 2012 г.

Stora и все, все, все...

В декабре 2011 я переехал в новую квартиру. В ней планировал использовать не один телевизор, а несколько. Отказаться от телевидения, оставить исключительно сетевой доступ к новостям и к видео на сетевом хранилище. Прежний вариант с хранением фильмов на медиаплеере HDS6L исключался, т.к. предполагал подключение только к одному телевизору. Не ставить же медиаплееры с жесткими дисками под каждый телевизор!

В тот момент у меня был один телевизор UE40B7000. Отличный телевизор, который не хотел проигрывать из сети фильмы ни с одного DLNA сервера. Вернее, если быть более точным, проигрывал исключительно старые небольшие avi файлы, а вот более современные avi, mkv, m2ts и т.п. отказывался наотрез. Основания у него были самые разные, то видеокодек отсутствует, то аудиокодек отсутствует, то формат файла неизвестен. В итоге, прикидочно, из всей коллекции фильмов он проигрывал по DLNA не более 10% фильмов.

DLNA сервера были сделаны сперва на компьютере с Windows 7, а потом попробовал сделать на роутере  ASUS RT-N16. Оговорюсь сразу, сильно я не упорствовал, т.к. хотел, чтобы все заработало, так сказать, из коробки. Обломался.

В связи с переездом, собственно, было организовано небольшое новоселье для коллег (у нас так принято), которые подарили мне новую игрушку Netgear Stora (она же MS2000). В зависимости от ее возможностей предполагалось ее дальнейшее применение, одно из двух:
1. Хранение семейного фото и видео архива (RAID1).
2. Хранение фильмов (JBOD).
Выбор назначения Stora упирался в его возможности удобного хранения и трансляции фильмов через сеть на телевизоры и/или тоже самое с фото/видео архивом.

К тому момент я прикупил новый телевизор для гостиной UE55D7000. Очень надеялся на то, что уж он то с полпинка будет проигрывать любые файлы с DLNA сервера. Куда там! Все та же история. Ну стал он проигрывать чуть больше файлов, в итоге получил не 10%, а 15% проигрываемых фильмов. Меня такое неустроило совсем.

Конечно, есть вариант с покупкой сетевого медиаплеера, например, XDS73D, который возьмет на себя навигацию по сетевой шаре, обработку видеопотока и трансляцию видеосигнала по HDMI. Но это вариант  для богатых, т.к. к одному телевизору еще можно прикупить медиаплеер, ну даже для двух можно, но если телевизоров больше (3 или 4), то столько медиаплееров уже никуда не годится. Кроме этого, во время ремонта под каждое место для установки телевизора я подвел три розетки: силовая, антенная, сетевая. Если к сетевой розетке подключать медиаплеер, то телевизор остается без доступа к сети, зачем тогда все Smart TV функции? Разделить сетевой кабель свитчом на два? Тоже вариант, но за телевизором собирается целый моток всякой ерунды: силовой удлинитель, сетевой удлинитель (свитч), медиаплеер, два блока питания, пучок кабелей. Отвратительное решение!

В новогодние праздники началось изучение Stora. Изучение началось с загугливания и выхода на статью Netgear Stora MS2000 — раскрываем потенциал. В ней все хорошо описано, мне пригодилось:
Hard-reset - это когда я с игрушкой наигрался и всю ее испоганил.
Root - как без этого.
Перемещение папки /opt на жесткий диск - мне тоже боязно NAND постоянно перезаписывать.
Установка Optware - без ipkg никак.

В течение первых дней нового года безуспешно пытался выполнить Hard-reset. Stora уходила в режим скачивания образа и не выходила из него даже через час. В итоге до мне дошло найти и пропинговать сайт с образом, который она пыталась скачать. Оказалось, что сайт все эти дни успешно "лежит". Когда сайт подняли, Hard-reset прошел "на ура".

Предустановленный DLNA сервер на Stora - minidlna. Толку от него мало, т.к. он тупо передает данные в сеть, что для телевизоров Samsung маловато. В итоге, принял решение отказаться от minidlna в пользу mediatomb. Большую роль в принятии такого решения сыграла статья Медиа-хранилище своими руками. Впечатлил чужой опыт, однако.

Внутри Stora установлен BusyBox. Установку mediatomb выполнил в соответствии с инструкцией описанной на форуме. Ее оказалось достаточно для того, чтобы mediatomb заработал, а телевизоры начали проигрывать почти все файлы. Особое внимание надо обратить на образец файла config.xml, который приведен в теме, а дополнительно можно глянуть сюда.

В итоге, после запуска mediatomb, старый телевизор стал проигрывать 90% файлов. Спотыкается исключительно по непонятным причинам, с которыми надеюсь разобраться. Новый телевизор проигрывает все, а что порадовало отдельно, файлы с 3D фильмами сразу переключают телевизор в нужный режим отображение 3D!

В настоящий момент решаю вопрос с организацией хранения файлов. По-умолчанию mediatomb тупо кидает ссылки на все файлы в один каталог Video. Но, как было сказано не мной, mediatomb "прекрасно скриптующийся"! Достаточно написать простой код в import.js в функции addVideo и файлы будут организованы по папкам, подпапкам и т.д.

Мне удобно, чтобы поиск фильмов можно было делать по разным критериям: названию, жанру, актерам, годам, режиссерам и т.п. (продолжение следует). По аналогии с решением описанным в статье я решил всю атрибутивную информацию о каждом фильме занести в имя файла. В дальнейшем, парсить названием с помощью regexp и раскидывать по соответствующим виртуальным папкам.

Первый подход...

Формат хранения выбрал следующий:
RU=Название фильма - названием фильма на русском языке
US=Оригинальное название - название фильма в оригинале, если французский, то FR и т.д.
C=Художественный - категория фильма: художественный, документальный, сериал и т.п.
G=Комедия - жанр фильма
A=Jim Carrey - актер
D=Peter Weir - режиссер
Y=1998 - год выпуска фильма
IMDB=tt0120382 - идентификатор фильма по базе imdb.com.

В итоге, имя файла получалось примерно такое:

RU=Шоу Трумана,US=The Truman Show,C=Художественный,G=Комедия,G=Драма,A=Jim Carrey,D=Peter Weir,Y=1998,IMDB=tt0120382.avi

Последовательность расположения полей со значениями или их количество (кроме наименований), не имеет значения. Составил регулярное выражение, которое тестировал с помощью Online Regular Expression Tester. Интегрировал код в файл import.js. Получил результат, представленный на картинке. Удобно, наглядно, гибко.



После внесения в базу медиатеки 4-х фильмов я понял, что моего терпения не хватит, атрибутировать фильмы общей емкостью в 2Тб. Надо искать какой-то выход более автоматизированный. В голову пришла идея, использовать сайт imdb.com в роли источника информации о фильме, а в названии файла фильма писать только названием фильма на русском языке и imdb идентификатор. Но как это обработать в import.js?

Второй подход...
Не нашел я способа, позволяющего из import.js обращаться к сайту imdbapi.com. В итоге, решил пойти по пути, выбранному в блоге Медиа-хранилище своими руками. Однако, группированное хранение фильмов связанных по одному признаку (многосерийные, сиквелы, сериалы и т.п) возложил на обычные папки, а имена файлам дал по принципам:
Русское название [Оригинальное название][2012,Жанр].avi - для зарубежных фильмов
и
Русское название [2012,Жанр].avi - для отечественных фильмов.

В итоге, получил следующее в папке и на сервере:

В итоге, получил следующее в хранилище DLNA сервера:

Особое внимание можно обратить на папку Классификация. В ней фильмы сгруппированы по годам, жанрам и оригинальным иностранным названиям.

Фрагмент кода, ответственного за добавление видео файлов, приведен ниже:
function addVideo(obj)
{
  //extract extension
  var parts = obj.title.split(/(.+?)\.(\w{2,4})$/g);
  var fname = parts[1];
  var fext = parts[2];

  var re, arr;
  var rus_title = '';
  var frg_title = '';
  var year_num = '';
  var genre = '';

  //foreign film
  arr = fname.split(/(.+?)\s?\[(.*?)\]\s?\[(\d{4}),?(.*?)\]/g);
  if (arr.length > 1)
  {
    rus_title = arr[1];
    frg_title = arr[2];
    year_num = arr[3];
    genre = arr[4];
  }
  else
  {
  //soviet film
    arr = fname.split(/(.+?)\s?\s?\[(\d{4}),?(.*?)\]/g);
    if (arr.length > 1)
    {
      rus_title = arr[1];
      year_num = arr[2];
      genre = arr[3];
    }
  }
  
  //extract location
  var chain;
  var location = obj.location.split('/');
  var rootindex = 0;
  for (var i = 0; i < location.length; i++)
  {
    if (location[i] == "FamilyVideos")
    {
      rootindex = i;
      break;
    }
  }
  chain = new Array();
  if (rootindex + 1 < location.length - 1)
  {
    for (i = rootindex + 1; i < location.length - 1; i++)
    {
      chain.push(location[i]);
    }
    obj.title = fname;
    addCdsObject(obj, createContainerChain(chain)); 
    //add by classification
    if (year_num.length > 0)
    {
      chain = new Array('Классификация','По годам',year_num);
      addCdsObject(obj, createContainerChain(chain));
    }
    if (genre.length > 0)
    {
      var arr_genre = genre.split(/,/g);
      for (i = 0; i < arr_genre.length; i++)
      {
        chain = new Array('Классификация','По жанрам',arr_genre[i]);
        addCdsObject(obj, createContainerChain(chain), UPNP_CLASS_CONTAINER);
      }
    }
    if (frg_title.length > 0)
    {
      var sub_chain = new Array('Классификация','По иностранным названиями');
      obj.title = frg_title + ' [' + year_num + ',' + genre + '].' + fext;
      addCdsObject(obj, createContainerChain(sub_chain));
    }
  }
}
Вот и все. Элегантно и удобно.
Самое главное для меня, что теперь все фильмы лежат в одном месте, в этом же самом месте установлен DLNA сервер, который транслирует в сеть все самые разные форматы видео файлов, а телевизоры подключены к сети одним кабелем без хаба и медиаплеера.

Похоже, что понадобится статья о дефрагментации.

вторник, 11 октября 2011 г.

AutoCAD MEP 2012: сброс нумерации объектов

Внедрение 3D проектирования в технологическом отделе ЗАО "Тюменьнефтегазпроект" идет полным ходом и я начал сталкиваться с нетривиальными задачами, решение которых не имеет очевидного решения.
Одна из задачек, которая возложена на AutoCAD MEP 2012, получение ведомостей разных видов на основе 3D модели. В частности, ведомость площадок обслуживания применяемых на технологической площадке. AutoCAD MEP накладывает некоторое ограничение на группировку внутри ведомости, иными словами, может нумеровать по стилю или по геометрии.
По стилю - индивидуальный номер получает каждый элемент в рамках стиля объекта, например, все площадки ПХВ-15.9 будет иметь порядковый номер 4, даже если их в чертеже 20 штук и они расположены на разных отметках и т.д.
По геометрии - индивидуальный номер получает каждый элемент в рамках чертежа, например, каждая площадка ПХВ-15.9 будет иметь индивидуальный номер и если их в чертеже 20, то они будут пронумерованы, скажем, от 4 до 24.
В связи с этим сперва для получения ведомости площадок был создан набор характеристик на основе стиля. Позже поняли, что получился не самый удобный вариант и решили "переиграть" на нумерацию по геометрии.
Однако, нумерация объектов уже прошла в чертеже и каждая площадка имела свой номер. В итоге получилась ведомость с нарушенной нумерацией:
Что делать? Как заставить нумерацию начаться с единицы? Стандартный ответ help'а - перенумеровать вручную. Невеселое занятие, если площадок полсотни. А если их будет не полсотни, а 500?!
На то и дан человеку пытливый ум, чтобы находить выход из ситуации. Рассуждая пришел к выводу, что надо как-то настоять на том, чтобы объекты чертежа "забыли" о своих номерах. Получается, что надо, чтобы у них стерлись данные наборов характеристик, которые прикрепились к ним при создании ведомости.

Но, сперва надо стереть существующую ведомость площадок (она "держит" наборы характеристик у объектов жесткой связью) и выбрать соответствующие объекты для стирания их характеристик:

Затем у выбранных объектов надо исключить набор свойств:

А также, удалить наборы характеристик присвоенных стилем:
В итоге, после повторного создания ведомости площадок получил новую нумерацию, как и положено:
Вот и все. Не так уж и сложно оказалось.



среда, 28 сентября 2011 г.

Применение AutoCAD MEP 2012

Решил отдельным сообщением разместить ссылки на 3D модели технологических установок построенных нашими технологами в ЗАО "Тюменьнефтегазпроект". Особенно хочется подчеркнуть тот факт, что никто из технологов не проходил специального обучения и не ездил на 1-2 недели в Москву на "мега-супер" тренинг по изучению AutoCAD MEP 2012 за большие деньги.
Тесным кружочком я провел вводное занятие в течение 30 минут. Показал как расставляется оборудование, как прокладываются трубопроводы, какие проблемы могут возникать при прокладке и как их решать. Дальше ребята подхватили инициативу и начали проектировать без особых проблем.
Отдельное спасибо хотел бы сказать некоторым из них, кто не только просил заносить в базу AutoCAD MEP 2012 оборудование для проектирования, но и инициировал и принимал участие в идеологическом построении базы, пояснял, что и как делается и почему. Иными словами, не скупился на обучение меня, нерадивого, азам технологического проектирования.

Несколько картинок, чтобы знать, что ожидать от 3D моделей:





Вот такие модели:
764.10-91-ТХ и 764.10-92-ТХ Технологическая установка N1 и N2 (объединены)
764.10-105-ТХ Установка ввода реагентов
777.11-43-ТХ Площадка ресиверов топливного газа
777.11-73-ТХ Узел учета газа

четверг, 18 августа 2011 г.

Адаптация AutoCAD MEP 2012

В настоящий момент занят развертыванием системы AutoCAD MEP 2012 в организации ЗАО "Тюменьнефтегазпроект". Весьма интересный процесс, т.к. позволяет не только изучить новый программный продукт, но и более глубоко изучить технологию проектирования. Сейчас идет стадия "пилотный проект", но к чему это я? Ах да!
В AutoCAD MEP не очень то удобно обмениваться элементами базы данных. Однако, обменяться многовидовыми блоками вполне возможно в формате adsk. Что, собственно, и делаю. Итак...

Технологи на этапе проектирования вынуждены закладывать в модель элементы строительных конструкций. По этому поводу у нас возникли трения, т.к. ГОСТ и серия регламентируют определенные размеры металлоконструкций, а технологи обычно на это не очень то обращают внимание. Поэтому закладывают при проектировании металлоконструкции таких размеров, которые удобны им с их точки зрения. В итоге, в базе данных металлоконструкций появились типовые конструкции по серии и параметрический условный элемент, который подстраивается под требования технологов.

Конструкции по серия 1.450.3-7.94:
Площадки обслуживания ПХВ
Лестницы ЛХВ
Лестницы шахтные Ш
Стремянки СХ
Ограждения стремянок ОСХ
Ограждения лестниц ОЛХ45
Ограждения площадок ОПБХ

Конструкции по типовому 410-36-КМ:
Лестницы шахтные ШЛ

Разумеется, без аппаратов технологи проектировать не могут, поэтому собрал наиболее часто используемые аппараты по их спецификациям, нашел соответствующие типовые и каталоги, в итоге получил отличные модели для MEP 2012.
Сепараторы:
ГП 868.00.000 (Курганхиммаш)
ГП 805.00.000 Тип I (Курганхиммаш)
ГП 805.00.000 Тип II (Курганхиммаш)
ГП 1087.00.000 ГС 1 (Курганхиммаш)
ГП 1087.00.000 ГС 2 (Курганхиммаш) не все

Аппараты:
ТУ 3683-101-00217298-98 Тип I

Печи:
ПТБ-5-40-Э
ПТБ-10Э
ПТБ-4-64Ж

Аппараты воздушного охлаждения:
АВО 2АВГ
АВО СК0438
АВО СК0439
АВО-БМ-20-Ж-1.6-Б1/4-4-8 У1 (ОАО "Димитровградхиммаш")

Колонны:
АВР-105-00.000.000 (ООО "Волга НИПИТЭК")

Фильтры:
101VGF.06 (ООО "Омни Технологии")
241VGF.07 (ООО "Омни Технологии")
Блок фильтров 241VGC-2FG (ООО "Омни Технологии")

Арматура устьевая:
АФК1-80/65х21К1М4

Термошкафы с электрообогревом:
ТО-Э 1150.000

Этот же самый перечень оборудования размещен на моем сайте. Можно и там скачивать. :)

В результате, сотрудники технологического отдела уже сейчас разработали несколько сооружений в 3D на стадии "Проект". Сейчас занимаются проработкой обвязки сооружений на стадии "Рабочая документация". Привожу ссылку на 3D модель в формате dwfx и фрагменты одной из них:

Вот за что нравится MEP 2012,
так это за автоматическое создание вида в плане,
когда смотришь на модель сверху!