Skip to content

Commit

Permalink
App: let cmake generate opencascade.conf file
Browse files Browse the repository at this point in the history
Relates to GitHub #329
  • Loading branch information
HuguesDelorme committed Feb 27, 2025
1 parent 47bb2b7 commit 443fba2
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 94 deletions.
10 changes: 6 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -438,8 +438,9 @@ endif()
# Configure files
##########

configure_file(${PROJECT_SOURCE_DIR}/src/mayo_config.h.cmake common/mayo_config.h @ONLY)
configure_file(${PROJECT_SOURCE_DIR}/src/mayo_version.h.cmake common/mayo_version.h @ONLY)
configure_file(${PROJECT_SOURCE_DIR}/cmake/opencascade.conf.in opencascade.conf @ONLY)
configure_file(${PROJECT_SOURCE_DIR}/src/mayo_config.h.in common/mayo_config.h @ONLY)
configure_file(${PROJECT_SOURCE_DIR}/src/mayo_version.h.in common/mayo_version.h @ONLY)

##########
# Icons for Mayo exe targets
Expand Down Expand Up @@ -686,11 +687,12 @@ add_custom_target(
.github/workflows/ci_macos.yml
.github/workflows/ci_macos_conda.yml
.github/workflows/ci_windows.yml
cmake/opencascade.conf.in
images/credits.txt
scripts/bump-version.rb
scripts/gen-cmake-opencascade-vars.bat
src/mayo_config.h.cmake
src/mayo_version.h.cmake
src/mayo_config.h.in
src/mayo_version.h.in
README.md
)

Expand Down
19 changes: 19 additions & 0 deletions cmake/opencascade.conf.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
MMGT_OPT=1
MMGT_CLEAR=1
CSF_LANGUAGE=us
CSF_EXCEPTION_PROMPT=1

CSF_SHMessage=@OpenCASCADE_RESOURCE_DIR@/SHMessage
CSF_MDTVTexturesDirectory=@OpenCASCADE_RESOURCE_DIR@/Textures
CSF_ShadersDirectory=@OpenCASCADE_RESOURCE_DIR@/Shaders
CSF_XSMessage=@OpenCASCADE_RESOURCE_DIR@/XSMessage
CSF_TObjMessage=@OpenCASCADE_RESOURCE_DIR@/TObj
CSF_StandardDefaults=@OpenCASCADE_RESOURCE_DIR@/StdResource
CSF_PluginDefaults=@OpenCASCADE_RESOURCE_DIR@/StdResource
CSF_XCAFDefaults=@OpenCASCADE_RESOURCE_DIR@/StdResource
CSF_TObjDefaults=@OpenCASCADE_RESOURCE_DIR@/StdResource
CSF_StandardLiteDefaults=@OpenCASCADE_RESOURCE_DIR@/StdResource
CSF_IGESDefaults=@OpenCASCADE_RESOURCE_DIR@/XSTEPResource
CSF_STEPDefaults=@OpenCASCADE_RESOURCE_DIR@/XSTEPResource
CSF_XmlOcafResource=@OpenCASCADE_RESOURCE_DIR@/XmlOcafResource
CSF_MIGRATION_TYPES=@OpenCASCADE_RESOURCE_DIR@/StdResource/MigrationSheet.txt
45 changes: 45 additions & 0 deletions src/app/app_module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@

#include <BRepBndLib.hxx>

#include <QtCore/QCoreApplication>
#include <QtCore/QDataStream>
#include <QtCore/QDir>
#include <QtCore/QSettings>
#include <QtCore/QtDebug>

#include <fmt/format.h>
Expand Down Expand Up @@ -99,6 +101,49 @@ AppModule::AppModule()
Application::defineMayoFormat(m_application);
}

void AppModule::initOpenCascadeEnvironment(const FilePath& settingsFilepath)
{
const QString strSettingsFilepath = filepathTo<QString>(settingsFilepath);
if (!filepathExists(settingsFilepath) /* TODO Check readable */) {
qWarning().noquote()
<< fmt::format(textIdTr("OpenCascade settings file doesn't exist or is not readable [path={}]"),
settingsFilepath.u8string()).c_str();
return;
}

const QSettings occSettings(strSettingsFilepath, QSettings::IniFormat);
if (occSettings.status() != QSettings::NoError) {
qWarning().noquote()
<< fmt::format(textIdTr("OpenCascade settings file could not be loaded with QSettings [path={}]"),
settingsFilepath.u8string()).c_str();
return;
}

// Process options
for (const char* varName : Application::envOpenCascadeOptions()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
const QString strValue = occSettings.value(qVarName).toString();
qputenv(varName, strValue.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strValue);
}
}

// Process paths
for (const char* varName : Application::envOpenCascadePaths()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
QString strPath = occSettings.value(qVarName).toString();
if (QFileInfo(strPath).isRelative())
strPath = QCoreApplication::applicationDirPath() + QDir::separator() + strPath;

strPath = QDir::toNativeSeparators(strPath);
qputenv(varName, strPath.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strPath);
}
}
}

QStringUtils::TextOptions AppModule::defaultTextOptions() const
{
QStringUtils::TextOptions opts;
Expand Down
3 changes: 3 additions & 0 deletions src/app/app_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ class AppModule :
AppModuleProperties* properties() { return &m_props; }
Settings* settings() const { return m_settings; }

// Set OpenCascade environment variables defined in a settings file(INI format)
static void initOpenCascadeEnvironment(const FilePath& settingsFilepath);

// Predicate suitable to Settings::loadFrom() and Settings::saveAs()
static bool excludeSettingPredicate(const Property& prop);

Expand Down
46 changes: 1 addition & 45 deletions src/app/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,48 +181,6 @@ Theme* mayoTheme()
return globalTheme.get();
}

// Set OpenCascade environment variables defined in a settings file(INI format)
static void initOpenCascadeEnvironment(const FilePath& settingsFilepath)
{
const QString strSettingsFilepath = filepathTo<QString>(settingsFilepath);
if (!filepathExists(settingsFilepath) /* TODO Check readable */) {
qDebug().noquote() << Main::tr("OpenCascade settings file doesn't exist or is not readable [path=%1]")
.arg(strSettingsFilepath);
return;
}

const QSettings occSettings(strSettingsFilepath, QSettings::IniFormat);
if (occSettings.status() != QSettings::NoError) {
qDebug().noquote() << Main::tr("OpenCascade settings file could not be loaded with QSettings [path=%1]")
.arg(strSettingsFilepath);
return;
}

// Process options
for (const char* varName : Application::envOpenCascadeOptions()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
const QString strValue = occSettings.value(qVarName).toString();
qputenv(varName, strValue.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strValue);
}
}

// Process paths
for (const char* varName : Application::envOpenCascadePaths()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
QString strPath = occSettings.value(qVarName).toString();
if (QFileInfo(strPath).isRelative())
strPath = QCoreApplication::applicationDirPath() + QDir::separator() + strPath;

strPath = QDir::toNativeSeparators(strPath);
qputenv(varName, strPath.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strPath);
}
}
}

// Helper to query the OpenGL version string
[[maybe_unused]] static std::string queryGlVersionString()
{
Expand Down Expand Up @@ -378,9 +336,7 @@ static int runApp(QCoreApplication* qtApp)
// Initialize Base application
auto app = appModule->application();
TextId::addTranslatorFunction(&qtAppTranslate); // Set Qt i18n backend
#ifdef MAYO_OS_WINDOWS
initOpenCascadeEnvironment("opencascade.conf");
#endif
AppModule::initOpenCascadeEnvironment("opencascade.conf");

// Initialize Gui application
auto guiApp = new GuiApplication(app);
Expand Down
46 changes: 1 addition & 45 deletions src/cli/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,48 +291,6 @@ static CommandLineArguments processCommandLine()
return args;
}

// Set OpenCascade environment variables defined in a settings file(INI format)
static void initOpenCascadeEnvironment(const FilePath& settingsFilepath)
{
const QString strSettingsFilepath = filepathTo<QString>(settingsFilepath);
if (!filepathExists(settingsFilepath) /* TODO Check readable */) {
qDebug().noquote() << Main::tr("OpenCascade settings file doesn't exist or is not readable [path=%1]")
.arg(strSettingsFilepath);
return;
}

const QSettings occSettings(strSettingsFilepath, QSettings::IniFormat);
if (occSettings.status() != QSettings::NoError) {
qDebug().noquote() << Main::tr("OpenCascade settings file could not be loaded with QSettings [path=%1]")
.arg(strSettingsFilepath);
return;
}

// Process options
for (const char* varName : Application::envOpenCascadeOptions()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
const QString strValue = occSettings.value(qVarName).toString();
qputenv(varName, strValue.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strValue);
}
}

// Process paths
for (const char* varName : Application::envOpenCascadePaths()) {
const QLatin1String qVarName(varName);
if (occSettings.contains(qVarName)) {
QString strPath = occSettings.value(qVarName).toString();
if (QFileInfo(strPath).isRelative())
strPath = QCoreApplication::applicationDirPath() + QDir::separator() + strPath;

strPath = QDir::toNativeSeparators(strPath);
qputenv(varName, strPath.toUtf8());
qDebug().noquote() << QString("%1 = %2").arg(qVarName).arg(strPath);
}
}
}

// Initializes "GUI" objects
static void initGui(GuiApplication* guiApp)
{
Expand Down Expand Up @@ -413,9 +371,7 @@ static int runApp(QCoreApplication* qtApp)
IO::GmioLib::strName(), IO::GmioLib::strVersion(), IO::GmioLib::strVersionDetails()
);
TextId::addTranslatorFunction(&qtAppTranslate); // Set Qt i18n backend
#ifdef MAYO_OS_WINDOWS
initOpenCascadeEnvironment("opencascade.conf");
#endif
AppModule::initOpenCascadeEnvironment("opencascade.conf");

// Initialize Gui application
auto guiApp = new GuiApplication(app);
Expand Down
5 changes: 5 additions & 0 deletions src/io_occ/io_occ_iges.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ class OccIgesReader::Properties : public PropertyGroup {
OccIgesReader::OccIgesReader()
{
MayoIO_CafGlobalScopedLock(cafLock);
// NOTE: parameter "read.iges.resource.name" is important to support names/colors in some IGES files
// See comment https://dev.opencascade.org/content/issue-reading-colors-compared-cad-assistant-0#comment-26218
// This can be used to reset the parameter and seems to fix name/color issues, but it seems
// better to correctly set CSF_IGESDefaults to point on "XSTEPResource" folder:
// Interface_Static::Init("XSTEP", "read.iges.resource.name", 't', "");
m_reader = new(&m_readerStorage) IGESCAFControl_Reader();
IGESControl_Controller::Init();
m_reader->SetColorMode(true);
Expand Down
File renamed without changes.
File renamed without changes.

0 comments on commit 443fba2

Please sign in to comment.