Manifold Geometry // Многообразная Геометрия

И еще раз про изменение формата BREP

/ Просмотров: 746

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

  • Пользовательское приложение использует Python-обертку FreeCAD (на версии OpenCascade 7.4) для чтения файлов BREP и работы с геометрией.
  • Исходные данные в формате BREP подготавливает другое приложение на версии OpenCascade 7.6.
Изменения формата BREP.

Приложения стали несовместимы, т.к. BREP-файлы версии 7.6 не читаются версией 7.4 (см. баг #31136). В формат были внесены изменения для хранения нормалей на сетках, поскольку оные не могут быть вычислены по аналитической геометрии в силу отсутствия последней.

Портирование первого приложения недопустимо (по любым причинам, начиная от требований заказчика и заканчивая примитивным отсутствием тестов или возможными регрессиями в новых версиях FreeCAD). Решение проблемы состоит в том, чтобы заставить OpenCascade 7.6 создавать файлы в старом формате. Благо, такая возможность предусмотрена в BRepTools::Write():

BRepTools::Write(shape, filename, false, false,
                 TopTools_FormatVersion_VERSION_2);

В релиз-нотах версии 7.6 об изменении формата BREP ничего не сказано (sic!), поэтому вдумчивому читателю можно смело рекомендовать заметку Кирилла, проливающую свет на некоторые аспекты совместимости. Отсутствие каких-либо сведений об этой проблеме в официальных релиз-нотах говорит о том, что фокус внимания разработчиков был явно смещен в сторону бинарного формата XCAF, куда BREP входит на правах геометрических вставок и не более того (изначальная задача состояла в передаче нормалей через формат XCAF, чтобы сделать гладкое затенение на чисто сеточных данных в визуализации AIS). К сожалению, разработчики избавились от практики формирования полноценных релиз-нот с перечислением всех решенных проблем, и мы можем узнать только о тех изменениях, которые вендор посчитал наиболее значимыми.

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

Want to discuss this? Jump in to our forum.