пятница, 27 сентября 2013 г.

Autocad P&ID: переход с версии 2013 на 2014

Наконец-то по подписке получили версию 2014en. Не зря же за неё платили - надо переходить на новую версию.

Что сразу бросается в глаза:
  1. Autocad Plant 3d 2014 появился еще в мае, но:
    • Plant Design Suite 2014 появился только в августе
    • Русификации Autocad Plant 3d 2014 ещё нет
    • Наверное русификация появится уже после окончания подписки
  2. Программа на некоторых машинах стала значительно тормозить.
  3. Практически сразу появились расширения. Неужели их нельзя было воткнуть в релиз?

Теперь о том, что в глаза бросилось не сразу:
В версии 2013(ru) меня удивляло, что блоки условных обозначений в P&ID названы по русски. Вот при переходе нам это и аукнулось. При попытке выбрать на схеме проекта, созданного в версии 2013ru, для клапана фланцевое соединение в версии 2014en ничего не происходило. Оказалось, проблема в том, что о русификации блоков (я уверен, что и с другими элементами интерфейса та же беда) знает некая часть программы (пока её не нашёл), а не база проекта.

Постараюсь описать, как я это вижу
Версия 2013ru, проект 2013ru:
  • Вставляем задвижку. Нажимаем кнопку, указываем место.
  • Программа лезет в базу данных проекта, находит там запись об условном обозначении "VALVE PIP"
  • Программа сравнивает, какое значение должно быть для текущей языковой версии. Эта информация наверняка есть в каком-то файле, но возможно, зашифрована, и я её ещё не нашёл. Программа получает значение для русской версии "ЗАДВИЖКА PIP". Прошу заметить, эта информация взята не из базы данных проекта, а зависит от версии программы.
  • Программа пытается найти этот блок в файле projSymbolStyle.dwg...... и находит.
  • Далее блок отрисовывается.

Версия 2014en, проект 2013ru:
  • Вставляем задвижку. Нажимаем кнопку, указываем место.
  • Программа лезет в базу данных проекта, находит там запись об условном обозначении "VALVE PIP"
  • Программа сравнивает, какое значение должно быть для текущей языковой версии. Программа получает значение для английской версии "VALVE PIP".
  • Программа пытается найти этот блок в файле projSymbolStyle.dwg...... и не находит.
  • Далее блок не отрисовывается.

Выход из положения
Из этой ситуации я вижу только один выход. Тщательно дорабатывать напильником шаблон проекта и текущие проекты. Нам повезло - у нас только один рабочий проект, который потом станет шаблонным.
Итак, меняем в базе данных значение на требуемое нам, или переименовываем блок в файле projSymbolStyle.dwg. В первом случае, рекомендую использовать аббревиатуру предприятия в начале названия блоков. В этом случае даже при смене версий проблем быть не должно. Во втором варианте, будьте готовы к тому, что при установке русификации вам придется проделывать работу по переименовыванию блоков заново.


среда, 28 августа 2013 г.

Autocad P&ID: Баг HasFlowDirection

Первый баг в программе, который я решил серьёзно описать.

Описание проблемы

Программа позволяет серьёзно изменить начальные установки, в частности, добавлять новые элементы. Для себя мы приняли систему именования, чтобы выделить элементы из общего списка и применяем префикс ВНП. Но речь не об этом.
Создавая элемент, мы можем в один класс занести несколько различных обозначений, в зависимости от функционала, или от других признаков... В текущей задаче мне потребовалось создать дисковый затвор, причем отображаться он может как с лева на право, так и на оборот. Для этого можно применить свойство HasFlowDirection. Как написано в инструкции, достаточно лишь изменить значение логического типа с Ложь на Истина, и все будет в порядке: на блоке в чертеже будет появляться стрелка при нажатии на которую блок будет менять направление.

Пробуем. 
Изменяем свойство на Истина, нажимаем ОК.
Нет, не появилась. Снова открываем настройки. Свойство HasFlowDirection имеет значение ЛОЖЬ. Где-то что-то не так.... Нет, наверное, мы забыли изменить его. Или может нужно просто перейти на другое поле, тогда сработает.
Пробуем. На этот раз, нажимаем Применить. .......окно обновляется и мы видим..... ЛОЖЬ.
Получается, изменить это свойство не возможно???

Ищем решение

После тщетных попыток найти информацию по этой проблеме в интернете и на форумах автодеска, стал копать сам. 
Лезем в базу. Каждому классу в окне свойств соответствует запись в таблице PnPTables.
Чтобы проще было найти свой класс, отфильтровал записи по базовому классу.
Так, уже не плохо, но это только таблицы. 
Свойства хранятся в таблице PnPTableAttributes. Фильтруем по имени таблицы. Заодно проверим свойства в работающем обратном клапане.
 Всё сразу становится на свои места. Программисты, разрабатывая модель локализации, не учли, что в базу попадает не значение True/False, а его локализованный эквивалент. Т.е. с переводом элементов раскрывающегося списка мы лишились части функций программы. 

Итог

Выполнить эту настройку через интерфейс программы НЕВОЗМОЖНО. Чтобы добиться требуемого результата, мне пришлось вносить изменение напрямую в базу данных.

PS

На сайте Autodesk позже нашел вопрос без ответа, оставленный в начале августа 2013. Вопрос просто остался без внимания. На мой взгляд, это просто не достойно продукта, стоимостью 6 килоевро за лицензию. Задуман продукт хороший, но реализация и поддержка ужасны.


четверг, 22 августа 2013 г.

Autocad P&ID: трюки при создании нестандартных условных обозначений

Иерархия условных обозначений

Прежде чем создавать новое условное обозначение клапана, необходимо понять, что P&ID - это довольно серьёзная платформа, в которой используется иерархическая система классов элементов с реализованным наследованием свойств. Например, свойство, добавленное в классе "Клапаны с ручным приводом", также появится у всех клапанов, "наследуемых" от этого класса. Таким образом, общие для всех клапанов свойства нет смысла дублировать для каждого клапана отдельно.
Иерархию можно усложнять. Например, создать в классе "Клапаны с ручным приводом" класс "Задвижки", внутри которого создать все требуемые классы задвижек, например:
- задвижка без привода
- задвижка с ручным приводом
- задвижка фланцевая
- задвижка закрытая.
Не спешите так и делать - это только пример. Есть способ использовать фланцевые и нормально закрытые задвижки намного проще. Об этом позже. Главное в этом примере, что для каждого обобщенного класса (здесь, "Задвижки") можно задать общие для членов этого класса свойства, что является очень удобным способом организации условных обозначений.

Создание нестандартных условных обозначений

При создании нестандартных условных обозначений, придерживайтесь следующих правил:
  1. Однажды применив условное обозначение - создайте блок.
  2. В блоке примитивы должны быть на слое "0" с цветом "По слою"
  3. Выработайте систему наименования блоков. При большом количестве блоков, возможно имеет смысл создать таблицу соответствия наименования блока и наименования символа. В этом случае, даже если блок называется "FDIP_100", вы не запутаетесь.
  4. Используйте привязки и шаг сетки при создании блоков.
  5. Количество свойств, хранимых классом не ограничено, но для упрощения обслуживания системы, следует выработать правильную организацию классов.

Создание свойств классов

 В качестве значений свойств могут выступать следующие типы данных:
  1. Строка - принимает строковое значение. Значение может отсутствовать.
  2. Число - принимает целое или натуральное число.
  3. Логический - значения Истина или Ложь.
  4. Список выбора - при выборе этого свойства в таблице свойств класса и нажатии кнопки Изменить, выводится список выбора, который можно изменять. Вы можете создавать новые списки выбора и изменять существующие.
  5. Копирование свойств - позволяет хранить в классе свойства, относящиеся к другому классу. Например, вы можете скопировать в клапан свойство, относящееся к чертежу, на котором она расположена.
Есть еще один тип данных - "Список символов". Это список условных обозначений. Оно недоступно для выбора, но используется в некоторых свойствах. О нём я расскажу далее.

Трюки при создании условных обозначений

Клапан может изображаться на техсхеме открытым или закрытым. Можно выполнить для их изображения два различных условных обозначения, а можно создать одно, и использовать возможности P&ID, предоставив выбор пользователю. Таким образом, количество классов и кнопок на панели инструментов можно сократить.
В классе "Клапаны с ручным приводом" определено свойство Normally (Норма). Это свойство имеет тип Список символов. Свойство наследуется на все клапаны класса Клапаны с ручным приводом. Но значения для каждого клапана можно переопределить. Список, сформированный для этого свойства отображается в контекстном меню на чертеже. Таким образом, один класс может иметь несколько представлений, выбор между которыми осуществляет пользователь.

Использование динамических блоков

Хорошая новость: P&ID использует динамические блоки. Плохая - использование динамических блоков ограничено. В блоках условных обозначений по-умолчанию используется некоторые динамические элементы, но при вставке блока в чертеж, P&ID конвертирует их таким образом, что большая часть динамических свойств теряется.
Для примера, откроем файл projSymbolStyle.dwg в папке проекта. Этот файл содержит все блоки условных обозначений проекта.

Открыв в редакторе блоков блок ЗАДВИЖКА PIP можно увидеть два объекта Point Parameter. Это указатели точек присоединения линии к элементу. На встраиваемых элементов наличие точек подключения обязательно, на оборудовании, например, емкостях или резервуарах, их можно не устанавливать. Но следует иметь в виду, что есть оборудование, например насосы или теплообменники, где место подключения строго определено.
Имена параметров, в данном примере, состоят из двух частей, разделенных двоеточием. Первая часть - наименование точки подключения. Номером точки подключения определяется направление потока. В данном случае - от точки 1 к точке 2. Вторая часть отвечает за ориентацию присоединяемого компонента. Системой определено, что EndCode0 находится слева на горизонтали, обход идет против часовой стрелки, так что EndCode270 будет сверху.

вторник, 9 июля 2013 г.

Адаптация Autocad Plant 3D: Скрипты Python. Задание матрицы трансформации (setTransformationMatrix)

На предыдущую статью получил вопрос от Max Grigorenko:
Доброго времени суток! Хорошая статья хоть и кратенькая. но вот вопрос у меня к Вам: знаете ли вы как работает функция "Задать матрицу трансформации (obj.setTransformationMatrix)"? Если Вас не затруднит,  пример с пояснениями.

Что такое матрица трансформации

Матрица трансформации - это объект, содержащий информацию о вращении и переносе, примененных к ней.
Матрица трансформации создается с помощью функции mTransform(), и далее с ней можно работать как с обычным элементом геометрии, применяя функции вращения и переноса.

Для чего это нужно?

Представим ситуацию. Мы хотим создать Цилиндр и Конус, повернуть их относительно оси Y на 90 градусов и перенести вдоль X на 300 единиц, а вдоль Y на 200.
Оба элемента создаются в одной точке, а потому их можно перетаскивать одновременно. Я вижу здесь 3 способа, как выполнить эту задачу.

1. Создаем цилиндр и конус и каждый из них отдельно переносим и вращаем

сn = CONE(s, 20, 0, 200, 0).rotateY(90).translate((300, 200, 0))

cl = CYLINDER(s, 50, 10,0).rotateY(90).translate((300, 200, 0))

2. Используем матрицу трансформации для переноса и вращения

t=mTransform().rotateY(90).translate((300, 200, 0))

сn = CONE(s, 20, 0, 200, 0).setTransformationMatrix(t)

cl = CYLINDER(s, 50, 10,0).setTransformationMatrix(t)

С точки зрения программиста, этот способ лучше, так как легче для понимания и обслуживания кода. Изменения, при необходимости, нужно будет вносить только в одном месте.

3. Сначала объединяем, потом переносим

сn = CONE(s, 20, 0, 200, 0)

cl = CYLINDER(s, 50, 10,0)
 
cn.uniteWith(cl) 

cl.erase()

cn.rotateY(90).translate((300, 200, 0))

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

 Выводы

Матрицу трансформации удобно использовать в однотипных операциях переноса и вращения. Этот инструмент делает код более удобным для чтения и поддержки, но в простых скриптах можно обойтись и без неё. Какой инструмент использовать для достижения цели - ваш выбор.

 P.S.

При использовании .NET API все операции по переносу или вращению приходится выполнять с помощью класса Matrix3d. Для более полного понимания, что же такое матрица трансформации рекомендую обратиться к описаниям этого класса или  AcGeMatrix3d в ARX.

понедельник, 24 июня 2013 г.

Адаптация Autocad Plant 3D: Создание нестандартных элементов. Скрипты Python

К сожалению, информации о написании скриптов для Plant 3d очень мало. Основной учебник по созданию скриптов можно найти здесь.

 

 Начинаем писать скрипты


Первое, что нужно знать - все нестандартные скрипты должны быть сохранены в папке  "C:\AutoCAD Plant 3D 2013 Content\CPak Common\CustomScripts\". По-умолчанию папка CustomScripts не создается при установке, её требуется создать.

Пока не будем изобретать велосипед и возьмём пример из учебника. Создадим в папке CustomScripts текстовый файл TestScript.py и запишем в него следующее:
#----------------------------------------------------------------------------------------------------
 #Раздел 1
from varmain.primitiv import *
from varmain.custom import *

#Раздел 2
@activate(Group="Valve", Ports="2", TooltipShort="Test script", TooltipLong="This is a custom Testscript", LengthUnit="mm")
@group("MainDimensions")
@param(DN1=LENGTH, TooltipLong="Length of the Cylinder")
@param(DN2=LENGTH, TooltipLong="Length of the Cylinder")
@param(D=LENGTH, TooltipShort="Cylinder Diameter", Ask4Dist=True)
@param(L=LENGTH, TooltipLong="Length of the Cylinder")
@param(OF=LENGTH0)
@group(Name="meaningless enum")
@param(K=ENUM)
@enum(1, "align X")
@enum(2, "align Y")
@enum(3, "align Z")

#Раздел 3
def TESTSCRIPT(s,DN1=30.0, DN2=50.0, D=80.0, L=150.0, OF=-1, K=1, **kw):
   o1=CYLINDER(s, R=DN1/2, H=L, O=0.0).rotateY(90)
   o2=CONE(s, R1=DN2/2, R2=0, H=L, E=0)
   o1.uniteWith(o2)
   o2.erase()
   s.setPoint((0,0,0),(-1,0,0))
   s.setPoint((L,0,0),(1,0,0))
#----------------------------------------------------------------------------------------------------

Весь этот код рисует цилиндр и конус, объединённые в единое тело, и назначает два порта. Текст программы состоит из трех разделов.
  1. Импорт требуемых библиотек
  2. Описание метаинформации для Plant 3d
  3. Непосредственно, рисовалка
Подробнее о разделах.

Раздел 1


Здесь мне рассказать особо нечего. Библиотека  varmain.primitiv служит, видимо, для отрисовки, а varmain.custom - для создания именно нестандартных элементов. Можно использовать и другие библиотеки, но мне пока хватило этих.

Раздел 2


Здесь уже интереснее. Дело в том, что программе Plant 3d требуется рассказать, какие переменные, требуемые функции рисования, следует хранить в базе данных, показывать пользователю и запрашивать у пользователя при заполнении каталога. Если в вашей функции у переменных есть значения по-умолчанию, вы, возможно, не заметите отсутствия переменной в интерфейсе программы. Разве что размеры отрисованных тел будут одинаковыми там, где используется эта переменная.
Строка @activate говорит программе, что за элемент мы создаем.
Строка @group("MainDimensions") обозначает начало списка параметров.
Строка @param(DN1=LENGTH, TooltipLong="Length of the Cylinder") - это параметр. В данном случае, параметр DN1 с подсказкой, которая будет появляться в редакторе каталогов, "Length of the Cylinder".
Назначение группы параметров @group(Name="meaningless enum") мне пока непонятно. В инструкции говорится, что этот нумератор указывает вдоль какой оси чертить элемент. Может потом разберусь.

Раздел 3


Ну и самое интересное - рисование. Вычерчивание модели элемента происходит с помощью примитивов, с которыми можно производить операции сложения, вычитания и пересечения.
Список примитивов (насколько я понял, полный):
  1. Отвод
  2. Переходный отвод
  3. Сегментный отвод
  4. Коробка (точнее, параллелепипед)
  5. Конус
  6. Цилиндр
  7. Эллиптическое днище
  8. Эллиптическое днище 2
  9. Эллипсоид вращения
  10. Полусфера
  11. Пирамида
  12. Тело перехода от прямоугольника к кругу
  13. Сегмент сферы
  14. Тор-сферическое днище
  15. Тор-сферическое днище 2
  16. Тор-сферическое днище H
  17. Тор
Список операций над примитивами:
  1. Объединение (obj.uniteWith)
  2. Вычитание (obj.subtractFrom)
  3. Пересечение (obj.intersectWith)
  4. Удаление (obj.erase)
  5. Поворот вокруг оси X (obj.rotateX)
  6. Поворот вокруг оси Y (obj.rotateY)
  7. Поворот вокруг оси Z (obj.rotateZ)
  8. Перенос (obj.translate)
  9. Задать матрицу трансформации (obj.setTransformationMatrix)
  10. Задать порт (obj.setPoint)

Тестирование скриптов - немного теории


Итак, скрипт есть. Нужно его протестировать.

Для тестирования скриптов на Python в Plant 3d используется библиотека "PnP3dACPAdapter.arx". Для её загрузки можно использовать команду _appload в командной строке Autocad, использовать меню или ленту, или команду lisp:

 (arxload "PnP3dACPAdapter.arx")

Только после загрузки этой библиотеки можно проводить тестирование скрипта. Для этого используется команда lisp TESTACPSCRIPT с параметрами или без них:
(TESTACPSCRIPT "TESTSCRIPT")
(TESTACPSCRIPT "TESTSCRIPT" "D1" "300.5")
(TESTACPSCRIPT "TESTSCRIPT" "L" "40" "D1" "300.5" "D2" "88.9")

В начале разработки у меня постоянно выходила ошибка в командной строке:

(TESTACPSCRIPT "TESTSCRIPT")
Traceback (most recent call last):
  File ".\variants\varmain\__init__.py", line 94, in create
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
nil

Оказалось, что это единственная ошибка, которая выводится (может есть и ещё, но мне выходила только эта). Забыл переменную, не поставил запятую, ошибка ли логики или синтаксиса - ошибка всегда одна и та же. Без подробностей.

Plant 3d устроен таким образом, что раз загруженный скрипт остается в памяти до окончания сеанса.

Но, прежде чем вы приступили к тестированию, скрипт должен быть зарегистрирован. Это выполняется с помощью команды Plant 3d PLANTREGISTERCUSTOMSCRIPTS. При вызове этой команды происходит следущее:
  1. Файл скрипта компилируется и создается файл .pyc (в нашем случае TESTSCRIPT.pyc) в папке CustomScripts
  2. Метаданные о скрипте вносятся в файл ScriptGroup.xml. Если этот файл отсутствует - он создается. Этот файл содержит информацию о всех созданных нестандартных скриптах и к каким группам они относятся.
  3. Создается файл TestScript.xml в папке CustomScripts. Этот файл содержит метаданные о скрипте и используемых в нем переменных.
  4. Создается или обновляется файл variants.xml. Он содержит подсказки скрипта, используемых в нем параметров, значения нумераторов.
  5. Создается или обновляется файл variants.map. Содержит служебную информацию.

 Тестирование скриптов - последовательность действий


Набив шишки на том, что скрипты не загружаются повторно, если автокад не закрывался, выработал для себя следующий алгоритм:
  1. Внести изменения в файл .py.
  2. Открыть Plant 3d
  3. Выполнить команду PLANTREGISTERCUSTOMSCRIPTS
  4. Закрыть Plant 3d
  5. Открыть Plant 3d
  6. Загрузить библиотеку для тестирования.  (arxload "PnP3dACPAdapter.arx")
  7. Выполнить скрипт (TESTACPSCRIPT "TESTSCRIPT")
  8. Если скрипт требует доработки, повторить с пункта 1 (если вносить изменения в скрипт не закрывая Plant 3d, то шаг 2 можно исключить)
Для упрощения тестирования я создал кнопку к которой привязал команду

^C^C^P(arxload "PnP3dACPAdapter.arx")(TESTACPSCRIPT "TESTSCRIPT")

Это позволило объединить шаги 6 и 7 в один шаг.

Подготовка скриншотов


Для создания изображений тела или блок в Plant 3d служит команда PlantSnapShot. После её запуска следует указать, что нам нужен снимок детали, далее выбрать саму деталь, указать размер снимка и сохранить его в png с тем же именем, что и файл скрипта + окончание в зависимости от размера снимка. Например:
  • TESTSCRIPT_32.png
  • TESTSCRIPT_64.png
  • TESTSCRIPT_200.png
В учебнике об этом ни слова, но если вы хотите создать эскиз для своей детали, чтобы он отображался в редакторе каталогов на странице с типоразмерами, следует его сохранить в размере 640px. Соответственно, название файла будет выглядеть так:

  • TESTSCRIPT_640.png

Заполнение каталога 


Теперь, создав скрипт, протестировав его, создав все требуемые изображения, мы можем добавить новый элемент в каталог.
 Я не создал снимки для детали TESTSCRIPT, поэтому она здесь без рисунка, но, тем не менее, её можно выбрать и внести для неё сведения. Далее работа с каталогами и миникаталогами происходит по обычным сценариям.

Спасибо за внимание. Буду рад комментариям, вопросам.

четверг, 20 июня 2013 г.

Адаптация Autocad Plant 3D: Создание нестандартных элементов. СППК

Мой предыдущий пост был об основных возможностях редактора спецификаций. Я постарался осветить те моменты, о которые спотыкался неоднократно, вырабатывая свою методику работы. Но, работая со стандартными элементами, не давал мне покоя вопрос: можно ли создавать нестандартные? Как оказалось, этим вопросом задавался не только я. +Александр Щетинин предложил попробовать добавить СППК в базу оборудования.

Итак. Представим ситуацию: в Plant 3d необходимо создать базу, содержащую предохранительные клапаны Благовещенского Арматурного завода. 

На мой взгляд, блок предохранительных клапанов не является оборудованием. Да и не встретил я в Plant 3d базы оборудования. Потому добавлять элементы будем в каталог.
Реализовать эту задачу можно двумя путями: используя разработанные в Autocad модели и используя программирование.
 

Путь Первый 


В стандартных обучающих роликах и материалах рассказывается, как можно создать элемент каталога из трехмерной модели, выполненной в Autocad. У этого подхода есть очевидные плюсы - добавить в каталог новый элемент может любой, кто умеет хоть сколько-нибудь работать с редактором каталогов и Autocad. Минусы тоже есть - процесс получается очень трудоёмкий.

Мне не удалось хоть сколь-нибудь продвинуться в процессе создания параметрических моделей и использования их совместно с редактором спецификаций. В стандартном варианте со статическими моделями набор работ выглядит так:
  1. Создать модель элемента
  2. Преобразовать элемент в блок
  3. Назначить в Plant 3d порты
  4. Добавить блок в редакторе спецификаций в новый каталог и назначить ему атрибутивную информацию
  5. Добавить элемент из каталога в миникаталог
  6. Можно тестировать и вставлять в модели новый элемент
Требуется также учесть, что каждый элемент обладает уникальным набором параметров, и с каждым должна быть проведена работа по указанному списку. Не думаю, что большим преувеличением будет сказать, что подобная работа может отнимать от 1 до 4 часов на элемент, в зависимости от опыта исполнителя. 

Путь Второй


Оказывается Plant 3d всё же обладает расширяемостью большей, чем об этом говорится в продающих буклетах. 

Дело в том, что все "рисовалки" в Plant 3d выполнены скриптами на языке Python.
Последовательность работ в этом случае такова:
  1. Создание скрипта для рисования модели элемента.
  2. Регистрация скрипта в Plant 3d. При этом создается ряд вспомогательных файлов.
  3. Наполнение каталога.
  4. Добавление элемента из каталога в миникаталог
  5. Использование в модели
Информации по этой теме мне удалось найти крайне мало. С этим языком сталкиваюсь впервые. Но кое-чего добиться удалось.

На рисунке представлен результат вставки элемента  БПУ 50-40 из миникаталога.
 

На панели инструментов появляется новый элемент.

В редакторе каталогов можно добавлять новый элемент - Блок предохранительных клапанов.

В каталоге можно редактировать свойства элементов и портов.


Что с трудозатратами?  На разработку скрипта мне потребовалось 4 дня. Но, нужно иметь в виду, что модель не тривиальна, язык не знаком, информации мало. Думаю, сейчас подобная задача заняла бы 1-2 дня.

О том, как писать скрипты и использовать их в Plant3d расскажу в следующий раз.

четверг, 13 июня 2013 г.

Адаптация Autocad Plant 3D: заметки о Spec Editor

Чтобы не искать, выкладываю ссылку на обучающие ролики по Plant 3d.

Итак, попробуем создать новый компонент, например, задвижку.
Просмотрев видео, мы знаем, что можно создавать новые компоненты трубопроводов и задвижки из блоков. Попробуем создать стандартную задвижку.
Первое, с чем сталкиваемся, это УЖАСНО НЕ ДОРАБОТАННЫЙ ИНТЕРФЕЙС. Это и качество перевода (в справке приведён такой же скриншот, но названия классов переведены в тексте. Зачем, спрашивается? Для дополнительной путаницы?)
С проблемами в интерфейсе сталкиваемся на протяжении всей работы с Plant 3d. Но работать-то надо. Продолжим.
Выбираем категорию компонента - Valves (Задвижки). Далее следует указать свойство Piping Component, но что это за свойство такое? Смотрим в справке:
Компонент трубопровода
Указывает класс Plant 3D из списка. AutoCAD Plant 3D не поддерживает добавление классов в список.
Примечание Тип КорпусКлапана поддерживает подстановку исполнительного механизма.
И всё. Без подробностей. Какой вывод можно сделать? Класс Valve (Клапан) можно использовать для элементов без привода, а ValveBody (КорпусКлапана) для элементов, для которых впоследствии будут приводы.
Чтобы не путаться, мы всегда будем выбирать ValveBody.
Реляционная модель базы данных каталога настроена таким образом, что в создаваемом элементе должен быть хотя бы один размер. Поэтому выбор из списков размеров обязателен. Свойства Primary End Type и Short Description можно будет заполнить в окне редактирования элемента.

Нажимаем Создать. Ну, то есть Create.

И снова пару слов про интерфейс. Если вы твёрдо решили работать с Plant 3d - у вас должен быть широкоформатный монитор, чем больше - тем лучше. Ещё лучше, если их два.
Наш компонент уже отображается в нижней части окна - Обозревателе каталогов. Значит он уже в каталоге? ЕЩЁ НЕТ. Для того, что бы компонент сохранился в каталоге следует нажать кнопку "Сохранить в каталоге". Но при попытке сохранения у нас возникнет ошибка - мы ведь заполнили не все поля.
Начинаем заполнять:
 Вкладка Основные свойства
Область Свойства компонента трубопровода
Полное описание (семейство): Задвижка клиновая ЗКЛП2 PN=1,6МПа
Изготовитель: Благовещенский Арматурный Завод
Материал: Сталь 20
Краткое описание: Задвижка клиновая

Область Параметры подключения порта
 Прежде всего, если у вашего элемента порты подключения одинаковы, установите флаг Все порты обладают одинаковыми свойствами. Это позволит внести данные в области только один раз для всех портов одновременно. К сожалению, это флаг сбрасывается после сохранения элемента в базу данных, и его, для внесения изменений в этой области может потребоваться установить заново.
Единицы: Мм
Тип соединения: FL - фланцевое
Обработка: FL1 - первое исполнение
Класс давления: 1.6
Что ещё требуется знать для правильного заполнения? Свойство Класс давления представляет собой не число с плавающей точкой, как можно было бы предположить (ведь это вроде логично), а строку. Как следствие, нет проверки на корректность введенных данных. К чему это может привести? В Plant 3d вы вставляете задвижку на трубу, а вместо фланцев соответствующего исполнения система вставляет местозаполнители из миникаталога Placeholder. То есть система не может понять какие фланцы стоит применять с вашей задвижкой. Вывод: проверяйте, чтобы ваш класс давления совпадал с классом давления фланцев. "4" не равно "4,0" или "4.0".

Вкладка Размеры
Мы заполнили все необходимые свойства семейства для работы системы Plant 3d с нашим компонентом. Теперь переходим на вкладку Размеры и заносим информацию для каждого типоразмера.
Область Список размеров
Область Размеры отображает список типоразмеров. К сожалению, не предусмотрены никакие сортировки или групповые операции. Есть только три неудобно расположенные кнопки добавления, удаления и дублирования типоразмера.

Область Параметры подключения порта
Как и на вкладке Основные свойства, здесь имеется флаг Все порты обладают одинаковыми свойствами, значение которого, как и на вкладке Основные свойства, сбрасывается при сохранении элемента в каталог. Помните, если этот флаг не установлен, вводя данные в этой области вы редактируете только один порт. Для редактирования других портов следует воспользоваться одной из двух стрелок в верхнем правом углу области.
Основные свойства, требуемые для вставки элемента в модель являются:
Номинальный диаметр: 50
Наружный диаметр: 57

Область Свойства компонента трубопровода
Здесь требуется заполнить:
Полное описание (Размер): Задвижка клиновая ЗКЛП2 PN=1,6МПа DN=50
Вес: 15
Свойство Вес, в отличии от Класса давления, является числом с плавающей точкой, то есть выполняется проверка на корректность.

Область Размеры
Здесь следует заполнять свойства в соответствии с эскизом. Причем, если парные свойства равны, не обязательно вносить оба значения. Достаточно указать первое, а второе приравнять нулю. Например, если D1 = 57, а D2 = 0, Plant 3d вычертит задвижку у которой оба фланцевых соединения по 57 мм. Если у вас центр задвижки не смещён, не обязательно указывать  LS.
 Итак, все самые необходимые свойства введены, нажимаем Сохранить в каталоге.

Теперь задвижка будет корректно вставлять в Plant 3d. Конечно, для этого следует её добавить в миникаталог.
Но, задвижка еще не имеет привода. Об этом в следующий раз.