1. PromCore .prmt – создание и чтение файлов программы

 

Файл .prmt представляет собой текстовый контейнер, в котором перечислены конструктивные и архитектурные объекты, которые PromCore должен воссоздать в сцене. Каждый объект записывается в одну строку в виде записи, разделенной точкой с запятой:

 

<Type><TimeStamp>;param1;param2;…;paramN;

 

  • <Type> одно из ключевых слов, перечисленных ниже (WallConcrete, WallArchitecte, CombinePlane, CombinePylon).
  • <TimeStamp> любой уникальный суффикс, который вы добавите (импортер проверяет только, начинается ли токен с ключевого слова, поэтому DateTime.UtcNow.Ticks идеально подходит).
  • Разделитель десятичных знаков — используйте точку “ . ”.
  • Единицы измерения — все расстояния указаны в миллиметрах, углы — в градусах, силы — в тоннах.
  • Добавьте в конце  (пустой токен).
Translate this page:

WallConcrete20250512182627832827;-2880;200;2820;4010.815;70616.5;14072.54;69680.07;20;6;20;6;-370

CombinePlane20250512182307463272;-2880;300;-2248;58320;10687;22510;78783;9155;42374;

Тип

Индекс параметра (после первого   ; )

Значение

Пример

CombinePlane

hl

Level of the slab soffit

-2880

thk

Slab thickness

300

...

Even-length list of polygon vertices on the X-Z plane (x1;y1;x2;y2;…;xn;yn;)

-2248

58320

10687

22510

78783

9155

42374

CombinePylon202505121823105796484;17362;47416;-2880;1200;210;2820;20;269.3489;5;12;6;200;-152.9;

Тип

Индекс параметра (после первого  ; )

Значение

Пример

CombinePylon

X

Centre X

17362

Y

Centre Y

47416

hl

Base level (Z)

-2880

Введите текст

W

Section width (local X)

1200

D

Section depth (local Y)

210

H

Total height

2820

Pl

Protective layer

20

Rot

Rotation around global Z (deg)

269.3489

Nz

Rebar count in Z direction

5

Dz

Rebar Ø (mm)

12

Dxy

Transverse rebar Ø (mm)

6

S

Reinforcement pitch

200

N

Design axial force (- comp., + tension)

-152.9


public void SaveData()
{
    List<List<string>> stats = new List<List<string>>();
    List<string> planes      = floors(doc, structuralFloorSlabs, conv);
    List<string> colomns     = Columns(doc, structuralColumns, conv, form);
    List<string> WallsConcret= Walls(doc, structuralWalls, conv, form, "WallConcrete");
    List<string> WallsArch   = Walls(doc, ArchWalls, conv, form, "WallArchitec");

    stats.Add(planes);
    stats.Add(WallsConcret);
    stats.Add(colomns);
    stats.Add(WallsArch);

    form.saveFileDialog1.ShowDialog();
    string path = form.saveFileDialog1.FileName;
    using FileStream stream1 = new FileStream(path, FileMode.Create);
    new BinaryFormatter().Serialize(stream1, stats);
}

Все стены, опоры и перекрытия записываются в одномерные списки с использованием соответствующих методов в выбранной вами программе моделирования. Пример реализации на C#:

Контрольный список проверки

Элемент

Правило

Десятичный разделитель

. ” (точка) — устанавливает CultureInfo.InvariantCulture при сериализации

Координатные пары

Список вершин для CombinePlane должен содержать четное количество координат (минимум 3 пары).

Уникальный IDs

Они не обязательно должны быть уникальными во всем мире, только в пределах одного файла; это могут быть метки времени или GUID размером с метку времени.

Тип

Индекс параметра (после первого  ; )

Значение

Пример

WallConcrete

name

Object name

WallConcrete202511162209490913764

WallArchitec

hl

Base level (Z) of the wall

-2880

thk

Wall thickness

200

h

Wall height

2820

Введите текст

Ax

Start-point X

4010.815

Ay

Start-point Y

70616.5

Bx

End-point X

14072.54

Введите текст

By

End-point Y

69680.07

Dz

Rebar Ø (mm)

20

Nz

Rebar count in Z direction

6

Введите текст

Dxy

Rebar Ø (mm)

20

Nxy

Rebar count in X0Y direction

6

N

Design axial force (- comp., + tension)

-370

2. .dat — бинарный формат файлов расчёта

 

Файл .dat инструмента FEMnet или SmartPylon представляют собой файлы результатов расчёта каждой модели. 

Структура файла:

 

  • Содержание:
  • 1. PromCore .prmt – создание и чтение файлов программы
  • 2. FEMNET .dat — бинарный формат файлов расчёта

Поле

Тип

Описание

magic

int32

Константа 0x46454D4E (ASCII "FEMN")

version

int32

Версия формата

kind

int32

Тип данных: 0 = Dz, 1 = Mx, 2 = My

count

int32

Количество точек

В каждой новой строчке файла хранятся:

 

Поле

Тип

Описание

х

float32

Координата по Х (метры)

у

float32

Координата по У (метры)

value

float32

Значение Dz в мм, Мх и Му в Т/м

-

-

-

Пример чтения результатов расчёта нейросети FEMnet на Python:

 

import struct
import numpy as np

MAGIC = 0x46454D4E  # 'FEMN'

KIND_MAP = {
    0: "Dz",
    1: "Mx",
    2: "My",
}

def read_femnet_dat(path):
    """
    Возвращает словарь:
    - version, kind, kind_name, count
    - numpy-массивы x, z, value (float32)
    """
    with open(path, "rb") as f:
        hdr = f.read(16)  # magic, version, kind, count
        if len(hdr) < 16:
            raise ValueError("Файл слишком короткий: нет заголовка 16 байт")

        magic, version, kind, count = struct.unpack("<iiii", hdr)

        if magic != MAGIC:
            raise ValueError(f"Неверный magic: {hex(magic)} (ожидался {hex(MAGIC)})")

        data = np.fromfile(f, dtype="<f4", count=count * 3)
        if data.size != count * 3:
            raise ValueError("Оборванные данные: размер меньше ожидаемого")

        data = data.reshape((count, 3))
        x = data[:, 0]
        z = data[:, 1]
        val = data[:, 2]

    return {
        "path": path,
        "version": version,
        "kind": kind,
        "kind_name": KIND_MAP.get(kind, f"unknown({kind})"),
        "count": count,
        "x": x,
        "z": z,
        "value": val,
    }


if __name__ == "__main__":
    dat_path = r"C:\path\to\test_Mx.dat"  # поменяйте на свой путь
    res = read_femnet_dat(dat_path)

    print("version:", res["version"])
    print("kind:", res["kind"], res["kind_name"])
    print("count:", res["count"])
    print("first point:", res["x"][0], res["z"][0], res["value"][0])