第一次提交

master
tianzhen 2 years ago
commit af3201d08f

@ -0,0 +1,21 @@
#include "CommandLineHandler.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
#include "FITK_Kernel/FITKCore/FITKActionOperator.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKAppFramework/FITKRunTimeSetting.h"
void CommandLineHandler::exec()
{
/* //查找参数
int index = _args.indexOf("-i");
if (index >= 0)
//-i 后面的参数为文件名
this->importINP(index + 1);
index = _args.indexOf("-ribbon");
if(index >=0 )
FITKAPP->getGlobalData()->getRunTimeSetting()->setValue("Ribbon", true);
*/
}

@ -0,0 +1,47 @@
/**
*
* @file ComamdLineHandler.h
* @brief 命令行处理器
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-06
*
*/
#ifndef __COMMANDLINEHANDLER_H__
#define __COMMANDLINEHANDLER_H__
#include "FITK_Kernel/FITKAppFramework/FITKCommandLineHandler.h"
/**
* @brief 自定义命令行处理器
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-06
*/
class CommandLineHandler : public AppFrame::FITKCommandLineHandler
{
public:
/**
* @brief Construct a new Command Line Handler object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-06
*/
explicit CommandLineHandler() = default;
/**
* @brief Destroy the Command Line Handler object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-06
*/
virtual ~CommandLineHandler() = default;
/**
* @brief 执行命令行
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-06
*/
void exec() override;
private:
};
#endif

@ -0,0 +1,55 @@
/**
* @file ComponentFactory.cpp
* @brief 组件工厂
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
#include "ComponentFactory.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Component/FITKCompMessageWidget/FITKConsoleComponent.h"
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowInterface.h"
#include "FITK_Component/FITKGeoCompOCC/FITKGeoCompOCCInterface.h"
#include "FITK_Component/FITKMeshGenOF/FITKMeshGenOFInterface.h"
#include "FITK_Interface/FITKInterfaceFlowOF/FITKFlowPhysicsHandlerFactory.h"
#include "FITK_Component/FITKFlowOFIOHDF5/FITKFlowOFIOHDF5Interface.h"
#include "FITK_Component/FITKOFDictWriter/FITKOFDictWriterIO.h"
#include "FITK_Component/FITKOFMeshIO/FITKOFMeshReader.h"
#include "FITK_Component/FITKCGNSIO/FITKCGNSIOInterface.h"
#include "OperatorsModel/OpersModelInterface.h"
#include "OperatorsGUI/OpersGUIInterface.h"
#include "PreWindowInitializer.h"
QList<AppFrame::FITKComponentInterface *> ComponentFactory::createComponents()
{
// 自定义组件列表
QList<AppFrame::FITKComponentInterface *> componentList;
// 消息窗口组件
componentList << new Comp::ConsoleComponent(FITKAPP->getGlobalData()->getMainWindow());
// 3D图形窗口组件
auto compVTKrender = new Comp::FITKGraph3DWindowInterface;
componentList << compVTKrender;
//occ 建模
componentList << new OCC::FITKGeoCompOCCInterface;
//OF网格划分
componentList << new OF::FITKMeshGenOFInterface;
// 模型数据控制器组件
componentList << new OperModel::OpersModelInterface;
// 界面控制器组件
componentList << new GUIOper::OperatorsGUIInterface;
// 字典文件写出组件
componentList << new IO::FITKOFDictWriterIO;
// OpenFOAM网格读取组件
componentList << new IO::FITKOFMeshReader;
// 物理场数据工厂组件
componentList << new Interface::FITKFlowPhysicsHandlerFactory;
// hdf5接口组件
componentList << new IO::FITKFlowOFIOHDF5Interface;
// CGNS接口组件
componentList << new IO::FITKCGNSIOInterface;
// VTK窗口初始化器
compVTKrender->addInitializer(1, new PreWindowInitializer);
return componentList;
}

@ -0,0 +1,40 @@
/**
* @file ComponentFactory.h
* @brief 组件工厂
* @author YanZhiHui(chanyuantiandao@126.com)
* @date 2024-04-19
*/
#ifndef __COMPONENTFACTORY__
#define __COMPONENTFACTORY__
#include "FITK_Kernel/FITKAppFramework/FITKComponentFactory.h"
/**
* @brief 组件工厂类
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
class ComponentFactory : public AppFrame::FITKComponentFactory
{
public:
/**
* @brief 构造函数(默认实现)
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
ComponentFactory() = default;
/**
* @brief 析构函数(默认实现)
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
~ComponentFactory() = default;
/**
* @brief 虚函数重写,创建自己的component
* @return QList<AppFrame::FITKComponentInterface*>
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-03-04
*/
QList<AppFrame::FITKComponentInterface *> createComponents() override;
};
#endif // !__COMPONENTFACTORY__

@ -0,0 +1,9 @@
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 10.0.17763.0
SET "PATH=C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64;%PATH%"
qmake -r -tp vc FlowApp.pro
pause

@ -0,0 +1,25 @@
#include "FlowAPPSettings.h"
#include <QSettings>
#include <QFile>
void FlowAPPSettings::read()
{
//读入文件
QString file = _appDir + "/FlowAPP.ini";
QFile f(file);
//文件不存在则创建
if (!f.exists())
{
if (f.open(QFile::WriteOnly))
{
//创建文件
f.write("");
f.close();
}
}
//读取文件
_settings = new QSettings(file, QSettings::IniFormat);
}

@ -0,0 +1,45 @@
/**
*
* @file FlowAPPSettings.h
* @brief 软件设置
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*
*/
#ifndef __STRUCTURAL_SETTINGS_H__
#define __STRUCTURAL_SETTINGS_H__
#include "FITK_Kernel/FITKAppFramework/FITKAppSettings.h"
/**
* @brief 软件设置
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
class FlowAPPSettings : public AppFrame::FITKAppSettings
{
public:
/**
* @brief Construct a new Structural Settings object
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
explicit FlowAPPSettings() = default;
/**
* @brief Destroy the Structural Settings object
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
virtual ~FlowAPPSettings() = default;
/**
* @brief 读取ini文件
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
void read() override;
};
#endif

@ -0,0 +1,31 @@
HEADERS += \
$$PWD/MainWindowGenerator.h \
$$PWD/GlobalDataFactory.h \
$$PWD/ComponentFactory.h \
$$PWD/CommandLineHandler.h \
$$PWD/PreWindowInitializer.h \
$$PWD/SignalProcessor.h \
$$PWD/FlowAPPSettings.h \
$$PWD/WorkBenchHandler.h \
$$PWD/SystemChecker.h \
SOURCES += \
$$PWD/main.cpp \
$$PWD/MainWindowGenerator.cpp \
$$PWD/GlobalDataFactory.cpp \
$$PWD/ComponentFactory.cpp \
$$PWD/CommandLineHandler.cpp \
$$PWD/PreWindowInitializer.cpp \
$$PWD/SignalProcessor.cpp \
$$PWD/FlowAPPSettings.cpp \
$$PWD/WorkBenchHandler.cpp \
$$PWD/SystemChecker.cpp \
FORMS += \
# $$PWD/PluginManageDialog.ui \
#RESOURCES += ../qrc/qianfan.qrc
#RC_FILE += ../qrc/qianfan.rc
RC_ICONS = icon.ico

@ -0,0 +1,137 @@
TEMPLATE = app
CONFIG += c++11
CONFIG += qt
TARGET = FlowApp
QT += core widgets gui
unix:!mac{ QMAKE_LFLAGS += "-Wl,-rpath,\'\$$ORIGIN/\'" }
include(./vtk.pri)
include(./FlowApp.pri)
win32{
INCLUDEPATH += ./ \
../ \
../../ \
Release:CONFIG += console
Release:DESTDIR = ../output/bin
Release:MOC_DIR = ../generate/FlowApp/release/moc
Release:RCC_DIR = ../generate/FlowApp/release/rcc
Release:UI_DIR = ../generate/FlowApp/release/qui
Release:OBJECTS_DIR = ../generate/FlowApp/release/obj
Release:LIBS += \
-L../output/bin \
-lFITKAppFramework \
-lFITKCore \
-lFITKCompMessageWidget \
-lFITKRenderWindowVTK \
-lFITKInterfaceFlowOF \
# -lFITKInterfaceFlowPHengLEI \
-lFITKInterfaceModel \
-lFITKInterfaceMesh \
-lFITKInterfaceGeometry \
-lFITKInterfaceCFDPost \
-lFITKGeoCompOCC \
-lFITKMeshGenOF \
-lOperatorsModel \
-lOperatorsGUI \
-lGUIFrame \
-lGUIWidget \
-lFITKWidget \
-lFITKOFDictWriter \
-lFITKOFMeshIO \
-lFITKFlowOFIOHDF5 \
-lFITKCGNSIO \
-lCFDStructMain \
-lFITKInterfaceCFDPost
Debug:CONFIG += console
Debug:DESTDIR = ../output/bin_d
Debug:MOC_DIR = ../generate/FlowApp/debug/moc
Debug:RCC_DIR = ../generate/FlowApp/debug/rcc
Debug:UI_DIR = ../generate/FlowApp/debug/qui
Debug:OBJECTS_DIR = ../generate/FlowApp/debug/obj
Debug:LIBS += \
-L../output/bin_d \
-lFITKAppFramework \
-lFITKCore \
-lFITKCompMessageWidget \
-lFITKRenderWindowVTK \
-lFITKInterfaceFlowOF \
# -lFITKInterfaceFlowPHengLEI \
-lFITKInterfaceModel \
-lFITKInterfaceGeometry \
-lFITKInterfaceCFDPost \
-lFITKGeoCompOCC \
-lFITKMeshGenOF \
-lOperatorsModel \
-lFITKInterfaceMesh \
-lOperatorsGUI \
-lGUIFrame \
-lGUIWidget \
-lFITKWidget \
-lFITKOFDictWriter \
-lFITKOFMeshIO \
-lFITKFlowOFIOHDF5 \
-lFITKCGNSIO \
-lCFDStructMain \
-lGUIFrame \
-lFITKInterfaceCFDPost
Debug:LIBS += -L$$PWD/../Tools/Win64/SARibbon/libd/ \
-lSARibbonBard \
Release:LIBS += -L$$PWD/../Tools/Win64/SARibbon/lib/ \
-lSARibbonBar \
message("Windows FlowApp generated")
}
unix{
INCLUDEPATH += ./ \
../ \
../../ \
CONFIG += console
CONFIG += plugin
DESTDIR = ../output/bin
MOC_DIR = ../generate/FlowApp/release/moc
UI_DIR = ../generate/FlowApp/release/qui
RCC_DIR = ../generate/FlowApp/release/rcc
OBJECTS_DIR = ../generate/FlowApp/release/obj
LIBS += \
-L../output/bin \
-lFITKAppFramework \
-lFITKCore \
-lFITKCompMessageWidget \
-lFITKRenderWindowVTK \
-lFITKInterfaceFlowOF \
# -lFITKFITKInterfaceFlowPHengLEI \
-lFITKInterfaceModel \
-lFITKInterfaceMesh \
-lFITKInterfaceGeometry \
-lFITKGeoCompOCC \
-lFITKMeshGenOF \
-lOperatorsModel \
-lOperatorsGUI \
-lOperatorsInterface \
-lGUIFrame \
-lGUIWidget \
-lFITKWidget \
-L$$PWD/../Tools/Linux64/SARibbon/lib/ \
-lSARibbonBar \
-lFITKOFDictWriter \
-lFITKOFMeshIO \
-lFITKFlowOFIOHDF5 \
-lFITKCGNSIO \
message("Linux FlowApp generated")
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>cpp;c;cxx;moc;h;def;odl;idl;res;</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CommandLineHandler.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ComponentFactory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FlowAPPSettings.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="GlobalDataFactory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MainWindowGenerator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PreWindowInitializer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SignalProcessor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SystemChecker.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WorkBenchHandler.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="CommandLineHandler.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ComponentFactory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="FlowAPPSettings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="GlobalDataFactory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MainWindowGenerator.h">
<Filter>Header Files</Filter>
</ClInclude>
<QtMoc Include="PreWindowInitializer.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="SignalProcessor.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="SystemChecker.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="WorkBenchHandler.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\generate\FlowApp\debug\moc\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
<CustomBuild Include="..\generate\FlowApp\release\moc\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="E:\Ugit\AppFlow\FlowApp\FlowApp_resource.rc" />
</ItemGroup>
</Project>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

@ -0,0 +1,37 @@
#include <windows.h>
IDI_ICON1 ICON DISCARDABLE "E:\\Ugit\\AppFlow\\FlowApp\\icon.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,0,0,0
PRODUCTVERSION 0,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "\0"
VALUE "FileVersion", "0.0.0.0\0"
VALUE "LegalCopyright", "\0"
VALUE "OriginalFilename", "FlowApp.exe\0"
VALUE "ProductName", "FlowApp\0"
VALUE "ProductVersion", "0.0.0.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 1200
END
END
/* End of Version info */

@ -0,0 +1,32 @@
#include "GlobalDataFactory.h"
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFGeometryData.h"
#include "FITK_Interface/FITKInterfaceFlowOF/FITKOFPhysicsData.h"
#include "CFDPost/CFDPostFITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h"
// #include "CFDPost/CFDPostFITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h"
#include "FITK_Interface/FITKInterfaceMesh/FITKUnstructuredFluidMeshVTK.h"
Core::FITKAbstractDataObject* GlobalDataFactory::createMeshData() {
return new Interface::FITKUnstructuredFluidMeshVTK;
}
Core::FITKAbstractDataObject* GlobalDataFactory::createGeoData() {
// 创建几何数据
return new Interface::FITKOFGeometryData;
}
Core::FITKAbstractDataObject* GlobalDataFactory::createPhysicsData() {
// 创建算例求解的物理场数据
return new Interface::FITKOFPhysicsData;
}
Core::FITKAbstractDataObject* GlobalDataFactory::createPostData() {
// 创建后处理数据
return new Interface::FITKCFDPostData;
// return nullptr;
}
QHash<int, Core::FITKAbstractDataObject*> GlobalDataFactory::createOtherData() {
// 不创建其他数据
return QHash<int, Core::FITKAbstractDataObject*>();
}

@ -0,0 +1,56 @@
/**
* @file GlobalDataFactory.h
* @brief 全局数据工厂
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19 13:59
*/
#ifndef __GLOBALDATAFACTORY__
#define __GLOBALDATAFACTORY__
#include "FITK_Kernel/FITKAppFramework/FITKAbstractGlobalDataFactory.h"
/**
* @brief 全局数据工厂类
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
class GlobalDataFactory : public AppFrame::FITKAbstractGlobalDataFactory
{
private:
/**
* @brief 测试的函数
* @return Core::FITKAbstractDataObject*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-03-02
*/
virtual Core::FITKAbstractDataObject *createMeshData() override;
/**
* @brief 创建几何数据
* @return 几何数据对象
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
virtual Core::FITKAbstractDataObject *createGeoData() override;
/**
* @brief 创建物理场数据
* @return 物理场数据
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
virtual Core::FITKAbstractDataObject *createPhysicsData() override;
/**
* @brief 创建后处理数据
* @return 后处理场数据
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
virtual Core::FITKAbstractDataObject *createPostData() override;
/**
* @brief 创建其他数据
* @return 其他数据
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
virtual QHash<int, Core::FITKAbstractDataObject *> createOtherData() override;
};
#endif

@ -0,0 +1,15 @@
#include "MainWindowGenerator.h"
#include "GUIFrame/MainWindow.h"
#include "CFDStruct/CFDStructMain/CFDStructMainWindow.h"
#include "CFDApplication/CFDApplicationMain/CFDApplicationMainWindow.h"
MainWindowGenerator::MainWindowGenerator() {
// this->setStyle("://Structural.qss");
// this->showMaximize(false);
}
QWidget* MainWindowGenerator::genMainWindow() {
// return new GUI::MainWindow;
return new GUI::CFDStructMainWindow;
// return new GUI::CFDApplicationMainWindow;
}

@ -0,0 +1,42 @@
/**
* @file MainWindowGenerator.h
* @brief 主窗口生成器类
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
#ifndef __MAINWINDOWGENERATOR__
#define __MAINWINDOWGENERATOR__
#include "FITK_Kernel/FITKAppFramework/FITKAbstractMainWinGenerator.h"
/**
* @brief 主窗口生成器类
* @note 该类继承自`AppFrame::FITKAbstractMainwindowGenerator`,负责生成应用程序的主窗口。
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
class MainWindowGenerator : public AppFrame::FITKAbstractMainwindowGenerator
{
public:
/**
* @brief 构造函数
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
MainWindowGenerator();
/**
* @brief 析构函数(默认实现)
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
~MainWindowGenerator() = default;
/**
* @brief 必须重写的方法,用于生成主窗口实例
* @return 生成的QWidget*类型的主窗口指针
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
QWidget *genMainWindow() override;
};
#endif // !__MAINWINDOWGENERATOR__

@ -0,0 +1,467 @@
#include "PreWindowInitializer.h"
// VTK
#include <vtkCallbackCommand.h>
#include <vtkInteractorObserver.h>
#include <vtkCamera.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkPointPicker.h>
#include <vtkCellPicker.h>
#include <vtkAreaPicker.h>
#include <vtkPlanes.h>
#include <vtkProp3DCollection.h>
#include <vtkPropPicker.h>
#include <vtkRenderWindowInteractor.h>
#include "FITK_Component/FITKRenderWindowVTK/FITKGraphAreaPicker.h"
#include "FITK_Kernel/FITKAppFramework/FITKKeyMouseStates.h"
// App
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKAppFramework/FITKComponents.h"
#include "FITK_Kernel/FITKAppFramework/FITKComponentInterface.h"
// Operator
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
#include "OperatorsInterface/GraphInteractionOperator.h"
#include "OperatorsInterface/GraphEventOperator.h"
// Render
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowVTK.h"
#include "FITK_Component/FITKRenderWindowVTK/FITKGraphRender.h"
// GUI
#include "GUIFrame/MainWindow.h"
#include "GUIFrame/RenderWidget.h"
#include "FITK_Component/FITKWidget/FITKMdiArea.h"
#include "GUIWidget/GUIPickInfo.h"
PreWindowInitializer::PreWindowInitializer()
{
// 初始化渲染层数。
this->setLayerCount(3);
//背景颜色
//QColor top = QColor::fromRgb(27, 45, 70);
//QColor buttom = QColor::fromRgb(160, 174, 195);
//this->setValue(BackGroundColorTop, top);
//this->setValue(BackGroundColorButtom, buttom);
}
Comp::FITKGraphInteractionStyle* PreWindowInitializer::getStyle()
{
return PreWindowInteractionStyle::New();
}
PreWindowInteractionStyle* PreWindowInteractionStyle::New()
{
return new PreWindowInteractionStyle;
}
PreWindowInteractionStyle::PreWindowInteractionStyle()
{
// 初始化定时器属性。
m_timerForPrePick.setInterval(200);
m_timerForPrePick.setSingleShot(true);
connect(&m_timerForPrePick, &QTimer::timeout, this, &PreWindowInteractionStyle::slot_prePick);
// 初始化操作器。
//@{
auto operatorRepo = Core::FITKOperatorRepo::getInstance();
m_operPreview = operatorRepo->getOperatorT<EventOper::GraphInteractionOperator>("GraphPickPreview");
m_operPick = operatorRepo->getOperatorT<EventOper::GraphInteractionOperator>("GraphPick");
m_operGraph = operatorRepo->getOperatorT<EventOper::GraphEventOperator>("GraphPreprocess");
//@}
}
void PreWindowInteractionStyle::OnLeftButtonDown()
{
// TEST.
//@{
//GUI::GUIPickInfoStru info = GUI::GUIPickInfo::GetPickInfo();
//info._pickObjType = GUI::GUIPickInfo::PickObjType::POBJVert;
//info._pickMethod = GUI::GUIPickInfo::PickMethod::PMSingle;
//GUI::GUIPickInfo::SetPickInfo(info);
//@}
// TEST2.
//@{
// GUI::MainTreeEnum::MainTree_MeshPoint = 9
//GraphOperParam param;
//param.HighlightMode = HighlightLevel::AdvHighlight;
//param.AdvHighlightIndice = QVector<int>{ 1 };
//param.Visibility = true;
//m_operGraph->updateGraphByType(9, param);
//@}
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
if (m_areaPick != nullptr)
{
m_areaPick->setLeftButtonDownPos(m_leftButtonDowmPos);
m_areaPick->enable(true);
}
}
void PreWindowInteractionStyle::OnLeftButtonUp()
{
vtkInteractorStyleRubberBandPick::OnLeftButtonUp();
this->Interactor->GetEventPosition(m_leftButtonUpPos);
// 只有在逐个选择模式下支持框选。
bool canAreaPick = GUI::GUIPickInfo::GetPickInfo()._pickMethod == GUI::GUIPickInfo::PickMethod::PMIndividually;
if (m_areaPick != nullptr && isMouseMoved())
{
if (m_areaPick->isEnable() && canAreaPick)
m_areaPick->pick();
m_areaPick->enable(false);
}
else
{
pick();
}
AppFrame::FITKComponentInterface* fcInterface
= FITKAPP->getComponents()->getComponentByName("Graph3DWindowVTK");
if (fcInterface)
{
CallBackFuns fun = fcInterface->getCallBackFuns(1);
if (fun != nullptr)
fun(nullptr);
}
}
void PreWindowInteractionStyle::OnMiddleButtonDown()
{
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
if (FITKAPP->getGlobalData()->getKeyMouseStates()->keyPressed(Qt::Key_Shift))
vtkInteractorStyleRubberBandPick::OnMiddleButtonDown();
else
vtkInteractorStyleRubberBandPick::OnLeftButtonDown();
}
void PreWindowInteractionStyle::OnMiddleButtonUp()
{
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
vtkInteractorStyleRubberBandPick::OnLeftButtonUp();
vtkInteractorStyleRubberBandPick::OnMiddleButtonUp();
if (m_areaPick != nullptr)
{
m_areaPick->enable(false);
}
}
void PreWindowInteractionStyle::OnMouseMove()
{
if (m_timerForPrePick.isActive())
{
m_timerForPrePick.stop();
}
m_timerForPrePick.start();
this->Interactor->GetEventPosition(m_leftButtonUpPos);
vtkInteractorStyleRubberBandPick::OnMouseMove();
bool isMoved = this->isMouseMoved();
const bool lbd = FITKAPP->getGlobalData()->getKeyMouseStates()->mousePressed(Qt::LeftButton);
// 非单独拾取,且非算法拾取或非拾取状态时可绘制橡皮筋。
bool needDrawRect = (GUI::GUIPickInfo::GetPickInfo()._pickMethod == GUI::GUIPickInfo::PickMethod::PMIndividually ||
GUI::GUIPickInfo::GetPickInfo()._pickMethod == GUI::GUIPickInfo::PickMethod::PMNone);
if (lbd && isMoved && needDrawRect)
{
m_areaPick->drawRectangle();
return;
}
}
void PreWindowInteractionStyle::OnMouseWheelForward()
{
this->FindPokedRenderer(
this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1]);
if (this->CurrentRenderer == nullptr)
{
return;
}
this->GrabFocus(this->EventCallbackCommand);
this->StartDolly();
// double factor = this->MotionFactor * -0.2 * this->MouseWheelMotionFactor;
this->Dolly(0.98); // pow(1.1, factor)
this->EndDolly();
this->ReleaseFocus();
}
void PreWindowInteractionStyle::OnMouseWheelBackward()
{
this->FindPokedRenderer(
this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1]);
if (this->CurrentRenderer == nullptr)
{
return;
}
this->GrabFocus(this->EventCallbackCommand);
this->StartDolly();
// double factor = this->MotionFactor * 0.2 * this->MouseWheelMotionFactor;
this->Dolly(1.05); // pow(1.1, factor)
this->EndDolly();
this->ReleaseFocus();
}
void PreWindowInteractionStyle::OnRightButtonDown()
{
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
}
void PreWindowInteractionStyle::OnRightButtonUp()
{
this->Interactor->GetEventPosition(m_leftButtonUpPos);
}
void PreWindowInteractionStyle::areaPick(int* startPos, int* endPos)
{
// 获取当前三维窗口。
Comp::FITKGraph3DWindowVTK* graphWindow = getCurrentGraphWindow();
if (!graphWindow || !m_operPick)
{
return;
}
// 所有渲染层均执行一次框选并获取拾取演员。
//@{
QList<vtkActor*> actors;
vtkSmartPointer<vtkAreaPicker> areaPicker = vtkSmartPointer<vtkAreaPicker>::New();
for (int i = 0; i < graphWindow->getRenderCount(); i++)
{
vtkRenderer* renderer = graphWindow->getRenderer(i)->getRenderer();
areaPicker->AreaPick(startPos[0], startPos[1], endPos[0], endPos[1], renderer);
vtkProp3DCollection* props = areaPicker->GetProp3Ds();
props->InitTraversal();
const int nActors = props->GetNumberOfItems();
for (vtkIdType i = 0; i < nActors; i++)
{
vtkProp3D* prop = props->GetNextProp3D();
vtkActor* actor = vtkActor::SafeDownCast(prop);
if (actor)
{
actors.append(actor);
}
}
}
//@}
// 没有拾取到,且不是Shift与Ctrl拾取模式则清除拾取。
AppFrame::FITKKeyMouseStates* settings = FITKGLODATA->getKeyMouseStates();
bool shiftOrCtrlPick = (settings->keyPressed(Qt::Key_Shift) && !settings->keyPressed(Qt::Key_Control))
|| (!settings->keyPressed(Qt::Key_Shift) && settings->keyPressed(Qt::Key_Control));
if (actors.isEmpty() && !shiftOrCtrlPick)
{
m_operPick->clear(graphWindow);
return;
}
vtkPlanes* cutPlane = areaPicker->GetFrustum();
// 操作器执行高亮。
m_operPick->picked(graphWindow, actors, cutPlane);
}
void PreWindowInteractionStyle::pick(bool isPreview)
{
if (!m_operPreview || !m_operPick)
{
return;
}
// 获取当前鼠标位置进行拾取。
vtkRenderWindowInteractor* interactor = this->GetInteractor();
if (!interactor)
{
return;
}
Comp::FITKGraph3DWindowVTK* graphWindow = getCurrentGraphWindow();
if (!graphWindow)
{
return;
}
int* pos = interactor->GetEventPosition();
// 获取当前拾取类型。
GUI::GUIPickInfo::PickObjType type = GUI::GUIPickInfo::GetPickInfo()._pickObjType;
switch (type)
{
case GUI::GUIPickInfo::POBJVert:
case GUI::GUIPickInfo::POBJEdge:
case GUI::GUIPickInfo::POBJFace:
case GUI::GUIPickInfo::POBJSolid:
pickCell(graphWindow, pos, isPreview);
break;
default:
return;
}
}
void PreWindowInteractionStyle::pickPoint(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol)
{
// 节点拾取器。
vtkSmartPointer<vtkCellPicker> picker = vtkSmartPointer<vtkCellPicker>::New();
vtkSmartPointer<vtkPropPicker> pickerProp = vtkSmartPointer<vtkPropPicker>::New();
picker->SetTolerance(tol);
// 优先拾取最后一层,反向遍历。
for (int i = graphWindow->getRenderCount() - 1; i >= 0; i--)
{
vtkRenderer* renderer = graphWindow->getRenderer(i)->getRenderer();
int ret = picker->Pick(pos[0], pos[1], 0, renderer);
// 是否拾取到对象。
if (!ret)
{
continue;
}
// 获取拾取节点索引。
vtkActor* actor = picker->GetActor();
int index = picker->GetPointId();
if (index < 0)
{
continue;
}
double* pickedWorldPos = picker->GetPickPosition();
if (isPreview)
{
m_operPreview->picked(graphWindow, actor, index, pickedWorldPos);
}
else
{
m_operPick->picked(graphWindow, actor, index, pickedWorldPos);
}
return;
}
// 没有拾取到则清除拾取。
if (isPreview)
{
m_operPreview->clear(graphWindow);
}
else
{
// 没有拾取到,且不是Shift与Ctrl拾取模式则清除拾取。
AppFrame::FITKKeyMouseStates* settings = FITKGLODATA->getKeyMouseStates();
bool shiftOrCtrlPick = (settings->keyPressed(Qt::Key_Shift) && !settings->keyPressed(Qt::Key_Control))
|| (!settings->keyPressed(Qt::Key_Shift) && settings->keyPressed(Qt::Key_Control));
if (!shiftOrCtrlPick)
{
m_operPick->clear(graphWindow);
}
}
}
void PreWindowInteractionStyle::pickCell(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol)
{
// 单元拾取器。
vtkSmartPointer<vtkCellPicker> picker = vtkSmartPointer<vtkCellPicker>::New();
picker->SetTolerance(tol);
// 优先拾取最后一层,反向遍历。
for (int i = graphWindow->getRenderCount() - 1; i >= 0 ; i--)
{
vtkRenderer* renderer = graphWindow->getRenderer(i)->getRenderer();
// 优先进行参考点标签与符号拾取。
int ret = picker->Pick(pos[0], pos[1], 0, renderer);
// 是否拾取到对象。
if (!ret)
{
continue;
}
// 获取拾取单元索引。
vtkActor* actor = picker->GetActor();
int index = picker->GetCellId();
if (index < 0)
{
continue;
}
double* pickedWorldPos = picker->GetPickPosition();
if (isPreview)
{
m_operPreview->picked(graphWindow, actor, index, pickedWorldPos);
}
else
{
m_operPick->picked(graphWindow, actor, index, pickedWorldPos);
}
return;
}
// 没有拾取到则清除拾取。
if (isPreview)
{
m_operPreview->clear(graphWindow);
}
else
{
// 没有拾取到,且不是Shift与Ctrl拾取模式则清除拾取。
AppFrame::FITKKeyMouseStates* settings = FITKGLODATA->getKeyMouseStates();
bool shiftOrCtrlPick = (settings->keyPressed(Qt::Key_Shift) && !settings->keyPressed(Qt::Key_Control))
|| (!settings->keyPressed(Qt::Key_Shift) && settings->keyPressed(Qt::Key_Control));
if (!shiftOrCtrlPick)
{
m_operPick->clear(graphWindow);
}
}
}
void PreWindowInteractionStyle::slot_prePick()
{
// 预选高亮。
pick(true);
}
Comp::FITKGraph3DWindowVTK* PreWindowInteractionStyle::getCurrentGraphWindow()
{
GUI::MainWindow* mainWindow = FITKAPP->getGlobalData()->getMainWindowT<GUI::MainWindow>();
if (mainWindow == nullptr) return nullptr;
// 获取可视化区。
GUI::RenderWidget* renderWidget = mainWindow->getRenderWidget();
if (!renderWidget)
{
return nullptr;
}
Comp::FITKMdiArea* mdiArea = renderWidget->getMdiArea();
if (!mdiArea)
{
return nullptr;
}
// 获取当前窗口,尝试转换为三维窗口。
QWidget* w = mdiArea->getCurrentWidget();
Comp::FITKGraph3DWindowVTK* graphWindow = dynamic_cast<Comp::FITKGraph3DWindowVTK*>(w);
return graphWindow;
}

@ -0,0 +1,240 @@
/*****************************************************************//**
* @file PreWindowInitializer.h
* @brief 前处理窗口初始化。
*
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*********************************************************************/
#ifndef __PRE_WIDOWINIINTIALIZER_H___
#define __PRE_WIDOWINIINTIALIZER_H___
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowInterface.h"
#include "FITK_Component/FITKRenderWindowVTK/FITKGraphInteractionStyle.h"
#include <QTimer>
// 前置声明
class vtkRenderer;
class vtkRenderWindow;
namespace EventOper
{
class GraphInteractionOperator;
class GraphEventOperator;
};
namespace Comp
{
class FITKGraph3DWindowVTK;
};
/**
* @brief 前处理窗口初始化。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
class PreWindowInitializer : public Comp::Graph3DWindowInitializer
{
public:
/**
* @brief 构造函数。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
explicit PreWindowInitializer();
/**
* @brief 析构函数。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
virtual ~PreWindowInitializer() = default;
/**
* @brief 获取交互方式。[重写]
* @return 交互器交互方式
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
virtual Comp::FITKGraphInteractionStyle* getStyle() override;
protected:
private:
};
class PreWindowInteractionStyle : public Comp::FITKGraphInteractionStyle
{
Q_OBJECT
public:
/**
* @brief 创建实例。[静态]
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
static PreWindowInteractionStyle* New();
vtkTypeMacro(PreWindowInteractionStyle,FITKGraphInteractionStyle);
private:
/**
* @brief 鼠标左键按下事件响应
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-07-25
*/
virtual void OnLeftButtonDown() override;
/**
* @brief 鼠标左键抬起事件响应
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
virtual void OnLeftButtonUp() override;
/**
* @brief 鼠标中键按下事件响应
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-07-25
*/
virtual void OnMiddleButtonDown() override;
/**
* @brief 鼠标中键抬起事件响应
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
virtual void OnMiddleButtonUp() override;
/**
* @brief 鼠标移动事件
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-03
*/
virtual void OnMouseMove() override;
/**
* @brief 鼠标滑轮事件
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
void OnMouseWheelForward() override;
/**
* @brief 鼠标滑轮事件
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
void OnMouseWheelBackward() override;
/**
* @brief 鼠标中键点击事件
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
void OnRightButtonDown() override;
/**
* @brief 鼠标中键释放事件
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2023-11-04
*/
void OnRightButtonUp() override;
/**
* @brief 框选。
* @param startPos:鼠标起始坐标
* @param endPos:鼠标结束坐标
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-18
*/
void areaPick(int* startPos, int* endPos) override;
private:
/**
* @brief 构造函数。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
PreWindowInteractionStyle();
/**
* @brief 析构函数。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
~PreWindowInteractionStyle() = default;
/**
* @brief 获取当前三维窗口
* @return 三维窗口
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
Comp::FITKGraph3DWindowVTK* getCurrentGraphWindow();
/**
* @brief 在当前鼠标位置执行一次点击拾取操作。
* @param isPreview:是否为预选[缺省]
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
void pick(bool isPreview = false);
/**
* @brief 在当前鼠标位置执行一次点击拾取节点操作。(预留)
* @param graphWindow:可视化窗口
* @param pos:拾取位置
* @param isPreview:是否为预选
* @param tol:拾取精度容差[缺省]
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
void pickPoint(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol = 0.005);
/**
* @brief 在当前鼠标位置执行一次点击拾取单元操作。(点、线、面、体拾取均使用此方法)
* @param graphWindow:可视化窗口
* @param pos:拾取位置
* @param isPreview:是否为预选
* @param tol:拾取精度容差[缺省]
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
void pickCell(Comp::FITKGraph3DWindowVTK* graphWindow, int* pos, bool isPreview, double tol = 0.003);
private slots:
/**
* @brief 槽函数 - 预选高亮定时器槽函数,执行预选高亮。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
void slot_prePick();
private:
/**
* @brief 预选高亮定时器,悬浮200ms后显示预选拾取对象。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
QTimer m_timerForPrePick;
/**
* @brief 预选高亮可视化操作器。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
EventOper::GraphInteractionOperator* m_operPreview{ nullptr };
/**
* @brief 高亮可视化操作器。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
EventOper::GraphInteractionOperator* m_operPick{ nullptr };
/**
* @brief 前处理可视化操作器。
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-04-17
*/
EventOper::GraphEventOperator* m_operGraph{ nullptr };
};
#endif

@ -0,0 +1,8 @@
#include "SignalProcessor.h"
#include "FITK_Kernel/FITKAppFramework/FITKMessage.h"
void SignalProcessor::on_sendProgramDriverMessageSig(AppFrame::FITKAbstractProgramerDriver* driver, int messageType, const QString& message)
{
AppFrame::FITKMessageInfo(message);
}

@ -0,0 +1,24 @@
#ifndef _SIGNAL_PROCESSOR_H___
#define _SIGNAL_PROCESSOR_H___
#include <QObject>
namespace AppFrame
{
class FITKAbstractProgramerDriver;
}
class SignalProcessor : public QObject
{
Q_OBJECT
public:
explicit SignalProcessor() = default;
virtual ~SignalProcessor() = default;
protected slots:
void on_sendProgramDriverMessageSig(AppFrame::FITKAbstractProgramerDriver* driver, int messageType, const QString& message);
};
#endif

@ -0,0 +1,13 @@
#include "SystemChecker.h"
#include <QThread>
QStringList SystemChecker::check()
{
QStringList s;
//线程数检查,最小是4
const int nThread = QThread::idealThreadCount();
if (nThread < 4)
s << QString("CPU thread count is %1, at least 4 !").arg(nThread);
return s;
}

@ -0,0 +1,46 @@
/**
*
* @file SystemChecker.h
* @brief 系统检查器
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-09-18
*
*/
#ifndef _SYSTEM_CHECKER____H___
#define _SYSTEM_CHECKER____H___
#include "FITK_Kernel/FITKAppFramework/FITKAbstractSysChecker.h"
/**
* @brief 系统检查器
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-09-18
*/
class SystemChecker : public AppFrame::FITKAbstractSysChecker
{
public:
/**
* @brief Construct a new System Checker object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-09-18
*/
explicit SystemChecker() = default;
/**
* @brief Destroy the System Checker object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-09-18
*/
virtual ~SystemChecker() = default;
/**
* @brief 进行检查,返回错误信息
* @return QStringList 错误信息
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-09-18
*/
virtual QStringList check() override;
};
#endif

@ -0,0 +1,72 @@
#include "WorkBenchHandler.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
#include "FITK_Kernel/FITKCore/FITKActionOperator.h"
#include "FITK_Kernel/FITKCore/FITKDirFileTools.h"
#include "FITK_Kernel/FITKCore/FITKThreadPool.h"
void FlowAppWorkBenchHandler::execHandler()
{
//文件数量
const int n = this->getInputFilesCount();
for (int i = 0; i<n; ++i)
{
//遍历文件
AppFrame::IOFileInfo finfo = this->getInputFileInfo(i);
if (finfo._suffix.toLower() == "brep" || finfo._suffix.toLower() == "step")
{
//导入文件
this->importGeoFile(QString("%1/%2").arg(finfo._path).arg(finfo._name));
}
else if (finfo._suffix.toLower() == "hdf5" && this->isProjectFileMode())
{
this->openProjectFile(QString("%1/%2").arg(finfo._path).arg(finfo._name));
}
}
}
void FlowAppWorkBenchHandler::execOutput()
{
AppFrame::FITKWorkBenchHandler::execOutput();
this->saveProjectFile();
}
void FlowAppWorkBenchHandler::importGeoFile(const QString & fileName)
{
//获取操作器
Core::FITKActionOperator* oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionImportGeometry");
if (oper == nullptr) return;
oper->setArgs("FileName", fileName);
oper->setArgs("SenderName", "actionImportGeometry");
//执行操作
oper->execProfession();
}
void FlowAppWorkBenchHandler::openProjectFile(const QString & fileName)
{
//获取操作器
Core::FITKActionOperator* oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
if (oper == nullptr) return;
oper->setArgs("FileName", fileName);
//执行操作
oper->execProfession();
}
void FlowAppWorkBenchHandler::saveProjectFile()
{
QString path = this->getOutputPath();
QString pfile = path + "/AppFlowOFSys.hdf5";
//创建空的文件
if (!Core::CreateFile(pfile)) return;
//执行写出
auto oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionSave");
if (oper == nullptr) return;
oper->setArgs("FileName", pfile);
oper->execProfession();
//线程池等待
Core::FITKThreadPool::getInstance()->wait();
}

@ -0,0 +1,71 @@
/**
*
* @file WorkBenchHandler.h
* @brief 工作台处理类
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*
*/
#ifndef _FLOWAPP_WORKBENCH_HANDLER_H___
#define _FLOWAPP_WORKBENCH_HANDLER_H___
#include <QString>
#include "FITK_Kernel/FITKAppFramework/FITKWorkBenchHandler.h"
/**
* @brief 工作台命令行处理器
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
class FlowAppWorkBenchHandler : public AppFrame::FITKWorkBenchHandler
{
public:
/**
* @brief Construct a new Flow App Work Bench Handler object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
explicit FlowAppWorkBenchHandler() = default;
/**
* @brief Destroy the Flow App Work Bench Handler object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
virtual ~FlowAppWorkBenchHandler() = default;
/**
* @brief 处理命令行
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
virtual void execHandler() override;
/**
* @brief 程序结束写出文件
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-27
*/
virtual void execOutput() override;
private:
/**
* @brief 导入几何文件
* @param[i] fileName 文件名称
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
void importGeoFile(const QString & fileName);
/**
* @brief 打开工程文件
* @param[i] fileName 文件名称
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
void openProjectFile(const QString & fileName);
/**
* @brief 保存工程文件
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
void saveProjectFile();
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

@ -0,0 +1,64 @@
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "MainWindowGenerator.h"
#include "GlobalDataFactory.h"
#include "ComponentFactory.h"
#include "CommandLineHandler.h"
#include "SignalProcessor.h"
#include "FlowAPPSettings.h"
#include "WorkBenchHandler.h"
#include "SystemChecker.h"
#ifdef Q_OS_WIN
#include <Windows.h>
#endif // Q_WIN
/**
* @brief 程序的主入口函数
* @param argc 命令行参数个数
* @param argv 命令行参数值数组
* @return int 程序执行的返回状态
* @author YanZhiHui(chanyuantiandao@126.com)
* @date 2024-04-19
*/
int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN
//这个是Windows平台用来获取屏幕宽度的代码,必须在QApplication实例化之前使用
//因为在qApplication实例初始化之前,QGuiApplication::screens();无法使用。
//qreal cx = GetSystemMetrics(SM_CXSCREEN);
//qreal scale = cx / 1920;
//qputenv("QT_SCALE_FACTOR", QString::number(scale).toLatin1());
#endif // Q_WIN
//控制图片缩放质量
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
// 初始化应用框架
AppFrame::FITKApplication app(argc, argv);
#ifdef Q_OS_LINUX
qputenv("PYTHONHOME", app.applicationDirPath().toUtf8() + "/../Python37");
QStringList pythonPaths;
pythonPaths << app.applicationDirPath() + "/../Python37/bin";
pythonPaths << app.applicationDirPath() + "/../Python37/lib";
pythonPaths << app.applicationDirPath() + "/../Python37/lib/python3.7";
pythonPaths << app.applicationDirPath() + "/../Python37/lib/python3.7/site-packages";
pythonPaths << app.applicationDirPath() + "/../Python37/lib/python3.7/lib-dynload";
qputenv("PYTHONPATH", pythonPaths.join(":").toUtf8());
#endif
app.checkSystem(new SystemChecker);
// 注册程序的主要组件和设置
app.regMainWindowGenerator(new MainWindowGenerator); // 注册主窗口生成器
app.regGlobalDataFactory(new GlobalDataFactory); // 注册全局数据工厂
app.regComponentsFactory(new ComponentFactory); // 注册组件工厂
app.regAppSettings(new FlowAPPSettings); // 注册应用结构设置
app.regCommandLineHandler(new CommandLineHandler); // 注册命令行处理
app.addGolbalSignalProcesser(new SignalProcessor); // 信号处理器
app.regWorkBenchHandler(new FlowAppWorkBenchHandler); //workbench处理
/*
app.regAppSettings(new StructuralSettings); // 注册应用结构设置
// 注册全局信号处理器
app.addGolbalSignalProcesser(new ThreadTaskProcessHandler);
//注册自定义事件处理
app.addEventFilter(new MouseKeyEventFilter);*/
// 运行应用程序的消息循环
return app.exec();
}

@ -0,0 +1,411 @@
win32{
INCLUDEPATH += ../Tools/Win64/VTK/include/vtk-9.0/ \
Debug:LIBS += -L../Tools/Win64/VTK/libd/ \
-lvtkChartsCore-9.0d \
-lvtkCommonColor-9.0d \
-lvtkCommonComputationalGeometry-9.0d \
-lvtkCommonCore-9.0d \
-lvtkCommonDataModel-9.0d \
-lvtkCommonExecutionModel-9.0d \
-lvtkCommonMath-9.0d \
-lvtkCommonMisc-9.0d \
-lvtkCommonSystem-9.0d \
-lvtkCommonTransforms-9.0d \
-lvtkDICOMParser-9.0d \
-lvtkDomainsChemistry-9.0d \
-lvtkFiltersAMR-9.0d \
-lvtkFiltersCore-9.0d \
-lvtkFiltersExtraction-9.0d \
-lvtkFiltersFlowPaths-9.0d \
-lvtkFiltersGeneral-9.0d \
-lvtkFiltersGeneric-9.0d \
-lvtkFiltersGeometry-9.0d \
-lvtkFiltersHybrid-9.0d \
-lvtkFiltersHyperTree-9.0d \
-lvtkFiltersImaging-9.0d \
-lvtkFiltersModeling-9.0d \
-lvtkFiltersParallel-9.0d \
-lvtkFiltersParallelImaging-9.0d \
-lvtkFiltersPoints-9.0d \
-lvtkFiltersProgrammable-9.0d \
-lvtkFiltersSMP-9.0d \
-lvtkFiltersSelection-9.0d \
-lvtkFiltersSources-9.0d \
-lvtkFiltersStatistics-9.0d \
-lvtkFiltersTexture-9.0d \
-lvtkFiltersTopology-9.0d \
-lvtkFiltersVerdict-9.0d \
-lvtkGUISupportQt-9.0d \
-lvtkGUISupportQtSQL-9.0d \
-lvtkGeovisCore-9.0d \
-lvtkIOAMR-9.0d \
-lvtkIOAsynchronous-9.0d \
-lvtkIOCityGML-9.0d \
-lvtkIOCore-9.0d \
-lvtkIOEnSight-9.0d \
-lvtkIOExodus-9.0d \
-lvtkIOExport-9.0d \
-lvtkIOExportGL2PS-9.0d \
-lvtkIOExportPDF-9.0d \
-lvtkIOGeometry-9.0d \
-lvtkIOImage-9.0d \
-lvtkIOImport-9.0d \
-lvtkIOInfovis-9.0d \
-lvtkIOLSDyna-9.0d \
-lvtkIOLegacy-9.0d \
-lvtkIOMINC-9.0d \
-lvtkIOMotionFX-9.0d \
-lvtkIOMovie-9.0d \
-lvtkIONetCDF-9.0d \
-lvtkIOOggTheora-9.0d \
-lvtkIOPLY-9.0d \
-lvtkIOParallel-9.0d \
-lvtkIOParallelXML-9.0d \
-lvtkIOSQL-9.0d \
-lvtkIOSegY-9.0d \
-lvtkIOTecplotTable-9.0d \
-lvtkIOVeraOut-9.0d \
-lvtkIOVideo-9.0d \
-lvtkIOXML-9.0d \
-lvtkIOXMLParser-9.0d \
-lvtkImagingColor-9.0d \
-lvtkImagingCore-9.0d \
-lvtkImagingFourier-9.0d \
-lvtkImagingGeneral-9.0d \
-lvtkImagingHybrid-9.0d \
-lvtkImagingMath-9.0d \
-lvtkImagingMorphological-9.0d \
-lvtkImagingSources-9.0d \
-lvtkImagingStatistics-9.0d \
-lvtkImagingStencil-9.0d \
-lvtkInfovisCore-9.0d \
-lvtkInfovisLayout-9.0d \
-lvtkInteractionImage-9.0d \
-lvtkInteractionStyle-9.0d \
-lvtkInteractionWidgets-9.0d \
-lvtkParallelCore-9.0d \
-lvtkParallelDIY-9.0d \
-lvtkRenderingAnnotation-9.0d \
-lvtkRenderingContext2D-9.0d \
-lvtkRenderingCore-9.0d \
-lvtkRenderingFreeType-9.0d \
-lvtkRenderingGL2PSOpenGL2-9.0d \
-lvtkRenderingImage-9.0d \
-lvtkRenderingLOD-9.0d \
-lvtkRenderingLabel-9.0d \
-lvtkRenderingOpenGL2-9.0d \
-lvtkRenderingQt-9.0d \
-lvtkRenderingSceneGraph-9.0d \
-lvtkRenderingUI-9.0d \
-lvtkRenderingVolume-9.0d \
-lvtkRenderingVolumeOpenGL2-9.0d \
-lvtkRenderingVtkJS-9.0d \
-lvtkTestingRendering-9.0d \
-lvtkViewsContext2D-9.0d \
-lvtkViewsCore-9.0d \
-lvtkViewsInfovis-9.0d \
-lvtkViewsQt-9.0d \
-lvtkWrappingTools-9.0d \
-lvtkdoubleconversion-9.0d \
-lvtkexodusII-9.0d \
-lvtkexpat-9.0d \
-lvtkfreetype-9.0d \
-lvtkgl2ps-9.0d \
-lvtkglew-9.0d \
-lvtkhdf5-9.0d \
-lvtkhdf5_hl-9.0d \
-lvtkjpeg-9.0d \
-lvtkjsoncpp-9.0d \
-lvtklibharu-9.0d \
-lvtklibproj-9.0d \
-lvtklibxml2-9.0d \
-lvtkloguru-9.0d \
-lvtklz4-9.0d \
-lvtklzma-9.0d \
-lvtkmetaio-9.0d \
-lvtknetcdf-9.0d \
-lvtkogg-9.0d \
-lvtkpng-9.0d \
-lvtkpugixml-9.0d \
-lvtksqlite-9.0d \
-lvtksys-9.0d \
-lvtktheora-9.0d \
-lvtktiff-9.0d \
-lvtkverdict-9.0d \
-lvtkzlib-9.0d \
Release:LIBS += -L../Tools/Win64/VTK/lib/ \
-lvtkChartsCore-9.0 \
-lvtkCommonColor-9.0 \
-lvtkCommonComputationalGeometry-9.0 \
-lvtkCommonCore-9.0 \
-lvtkCommonDataModel-9.0 \
-lvtkCommonExecutionModel-9.0 \
-lvtkCommonMath-9.0 \
-lvtkCommonMisc-9.0 \
-lvtkCommonSystem-9.0 \
-lvtkCommonTransforms-9.0 \
-lvtkDICOMParser-9.0 \
-lvtkDomainsChemistry-9.0 \
-lvtkFiltersAMR-9.0 \
-lvtkFiltersCore-9.0 \
-lvtkFiltersExtraction-9.0 \
-lvtkFiltersFlowPaths-9.0 \
-lvtkFiltersGeneral-9.0 \
-lvtkFiltersGeneric-9.0 \
-lvtkFiltersGeometry-9.0 \
-lvtkFiltersHybrid-9.0 \
-lvtkFiltersHyperTree-9.0 \
-lvtkFiltersImaging-9.0 \
-lvtkFiltersModeling-9.0 \
-lvtkFiltersParallel-9.0 \
-lvtkFiltersParallelImaging-9.0 \
-lvtkFiltersPoints-9.0 \
-lvtkFiltersProgrammable-9.0 \
-lvtkFiltersSMP-9.0 \
-lvtkFiltersSelection-9.0 \
-lvtkFiltersSources-9.0 \
-lvtkFiltersStatistics-9.0 \
-lvtkFiltersTexture-9.0 \
-lvtkFiltersTopology-9.0 \
-lvtkFiltersVerdict-9.0 \
-lvtkGUISupportQt-9.0 \
-lvtkGUISupportQtSQL-9.0 \
-lvtkGeovisCore-9.0 \
-lvtkIOAMR-9.0 \
-lvtkIOAsynchronous-9.0 \
-lvtkIOCityGML-9.0 \
-lvtkIOCore-9.0 \
-lvtkIOEnSight-9.0 \
-lvtkIOExodus-9.0 \
-lvtkIOExport-9.0 \
-lvtkIOExportGL2PS-9.0 \
-lvtkIOExportPDF-9.0 \
-lvtkIOGeometry-9.0 \
-lvtkIOImage-9.0 \
-lvtkIOImport-9.0 \
-lvtkIOInfovis-9.0 \
-lvtkIOLSDyna-9.0 \
-lvtkIOLegacy-9.0 \
-lvtkIOMINC-9.0 \
-lvtkIOMotionFX-9.0 \
-lvtkIOMovie-9.0 \
-lvtkIONetCDF-9.0 \
-lvtkIOOggTheora-9.0 \
-lvtkIOPLY-9.0 \
-lvtkIOParallel-9.0 \
-lvtkIOParallelXML-9.0 \
-lvtkIOSQL-9.0 \
-lvtkIOSegY-9.0 \
-lvtkIOTecplotTable-9.0 \
-lvtkIOVeraOut-9.0 \
-lvtkIOVideo-9.0 \
-lvtkIOXML-9.0 \
-lvtkIOXMLParser-9.0 \
-lvtkImagingColor-9.0 \
-lvtkImagingCore-9.0 \
-lvtkImagingFourier-9.0 \
-lvtkImagingGeneral-9.0 \
-lvtkImagingHybrid-9.0 \
-lvtkImagingMath-9.0 \
-lvtkImagingMorphological-9.0 \
-lvtkImagingSources-9.0 \
-lvtkImagingStatistics-9.0 \
-lvtkImagingStencil-9.0 \
-lvtkInfovisCore-9.0 \
-lvtkInfovisLayout-9.0 \
-lvtkInteractionImage-9.0 \
-lvtkInteractionStyle-9.0 \
-lvtkInteractionWidgets-9.0 \
-lvtkParallelCore-9.0 \
-lvtkParallelDIY-9.0 \
-lvtkRenderingAnnotation-9.0 \
-lvtkRenderingContext2D-9.0 \
-lvtkRenderingCore-9.0 \
-lvtkRenderingFreeType-9.0 \
-lvtkRenderingGL2PSOpenGL2-9.0 \
-lvtkRenderingImage-9.0 \
-lvtkRenderingLOD-9.0 \
-lvtkRenderingLabel-9.0 \
-lvtkRenderingOpenGL2-9.0 \
-lvtkRenderingQt-9.0 \
-lvtkRenderingSceneGraph-9.0 \
-lvtkRenderingUI-9.0 \
-lvtkRenderingVolume-9.0 \
-lvtkRenderingVolumeOpenGL2-9.0 \
-lvtkRenderingVtkJS-9.0 \
-lvtkTestingRendering-9.0 \
-lvtkViewsContext2D-9.0 \
-lvtkViewsCore-9.0 \
-lvtkViewsInfovis-9.0 \
-lvtkViewsQt-9.0 \
-lvtkWrappingTools-9.0 \
-lvtkdoubleconversion-9.0 \
-lvtkexodusII-9.0 \
-lvtkexpat-9.0 \
-lvtkfreetype-9.0 \
-lvtkgl2ps-9.0 \
-lvtkglew-9.0 \
-lvtkhdf5-9.0 \
-lvtkhdf5_hl-9.0 \
-lvtkjpeg-9.0 \
-lvtkjsoncpp-9.0 \
-lvtklibharu-9.0 \
-lvtklibproj-9.0 \
-lvtklibxml2-9.0 \
-lvtkloguru-9.0 \
-lvtklz4-9.0 \
-lvtklzma-9.0 \
-lvtkmetaio-9.0 \
-lvtknetcdf-9.0 \
-lvtkogg-9.0 \
-lvtkpng-9.0 \
-lvtkpugixml-9.0 \
-lvtksqlite-9.0 \
-lvtksys-9.0 \
-lvtktheora-9.0 \
-lvtktiff-9.0 \
-lvtkverdict-9.0 \
-lvtkzlib-9.0 \
}
unix{
INCLUDEPATH += ../Tools/Linux64/VTK/include/vtk-9.0/ \
LIBS += -L../Tools/Linux64/VTK/lib/ \
-lvtkChartsCore-9.0 \
-lvtkCommonColor-9.0 \
-lvtkCommonComputationalGeometry-9.0 \
-lvtkCommonCore-9.0 \
-lvtkCommonDataModel-9.0 \
-lvtkCommonExecutionModel-9.0 \
-lvtkCommonMath-9.0 \
-lvtkCommonMisc-9.0 \
-lvtkCommonSystem-9.0 \
-lvtkCommonTransforms-9.0 \
-lvtkDICOMParser-9.0 \
-lvtkDomainsChemistry-9.0 \
-lvtkFiltersAMR-9.0 \
-lvtkFiltersCore-9.0 \
-lvtkFiltersExtraction-9.0 \
-lvtkFiltersFlowPaths-9.0 \
-lvtkFiltersGeneral-9.0 \
-lvtkFiltersGeneric-9.0 \
-lvtkFiltersGeometry-9.0 \
-lvtkFiltersHybrid-9.0 \
-lvtkFiltersHyperTree-9.0 \
-lvtkFiltersImaging-9.0 \
-lvtkFiltersModeling-9.0 \
-lvtkFiltersParallel-9.0 \
-lvtkFiltersParallelImaging-9.0 \
-lvtkFiltersPoints-9.0 \
-lvtkFiltersProgrammable-9.0 \
-lvtkFiltersSMP-9.0 \
-lvtkFiltersSelection-9.0 \
-lvtkFiltersSources-9.0 \
-lvtkFiltersStatistics-9.0 \
-lvtkFiltersTexture-9.0 \
-lvtkFiltersTopology-9.0 \
-lvtkFiltersVerdict-9.0 \
-lvtkGUISupportQt-9.0 \
-lvtkGUISupportQtSQL-9.0 \
-lvtkGeovisCore-9.0 \
-lvtkIOAMR-9.0 \
-lvtkIOAsynchronous-9.0 \
-lvtkIOCityGML-9.0 \
-lvtkIOCore-9.0 \
-lvtkIOEnSight-9.0 \
-lvtkIOExodus-9.0 \
-lvtkIOExport-9.0 \
-lvtkIOExportGL2PS-9.0 \
-lvtkIOExportPDF-9.0 \
-lvtkIOGeometry-9.0 \
-lvtkIOImage-9.0 \
-lvtkIOImport-9.0 \
-lvtkIOInfovis-9.0 \
-lvtkIOLSDyna-9.0 \
-lvtkIOLegacy-9.0 \
-lvtkIOMINC-9.0 \
-lvtkIOMotionFX-9.0 \
-lvtkIOMovie-9.0 \
-lvtkIONetCDF-9.0 \
-lvtkIOOggTheora-9.0 \
-lvtkIOPLY-9.0 \
-lvtkIOParallel-9.0 \
-lvtkIOParallelXML-9.0 \
-lvtkIOSQL-9.0 \
-lvtkIOSegY-9.0 \
-lvtkIOTecplotTable-9.0 \
-lvtkIOVeraOut-9.0 \
-lvtkIOVideo-9.0 \
-lvtkIOXML-9.0 \
-lvtkIOXMLParser-9.0 \
-lvtkImagingColor-9.0 \
-lvtkImagingCore-9.0 \
-lvtkImagingFourier-9.0 \
-lvtkImagingGeneral-9.0 \
-lvtkImagingHybrid-9.0 \
-lvtkImagingMath-9.0 \
-lvtkImagingMorphological-9.0 \
-lvtkImagingSources-9.0 \
-lvtkImagingStatistics-9.0 \
-lvtkImagingStencil-9.0 \
-lvtkInfovisCore-9.0 \
-lvtkInfovisLayout-9.0 \
-lvtkInteractionImage-9.0 \
-lvtkInteractionStyle-9.0 \
-lvtkInteractionWidgets-9.0 \
-lvtkParallelCore-9.0 \
-lvtkParallelDIY-9.0 \
-lvtkRenderingAnnotation-9.0 \
-lvtkRenderingContext2D-9.0 \
-lvtkRenderingCore-9.0 \
-lvtkRenderingFreeType-9.0 \
-lvtkRenderingGL2PSOpenGL2-9.0 \
-lvtkRenderingImage-9.0 \
-lvtkRenderingLOD-9.0 \
-lvtkRenderingLabel-9.0 \
-lvtkRenderingOpenGL2-9.0 \
-lvtkRenderingQt-9.0 \
-lvtkRenderingSceneGraph-9.0 \
-lvtkRenderingUI-9.0 \
-lvtkRenderingVolume-9.0 \
-lvtkRenderingVolumeOpenGL2-9.0 \
-lvtkRenderingVtkJS-9.0 \
-lvtkTestingRendering-9.0 \
-lvtkViewsContext2D-9.0 \
-lvtkViewsCore-9.0 \
-lvtkViewsInfovis-9.0 \
-lvtkViewsQt-9.0 \
-lvtkWrappingTools-9.0 \
-lvtkdoubleconversion-9.0 \
-lvtkexodusII-9.0 \
-lvtkexpat-9.0 \
-lvtkfreetype-9.0 \
-lvtkgl2ps-9.0 \
-lvtkglew-9.0 \
-lvtkhdf5-9.0 \
-lvtkhdf5_hl-9.0 \
-lvtkjpeg-9.0 \
-lvtkjsoncpp-9.0 \
-lvtklibharu-9.0 \
-lvtklibproj-9.0 \
-lvtklibxml2-9.0 \
-lvtkloguru-9.0 \
-lvtklz4-9.0 \
-lvtklzma-9.0 \
-lvtkmetaio-9.0 \
-lvtknetcdf-9.0 \
-lvtkogg-9.0 \
-lvtkpng-9.0 \
-lvtkpugixml-9.0 \
-lvtksqlite-9.0 \
-lvtksys-9.0 \
-lvtktheora-9.0 \
-lvtktiff-9.0 \
-lvtkverdict-9.0 \
-lvtkzlib-9.0 \
}
Loading…
Cancel
Save