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

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

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

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

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

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

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

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

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

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

Создайте текстовый файл 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 и убедимся, что описанные выше типы появились в библиотеке.