Инструменты пользователя

Инструменты сайта


Боковая панель

developers:tutorial:smdx:customimelements

Создание пользовательских элементов информационной модели

В программном комплексе Топоматик Робур 3D-модели связываются с элементами информационной модели (ИМ). Элементы ИМ содержат в себе семантическую информацию об объекте, например, размер, материал, форма, код классификатора и т.д. Элементы ИМ описываются в текстовых файлах с расширением «.smdx». Для описания используется разметка JSON. Файлы с описанием хранятся в директории «C:\ProgramData\Topomatic\Robur <TYPE>\16.0\Support\Smdx\».

Каждый элемент должен содержать родительский элемент. Базовым родительским элементом всех элементов ИМ является тип «SmdxElement».

Элемент ИМ описывается следующими парами ключ/значение:

  • id – уникальный строковый идентификатор элемента
  • name – имя элемента
  • parent – строковый идентификатор родительского элемента
  • properties – массив свойств элемента

Каждое свойство массива properties должно содержать пары ключ/значение:

  • tag – идентификатор свойства
  • name – имя свойства

Также свойства могут содержать следующие пары ключ/значение:

  • value – значение свойства
  • info – объект описания типа свойства

Пары ключ/значение объекта info:

  • type – тип свойства. Может принимать значения: bool, string. int, float, enum или идентификатор элемента ИМ
  • units – единицы измерения для типов int или float
  • values – перечисление вариантов для типа enum. Варианты описываются парой идентификатор/значение

Пользовательская библиотека элементов информационной модели

Создадим библиотеку элементов ИМ, которая будет содержать в себе следующие элементы:

  • SmdxCustomElement – пользовательский элемент, наследник от базового класса SmdxElement. В нём определено свойство caption и задано его значение.
  • SmdxCustomVolumeElement – элемент, имеющий форму. Наследник от SmdxCustomElement. В нём переопределено значение свойства caption и добавлено новое свойство shape типа enum.
  • SmdxCustomCylinderElement –элемент цилиндрической формы, наследник от SmdxCustomVolumeElement. В нём переопределено значение свойств caption и shape. Значения этих свойств установлены фиксированными, чтобы их нельзя было изменить через инспектор свойств. Также добавлено свойство diameter типа double и единицей изменения m (метр).
  • SmdxCustomCubeElement – элемент кубической формы, наследник от SmdxCustomVolumeElement. В нём переопределено значение свойств caption и shape. Значения этих свойств установлены фиксированными, чтобы их нельзя было изменить через инспектор свойств. Также добавлено свойство width типа double и единицей изменения m (метр).
  • Элементы SmdxCustomCylinder_0,5, SmdxCustomCylinder_1,0, SmdxCustomCube_0,5, SmdxCustomCube_1,0 – конкретные реализации цилиндрических и кубических элементов с соответствующими значениями свойств диаметра и ширины соответственно.

График наследования для SmdxCustomCylinder_0,5 будет выглядеть так:

  • SmdxCustomCylinder_0,5
    • SmdxCustomCylinderElement
      • SmdxCustomVolumeElement
        • SmdxCustomElement
          • SmdxElement

Создайте текстовый файл customtypes.smdx и поместите его в директорию
«C:\ProgramData\Topomatic\Robur <TYPE>\16.0\Support\Smdx\». Заполните файл следующим образом:

customtypes.smdx
[
  {
    "id": "SmdxCustomElement",
    "name": "Пользовательский элемент",
    "parent": "SmdxElement",
    "properties": [
      {
        "tag": "caption",
        "name": "Описание",
        "value": "Пользовательский элемент"
      }
    ]
  },
 
  {
    "id": "SmdxCustomVolumeElement",
    "name": "Пользовательский объёмный элемент",
    "parent": "SmdxCustomElement",
    "properties": [
      {
        "tag": "caption",
        "value": "Пользовательский объёмный элемент"
      },
      {
        "tag": "shape",
        "name": "Форма",
        "info": {
          "type": "enum",
          "values": {
            "Cube": "Куб",
            "Cylinder": "Цилиндр"
          }
        }
      }
    ]
  },
 
  {
    "id": "SmdxCustomCylinderElement",
    "name": "Пользовательский цилиндрический элемент",
    "parent": "SmdxCustomVolumeElement",
    "properties": [
      {
        "tag": "caption",
        "fixed": true,
        "value": "Пользовательский цилиндрический элемент"
      },
      {
        "tag": "shape",
        "fixed": true,
        "value": "Cylinder"
      },
      {
        "tag": "diameter",
        "name": "Диаметр",
        "info": {
          "type": "float",
          "units": "m"
        }
      }
    ]
  },
 
  {
    "id": "SmdxCustomCylinder_0,5",
    "name": "Пользовательский цилиндр 0,5м",
    "parent": "SmdxCustomCylinderElement",
    "properties": [
      {
        "tag": "diameter",
        "fixed": true,
        "value": 0.5
      }
    ]
  },
 
  {
    "id": "SmdxCustomCylinder_1,0",
    "name": "Пользовательский цилиндр 1,0м",
    "parent": "SmdxCustomCylinderElement",
    "properties": [
      {
        "tag": "diameter",
        "fixed": true,
        "value": 1
      }
    ]
  },
 
  {
    "id": "SmdxCustomCubeElement",
    "name": "Пользовательский кубический элемент",
    "parent": "SmdxCustomVolumeElement",
    "properties": [
      {
        "tag": "caption",
        "fixed": true, 
        "value": "Пользовательский кубический элемент"
      },
      {
        "tag": "shape",
        "fixed": true,
        "value": "Cube"
      },
      {
        "tag": "width",
        "name": "Ширина",
        "info": {
          "type": "float",
          "units": "m"
        }
      }
    ]
  },
 
  {
    "id": "SmdxCustomCube_0,5",
    "name": "Пользовательский куб 0,5м",
    "parent": "SmdxCustomCubeElement",
    "properties": [
      {
        "tag": "width",
        "fixed": true,
        "value": 0.5
      }
    ]
  },
 
  {
    "id": "SmdxCustomCube_1,0",
    "name": "Пользовательский куб 1,0м",
    "parent": "SmdxCustomCubeElement",
    "properties": [
      {
        "tag": "width",
        "fixed": true,
        "value": 1
      }
    ]
  }
]

Откроем менеджер структуры Smdx и убедимся, что описанные выше типы появились в библиотеке.

developers/tutorial/smdx/customimelements.txt · Последние изменения: 2022/12/07 10:22 — proxor