понедельник, 15 октября 2012 г.

Объем изоляции в AutoCAD MEP

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

А если серьезно, то сметчики от технологов просят выдавать объем изоляции трубопроводов по диаметрам трубопроводов и толщине изоляции. Видимо в сметных расчетах параметры используются раздельно.
Короче говоря, сперва я хотел объединить решение с ранее написанным, однако, оно было ориентировано на любые типы объектов, в том числе и на оборудование, и на твердые тела. В новой задаче, надо учитывать только трубы и детали трубопроводов, а остальное игнорировать. От идеи с объединением отказался.
В итоге, родилось приложение MEPInsulationVolume (для AutoCAD MEP 2012 и 2013). Использовать приложение можно командой mepinsvol. После запуска команды, достаточно выбрать необходимые трубопроводы и нажать Enter. Масштабный коэффициент позволяет выполнить расчет в нужном масштабе (например, 0.001 - перевод мм в м). Результат подсчета окажется в командной строке.
Например,
   114 [100] volume of insulation: 0.344311588650863
читается как,
   114 - диаметр трубы
   100 - толщина изоляции
   volume of insulation - объем изоляции
   0.344311588650863 - объем изоляции в соотв. единицах

Протокол работы из командной строки приведен ниже.


Command: MEPInsVol

Select objects: Specify opposite corner: 20 found

Select objects:
Enter scale factor <.001>:

114 [100] area: 1.93784403614583
114 [100] area with insulation: 5.85467812277572
114 [100] volume: 0.0510808069381083
114 [100] volume with insulation: 0.395392395588971
114 [100] volume of insulation: 0.344311588650863
--
219 [0] area: 3.97367290395443
219 [0] volume: 0.189742575013275
--
219 [50] area: 1.4149715740827
219 [50] area with insulation: 2.16346254318387
219 [50] volume: 0.0685477187627397
219 [50] volume with insulation: 0.146078389419359
219 [50] volume of insulation: 0.0775306706566197
--
219 [100] area: 4.18342184154917
219 [100] area with insulation: 8.06102141592883
219 [100] volume: 0.198259028808557
219 [100] volume with insulation: 0.670630689193647
219 [100] volume of insulation: 0.47237166038509

Вуаля!

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

пятница, 12 октября 2012 г.

Выравнивание объектов в AutoCAD MEP

В очередной раз обратились ко мне коллеги из технологического отдела с просьбой упростить им жизнь при выравнивании опор трубопроводов расположенных на одном основании. Не нашли готового инструмента и опять на помощь пришел OARX и C#.

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

В итоге, родилось приложение MEPMvPartAlign (для AutoCAD MEP 2012 и 2013). Немного поясню, что оно делает и как им пользоваться. Итак...

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


Прежде всего, после вызова команды, необходимо выбрать объекты, подлежащие выравниванию.

Следующим этапом, надо указать точки, образующие плоскость выравнивания. Указать надо как минимум две точки, которые образуют воображаемую прямую.


Третью точку можно не указывать и нажать Enter, тогда ориентация плоскости в пространстве будет опираться на текущую систему координат. Если же очень надо указать третью точку образующую плоскость, нет проблем.

Как только определились с третьей точкой, команда сразу начнет выравнивать объекты. Протокол выравнивания будет отображаться в командной строке. Убедиться в успешном результате можно и на виде в плане.


Протокол работы из командной строки приведен ниже.


Command: MvPartAlign

Select objects: Specify opposite corner: 8 found

Select objects:

Specify first point of align line:
Specify second point of align line:
Third point for plane or none for current Z:

89 Т13.07 moved on 24.2327904682606
57 Т13.04 moved on 53.9367274744436
108 Т13.07 moved on 55.7566428608261
273 Т13.19 moved on 4.35665730945766
273 Т13.19 moved on 19.0338690225035
108 Т13.07 moved on 62.9153513084166
108 Т13.07 moved on 12.0487855602987
32 Т13.01 moved on 0.745859129354358
Success.

Вуаля!

среда, 3 октября 2012 г.

Подсчет сварных швов в AutoCAD MEP

AutoCAD MEP - великолепный продукт для прокладки технологических трубопроводов, но не хватает в нем некоторых мелких плюшек и фишек для полного счастья инженера-технолога. Очередной раз обратились ко мне с просьбой упростить жизнь в подсчете количества стыков, т.е. количества сварных швов для выдачи задания сметному отделу. Выбрать и перебрать трубы совершенно несложно. Возник вопрос только с отрезками труб, которые по разным причинам могут быть мизерной длины, например, меньше 1 мм. Было принято решение воспринимать их как отдельный шов и не мучиться с выяснением причин их появления.
В итоге, родилось приложение MEPJointCount.
Протокол работы из командной строки приведен ниже. При протоколировании предполагалось, что труба поставляется длиной 8 метров (8000мм).

Команда: MEPJOINTCOUNT

Выберите объекты: _all
найдено: 371

Выберите объекты:

selected objects count: 371
Enter pipe segment length <1000>: 8000

45x2: 4
57x6,0-20'С': 107
89x6,0-20'С': 25
114x6,0-20'С': 200
159x6,0-20'С': 159
219x8,0-20А: 255
273x8,0-20А: 9
325x8,0-20А: 107
720x9-09ГСФ: 4

Полученные данные можно передавать сметному отделу в задании.


понедельник, 1 октября 2012 г.

Площадь поверхности и объем в AutoCAD MEP

На прошлой неделе меня попросили изучить вопрос получения геометрических параметров труб, арматуры и оборудования в AutoCAD MEP 3D. В частности, площадь поверхности и объем выбранных примитивов. Такие параметры необходимы для формирования задания сметному отделу, где указывается площадь поверхности, которую надо красить или объем изоляции. Меня удивил тот факт, что в AutoCAD MEP 3D нет готовых встроенных функций для такой операции.
Опять пришлось засучить рукава и вооружиться OARX 2013 и C#. Оказалось, что написать приложение для получения геометрических параметров достаточно просто. В итоге, родилось приложение MEPGeomProps. Описывать, как оно работает, наверное нет смысла, просто приведу протокол работы из командной строки.


Command: MEPGEOMPROPS

Select objects: Specify opposite corner: 6 found

Select objects:
Enter scale factor <.001>:

Accepted entities: 6
Skiped entities: 0
Area of accepted entities: 116.347896918749
Area of accepted entities with insulation: 1.59315380862003
Volume of accepted entities: 49.9199242101251
Volume of accepted entities with insulation: 0.151828935367589

Линейный масштабный коэф. по-умолчанию равен 0.001, что соответствует кубическим и квадратным метрам.

В результате, расчет выдает:

  • площадь поверхности обработанных примитивов
  • площадь поверхности обработанных примитивов с учетом изоляции
  • объем обработанных примитивов
  • объем обработанных примитивов с учетом изоляции

Вот и все. Как всегда просто и элегантно.

понедельник, 20 августа 2012 г.

Stora и Samsung 2012

Пару недель назад привезли мне новые телевизоры UE40ES5500 и UE32ES6757. Но общая радость, а особенно детей, т.к. 32" телевизор предназначался для детской, была недолгой. Встроенный AllShare Play видел домашние медиа-серверы с фильмами, мультфильмами и фотографиями, но при подключении писал, что список содержимого пуст.
Как оказалось, что-то не так в "королевстве" Samsung с протоколом DLNA или, возможно, отстает Mediatomb в развитии.
Техническая поддержка Samsung, как я и полагал, ответила, что технически устройство исправно, обновите прошивку и радуйтесь. Как будто они не знают, что при подключении телевизора со Smart TV к сети, первое, что он сделает - обновится!
В общем, как обычно, "спасение утопающих - дело рук самих утопающих". После долгих поисков и разочарований вышел на следующее решение.
Но, решение надо проверить. Тем более, оно рассчитано на, так сказать, полноценный Mediatomb с исходными текстами и компиляцией, а в моем случае использовалcя скомпилированный пакет для NetGear Stora, а вернее для nix'ов внутри нее.
В общем, с помощью друга на виртуальной машине была поднята Ubuntu 11.04. Под нее был скомпилирован Mediatomb с поддержкой javascript и указанным выше патчем. Надежды оправдались! Телевизоры увидели новый медиаплеер в сети, успешно к нему подключились, показали содержимое каталога и даже пытались проигрывать фильмы. Очевидно, из-за нехватки ресурсов попытка проиграть фильмы больше 2 Гб приводили к исчезновению связи с медиасервером.
Разумеется, такое не устроило меня и после недолгих раздумий на домашний "недосервер" была установлена та же Ubuntu 11.04 со всеми полезными пакетами: sshd, vsftpd, transmission, mediatomb, samba.
Подцепить сетевые хранилища удалось с помощью samba. В /etc/fstab прописал:

//192.168.10.5/FamilyLibrary/Audio /home/bsdadm/FamilyLibrary/Audio cifs user=Alxd,password= password 0 0
//192.168.10.5/FamilyLibrary/Video      /home/bsdadm/FamilyLibrary/Video cifs user=Alxd,password=password 0 0
//192.168.10.6/FamilyLibrary/Photos     /home/bsdadm/FamilyLibrary/Photos cifs user=Alxd,password= password 0 0

В настройке Mediatomb пришлось изменить mimetype для mkv в файле /etc/mediatomb/config.xml:
было map from="mkv" to="video/x-matroska"
стало map from="mkv" to="video/x-msvideo"

Кроме этого, там же изменил custom-http-header, чтобы заработали кнопки управления проигрывателем на пульте телевизора:

      add header="transferMode.dlna.org: Streaming"
      add header="contentFeatures.dlna.org: DLNA.ORG_OP=11;DLNA.ORG_CI=1;DLNA.ORG_FLAGS=01700000000000000000000000000000"

Также, в настройке Mediatomb включил ffmpegthumbnailer, т.к. на Ubuntu он заработал без проблем (NAS не поддерживает).

Отмечу, что на Ubuntu установленным на "железо" Mediatomb работает очень быстро. И еще, интересно, что некоторые фильмы, которые наотрез отказывались проигрываться посредством Mediatomb установленным на NAS, теперь начали проигрываться без проблем! В общем, теперь, можно просматривать фильмы, фотографии и домашние видеозаписи на любом телевизоре или переносном устройстве с поддержкой DLNA! И все это управляется с телевизионного пульта каждого телевизора!

Дополнение 1:
Ждал подобного комментария. Скачивайте mediatomb и устанавливайте в ubuntu командой apt-get install *.deb


вторник, 24 июля 2012 г.

Yii и дерево

Последнее время активно изучаю Yii Framework, которым весьма доволен. Однако, как всегда это бывает, чего-нибудь да не хватает в готовом решении. В моем случае, возникла потребность в оперировании иерархически упорядоченными данными, иначе - деревом. В Yii есть дерево, но мне оно по некоторым причинам не подошло и пришлось сделать свое.

Критерии:
  1. Источник данных - база данных mysql.
  2. Данные должны располагаться в одной таблице (можно и больше, но мне и одной хватило).
  3. Иерархичность должна обеспечиваться одним полем записи - ParentID (в моем случае - pid).
  4. Таблица данных должна формироваться на стороне mysql (хранимая процедура).
  5. Результат должен быть представлен в виде дерева похожего на "аккордеон".
  6. У каждой записи должен быть доступен набор команд.

Внешний вид, который планировалось получить и который получился в итоге:
Widget получил название  AlxdDataTree. Позволяет отобразить упорядоченный иерархический набор данных в виде раскрываемого как "аккордеон" дерева.
Входные данные для AlxdDataTree:
  1. Данные должны передаваться в AlxdDataTree в виде массива записей упорядоченных так, как они будут отображаться в дереве.
  2. Обязательно должны присутствовать поля: id - идентификатор; title - наименование, которое будет отображаться в дереве; level - уровень записи в дереве; count - количество записей в родителе.
  3. Перечень доступных команд для записей должен описываться в виде массива.
В путь...
Прежде всего, мне потребовалось создать таблицу и написать хранимую процедуру для получения данных, которые будут переданы контроллеру, а позже -  AlxdDataTree. 
Таблица получила название classificator. Вот ее перечень полей:

Описание полей:
id - уникальный идентификатор каждой записи
pid - идентификатор родителя
oid - идентификатор владельца классификатора
code - системное имя классификатора
name - наименование классификатора
createtime - дата создания записи
modifytime - дата изменения записи
Пример хранимых данных:

Следующим шагом стало написание хранимой процедуры. Мне понадобилось две хранимые процедуры. Первая используется рекурсией, вторая вызывается из контроллера и возвращает конечный результат.
Первая процедура получает на входе id родителя и его текущий level. Вторая процедура получает на входе oid владельца классификатора. Если владелец как таковой не нужен, можно удалить соотв. поле oid из таблицы и убрать входной параметр oid. Разумеется, придется поправить и сами процедуры.
Результат выполнения процедуры Call getClassificators(1):

Затем создал модель classificator с помощью Gii и контроллер с CRUD операциями. В коде действия Admin добавил следующее:
$classificators = Yii::app()->db->createCommand('call getClassificators('.$oid.');')->queryAll();

$this->render('admin',array(
'classificators'=>$classificators,
));
где, $oid - идентификатор владельца классификатора.

Как следствие, надо пришлось поправить и файл вида admin.php. Удалил в нем widget создающий CGridView. Добавил следующее:
$this->widget('ext.AlxdDataTree.AlxdDataTree', array(
'data'=>$classificators,
'idField'=>'id',
'titleField'=>'name',
'levelField'=>'lvl',
'countField'=>'cnt',
)
);

Как видно, AlxdDataTree расположен в каталоге extension в папке AlxdDataTree. Вот так:

Результат работы приложения:


Вот и все!

А вот и AlxdDataTree со всеми стилями, скриптами, картинками и sql-запросами. Никакой регистрации приложения в Yii не требуется, достаточно просто распаковать архив в папке extension. Файлы sql исключительно для примера и на работу самого widget'а не влияют. Каждый может написать свою процедуру для получения конечной таблицы данных.



среда, 23 мая 2012 г.

Новенькое в ATable 8.x (май 2012)

Описывать исправленные ошибки как всегда не стану, они были, есть и будут есть. Без них никто не пишет. Стараюсь делать код стабильнее и "непадучее".
Из новенького...
1. Пополнил наконец-то список свойств таблицы в окне свойств объекта


2. Добавил подсвечивание выбранных ячеек в чертеже


3. Добавил опцию управления таблицей через командную строку и выбор ячеек мышкой (пока тестовый режим и не все субопции работают)


Пока все. Удачи!