1、初始化代码;

develop
simonyan 3 weeks ago
parent 25ee883b90
commit ae03f5cbae

45
.gitignore vendored

@ -1,34 +1,11 @@
# ---> C++ .vs
# Prerequisites *.bat
*.d *.sln
.*stash
# Compiled Object files *.vcxproj
*.slo *.filters
*.lo /*.user
*.o *.user
*.obj /output
/generate
# Precompiled Headers /Tools
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app

24
.gitmodules vendored

@ -0,0 +1,24 @@
[submodule "FITK_Kernel/FITKCore"]
path = FITK_Kernel/FITKCore
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Kernel/FITKCore.git
[submodule "FITK_Kernel/FITKAppFramework"]
path = FITK_Kernel/FITKAppFramework
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Kernel/FITKAppFramework.git
[submodule "FITK_Interface/FITKVTKAlgorithm"]
path = FITK_Interface/FITKVTKAlgorithm
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Interface/FITKVTKAlgorithm.git
[submodule "Tools"]
path = Tools
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/Tools.git
[submodule "FITK_Interface/FITKInterfaceCFDPost"]
path = FITK_Interface/FITKInterfaceCFDPost
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Interface/FITKInterfaceCFDPost.git
[submodule "FITK_Component/FITKRenderWindowVTK"]
path = FITK_Component/FITKRenderWindowVTK
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Component/FITKRenderWindowVTK.git
[submodule "FITK_Component/FITKWidget"]
path = FITK_Component/FITKWidget
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Component/FITKWidget.git
[submodule "FITK_Kernel/FITKEasyParam"]
path = FITK_Kernel/FITKEasyParam
url = https://codeup.aliyun.com/64fad925ce01efaafef1e9f3/FastCAE_IntTK/FITK_Kernel/FITKEasyParam.git

Binary file not shown.

@ -0,0 +1,27 @@
#!/bin/sh
#获取当前路径
currentpath=$(pwd)
#获取当前.git路径
git_dir=$(git rev-parse --git-dir)
#获取hooks路径
hooks_dir="$git_dir/hooks"
#获取git状态
data=$(git status -uall)
#输出到文件
echo "$data" > gitStatus.txt
#获取TaskCommitFile.exe路径
taskCommitPath="$hooks_dir/TaskCommitFile.exe"
#执行程序
"$taskCommitPath" gitStatus.txt 2
#获取返回值
exitCode="$?"
#删除gitStatus.txt文件
rm gitStatus.txt
#判断是否为2
if [ "$exitCode" -ge 2 ];then
echo "请查看$currentpath/NeedCommit.txt"
echo "有*.h *.cpp等文件未提交"
exit 1
fi
rm NeedCommit.txt
exit 0

@ -0,0 +1,48 @@
#!/bin/sh
# 获取当前项目路径
currentpath=$(pwd)
#获取当前.git路径
git_dir=$(git rev-parse --git-dir)
#获取hooks路径
hooks_dir="$git_dir/hooks"
#.......................................................
#获取bat
bat_dir="$hooks_dir/AutomaticCompilation.bat"
# 执行代码检查
echo "$bat_dir"
#执行AutomaticCompilation.bat脚本
"$bat_dir"
#获取返回值
exitCodeDir="$?"
#判断是否为0正常
if [ "$exitCodeDir" -eq 0 ];then
echo "编译成功$exitCodeDir"
elif [ "$exitCodeDir" -eq 2 ];then
echo "当前文件夹中没有工程!!!"
else
echo "编译失败$exitCodeDir"
echo "请查看$currentpath/msbuild.err文件有部分代码编译问题"
exit 1
fi
#.........................................................
#获取git状态
data=$(git status -uall)
#输出到文件
echo "$data" > gitStatus.txt
#获取TaskCommitFile.exe路径
taskCommitPath="$hooks_dir/TaskCommitFile.exe"
#执行程序
"$taskCommitPath" gitStatus.txt 3
#获取返回值
exitCode="$?"
#删除gitStatus.txt文件
rm gitStatus.txt
#判断是否为2
if [ "$exitCode" -ne 0 ];then
echo "请查看$currentpath/NeedCommit.txt"
echo "请全部提交之后在推送!!!"
exit 1
fi
rm NeedCommit.txt
exit 0

@ -0,0 +1,29 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试可执行文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/TT.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin",
"environment": [],
"console": "externalTerminal",
"MIMode": "gdb",
"miDebuggerPath": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "Build my project"
}
]
}

@ -0,0 +1,36 @@
{
// Doxygen documentation generator set
//
"doxdocgen.file.fileOrder": [
"custom""empty"
// "copyright",//
// "empty"
"file", // @file
"brief", // @brief
"author", //
// "version", //
"date", //
"empty", //
],
// tag
"doxdocgen.file.fileTemplate": "@file {name}",
"doxdocgen.file.versionTag": "@version 1.0",
"doxdocgen.generic.authorEmail": "libaojunqd@foxmail.com",
"doxdocgen.generic.authorName": "LiBaojun",
"doxdocgen.generic.authorTag": "@author {author} ({email})",
//
"doxdocgen.generic.dateFormat": "YYYY-MM-DD",
"doxdocgen.generic.dateTemplate": "@date {date}",
//
"doxdocgen.generic.order": [
"brief",
"tparam",
"param",
"return",
"author",
"date"
],
"doxdocgen.generic.paramTemplate": "@param[]{indent:10}{param}{indent:25}My Param doc",
"doxdocgen.generic.returnTemplate": "@return {type} ",
"doxdocgen.generic.splitCasingSmartText": true,
}

32
.vscode/tasks.json vendored

@ -0,0 +1,32 @@
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build/"
},
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin\\mingw32-make.exe",
"args": []
},
{
"label": "Build my project",
"dependsOn": [
"cmake",
"make"
]
}
]
}

@ -0,0 +1,16 @@
TEMPLATE = subdirs
SUBDIRS += \
$$PWD/FITK_Component \
$$PWD/FITK_Interface \
$$PWD/FITK_Kernel \
$$PWD/GUIFrame/GUIFrame.pro \
$$PWD/GUIWidget/GUIWidget.pro \
$$PWD/GUIDialog/GUIDialog.pro \
$$PWD/PostGraphAdaptor/PostGraphAdaptor.pro \
$$PWD/OperatorsGUI/OperatorsGUI.pro \
$$PWD/OperatorsInterface/OperatorsInterface.pro \
$$PWD/OperatorsModel/OperatorsModel.pro \
$$PWD/CFDPostAPP/CFDPostAPP.pro \
CONFIG += ordered

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 5.0.2, 2024-10-23T17:20:02. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{d18c9c4d-1c6c-4e61-844d-97b8856220a1}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">8</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MSVC2017 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b7d4f174-5b09-4abb-bbae-d0f18357e30e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:/01-CAE/06-Comac/01-Postprocessing-git/APPCFDPost</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/01-CAE/06-Comac/01-Postprocessing-git/build-CFDPost-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\01-CAE\06-Comac\01-Postprocessing-git\build-CFDPost-Desktop_Qt_5_14_2_MSVC2017_64bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/01-CAE/06-Comac/01-Postprocessing-git/build-CFDPost-Desktop_Qt_5_14_2_MSVC2017_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\01-CAE\06-Comac\01-Postprocessing-git\build-CFDPost-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/01-CAE/06-Comac/01-Postprocessing-git/build-CFDPost-Desktop_Qt_5_14_2_MSVC2017_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/01-CAE/06-Comac/01-Postprocessing-git/APPCFDPost/CFDPostAPP/CFDPostAPP.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">E:/01-CAE/06-Comac/01-Postprocessing-git/APPCFDPost/CFDPostAPP/CFDPostAPP.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/01-CAE/06-Comac/01-Postprocessing-git/APPCFDPost/CFDPostAPP/../output/bin_d</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

@ -0,0 +1,23 @@
HEADERS += \
#$$PWD/test1.hpp \
$$PWD/MainWindowGenerator.h \
$$PWD/ComponentFactory.h \
$$PWD/GlobalDataFactory.h \
$$PWD/CommandLineHandler.h \
$$PWD/WorkBenchHandler.h \
$$PWD/CFDPostAPPSettings.h \
$$PWD/PreWindowInitializer.h \
SOURCES += \
$$PWD/main.cpp \
$$PWD/MainWindowGenerator.cpp \
$$PWD/ComponentFactory.cpp \
$$PWD/GlobalDataFactory.cpp \
$$PWD/CommandLineHandler.cpp \
$$PWD/WorkBenchHandler.cpp \
$$PWD/CFDPostAPPSettings.cpp \
$$PWD/PreWindowInitializer.cpp \
FORMS += \
RC_ICONS = icon.ico

@ -0,0 +1,85 @@
TEMPLATE = app
CONFIG += c++11 qt
TARGET = CFDPostAPP
QT += core gui widgets
INCLUDEPATH += ./ \
../ \
../../ \
include(CFDPostAPP.pri)
include(../vtk.pri)
win32{
INCLUDEPATH += ./ \
../ \
../../ \
Release:CONFIG += console
Release:DESTDIR = ../output/bin
Release:MOC_DIR = ../generate/CFDPostAPP/release/moc
Release:RCC_DIR = ../generate/CFDPostAPP/release/rcc
Release:UI_DIR = ../generate/CFDPostAPP/release/qui
Release:OBJECTS_DIR = ../generate/CFDPostAPP/release/obj
Release:LIBS += \
-L../output/bin \
-lFITKAppFramework \
-lFITKCore \
-lFITKRenderWindowVTK \
-lFITKWidget \
-lFITKInterfaceCFDPost \
-lGUIFrame \
-lGUIWidget \
-lOperatorsModel \
-lOperatorsGUI \
Debug:CONFIG += console
Debug:DESTDIR = ../output/bin_d
Debug:MOC_DIR = ../generate/CFDPostAPP/debug/moc
Debug:RCC_DIR = ../generate/CFDPostAPP/debug/rcc
Debug:UI_DIR = ../generate/CFDPostAPP/debug/qui
Debug:OBJECTS_DIR = ../generate/CFDPostAPP/debug/obj
Debug:LIBS += \
-L../output/bin_d \
-lFITKAppFramework \
-lFITKCore \
-lFITKRenderWindowVTK \
-lFITKWidget \
-lFITKInterfaceCFDPost \
-lGUIFrame \
-lGUIWidget \
-lOperatorsModel \
-lOperatorsGUI \
message("Windows CFDPostAPP generated")
}
unix{
INCLUDEPATH += ./ \
../ \
../../ \
CONFIG += console
CONFIG += plugin
DESTDIR = ../output/bin
MOC_DIR = ../generate/CFDPostAPP/release/moc
UI_DIR = ../generate/CFDPostAPP/release/qui
RCC_DIR = ../generate/CFDPostAPP/release/rcc
OBJECTS_DIR = ../generate/CFDPostAPP/release/obj
LIBS += \
-L../output/bin \
-lFITKAppFramework \
-lFITKCore \
-lFITKInterfaceCFDPost \
-lFITKRenderWindowVTK \
-lFITKWidget \
-lFITKEasyParam \
-lGUIFrame \
-lGUIWidget \
-lOperatorsModel \
-lOperatorsGUI \
message("Linux CFDPostAPP generated")
}

@ -0,0 +1,25 @@
#include "CFDPostAPPSettings.h"
#include <QSettings>
#include <QFile>
void CFDPostAPPSettings::read()
{
//读入文件
QString file = _appDir + "/CFDPostAPP.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 CFDPostAPPSettings.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 CFDPostAPPSettings : public AppFrame::FITKAppSettings
{
public:
/**
* @brief Construct a new Structural Settings object
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
explicit CFDPostAPPSettings() = default;
/**
* @brief Destroy the Structural Settings object
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
virtual ~CFDPostAPPSettings() = default;
/**
* @brief ini
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-06
*/
void read() override;
};
#endif

@ -0,0 +1,37 @@
#include <windows.h>
IDI_ICON1 ICON DISCARDABLE "E:\\01-Projects\\19-Fly\\02-APPCFDPost-gitea\\CFDPostAPP\\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", "CFDPostAPP.exe\0"
VALUE "ProductName", "CFDPostAPP\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,81 @@
#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 <QDir>
#include <QFileInfo>
#include <QCollator>
void CommandLineHandler::exec()
{
//查找参数
int index = _args.indexOf("-i");
if (index >= 0)importVTK(index + 1);
}
void CommandLineHandler::importVTK(const int index)
{
//获取文件名称
QString files = this->argValue(index);
if (files.isEmpty()) return;
QFileInfo fileInfo(files);
if (!fileInfo.exists())return;
//操作器
Core::FITKActionOperator* oper = nullptr;
if (fileInfo.isDir()) {
oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
files = getFilesToPath(files, "vtk");
}
else if (fileInfo.isFile()) {
oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
}
if (files.isEmpty())return;
if (oper == nullptr) return;
oper->setArgs("files", files);
oper->execProfession();
}
QString CommandLineHandler::getFilesToPath(QString path, QString fileType)
{
QDir dir(path);
// 设置过滤器,过滤出文件
dir.setFilter(QDir::Files | QDir::NoSymLinks);
// 设置名称过滤器,只选择 .vtk 扩展名的文件
QString type = QString("*.%1").arg(fileType);
dir.setNameFilters(QStringList() << type);
// 获取文件信息列表
QFileInfoList fileInfoList = dir.entryInfoList();
if (fileInfoList.isEmpty())return "";
//获取所有的文件
QStringList fileList = {};
for (auto fileInfo : fileInfoList) {
fileList.append(fileInfo.filePath());
}
//对文件进行大小排序
QCollator collator;
collator.setNumericMode(true);
std::sort(fileList.begin(), fileList.end(),
[&collator](const QString & str1, const QString & str2)
{
return collator.compare(str1, str2) < 0;
});
//对文件进行处理
QString fileName = fileList.at(0);
QString fileHead, fileHeadExt, NodeText;
int endPos = fileName.length() - fileType.length() - 2;
int beginPos;
for (beginPos = endPos; beginPos >= 0; --beginPos) {
if (fileName[beginPos] > '9' || fileName[beginPos] < '0') break;
}
fileHead = fileName.mid(0, beginPos + 1);
NodeText = fileHead + "..." + fileType;
return NodeText;
}

@ -0,0 +1,58 @@
/**********************************************************************
* @file CommandLineHandler.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*********************************************************************/
#ifndef _CommandLineHandler_H_
#define _CommandLineHandler_H_
#include "FITK_Kernel/FITKAppFramework/FITKCommandLineHandler.h"
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
class CommandLineHandler : public AppFrame::FITKCommandLineHandler
{
public:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
explicit CommandLineHandler() = default;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
virtual ~CommandLineHandler() = default;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
void exec() override;
private:
/**
* @brief VTK
* @param[i] index
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
void importVTK(const int index);
/**
* @brief
* @param[i] path
* @param[i] fileType
* @return QString
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-11
*/
QString getFilesToPath(QString path, QString fileType);
};
#endif

@ -0,0 +1,30 @@
/**
* @file ComponentFactory.cpp
* @brief
* @author YanZhiHui (chanyuantiandao@126.com)
* @date 2024-04-19
*/
#include "ComponentFactory.h"
#include "PreWindowInitializer.h"
#include "OperatorsModel/OpersModelInterface.h"
#include "OperatorsGUI/OperatorsGUIInterface.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Component/FITKRenderWindowVTK/FITKGraph3DWindowInterface.h"
QList<AppFrame::FITKComponentInterface *> ComponentFactory::createComponents()
{
// 自定义组件列表
QList<AppFrame::FITKComponentInterface *> componentList;
// 3D图形窗口组件
auto compVTKrender = new Comp::FITKGraph3DWindowInterface;
compVTKrender->addInitializer(1, new PreWindowInitializer);
componentList << compVTKrender;
// 模型数据控制器组件
componentList << new OperModel::OpersModelInterface;
componentList << new OperGUI::OperatorsGUIInterface;
return componentList;
}

@ -0,0 +1,40 @@
/**
* @file ComponentFactory.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
#ifndef __COMPONENTFACTORY__
#define __COMPONENTFACTORY__
#include "FITK_Kernel/FITKAppFramework/FITKComponentFactory.h"
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
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,15 @@
#include "GlobalDataFactory.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h"
Core::FITKAbstractDataObject *GlobalDataFactory::createPostData()
{
// 创建后处理数据
return new Interface::FITKCFDPostData();
}
QHash<int, Core::FITKAbstractDataObject *> GlobalDataFactory::createOtherData()
{
// 不创建其他数据
return QHash<int, Core::FITKAbstractDataObject *>();
}

@ -0,0 +1,35 @@
/**
* @file GlobalDataFactory.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
#ifndef __GLOBALDATAFACTORY__
#define __GLOBALDATAFACTORY__
#include "FITK_Kernel/FITKAppFramework/FITKAbstractGlobalDataFactory.h"
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
class GlobalDataFactory : public AppFrame::FITKAbstractGlobalDataFactory
{
private:
/**
* @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,13 @@
#include "MainWindowGenerator.h"
#include "GUIFrame/MainWindow.h"
MainWindowGenerator::MainWindowGenerator()
{
// this->setStyle("://Structural.qss");
// this->showMaximize(false);
}
QWidget * MainWindowGenerator::genMainWindow()
{
return new GUI::MainWindow;
}

@ -0,0 +1,42 @@
/**********************************************************************
* @file MainWindowGenerator.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*********************************************************************/
#ifndef __MAINWINDOWGENERATOR__
#define __MAINWINDOWGENERATOR__
#include "FITK_Kernel/FITKAppFramework/FITKAbstractMainWinGenerator.h"
/**
* @brief
* @note `AppFrame::FITKAbstractMainwindowGenerator`
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
class MainWindowGenerator : public AppFrame::FITKAbstractMainwindowGenerator
{
public:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
MainWindowGenerator();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
~MainWindowGenerator() = default;
/**
* @brief
* @return QWidget*
* @author BaGuijun (baguijun@163.com)
* @date 2024-09-04
*/
QWidget *genMainWindow() override;
};
#endif // !__MAINWINDOWGENERATOR__

@ -0,0 +1,563 @@
#############################################################################
# Makefile for building: CFDPostAPP
# Generated by qmake (3.1) (Qt 5.14.2)
# Project: CFDPostAPP.pro
# Template: app
# Command: D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -o Makefile CFDPostAPP.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
#############################################################################
MAKEFILE = Makefile
EQ = =
first: debug
install: debug-install
uninstall: debug-uninstall
QMAKE = D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe
DEL_FILE = del
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
COPY = copy /y
COPY_FILE = copy /y
COPY_DIR = xcopy /s /q /y /i
INSTALL_FILE = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR = xcopy /s /q /y /i
QINSTALL = D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -install qinstall
QINSTALL_PROGRAM = D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe -install qinstall -exe
DEL_FILE = del
SYMLINK = $(QMAKE) -install ln -f -s
DEL_DIR = rmdir
MOVE = move
IDC = idc
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE = CFDPostAPP_resource.res
SED = $(QMAKE) -install sed
MOVE = move
SUBTARGETS = \
debug \
release
debug: $(MAKEFILE) FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug
debug-all: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug all
debug-clean: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug clean
debug-distclean: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug distclean
debug-install: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug uninstall
release: $(MAKEFILE) FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release
release-make_first: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release
release-all: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release all
release-clean: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: FORCE
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release uninstall
Makefile: CFDPostAPP.pro D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc\qmake.conf D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\spec_pre.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\angle.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\windows-desktop.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\windows_vulkan_sdk.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\windows-vulkan.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-desktop.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\qconfig.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3danimation.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3danimation_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dcore.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dcore_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dextras.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dextras_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dinput.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dinput_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dlogic.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dlogic_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquick.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquick_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickanimation.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickanimation_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickextras.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickextras_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickinput.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickinput_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickrender.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickrender_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickscene2d.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickscene2d_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3drender.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3drender_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_accessibility_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axbase.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axbase_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axcontainer.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axcontainer_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axserver.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axserver_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bluetooth.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bluetooth_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bodymovin_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bootstrap_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_charts.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_charts_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_concurrent.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_concurrent_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_core.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_core_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_datavisualization.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_datavisualization_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_dbus.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_dbus_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designer.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designer_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designercomponents_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_edid_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_egl_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_eventdispatcher_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_fb_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_fontdatabase_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gamepad.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gamepad_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gui.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gui_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_help.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_help_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_location.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_location_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimedia.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimedia_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimediawidgets.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_network.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_network_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_networkauth.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_networkauth_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_nfc.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_nfc_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_opengl.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_opengl_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_openglextensions.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_openglextensions_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_packetprotocol_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_platformcompositor_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioning.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioning_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioningquick.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioningquick_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_printsupport.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_printsupport_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_purchasing.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_purchasing_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qml.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qml_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmldebug_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmldevtools_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlmodels.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlmodels_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmltest.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmltest_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlworkerscript.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3d.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3d_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dassetimport.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3drender.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3drender_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3druntimerender.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dutils.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dutils_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickcontrols2.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickparticles_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickshapes_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quicktemplates2.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickwidgets.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickwidgets_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_remoteobjects.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_remoteobjects_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_repparser.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_repparser_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_script.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_script_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scripttools.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scripttools_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scxml.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scxml_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sensors.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sensors_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialbus.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialbus_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialport.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialport_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sql.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sql_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_svg.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_svg_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_testlib.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_testlib_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_texttospeech.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_texttospeech_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_theme_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uiplugin.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uitools.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uitools_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_virtualkeyboard.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_virtualkeyboard_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_vulkan_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webchannel.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webchannel_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webengine.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webengine_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecore.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecore_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginewidgets.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginewidgets_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_websockets.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_websockets_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webview.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webview_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_widgets.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_widgets_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_windowsuiautomation_support_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_winextras.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_winextras_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xml.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xml_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xmlpatterns.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xmlpatterns_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_zlib_private.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt_functions.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt_config.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc\qmake.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\spec_post.prf \
..\.qmake.stash \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exclusive_builds.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\toolchain.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\default_pre.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\default_pre.prf \
CFDPostAPP.pri \
..\vtk.pri \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resolve_config.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exclusive_builds_post.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\default_post.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resources_functions.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resources.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\moc.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\opengl.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\uic.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qml_debug.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\precompile_header.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\warn_on.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qmake_use.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\file_copies.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\windows.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\testcase_targets.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exceptions.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\yacc.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\lex.prf \
CFDPostAPP.pro \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgets.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Gui.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Core.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmain.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\build_pass.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\console.prf \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgetsd.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Guid.prl \
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Cored.prl
$(QMAKE) -o Makefile CFDPostAPP.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\spec_pre.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\angle.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\windows-desktop.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\windows_vulkan_sdk.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\windows-vulkan.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-desktop.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\qconfig.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3danimation.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3danimation_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dcore.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dcore_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dextras.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dextras_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dinput.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dinput_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dlogic.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dlogic_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquick.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquick_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickanimation.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickanimation_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickextras.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickextras_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickinput.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickinput_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickrender.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickrender_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickscene2d.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3dquickscene2d_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3drender.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_3drender_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_accessibility_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axbase.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axbase_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axcontainer.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axcontainer_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axserver.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_axserver_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bluetooth.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bluetooth_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bodymovin_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_bootstrap_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_charts.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_charts_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_concurrent.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_concurrent_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_core.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_core_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_datavisualization.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_datavisualization_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_dbus.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_dbus_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designer.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designer_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_designercomponents_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_devicediscovery_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_edid_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_egl_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_eventdispatcher_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_fb_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_fontdatabase_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gamepad.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gamepad_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gui.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_gui_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_help.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_help_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_location.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_location_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimedia.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimedia_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimediawidgets.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_multimediawidgets_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_network.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_network_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_networkauth.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_networkauth_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_nfc.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_nfc_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_opengl.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_opengl_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_openglextensions.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_openglextensions_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_packetprotocol_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_platformcompositor_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioning.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioning_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioningquick.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_positioningquick_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_printsupport.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_printsupport_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_purchasing.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_purchasing_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qml.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qml_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmldebug_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmldevtools_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlmodels.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlmodels_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmltest.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmltest_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlworkerscript.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qmlworkerscript_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3d.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3d_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dassetimport.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dassetimport_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3drender.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3drender_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3druntimerender.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3druntimerender_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dutils.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick3dutils_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quick_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickcontrols2.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickcontrols2_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickparticles_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickshapes_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quicktemplates2.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quicktemplates2_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickwidgets.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_quickwidgets_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_remoteobjects.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_remoteobjects_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_repparser.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_repparser_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_script.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_script_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scripttools.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scripttools_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scxml.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_scxml_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sensors.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sensors_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialbus.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialbus_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialport.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_serialport_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sql.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_sql_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_svg.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_svg_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_testlib.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_testlib_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_texttospeech.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_texttospeech_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_theme_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uiplugin.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uitools.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_uitools_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_virtualkeyboard.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_virtualkeyboard_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_vulkan_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webchannel.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webchannel_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webengine.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webengine_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecore.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecore_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginecoreheaders_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginewidgets.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webenginewidgets_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_websockets.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_websockets_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webview.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_webview_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_widgets.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_widgets_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_windowsuiautomation_support_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_winextras.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_winextras_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xml.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xml_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xmlpatterns.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_xmlpatterns_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\modules\qt_lib_zlib_private.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt_functions.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt_config.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\win32-msvc\qmake.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\spec_post.prf:
..\.qmake.stash:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exclusive_builds.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\toolchain.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\default_pre.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\default_pre.prf:
CFDPostAPP.pri:
..\vtk.pri:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resolve_config.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exclusive_builds_post.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\default_post.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qt.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resources_functions.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\resources.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\moc.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\opengl.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\uic.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qml_debug.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\precompile_header.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\warn_on.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\qmake_use.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\file_copies.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\windows.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\testcase_targets.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\exceptions.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\yacc.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\lex.prf:
CFDPostAPP.pro:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgets.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Gui.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Core.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\qtmain.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\build_pass.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\features\win32\console.prf:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Widgetsd.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Guid.prl:
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib\Qt5Cored.prl:
qmake: FORCE
@$(QMAKE) -o Makefile CFDPostAPP.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
qmake_all: FORCE
make_first: debug-make_first release-make_first FORCE
all: debug-all release-all FORCE
clean: debug-clean release-clean FORCE
-$(DEL_FILE) CFDPostAPP.vc.pdb
-$(DEL_FILE) CFDPostAPP.ilk
-$(DEL_FILE) CFDPostAPP.idb
distclean: debug-distclean release-distclean FORCE
-$(DEL_FILE) Makefile
-$(DEL_FILE) CFDPostAPP.pdb
debug-mocclean:
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug mocclean
release-mocclean:
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release mocclean
mocclean: debug-mocclean release-mocclean
debug-mocables:
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Debug mocables
release-mocables:
@set MAKEFLAGS=$(MAKEFLAGS)
$(MAKE) -f $(MAKEFILE).Release mocables
mocables: debug-mocables release-mocables
check: first
benchmark: first
FORCE:
$(MAKEFILE).Debug: Makefile
$(MAKEFILE).Release: Makefile

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,471 @@
#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:
pickPoint(graphWindow, pos, isPreview);
break;
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();
vtkPointPicker* picker = vtkPointPicker::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,68 @@
#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"
#include <QDir>
void CFDPostWorkBenchHandler::execHandler()
{
//文件数量
const int n = this->getInputFilesCount();
for (int i = 0; i < n; ++i)
{
//遍历文件
AppFrame::IOFileInfo finfo = this->getInputFileInfo(i);
if (finfo._isFile)
{
this->importFile(finfo);
}
else
{
this->importFolder(finfo);
}
}
}
void CFDPostWorkBenchHandler::execOutput()
{
}
void CFDPostWorkBenchHandler::importFile(AppFrame::IOFileInfo finfo)
{
QString fileName = QString("%1/%2").arg(finfo._path).arg(finfo._name);
//获取操作器
Core::FITKActionOperator* oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
if (oper == nullptr) return;
oper->setArgs("files", fileName);
//执行操作
oper->execProfession();
Core::FITKThreadPool::getInstance()->wait();
}
void CFDPostWorkBenchHandler::importFolder(AppFrame::IOFileInfo finfo)
{
QDir dir(finfo._path);
if (!dir.exists()) return;
QString type = QString("*.%1").arg(finfo._suffix);
dir.setNameFilters(QStringList() << type);
// 获取文件信息列表
QFileInfoList fileInfoList = dir.entryInfoList();
if (fileInfoList.isEmpty())return;
QString filename = finfo._path + "/" + finfo._name + "..." + finfo._suffix;
//获取操作器
Core::FITKActionOperator* oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
if (oper == nullptr) return;
oper->setArgs("files", filename);
//执行操作
oper->execProfession();
Core::FITKThreadPool::getInstance()->wait();
}

@ -0,0 +1,63 @@
/**
*
* @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 CFDPostWorkBenchHandler : public AppFrame::FITKWorkBenchHandler
{
public:
/**
* @brief Construct a new Flow App Work Bench Handler object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
explicit CFDPostWorkBenchHandler() = default;
/**
* @brief Destroy the Flow App Work Bench Handler object
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-26
*/
virtual ~CFDPostWorkBenchHandler() = 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
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-27
*/
void importFile(AppFrame::IOFileInfo finfo);
/**
* @brief
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-08-27
*/
void importFolder(AppFrame::IOFileInfo finfo);
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1,26 @@
#include <QApplication>
//FITK框架
#include "MainWindowGenerator.h"
#include "GlobalDataFactory.h"
#include "ComponentFactory.h"
#include "CommandLineHandler.h"
#include "WorkBenchHandler.h"
#include "CFDPostAPPSettings.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
int main(int argc, char* argv[])
{
//初始化应用框架
AppFrame::FITKApplication postApp(argc, argv);
// 注册程序的主要组件和设置
postApp.regMainWindowGenerator(new MainWindowGenerator); // 注册主窗口生成器
postApp.regGlobalDataFactory(new GlobalDataFactory); // 注册全局数据工厂
postApp.regComponentsFactory(new ComponentFactory); // 注册组件工厂
postApp.regCommandLineHandler(new CommandLineHandler); // 注册命令处理器
postApp.regWorkBenchHandler(new CFDPostWorkBenchHandler);// 工作台处理器
postApp.regAppSettings(new CFDPostAPPSettings); // 注册软件设置
return postApp.exec();
}

@ -0,0 +1,6 @@
.vs
*.bat
*.sln
.*stash
*.vcxproj
*.filters

@ -0,0 +1,29 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试可执行文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/TT.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin",
"environment": [],
"console": "externalTerminal",
"MIMode": "gdb",
"miDebuggerPath": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "Build my project"
}
]
}

@ -0,0 +1,36 @@
{
// Doxygen documentation generator set
//
"doxdocgen.file.fileOrder": [
"custom""empty"
// "copyright",//
// "empty"
"file", // @file
"brief", // @brief
"author", //
// "version", //
"date", //
"empty", //
],
// tag
"doxdocgen.file.fileTemplate": "@file {name}",
"doxdocgen.file.versionTag": "@version 1.0",
"doxdocgen.generic.authorEmail": "libaojunqd@foxmail.com",
"doxdocgen.generic.authorName": "LiBaojun",
"doxdocgen.generic.authorTag": "@author {author} ({email})",
//
"doxdocgen.generic.dateFormat": "YYYY-MM-DD",
"doxdocgen.generic.dateTemplate": "@date {date}",
//
"doxdocgen.generic.order": [
"brief",
"tparam",
"param",
"return",
"author",
"date"
],
"doxdocgen.generic.paramTemplate": "@param[]{indent:10}{param}{indent:25}My Param doc",
"doxdocgen.generic.returnTemplate": "@return {type} ",
"doxdocgen.generic.splitCasingSmartText": true,
}

@ -0,0 +1,32 @@
{
"version": "2.0.0",
"options": {
"cwd": "${workspaceFolder}/build/"
},
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command": "C:\\Qt\\Qt5.14.2\\Tools\\mingw730_64\\bin\\mingw32-make.exe",
"args": []
},
{
"label": "Build my project",
"dependsOn": [
"cmake",
"make"
]
}
]
}

@ -0,0 +1,64 @@
#include "FITKBoundaryActor.h"
#include <vtkActor.h>
#include <vtkDataSetMapper.h>
#include <vtkPoints.h>
#include <vtkIdList.h>
#include <vtkSmartPointer.h>
#include <vtkCellType.h>
#include <vtkUnstructuredGrid.h>
#include <vtkProperty.h>
namespace Comp
{
FITKBoundaryActor::FITKBoundaryActor()
{
//渲染窗口范围对象创建
_boundaryActor = vtkActor::New();
_boundaryActor->SetMapper(vtkSmartPointer<vtkDataSetMapper>::New());
//边界对象创建
vtkSmartPointer<vtkUnstructuredGrid> ugrid = vtkSmartPointer<vtkUnstructuredGrid>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0., 0., 0.);
points->InsertNextPoint(0., 0., 0.);
//顶点创建
vtkSmartPointer<vtkIdList> c1 = vtkSmartPointer<vtkIdList>::New();
c1->InsertNextId(0);
vtkSmartPointer<vtkIdList> c2 = vtkSmartPointer<vtkIdList>::New();
c2->InsertNextId(1);
//添加两个节点单元类型
ugrid->InsertNextCell(VTKCellType::VTK_VERTEX, c1);
ugrid->InsertNextCell(VTKCellType::VTK_VERTEX, c2);
ugrid->SetPoints(points);
_boundaryActor->GetMapper()->SetInputDataObject(ugrid);
//设置为透明
_boundaryActor->GetProperty()->SetOpacity(0);
}
FITKBoundaryActor::~FITKBoundaryActor()
{
if (_boundaryActor)
_boundaryActor->Delete();
}
vtkActor* FITKBoundaryActor::getActor()
{
return _boundaryActor;
}
void FITKBoundaryActor::updateBoundary(double* bound)
{
//获取网格
vtkUnstructuredGrid* ugrid =
vtkUnstructuredGrid::SafeDownCast(_boundaryActor->GetMapper()->GetInput());
if (ugrid == nullptr) return;
//重置
vtkPoints* pts = ugrid->GetPoints();
pts->Reset();
//重置边界
pts->InsertNextPoint(bound[0], bound[2], bound[4]);
pts->InsertNextPoint(bound[1], bound[3], bound[5]);
ugrid->Modified();
}
}

@ -0,0 +1,62 @@
/**
*
* @file FITKBoundaryActor.h
* @brief actor
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*
*/
#ifndef __FITKBOUNDARYACTOR_H___
#define __FITKBOUNDARYACTOR_H___
class vtkActor;
class vtkUnstructuredGrid;
namespace Comp
{
/**
* @brief actor
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
class FITKBoundaryActor
{
public:
/**
* @brief Construct a new FITKBoundaryActor object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
explicit FITKBoundaryActor();
/**
* @brief Destroy the FITKBoundaryActor object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
virtual ~FITKBoundaryActor();
/**
* @brief actor
* @return vtkActor*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
vtkActor* getActor();
/**
* @brief
* @param bound 6 minx maxX minY maxY minZ maxZ
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
void updateBoundary(double* bound);
private:
/**
* @brief actor
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-05
*/
vtkActor* _boundaryActor{};
};
}
#endif

@ -0,0 +1,94 @@
#include "FITKGraph3DWindowInterface.h"
#include "FITKGraph3DWindowVTK.h"
#include "FITKGraphInteractionStyle.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKAppFramework/FITKRunTimeSetting.h"
namespace Comp
{
FITKGraph3DWindowInterface::~FITKGraph3DWindowInterface()
{
//释放初始化器
QList <Graph3DWindowInitializer*> inis = _initilizerList.values();
for (auto iner : inis)
{
delete iner;
}
_initilizerList.clear();
}
QWidget* FITKGraph3DWindowInterface::getWidget(const int indexPort)
{
//获取初始化器
auto initer = _initilizerList.value(indexPort);
if (initer == nullptr)
initer = new Graph3DWindowInitializer;
//创建三维渲染窗口
auto w = new FITKGraph3DWindowVTK(initer);
//获取
AppFrame::FITKRunTimeSetting* runTimeSetting = FITKAPP->getGlobalData()->getRunTimeSetting();
QVariant vtc = runTimeSetting->getValue(BackGroundColorTop);
QVariant vbc = runTimeSetting->getValue(BackGroundColorButtom);
//程序运行参数获取不到,则获取默认颜色
if ((!vbc.isValid()) && (!vtc.isValid()))
{
//设置背景色
vtc = initer->getValue(BackGroundColorTop);
vbc = initer->getValue(BackGroundColorButtom);
}
//无效值不操作
if (vbc.isValid() && vtc.isValid())
{
//top
QColor c = vtc.value<QColor>();
float t[3] = { c.redF(),c.greenF(),c.blueF() };
//buttom
c = vbc.value<QColor>();
float b[3] = { c.redF(),c.greenF(),c.blueF() };
if (w)
w->setBackgroundColor(t, b);
}
return w;
}
QString FITKGraph3DWindowInterface::getComponentName()
{
//返回三维渲染组件在组件管理类中的标识
return "Graph3DWindowVTK";
}
void FITKGraph3DWindowInterface::addInitializer(int key, Graph3DWindowInitializer* info)
{
//添加初始化器
if(_initilizerList.contains(key))
{
auto iner = _initilizerList.value(key);
//释放旧的初始化器
if (iner)
delete iner;
}
_initilizerList[key] = info;
}
FITKGraphInteractionStyle* Graph3DWindowInitializer::getStyle()
{
//创建默认交互样式
return FITKGraphInteractionStyle::New();
}
void Graph3DWindowInitializer::setLayerCount(const int nc)
{
_layerCount = nc;
}
int Graph3DWindowInitializer::getLayerCount() const
{
return _layerCount;
}
}

@ -0,0 +1,127 @@
/**
*
* @file FITKGraph3DWindowInterface.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*
*/
#ifndef _FITKGraph3DWindowInterface_H_
#define _FITKGraph3DWindowInterface_H_
#include "FITKRenderWindowVTKAPI.h"
#include "FITK_Kernel/FITKAppFramework/FITKComponentInterface.h"
#include "FITK_Kernel/FITKCore/FITKVarientParams.h"
#include <functional>
#include <QHash>
//定义字符串
#define VTKRENDERLAYER "VTKRENDERLAYER"
#define BackGroundColorTop "BackGroundColorTop"
#define BackGroundColorButtom "BackGroundColorButtom"
namespace Comp
{
class FITKGraphInteractionStyle;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
class FITKRenderWindowVTKAPI Graph3DWindowInitializer : public Core::FITKVarientParams
{
public:
explicit Graph3DWindowInitializer() = default;
virtual ~Graph3DWindowInitializer() = default;
/**
* @brief
* @return FITKGraphInteractionStyle*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
virtual FITKGraphInteractionStyle* getStyle();
/**
* @brief
* @param[i] nc
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
void setLayerCount(const int nc );
/**
* @brief
* @return int
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
int getLayerCount() const;
private:
/**
* @brief
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
int _layerCount{ 3 };
};
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
class FITKRenderWindowVTKAPI FITKGraph3DWindowInterface :public AppFrame::FITKComponentInterface
{
public:
/**
* @brief Construct a new FITKGraph3DWindowInterface object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
FITKGraph3DWindowInterface() = default;
/**
* @brief Destroy the FITKGraph3DWindowComp object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
virtual ~FITKGraph3DWindowInterface();
/**
* @brief
* @param[i] indexPort
* @return QWidget*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
QWidget* getWidget(const int indexPort)override;
/**
* @brief
* @return QString
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
QString getComponentName();
/**
* @brief
* @param[i] key
* @param[i] info
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void addInitializer(int key, Graph3DWindowInitializer* info);
private:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
QHash<int, Graph3DWindowInitializer*> _initilizerList{};
};
}
#endif

@ -0,0 +1,915 @@
#include "ui_FITKGraph3DWindowVTK.h"
#include "FITKGraph3DWindowVTK.h"
#include "FITKGraphRender.h"
#include "FITKBoundaryActor.h"
#include "FITKGraphObjectVTK.h"
#include "FITKGraphOperator.h"
#include "FITKGraphInteractionStyle.h"
#include "FITKLegendScaleActor.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
#include "FITK_Kernel/FITKAppFramework/FITKMessage.h"
#include <vtkCamera.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkWindowToImageFilter.h>
#include <vtkPNGWriter.h>
#include <vtkLightCollection.h>
#include <vtkLight.h>
#include <vtkVersionMacros.h>
#if VTK_MAJOR_VERSION < 8
#include <vtkAutoInit.h>
#include <QVTKWidget2.h>
#include <vtkGenericOpenGLRenderWindow.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
#else
#include <QVTKOpenGLNativeWidget.h>
#endif
#include <QVBoxLayout>
#include <QDebug>
#include <QToolBar>
#include <QToolButton>
#include <QFile>
#include <QLabel>
#include <QPushButton>
#include <QMutexLocker>
#include <QFileDialog>
#include <QToolButton>
#include <QDebug>
namespace Comp
{
QMutex FITKGraph3DWindowVTK::_mutex;
FITKGraph3DWindowVTK::FITKGraph3DWindowVTK(Graph3DWindowInitializer* ini)
:_initializer(ini)
{
if (_initializer == nullptr) return;
m_ui = new Ui::FITKGraph3DWindowVTK();
m_ui->setupUi(this);
#if VTK_MAJOR_VERSION >= 9
QVTKOpenGLNativeWidget* vtkWidget = new QVTKOpenGLNativeWidget;
m_renderWindow = vtkWidget->renderWindow();
m_interactor = (QVTKInteractor*)m_renderWindow->GetInteractor();
m_vtkWidget = vtkWidget;
#elif VTK_MAJOR_VERSION == 8
QVTKOpenGLNativeWidget* vtkWidget = new QVTKOpenGLNativeWidget;
m_renderWindow = vtkWidget->GetRenderWindow();
m_interactor = (QVTKInteractor*)m_renderWindow->GetInteractor();
m_vtkWidget = vtkWidget;
#else
QVTKWidget2* vtkWidget = new QVTKWidget2;
m_renderWindow = m_vtkWidget->GetRenderWindow();
m_interactor = m_renderWindow->GetInteractor();
m_vtkWidget = vtkWidget;
#endif
QLayout* lay = layout();
if (!lay)
{
setLayout(new QVBoxLayout);
lay = layout();
}
lay->addWidget(m_vtkWidget);
//相机创建
m_camera = vtkCamera::New();
//关闭VTK自身的警告
m_renderWindow->GlobalWarningDisplayOff();
m_actorBound = new FITKBoundaryActor;
int renderNum = _initializer->getLayerCount();
//动态创建图层
for (int i = 0; i < renderNum;i++)
{
FITKGraphRender* renderer = new FITKGraphRender(this);
vtkRenderer* rendervtk = renderer->getRenderer();
if (rendervtk) rendervtk->SetLayer(i);
m_renders.insert(i, renderer);
}
//设置渲染图层数量
m_renderWindow->SetNumberOfLayers(renderNum);
//多Render协同同步统一设置camera
for(auto render:m_renders.values())
{
if (render == nullptr)continue;
render->getRenderer()->SetActiveCamera(m_camera);
}
this->init();
setFocusPolicy(Qt::ClickFocus);
////设置相机视角
//double focal[3] = { 0, 0, 0 }, pos[3] = { 1, 1, 1 }, viewUp[3] = { -1, -1, -1 };
//this->setView(focal, viewUp, pos);
//设置名称
this->setWindowTitle(QString("View Port-%1").arg(this->getGraphWidgetID()));
//渲染窗口工具栏初始化
_renderToolBarLayout = new QGridLayout(m_vtkWidget);
_renderToolBarLayout->setContentsMargins(0, 0, 0, 0);
_renderToolBar = new QToolBar(m_vtkWidget);
_renderToolBar->setContentsMargins(0, 0, 0, 0);
_renderToolBar->setIconSize(QSize(40, 40));
_renderIconToolBar = new QToolBar(m_vtkWidget);
_renderIconToolBar->setContentsMargins(0, 0, 0, 0);
//初始化action
initActions();
//默认不显示action
setIsShowActions(false);
}
void FITKGraph3DWindowVTK::showEvent(QShowEvent* event)
{
if (!m_initFlag)
{
m_initFlag = true;
// 设置相机视角 Added by ChengHaotian
double position[3]{ 1,1,1 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
// 初始化坐标轴 Added by ChengHaotian
if (m_axesWidget)
{
m_axesWidget->SetOutlineColor(0.9300, 0.5700, 0.1300);
m_axesWidget->SetViewport(0, 0, 0.2, 0.2);
m_axesWidget->SetEnabled(true);
m_axesWidget->InteractiveOff();
}
}
QWidget::showEvent(event);
}
FITKGraph3DWindowVTK::~FITKGraph3DWindowVTK()
{
if (m_vtkWidget)
{
// For VTK 7 Added by ChengHaotian
m_vtkWidget->setParent(nullptr);
m_vtkWidget->deleteLater();
m_vtkWidget = nullptr;
}
// 析构 Added by ChengHaotian
if (m_legendScaleActor)
{
m_legendScaleActor->Delete();
m_legendScaleActor = nullptr;
}
if (m_ui != nullptr) delete m_ui; m_ui = nullptr;
if (m_camera != nullptr)m_camera->Delete(); m_camera = nullptr;
if (m_axesWidget != nullptr)m_axesWidget->Delete(); m_axesWidget = nullptr;
if (m_interactionStyle != nullptr)m_interactionStyle->Delete(); m_interactionStyle = nullptr;
if (m_actorBound != nullptr) delete m_actorBound;
//渲染图层链表释放
for (auto re : m_renders.values())
{
if (re == nullptr)continue;
delete re;
re = nullptr;
}
m_renders.clear();
}
void FITKGraph3DWindowVTK::reRender()
{
m_renderWindow->Render();
}
void FITKGraph3DWindowVTK::setAxesEnable(bool state)
{
m_axesWidget->SetEnabled(state);
}
void FITKGraph3DWindowVTK::setView(double * focalPoint, double * viewUp, double * position)
{
//设置VTK中相机的视角
if (m_camera == nullptr) return;
m_camera->SetViewUp(viewUp);
m_camera->SetPosition(position);
m_camera->SetFocalPoint(focalPoint);
//多个Render的大小不同需要统一计算出合适相机视角
fitView();
}
bool FITKGraph3DWindowVTK::getView(double * pos, double * focual, double * viewup)
{
if (m_camera == nullptr)return false;
m_camera->GetPosition(pos);
m_camera->GetFocalPoint(focual);
m_camera->GetViewUp(viewup);
return true;
}
void FITKGraph3DWindowVTK::addObject(int index, FITKGraphObjectVTK * object, bool fitview)
{
FITKGraphRender* r = m_renders.value(index);
if (r == nullptr)return;
int graphCount = getGraphObjCount();
r->addObject(object);
// 添加控件。
int nWidget = object->getWidgetCount();
for (int i = 0; i < nWidget; i++)
{
vtkInteractorObserver* widget = object->getWidget(i);
if (!widget)
{
continue;
}
// 设置交互器。
if (m_renderWindow)
{
widget->SetInteractor(m_renderWindow->GetInteractor());
}
// 控件默认使用最下层渲染器,防止遮挡其他演员。
int index = 0;// _initializer->getLayerCount() - 1;
FITKGraphRender* render = m_renders[index];
if (render)
{
widget->SetCurrentRenderer(render->getRenderer());
}
// widget->SetCurrentRenderer(m_renderer);
}
//添加actor后不同Render的相机发生变化需要自适应
if (fitview && graphCount == 0)
{
this->fitView();
}
else
{
updateBoundray();
}
//else
//{
// this->reRender();
// /*if (graphCount == 0)
// {
// this->fitView();
// }*/
//}
}
void FITKGraph3DWindowVTK::clear()
{
for (auto render : m_renders.values())
{
if (render == nullptr)continue;
render->clear();
}
}
void FITKGraph3DWindowVTK::setBackground(double topValue[3], double bottomValue[3])
{
//设置所有图层的背景颜色
for (auto render : m_renders.values())
{
if (render == nullptr)continue;
render->getRenderer()->SetBackground(topValue);
render->getRenderer()->SetBackground2(bottomValue);
}
}
void FITKGraph3DWindowVTK::fitView()
{
double bound[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
bool emptyWindow = true;
for(auto render:m_renders.values())
{
if (render == nullptr)continue;
//获取渲染图层中的所有actor并计算大小
double length = render->getActorBounds(bound);
if (length > 0) emptyWindow = false;
}
if (emptyWindow)
{
bound[0] = bound[2] = bound[4] = -1;
bound[1] = bound[3] = bound[5] = 1;
}
//更新边界
if (m_actorBound != nullptr)
m_actorBound->updateBoundary(bound);
for(auto render: m_renders.values())
{
render->getRenderer()->ResetCamera(bound);
}
reRender();
}
void FITKGraph3DWindowVTK::updateBoundray()
{
double bound[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
bool emptyWindow = true;
for (auto render : m_renders.values())
{
if (render == nullptr)continue;
//获取渲染图层中的所有actor并计算大小
double length = render->getActorBounds(bound);
if (length > 0) emptyWindow = false;
}
if (emptyWindow)
{
bound[0] = bound[2] = bound[4] = -1;
bound[1] = bound[3] = bound[5] = 1;
}
//更新边界
if (m_actorBound != nullptr)
m_actorBound->updateBoundary(bound);
}
void FITKGraph3DWindowVTK::flush()
{
this->reRender();
}
void FITKGraph3DWindowVTK::setBackgroundColor(float* rgb1, float* rgb2 /*=nullptr*/)
{
const int n = this->getRenderCount();
for (int i = 0; i < n; ++i)
{
FITKGraphRender* r = this->getRenderer(i);
if (r) r->setBackgroundColor(rgb1, rgb2);
}
}
void FITKGraph3DWindowVTK::getBackgroundColor(float * rgb1, float * rgb2)
{
const int n = this->getRenderCount();
for (int i = 0; i < n; ++i)
{
FITKGraphRender* r = this->getRenderer(i);
if (r == nullptr)continue;
vtkRenderer* render = r->getRenderer();
if (render == nullptr)continue;
double* butColor = render->GetBackground2();
rgb1[0] = butColor[0];
rgb1[1] = butColor[1];
rgb1[2] = butColor[2];
if (rgb2 != nullptr) {
double* topColor = render->GetBackground();
rgb2[0] = topColor[0];
rgb2[1] = topColor[1];
rgb2[2] = topColor[2];
}
return;
}
}
void FITKGraph3DWindowVTK::setInteractionStyle(FITKGraphInteractionStyle* style)
{
if (style == nullptr)return;
m_interactionStyle = style;
//添加交互器
m_interactionStyle->setInteractor(m_interactor);
//添加事件对应的窗口
m_interactionStyle->setGraph3DWin(this);
//设置框选器对应的渲染图层,默认选择最表面的渲染图层
int lastRenderIndex = m_renders.size() - 1;
if (lastRenderIndex >= 0 && m_renders.value(lastRenderIndex) != nullptr)
{
m_interactionStyle->setAreaPickRenderer(m_renders.value(lastRenderIndex)->getRenderer());
}
}
FITKGraphRender* FITKGraph3DWindowVTK::getRenderer(int index)
{
//越界判断
if (index < 0 || index >= m_renders.size())return nullptr;
return m_renders.value(index);
}
int FITKGraph3DWindowVTK::getRenderCount()
{
if(m_renderWindow)
return m_renderWindow->GetNumberOfLayers();
return 0;
}
vtkRenderWindow* FITKGraph3DWindowVTK::getVTKRenderWindow()
{
return m_renderWindow;
}
vtkCamera* FITKGraph3DWindowVTK::getVTKCamera()
{
// 获取VTK相机。
return m_camera;
}
vtkRenderer* FITKGraph3DWindowVTK::getVTKRenderer(int index)
{
// 获取VTK渲染器。
if (index == -1)
{
int nRender = getRenderCount();
if (nRender == 0)
{
return nullptr;
}
FITKGraphRender* render = getRenderer(nRender - 1);
if (!render)
{
return nullptr;
}
return render->getRenderer();
}
else
{
FITKGraphRender* render = getRenderer(index);
if (!render)
{
return nullptr;
}
return render->getRenderer();
}
}
// void FITKGraph3DWindow::setAredPickerState(bool state)
// {
// if (m_interactionStyle == nullptr)return;
// m_interactionStyle->setAredPickerState(state);
// }
void FITKGraph3DWindowVTK::setParallelProjection(bool enable)
{
if (m_camera == nullptr) return;
m_camera->SetParallelProjection(enable);
this->reRender();
}
void FITKGraph3DWindowVTK::removeGraphObj(Core::FITKAbstractGraphObject* gobj)
{
FITKGraphObjectVTK* objvtk = dynamic_cast<FITKGraphObjectVTK*>(gobj);
if (objvtk == nullptr) return;
for (auto render : m_renders)
{
if(render == nullptr) continue;
render->removeObject(objvtk);
}
}
int FITKGraph3DWindowVTK::getGraphObjCount()
{
int c = 0;
for (auto render : m_renders)
{
if (render == nullptr) continue;
c += render->getGraphObjectCount();
}
return c;
}
bool FITKGraph3DWindowVTK::getGraphObjCenter(double* center)
{
double bound[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
bool emptyWindow = true;
for (auto render : m_renders.values())
{
if (render == nullptr)continue;
//获取渲染图层中的所有actor并计算大小
double length = render->getActorBounds(bound);
if (length > 0) emptyWindow = false;
}
if (emptyWindow)
{
bound[0] = bound[2] = bound[4] = -1;
bound[1] = bound[3] = bound[5] = 1;
}
center[0] = (bound[0] + bound[1]) / 2.0;
center[1] = (bound[2] + bound[3]) / 2.0;
center[2] = (bound[4] + bound[5]) / 2.0;
return true;
}
void FITKGraph3DWindowVTK::saveImage(const QString & image, int w, int h)
{
Q_UNUSED(w);
Q_UNUSED(h);
if (image.isEmpty())return;
vtkWindowToImageFilter* imageFilter = vtkWindowToImageFilter::New();
imageFilter->SetInput(m_renderWindow);
//设置缩放比例,比例需要根据窗口大小自己计算
//imageFilter->SetScale(2)
vtkPNGWriter* pngWriter = vtkPNGWriter::New();
pngWriter->SetFileName(image.toLocal8Bit());
pngWriter->SetInputConnection(imageFilter->GetOutputPort());
pngWriter->Write();
m_renderWindow->Finalize();
QString messageText = QString(tr("The specified viewports were printed to file \"%1\"").arg(image));
AppFrame::FITKMessageNormal(messageText);
}
void FITKGraph3DWindowVTK::showScaleLegend(bool visibility)
{
if (m_legendScaleActor)
{
m_legendScaleActor->SetVisibility(visibility);
}
}
void FITKGraph3DWindowVTK::addActionsToolBar(QList<QAction*> actions, QAction* beforeAction)
{
//互斥锁
QMutexLocker locer(&_mutex);
if (_renderToolBarLayout == nullptr)return;
//追加action
_renderToolBar->insertActions(beforeAction, actions);
setToolBarPos(_renderBarStyle);
//修改toolbar中所有的action背景颜色为透明
QList<QToolButton*> buttons = _renderToolBar->findChildren<QToolButton*>();
for (auto b : buttons){
if (b == nullptr)continue;
b->setStyleSheet("background: transparent;");
b->setToolTipDuration(1);
}
}
void FITKGraph3DWindowVTK::setToolBarPos(FITKGraphWinToolBarPos pos)
{
if (_renderToolBar == nullptr || _renderToolBarLayout == nullptr)return;
_renderBarStyle = pos;
switch (pos)
{
//1左顶
case FITKGraphWinToolBarPos::FITKLeftTop: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignLeft | Qt::AlignTop);
break;
}
//2左中
case FITKGraphWinToolBarPos::FITKLeftCenter: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignLeft | Qt::AlignVCenter);
break;
}
//3左底
case FITKGraphWinToolBarPos::FITKLeftBottom: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignLeft | Qt::AlignBottom);
break;
}
//4底部
case FITKGraphWinToolBarPos::FITKBottomCenter: {
_renderToolBar->setOrientation(Qt::Horizontal);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignHCenter | Qt::AlignBottom);
break;
}
//5右底
case FITKGraphWinToolBarPos::FITKRightBottom: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignRight | Qt::AlignBottom);
break;
}
//6右中
case FITKGraphWinToolBarPos::FITKRightCenter: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignRight | Qt::AlignVCenter);
break;
}
//7右上
case FITKGraphWinToolBarPos::FITKRightTop: {
_renderToolBar->setOrientation(Qt::Vertical);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignRight | Qt::AlignTop);
break;
}
//8顶部
case FITKGraphWinToolBarPos::FITKTopCenter: {
_renderToolBar->setOrientation(Qt::Horizontal);
_renderToolBarLayout->addWidget(_renderToolBar, 0, 0, Qt::AlignHCenter | Qt::AlignTop);
break;
}
}
}
void FITKGraph3DWindowVTK::initRenderIcon(const QPixmap& image, FITKGraphWinToolBarPos pos)
{
//互斥锁
QMutexLocker locker(&_mutex);
_renderIconToolBar->clear();
QLabel* label = new QLabel(m_vtkWidget);
label->setPixmap(image);
//将 QLabel 添加到布局中的指定位置
_renderIconToolBar->addWidget(label);
switch (pos)
{
//左侧顶部
case FITKGraphWinToolBarPos::FITKLeftTop: _renderToolBarLayout->addWidget(_renderIconToolBar, 0, 0, Qt::AlignLeft | Qt::AlignTop); break;
//左侧底部
case FITKGraphWinToolBarPos::FITKLeftBottom: _renderToolBarLayout->addWidget(_renderIconToolBar, 0, 0, Qt::AlignLeft | Qt::AlignBottom); break;
//右侧底部
case FITKGraphWinToolBarPos::FITKRightBottom: _renderToolBarLayout->addWidget(_renderIconToolBar, 0, 0, Qt::AlignRight | Qt::AlignBottom); break;
//右侧顶部
case FITKGraphWinToolBarPos::FITKRightTop: _renderToolBarLayout->addWidget(_renderIconToolBar, 0, 0, Qt::AlignRight | Qt::AlignTop); break;
}
}
QList<QAction*> FITKGraph3DWindowVTK::getActions()
{
if (_renderToolBar == nullptr)return QList<QAction*>();
return _renderToolBar->actions();
}
void FITKGraph3DWindowVTK::setIsShowActions(bool isShow)
{
if (isShow == false) {
_renderToolBar->hide();
}
else
{
_renderToolBar->show();
}
}
void FITKGraph3DWindowVTK::slotActionViewFrontEvent()
{
//前视角参数初始化
double position[3]{ 0,0,1 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewBackEvent()
{
//后视角参数初始化
double position[3]{ 0,0,-1 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewTopEvent()
{
//顶部视角参数初始化
double position[3]{ 0,1,0 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,0,-1 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewBottomEvent()
{
//底部视角参数初始化
double position[3]{ 0,-1,0 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,0,1 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewLeftEvent()
{
//左视角参数初始化
double position[3]{ -1,0,0 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewRightEvent()
{
//右视角参数初始化
double position[3]{ 1,0,0 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewIsoEvent()
{
//正视角参数初始化
double position[3]{ 1,1,1 };
double focalPoint[3]{ 0,0,0 };
double viewUp[3]{ 0,1,0 };
this->setView(focalPoint, viewUp, position);
}
void FITKGraph3DWindowVTK::slotActionViewPanEvent()
{
//自适应
fitView();
}
void FITKGraph3DWindowVTK::slotActionSaveImageEvent()
{
//保存图片文件获取
QString file = QFileDialog::getSaveFileName(this, tr("Save Image"), "", tr("Image (*.png)"));
if (file.isEmpty())return;
saveImage(file);
}
void FITKGraph3DWindowVTK::slotActionViewParallelEvent()
{
//平行投影
setParallelProjection(true);
}
void FITKGraph3DWindowVTK::slotActionViewPerspectiveEvent()
{
//正交投影
setParallelProjection(false);
}
void FITKGraph3DWindowVTK::init()
{
//追加边界actor
if (_initializer && _initializer->getLayerCount() > 0)
{
int index = _initializer->getLayerCount() - 1;
if (this->getRenderer(index) && this->getRenderer(index)->getRenderer())
{
vtkActor* actor = nullptr;
if (m_actorBound) actor = m_actorBound->getActor();
if(actor)
this->getRenderer(index)->getRenderer()->AddActor(actor);
}
}
// 创建比例尺(默认隐藏) Added by ChengHaotian
//@{
FITKGraphRender* fRender = this->getRenderer(0);
if (fRender)
{
vtkRenderer* renderer = fRender->getRenderer();
if (renderer)
{
m_legendScaleActor = FITKLegendScaleActor::New();
m_legendScaleActor->SetVisibility(false);
renderer->AddActor(m_legendScaleActor);
}
}
//@}
//坐标系创建
//设置坐标系所在的图层
vtkSmartPointer<vtkAxesActor> axesActor = vtkSmartPointer<vtkAxesActor>::New();
vtkOrientationMarkerWidget* axesWidget = vtkOrientationMarkerWidget::New();
axesWidget->SetInteractor(m_interactor);
axesWidget->SetOrientationMarker(axesActor);
axesWidget->SetDefaultRenderer(getRenderer(0)->getRenderer());
m_axesWidget = axesWidget;
// 初始化光照 Added by ChengHaotian
for (FITKGraphRender* fRender : m_renders)
{
if (!fRender)
{
continue;
}
vtkRenderer* renderer = fRender->getRenderer();
if (!renderer)
{
continue;
}
// Initialize light.
renderer->RemoveAllLights();
vtkLight* light1 = renderer->MakeLight();
light1->SetConeAngle(45.);
light1->SetLightTypeToCameraLight();
renderer->AddLight(light1);
}
//设置自定义交互器
if (_initializer == nullptr) return;
this->setInteractionStyle(_initializer->getStyle());
}
void FITKGraph3DWindowVTK::initActions()
{
QList<QAction*> actions = {};
QAction* action = nullptr;
//前视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewFront");
action->setIcon(QIcon(":FITKIcons/icoR_viewFront.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewFrontEvent()));
actions.append(action);
//后视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewBack");
action->setIcon(QIcon(":FITKIcons/icoR_viewBack.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewBackEvent()));
actions.append(action);
//顶部视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewTop");
action->setIcon(QIcon(":FITKIcons/icoR_viewTop.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewTopEvent()));
actions.append(action);
//底部视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewBottom");
action->setIcon(QIcon(":FITKIcons/icoR_viewBottom.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewBottomEvent()));
actions.append(action);
//左侧视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewLeft");
action->setIcon(QIcon(":FITKIcons/icoR_viewLeft.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewLeftEvent()));
actions.append(action);
//右侧视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewRight");
action->setIcon(QIcon(":FITKIcons/icoR_viewRight.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewRightEvent()));
actions.append(action);
//正视角按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewIso");
action->setIcon(QIcon(":FITKIcons/icoR_viewIso.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewIsoEvent()));
actions.append(action);
//自适应按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewAuto");
action->setIcon(QIcon(":FITKIcons/icoR_autofit.png"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewPanEvent()));
actions.append(action);
//保存图片按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionSaveImage");
action->setIcon(QIcon(":FITKIcons/icoR_saveimage.png"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionSaveImageEvent()));
actions.append(action);
//平行投影按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewParallel");
action->setIcon(QIcon(":FITKIcons/icoR_viewParallel.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewParallelEvent()));
actions.append(action);
//正交投影按钮添加
action = new QAction(m_vtkWidget);
action->setObjectName("actionViewPerspective");
action->setIcon(QIcon(":FITKIcons/icoR_viewPerspective.svg"));
connect(action, SIGNAL(triggered()), this, SLOT(slotActionViewPerspectiveEvent()));
actions.append(action);
addActionsToolBar(actions);
}
void FITKGraph3DWindowVTK::setUserInformation(QVariant info)
{
m_userInfo = info;
}
QVariant FITKGraph3DWindowVTK::getUserInformation()
{
return m_userInfo;
}
}

@ -0,0 +1,561 @@
/**
*
* @file FITKGraph3DWindow.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*
*/
#ifndef _FITKGraph3D_H_VTK_
#define _FITKGraph3D_H_VTK_
#include "FITKRenderWindowVTKAPI.h"
#include "FITKGraph3DWindowInterface.h"
#include "FITK_Kernel/FITKCore/FITKAbstractGraphWidget.h"
#include <QWidget>
#include <QMutex>
#include <QVariant>
class vtkRenderWindow;
class vtkCamera;
class vtkRenderWindowInteractor;
class vtkOrientationMarkerWidget;
class vtkActor;
class vtkRenderer;
class QGridLayout;
class QToolBar;
class FITKLegendScaleActor;
namespace Ui
{
class FITKGraph3DWindowVTK;
}
namespace Comp
{
class FITKGraphRender;
class FITKGraphObjectVTK;
class FITKGraphInteractionStyle;
class FITKBoundaryActor;
class Graph3DWindowInitializer;
/**
* @brief toolbar
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-05
*/
enum class FITKGraphWinToolBarPos
{
FITKLeftTop = 1, ///1左侧顶部
FITKLeftCenter, ///2左侧中部
FITKLeftBottom, ///3左侧底部
FITKBottomCenter, ///4底部中间
FITKRightBottom, ///5右侧底部
FITKRightCenter, ///6右侧中部
FITKRightTop, ///7右侧顶部
FITKTopCenter, ///8顶部中间
};
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
class FITKRenderWindowVTKAPI FITKGraph3DWindowVTK
: public Core::FITKAbstractGraph3DWidget
{
Q_OBJECT;
public:
/**
* @brief Construct a new FITKGraph3DWindow object
* @param[i] info
* @param[i] gInterface
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraph3DWindowVTK(Graph3DWindowInitializer * initializer);
/**
* @brief Destroy the FITKGraph3DWindow object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
virtual ~FITKGraph3DWindowVTK();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void reRender();
/**
* @brief
* @param[i] state turefalse
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void setAxesEnable(bool state);
/**
* @brief
* @param[i] focalPoint
* @param[i] viewUp
* @param[i] position
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void setView(double* focalPoint, double* viewUp, double* position) override;
/**
* @brief
* @param[o] pos
* @param[o] focual
* @param[o] viewup
* @return true
* @return false
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-08
*/
bool getView(double* pos, double* focual, double* viewup) override;
/**
* @brief
* @param[i] index
* @param[i] object
* @param[i] fitview ()
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void addObject(int index, FITKGraphObjectVTK* object, bool fitview = true);
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-28
*/
void clear() override;
/**
* @brief
* @param[i] topValue
* @param[i] bottomValue
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void setBackground(double topValue[3],double bottomValue[3]);
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void fitView() override;
/**
* @brief
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
virtual void flush() override;
/**
* @brief
* @param[i] rgb1
* @param[i] rgb2
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
virtual void setBackgroundColor(float* rgb1, float* rgb2 =nullptr) override;
/**
* @brief
* @param[o] rgb1
* @param[o] rgb2
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
virtual void getBackgroundColor(float* rgb1, float* rgb2 = nullptr) override;
/**
* @brief
* @param[i] index
* @return FITKGraphRender*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
FITKGraphRender* getRenderer(int index);
/**
* @brief
* @return int
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
int getRenderCount();
/**
* @brief vtk
* @return int
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
vtkRenderWindow* getVTKRenderWindow();
/**
* @brief
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
vtkCamera* getVTKCamera();
/**
* @brief
* @return -1[]
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
vtkRenderer* getVTKRenderer(int index = -1);
/**
* @brief
* @param[i] enable
* @author BaGuijun (baguijun@163.com)
* @date 2024-04-08
*/
virtual void setParallelProjection(bool on = true) override;
/**
* @brief
* @param[i] FITKAbstractGraphObject
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-11
*/
void removeGraphObj(Core::FITKAbstractGraphObject* gobj) override;
/**
* @brief
* @return int
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-26
*/
int getGraphObjCount();
/**
* @brief
* @param[o] center[3]
* @return bool
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-26
*/
bool getGraphObjCenter(double* center);
/**
* @brief []
* @param info
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-11
*/
template<class T>
void setUserInformation(T info)
{
m_userInfo = QVariant::fromValue(info);
}
/**
* @brief []
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-11
*/
template<class T>
T getUserInformationAs()
{
return m_userInfo.value<T>();
}
/**
* @brief
* @param info
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-11
*/
void setUserInformation(QVariant info);
/**
* @brief
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-11
*/
QVariant getUserInformation();
/**
* @brief
* @param[i] image
* @param[i] w
* @param[i] h
* @author BaGuijun (baguijun@163.com)
* @date 2024-05-28
*/
virtual void saveImage(const QString& image, int w = -1, int h = -1)override;
/**
* @brief /
* @param visibility
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-29
*/
void showScaleLegend(bool visibility);
/**
* @brief action
* @param[i] actions action
* @param[i] beforeActions action
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-04
*/
void addActionsToolBar(QList<QAction*> actions, QAction* beforeAction = nullptr);
/**
* @brief
* @param[i] pos
* 1 2 3 4 5 6 7 8
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-04
*/
void setToolBarPos(FITKGraphWinToolBarPos pos);
/**
* @brief ()
*
* @param[i] iconPath
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-05
*/
void initRenderIcon(const QPixmap& image, FITKGraphWinToolBarPos pos = FITKGraphWinToolBarPos::FITKRightTop);
/**
* @brief actions
* @return QList<QAction*> actio
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
QList<QAction*> getActions();
/**
* @brief action
* @param[i] isShow
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
void setIsShowActions(bool isShow);
public slots:
;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewFrontEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewBackEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewTopEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewBottomEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewLeftEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewRightEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewIsoEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewPanEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionSaveImageEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewParallelEvent();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-13
*/
virtual void slotActionViewPerspectiveEvent();
protected:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
virtual void init();
/**
* @brief action
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
virtual void initActions();
/**
* @brief
* @param[i] style
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setInteractionStyle(FITKGraphInteractionStyle* style);
/**
* @brief
* @param event
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-28
*/
virtual void showEvent(QShowEvent* event) override;
/**
* @brief
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-07-11
*/
void updateBoundray();
protected:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
Graph3DWindowInitializer* _initializer{};
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
Ui::FITKGraph3DWindowVTK* m_ui = nullptr;
/**
* @brief VTK
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
QWidget* m_vtkWidget = nullptr;
/**
* @brief
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-28
*/
FITKLegendScaleActor* m_legendScaleActor{ nullptr };
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
vtkRenderWindowInteractor* m_interactor = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
//#if VTK_MAJOR_VERSION >= 8
vtkRenderWindow* m_renderWindow = nullptr;
//#else
// vtkGenericOpenGLRenderWindow* m_renderWindow = nullptr;
//#endif
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
vtkCamera* m_camera = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
vtkOrientationMarkerWidget* m_axesWidget = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
QHash<int, FITKGraphRender*> m_renders = {};
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphInteractionStyle* m_interactionStyle = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKBoundaryActor* m_actorBound = nullptr;
/**
* @brief
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-11
*/
QVariant m_userInfo;
/**
* @brief VTKshowEvent
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-29
*/
bool m_initFlag = false;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
QGridLayout* _renderToolBarLayout = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
QToolBar* _renderToolBar = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
QToolBar* _renderIconToolBar = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphWinToolBarPos _renderBarStyle = FITKGraphWinToolBarPos::FITKLeftTop;
private:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-06-06
*/
static QMutex _mutex;
};
}
#endif

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FITKGraph3DWindowVTK</class>
<widget class="QWidget" name="FITKGraph3DWindowVTK">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>498</width>
<height>387</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,148 @@
#include "FITKGraphAreaPicker.h"
#include "FITKGraphInteractionStyle.h"
#include <vtkRenderer.h>
#include <vtkActor2D.h>
#include <vtkPoints.h>
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkProperty2D.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
namespace Comp
{
FITKGraphAreaPicker::FITKGraphAreaPicker(FITKGraphInteractionStyle * style)
{
m_style = style;
}
FITKGraphAreaPicker::~FITKGraphAreaPicker()
{
}
void FITKGraphAreaPicker::setLeftButtonDownPos(int * pos)
{
//记录鼠标左键按下位置
m_startPos[0] = pos[0];
m_startPos[1] = pos[1];
}
void FITKGraphAreaPicker::setPickerRender(vtkRenderer* render)
{
if (render == nullptr)return;
m_render = render;
//初始化
initRectangle();
if (m_pickActor != nullptr)
m_render->AddActor(m_pickActor);
}
void FITKGraphAreaPicker::enable(bool state)
{
m_pickActor->SetVisibility(state);
//初始化设置
if (state)
{
vtkPoints* points = m_pickData->GetPoints();
points->SetNumberOfPoints(0);
points->InsertPoint(0, 0, 0, 0);
points->InsertPoint(1, 0, 0, 0);
points->InsertPoint(2, 0, 0, 0);
points->InsertPoint(3, 0, 0, 0);
points->Modified();
m_pickData->Modified();
m_pickActor->GetMapper()->Update();
}
//刷新渲染窗口
vtkRenderWindow* rw = m_render->GetRenderWindow();
if (rw != nullptr) rw->Render();
}
bool FITKGraphAreaPicker::isEnable()
{
if (!m_pickActor) return false;
return m_pickActor->GetVisibility();
}
void FITKGraphAreaPicker::drawRectangle()
{
//框选选框绘制
if (!isEnable()) return;
if (m_style == nullptr || m_style->getInteractor() == nullptr)return;
m_style->getInteractor()->GetEventPosition(m_endPos);
//刷新框选选框
updateRectangle();
}
void FITKGraphAreaPicker::pick()
{
if (m_style)
m_style->areaPick(m_startPos, m_endPos);
}
void FITKGraphAreaPicker::initRectangle()
{
//框选选框管线绘制
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
for (int i = 0; i < 4; i++){
points->InsertNextPoint(i, i, i);
}
vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();
for (int i = 0; i < 4; i++)
{
//绘制长方体框选选框
vtkIdType line[2] = { i,(i + 1) % 4 };
cells->InsertNextCell(2, line);
}
m_pickData = vtkSmartPointer<vtkPolyData>::New();
m_pickData->SetPoints(points);
m_pickData->SetLines(cells);
vtkSmartPointer<vtkPolyDataMapper2D> mapper = vtkSmartPointer<vtkPolyDataMapper2D>::New();
mapper->SetInputData(m_pickData);
m_pickActor = vtkSmartPointer<vtkActor2D>::New();
m_pickActor->SetMapper(mapper);
//设置选框颜色
m_pickActor->GetProperty()->SetColor(1, 1, 1);
//设置选框宽度
m_pickActor->GetProperty()->SetLineWidth(2);
}
void FITKGraphAreaPicker::updateRectangle()
{
if (m_render == nullptr) return;
vtkPoints* points = m_pickData->GetPoints();
points->SetNumberOfPoints(0);
//坐标位置更新
const int xmax = m_startPos[0] > m_endPos[0] ? m_startPos[0] : m_endPos[0];
const int xmin = m_startPos[0] + m_endPos[0] - xmax;
const int ymax = m_startPos[1] > m_endPos[1] ? m_startPos[1] : m_endPos[1];
const int ymin = m_startPos[1] + m_endPos[1] - ymax;
if (xmax - xmin < 2 || ymax - ymin < 2) return;
points->InsertPoint(0, xmax, ymax, 0);
points->InsertPoint(1, xmin, ymax, 0);
points->InsertPoint(2, xmin, ymin, 0);
points->InsertPoint(3, xmax, ymin, 0);
//更新渲染
points->Modified();
m_pickData->Modified();
m_pickActor->GetMapper()->Update();
vtkRenderWindow* rw = m_render->GetRenderWindow();
if (rw != nullptr)
rw->Render();
}
}

@ -0,0 +1,140 @@
/**
*
* @file FITKGraphAreaPicker.h
* @brief VTK
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*
*/
#ifndef _FITKGraphAreaPicker_H_
#define _FITKGraphAreaPicker_H_
#include <vtkSmartPointer.h>
#include "FITKRenderWindowVTKAPI.h"
#include <vtkPolyData.h>
#include <vtkActor2D.h>
class vtkRenderer;
// class vtkActor2D;
// class vtkPolyData;
namespace Comp
{
class FITKGraphInteractionStyle;
/**
* @brief VTK
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
class FITKRenderWindowVTKAPI FITKGraphAreaPicker
{
public:
/**
* @brief Construct a new FITKGraphAreaPicker object
* @param[i] style
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
FITKGraphAreaPicker(FITKGraphInteractionStyle* style);
/**
* @brief Destroy the FITKGraphAreaPicker object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
~FITKGraphAreaPicker();
/**
* @brief
* @param[i] pos
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setLeftButtonDownPos(int* pos);
/**
* @brief
* @param[i] render
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setPickerRender(vtkRenderer* render);
/**
* @brief
* @param[i] state
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void enable(bool state = true);
/**
* @brief
* @return bool
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
bool isEnable();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void drawRectangle();
/**
* @brief
* @param[i] state
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void pick();
private:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void initRectangle();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void updateRectangle();
private:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
FITKGraphInteractionStyle* m_style = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
vtkRenderer* m_render = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
int m_startPos[2] = { 0,0 };
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
int m_endPos[2] = { 0,0 };
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
vtkSmartPointer<vtkPolyData> m_pickData = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
vtkSmartPointer<vtkActor2D> m_pickActor = nullptr;
};
}
#endif

@ -0,0 +1,148 @@
#include "FITKGraphInteractionStyle.h"
#include "FITKGraphAreaPicker.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKAppFramework/FITKKeyMouseStates.h"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"
#include <vtkRenderWindowInteractor.h>
namespace Comp
{
FITKGraphInteractionStyle* FITKGraphInteractionStyle::New()
{
return new FITKGraphInteractionStyle();
}
void FITKGraphInteractionStyle::setGraph3DWin(FITKGraph3DWindowVTK * graphWin)
{
m_graph3dWin = graphWin;
}
void FITKGraphInteractionStyle::setInteractor(vtkRenderWindowInteractor * interactor)
{
if (interactor == nullptr)return;
//将渲染窗口的交互器设置为该类
interactor->SetInteractorStyle(this);
}
void FITKGraphInteractionStyle::setAreaPickRenderer(vtkRenderer * renderer)
{
if (renderer == nullptr || m_areaPick == nullptr)return;
m_areaPick->setPickerRender(renderer);
}
vtkRenderWindowInteractor * FITKGraphInteractionStyle::getInteractor()
{
return this->Interactor;
}
void FITKGraphInteractionStyle::setAredPickerState(bool state)
{
m_areaPick->enable(state);
}
void FITKGraphInteractionStyle::areaPick(int* startPos, int* endPos)
{
}
FITKGraphInteractionStyle::FITKGraphInteractionStyle()
{
m_areaPick = new FITKGraphAreaPicker(this);
}
FITKGraphInteractionStyle::~FITKGraphInteractionStyle()
{
if (m_areaPick != nullptr) delete m_areaPick; m_areaPick = nullptr;
}
void FITKGraphInteractionStyle::OnLeftButtonDown()
{
//使用VTK自身的鼠标左键按下事件
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
vtkInteractorStyleRubberBandPick::OnLeftButtonDown();
if (m_areaPick != nullptr && m_areaPick->isEnable())
{
m_areaPick->setLeftButtonDownPos(m_leftButtonDowmPos);
}
}
void FITKGraphInteractionStyle::OnLeftButtonUp()
{
//使用VTK自身的鼠标左键抬起事件
this->Interactor->GetEventPosition(m_leftButtonUpPos);
vtkInteractorStyleRubberBandPick::OnLeftButtonUp();
if (m_areaPick != nullptr /*&& isMouseMoved()*/)
{
m_areaPick->enable(false);
}
}
void FITKGraphInteractionStyle::OnMiddleButtonDown()
{
//使用VTK自身的鼠标中键按下事件
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
vtkInteractorStyleRubberBandPick::OnMiddleButtonDown();
}
void FITKGraphInteractionStyle::OnMiddleButtonUp()
{
//使用VTK自身的鼠标中键抬起事件
this->Interactor->GetEventPosition(m_leftButtonUpPos);
vtkInteractorStyleRubberBandPick::OnMiddleButtonUp();
}
void FITKGraphInteractionStyle::OnMouseMove()
{
//使用VTK自身的鼠标移动事件
this->Interactor->GetEventPosition(m_leftButtonUpPos);
vtkInteractorStyleRubberBandPick::OnMouseMove();
//判断是否移动
bool isMove = this->isMouseMoved();
//判断鼠标左键是否按下
bool isMouseState = FITKAPP->getGlobalData()->getKeyMouseStates()->mousePressed(Qt::LeftButton);
if (m_areaPick != nullptr && isMove && isMouseState)
{
//重新绘制框选选框
m_areaPick->drawRectangle();
}
}
void FITKGraphInteractionStyle::OnMouseWheelForward()
{
//调用VTK自身的鼠标滑轮向前事件
vtkInteractorStyleRubberBandPick::OnMouseWheelForward();
}
void FITKGraphInteractionStyle::OnMouseWheelBackward()
{
//调用VTK自身的鼠标滑轮向后事件
vtkInteractorStyleRubberBandPick::OnMouseWheelBackward();
}
void FITKGraphInteractionStyle::OnRightButtonDown()
{
//调用VTK自身的鼠标右键按下事件
this->Interactor->GetEventPosition(m_leftButtonDowmPos);
vtkInteractorStyleRubberBandPick::OnRightButtonDown();
}
void FITKGraphInteractionStyle::OnRightButtonUp()
{
//调用VTK自身的鼠标右键抬起事件
this->Interactor->GetEventPosition(m_leftButtonUpPos);
vtkInteractorStyleRubberBandPick::OnRightButtonUp();
}
bool FITKGraphInteractionStyle::isMouseMoved()
{
int dx = m_leftButtonUpPos[0] - m_leftButtonDowmPos[0];
int dy = m_leftButtonUpPos[1] - m_leftButtonDowmPos[1];
return dx * dx + dy * dy > 50;
}
}

@ -0,0 +1,198 @@
/**
*
* @file FITKGraphInteractionStyle.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*
*/
#ifndef _FITKGraphInteractionStyle_H_
#define _FITKGraphInteractionStyle_H_
#include "FITKRenderWindowVTKAPI.h"
#include <QObject>
#include <vtkInteractorStyleRubberBandPick.h>
namespace Comp
{
class FITKGraphOperator;
class FITKGraph3DWindowVTK;
class FITKGraphAreaPicker;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
class FITKRenderWindowVTKAPI FITKGraphInteractionStyle :public QObject, public vtkInteractorStyleRubberBandPick
{
Q_OBJECT
public:
/**
* @brief
* @return FITKGraphInteractionStyle*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
static FITKGraphInteractionStyle* New();
vtkTypeMacro(FITKGraphInteractionStyle, vtkInteractorStyleRubberBandPick);
/**
* @brief
* @param[i] graphWin
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setGraph3DWin(FITKGraph3DWindowVTK* graphWin);
/**
* @brief
* @param[i] interactor My Param doc
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setInteractor(vtkRenderWindowInteractor* interactor);
/**
* @brief
* @param[i] renderer
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setAreaPickRenderer(vtkRenderer* renderer);
/**
* @brief VTK
* @return vtkRenderWindowInteractor*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
vtkRenderWindowInteractor* getInteractor();
/**
* @brief
* @param[i] state true
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
void setAredPickerState(bool state);
/**
* @brief
* @param[i] startPos
* @param[i] endPos
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-04-17
*/
virtual void areaPick(int* startPos, int* endPos);
protected:
/**
* @brief Construct a new FITKGraphInteractionStyle object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphInteractionStyle();
/**
* @brief Destroy the FITKGraphInteractionStyle object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual ~FITKGraphInteractionStyle();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnLeftButtonDown() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnLeftButtonUp() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMiddleButtonDown() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMiddleButtonUp() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseMove() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseWheelForward() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnMouseWheelBackward() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnRightButtonDown() override;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
virtual void OnRightButtonUp() override;
/**
* @brief
* @return true
* @return false
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
bool isMouseMoved();
protected:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraph3DWindowVTK* m_graph3dWin = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraphOperator* m_operactor = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
int m_leftButtonDowmPos[2] = { 0,0 };
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
int m_leftButtonUpPos[2] = { 0,0 };
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
FITKGraphAreaPicker* m_areaPick = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-19
*/
// bool m_pickerState = true;
};
}
#endif

@ -0,0 +1,192 @@
#include "FITKGraphObjectVTK.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataObject.h"
// VTK
#include <vtkProp.h>
#include <vtkInteractorObserver.h>
#include <vtkDataSetMapper.h>
#include <vtkAlgorithmOutput.h>
namespace Comp
{
FITKGraphObjectVTK::FITKGraphObjectVTK(Core::FITKAbstractDataObject * dataObject):
Core::FITKAbstractGraphObject(dataObject)
{
}
FITKGraphObjectVTK::FITKGraphObjectVTK() :
Core::FITKAbstractGraphObject(nullptr)
{
}
FITKGraphObjectVTK::~FITKGraphObjectVTK()
{
//VTK相关参数释放
this->removeFromGraphWidget();
for (auto actor : m_actorList)
{
if (actor == nullptr)return;
actor->Delete();
actor = nullptr;
}
m_actorList.clear();
// 析构控件。
for (vtkInteractorObserver* widget : m_widgetList)
{
if (widget)
{
widget->Off();
widget->Delete();
}
}
m_widgetList.clear();
}
void FITKGraphObjectVTK::addActor(vtkProp * actor)
{
//添加渲染对象
if (actor == nullptr || m_actorList.contains(actor))return;
m_actorList.append(actor);
}
vtkProp * FITKGraphObjectVTK::getActor(int index)
{
//越界判断
if (index < 0 || index >= m_actorList.size())return nullptr;
//根据索引值获取渲染对象
return m_actorList.at(index);
}
int FITKGraphObjectVTK::getActorCount()
{
//获取渲染对象数量
return m_actorList.size();
}
void FITKGraphObjectVTK::addWidget(vtkInteractorObserver* widget)
{
if (!widget || m_widgetList.contains(widget))
{
return;
}
m_widgetList.push_back(widget);
}
vtkInteractorObserver* FITKGraphObjectVTK::getWidget(int index)
{
// 异常处理。
if (index < 0 || index >= m_widgetList.count())
{
return nullptr;
}
return m_widgetList[index];
}
int FITKGraphObjectVTK::getWidgetCount()
{
return m_widgetList.count();
}
bool FITKGraphObjectVTK::hasFixedBounds()
{
return m_hasFixedBounds;
}
bool FITKGraphObjectVTK::getFixedBounds(double* bounds)
{
// 判断可视化对象外边界是否固定大小。
if (!m_hasFixedBounds)
{
return false;
}
// 获取边界。
double bds[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
bool hasBds = getActorsBounds(m_actorList, bds);
for (int i = 0; i < 6; i++)
{
bounds[i] = bds[i];
}
return hasBds;
}
bool FITKGraphObjectVTK::getActorBounds(vtkProp* prop, double* bounds, bool ignoreVisibility)
{
// 异常处理。
if (!prop)
{
return false;
}
if (!prop->GetVisibility() && !ignoreVisibility)
{
return false;
}
if (!prop->GetUseBounds())
{
return false;
}
// 获取使用包围盒的可视化对象尺寸。
double* bds = prop->GetBounds();
if (!bds)
{
return false;
}
for (int i = 0; i < 6; i++)
{
bounds[i] = bds[i];
}
return true;
}
bool FITKGraphObjectVTK::getActorsBounds(QList<vtkProp*> props, double* bounds)
{
bool hasBds = false;
double bdsAll[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
for (vtkProp* prop : props)
{
double bds[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
// 不存在包围盒则跳过合并。
bool flag = getActorBounds(prop, bds);
if (!flag)
{
continue;
}
// 合并包围盒尺寸。
if (bds[0] < bdsAll[0]) bdsAll[0] = bds[0];
if (bds[1] > bdsAll[1]) bdsAll[1] = bds[1];
if (bds[2] < bdsAll[2]) bdsAll[2] = bds[2];
if (bds[3] > bdsAll[3]) bdsAll[3] = bds[3];
if (bds[4] < bdsAll[4]) bdsAll[4] = bds[4];
if (bds[5] > bdsAll[5]) bdsAll[5] = bds[5];
hasBds = true;
}
for (int i = 0; i < 6; i++)
{
bounds[i] = bdsAll[i];
}
return hasBds;
}
}

@ -0,0 +1,208 @@
/**
*
* @file FITKGraphObject.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*
*/
#ifndef _FITKGraphObject_H_VTK_
#define _FITKGraphObject_H_VTK_
#include "FITKRenderWindowVTKAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractGraphObject.h"
#include "FITK_Kernel/FITKCore/FITKCoreMacros.h"
#include <QObject>
class vtkProp;
class vtkInteractorObserver;
class vtkDataSetMapper;
class vtkAlgorithmOutput;
namespace Core
{
class FITKAbstractDataObject;
}
#ifndef FITKGraphRegist
#define FITKGraphRegist( \
thisClass, superclass) \
protected: \
const char* GetClassName() const { return #thisClass; } \
public: \
typedef superclass Superclass; \
static thisClass* SafeDownCast(Comp::FITKGraphObjectVTK* o) \
{ \
return dynamic_cast<thisClass*>(o); \
}
#endif // !FITKGraphRegist
namespace Comp
{
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
class FITKRenderWindowVTKAPI FITKGraphObjectVTK :
public Core::FITKAbstractGraphObject
{
FITKCLASS(Comp, FITKGraphObjectVTK);
Q_OBJECT
public:
/**
* @brief Construct a new FITKGraphObject object
* @param[i] dataObject
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-25
*/
explicit FITKGraphObjectVTK(Core::FITKAbstractDataObject* dataObject);
explicit FITKGraphObjectVTK();
/**
* @brief Destroy the FITKActor object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
virtual ~FITKGraphObjectVTK();
/**
* @brief VTK
* @param[i] actor vtkProp
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void addActor(vtkProp* actor);
/**
* @brief VTK
* @param[i] index
* @return vtkProp*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
vtkProp* getActor(int index);
/**
* @brief VTK
* @return int
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
int getActorCount();
/**
* @brief
* @param widget
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-07-05
*/
void addWidget(vtkInteractorObserver* widget);
/**
* @brief
* @param index
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-07-05
*/
vtkInteractorObserver* getWidget(int index);
/**
* @brief
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-07-05
*/
int getWidgetCount();
/**
* @brief
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
bool hasFixedBounds();
/**
* @brief []
* @param
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
virtual bool getFixedBounds(double* bounds);
/**
* @brief
* @param prop
* @param bounds
* @param ignoreVisibility
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
bool getActorBounds(vtkProp* prop, double* bounds, bool ignoreVisibility = false);
/**
* @brief
* @param props
* @param bounds
* @return
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
bool getActorsBounds(QList<vtkProp*> props, double* bounds);
/**
* @brief
* @return Core::FITKAbstractDataObject*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-22
*/
// Core::FITKAbstractDataObject* getDataObject();
// signals:
// /**
// * @brief 移除渲染对象
// * @param[i] object 渲染对象
// * @author BaGuijun (baguijun@163.com)
// * @date 2024-03-14
// */
// void removeObjectSig(FITKGraphObject* object);
// /**
// * @brief 刷新渲染对象
// * @param[i] object 渲染对象
// * @author BaGuijun (baguijun@163.com)
// * @date 2024-03-14
// */
// void reRenderObjectSig(FITKGraphObject* object);
// /**
// * @brief 强制刷新
// * @author BaGuijun (baguijun@163.com)
// * @date 2024-03-14
// */
// void reRenderSig();
protected:
/**
* @brief VTK
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-12
*/
QList<vtkProp*> m_actorList;
/**
* @brief VTK
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-07-05
*/
QList<vtkInteractorObserver*> m_widgetList;
/**
* @brief
* @author ChengHaotian (yeguangbaozi@foxmail.com)
* @date 2024-05-17
*/
bool m_hasFixedBounds = true;
};
}
#endif

@ -0,0 +1,27 @@
#include "FITKGraphOperator.h"
namespace Comp
{
FITKGraphOperator::FITKGraphOperator()
{
}
FITKGraphOperator::~FITKGraphOperator()
{
}
void FITKGraphOperator::setGraph3DWindow(FITKGraph3DWindowVTK* w)
{
//设置三维渲染窗口
m_graph3DWindow = w;
}
Comp::FITKGraph3DWindowVTK* FITKGraphOperator::getGraph3DWindow()
{
//返回渲染窗口
return m_graph3DWindow;
}
}

@ -0,0 +1,63 @@
/**
*
* @file FITKGraphOperator.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*
*/
#ifndef _FITKGraphOperator_H_
#define _FITKGraphOperator_H_
#include "FITK_Kernel/FITKCore/FITKAbstractOperator.h"
#include "FITKRenderWindowVTKAPI.h"
namespace Comp
{
class FITKGraphObject;
class FITKGraph3DWindowVTK;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
class FITKRenderWindowVTKAPI FITKGraphOperator :public Core::FITKAbstractOperator
{
public:
/**
* @brief Construct a new FITKGraphOperator object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
FITKGraphOperator();
/**
* @brief Destroy the FITKGraphOperator object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
virtual ~FITKGraphOperator() = 0;
/**
* @brief
* @param[i] w
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
void setGraph3DWindow(FITKGraph3DWindowVTK* w);
/**
* @brief
* @return FITKGraph3DWindow*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraph3DWindowVTK* getGraph3DWindow();
protected:
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-18
*/
FITKGraph3DWindowVTK* m_graph3DWindow = nullptr;
};
}
#endif

@ -0,0 +1,179 @@
#include "FITKGraphRender.h"
#include "FITKGraphObjectVTK.h"
#include "FITKGraph3DWindowVTK.h"
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkInteractorObserver.h>
namespace Comp
{
FITKGraphRender::FITKGraphRender(FITKGraph3DWindowVTK * gw/*, int type*/)
:_graphWidget(gw)
{
if (_graphWidget == nullptr) return;
//创建渲染对象管理类
m_objectManager = new Core::FITKGraphObjManager();
//渲染图层初始化
m_renderer = vtkRenderer::New();
m_renderer->SetBackground(1.0, 1.0, 1.0);
m_renderer->SetBackground2(0.5, 0.8, 0.9);
m_renderer->SetGradientBackground(true);
m_renderer->InteractiveOn();
//三维渲染窗口中添加渲染图层
auto renderWin = _graphWidget->getVTKRenderWindow();
if (renderWin != nullptr)
renderWin->AddRenderer(m_renderer);
}
FITKGraphRender::~FITKGraphRender()
{
//渲染图层中的actor移除
this->clear();
//释放管理类
if (m_objectManager)
delete m_objectManager;
if (m_renderer != nullptr)
m_renderer->Delete();
}
void FITKGraphRender::addObject(FITKGraphObjectVTK * object)
{
//渲染图层添加渲染对象
if (object == nullptr)return;
//对象管理
m_objectManager->appendGraphObj(object);
object->setGraphWidget(_graphWidget);
const int nact = object->getActorCount();
if (m_renderer == nullptr) return;
//显示层移除
for (int i = 0; i < nact; i++)
{
auto act = object->getActor(i);
if(act == nullptr) continue;
m_renderer->AddActor(act);
}
}
void FITKGraphRender::removeObject(FITKGraphObjectVTK* gobj)
{
if (gobj == nullptr || !m_objectManager->isContains(gobj)) return;
if (gobj == nullptr) return;
//清除记录
gobj->setGraphWidget(nullptr);
const int nact = gobj->getActorCount();
if (m_renderer == nullptr) return;
//显示层移除
for (int i = 0; i < nact; i++)
{
auto act = gobj->getActor(i);
m_renderer->RemoveActor(gobj->getActor(i));
}
// 移除控件。
//@{
int nWidget = gobj->getWidgetCount();
for (int i = 0; i < nWidget; i++)
{
vtkInteractorObserver* widget = gobj->getWidget(i);
if (widget)
{
widget->SetDefaultRenderer(nullptr);
widget->SetInteractor(nullptr);
widget->SetEnabled(false);
}
}
//@}
m_objectManager->removeGraphObj(gobj);
}
vtkRenderer * FITKGraphRender::getRenderer()
{
return m_renderer;
}
double FITKGraphRender::getActorBounds(double * bound)
{
bool isEmpty = true;
//遍历全部对象
const int ngobj = m_objectManager->getGraphObjCount();
for (int i=0; i< ngobj; ++i)
{
auto object = m_objectManager->getGraphObjTAt<FITKGraphObjectVTK>(i);
if (object == nullptr)continue;
// 判断是否存在固定尺寸边界。
double b[6] = { 9e64, -9e64, 9e64, -9e64, 9e64, -9e64 };
bool hasBds = object->getFixedBounds(b);
if (!hasBds)
{
continue;
}
if (b[0] < bound[0]) bound[0] = b[0];
if (b[1] > bound[1]) bound[1] = b[1];
if (b[2] < bound[2]) bound[2] = b[2];
if (b[3] > bound[3]) bound[3] = b[3];
if (b[4] < bound[4]) bound[4] = b[4];
if (b[5] > bound[5]) bound[5] = b[5];
isEmpty = false;
}
if (isEmpty) return -1;
double dx2 = (bound[1] - bound[0]) * (bound[1] - bound[0]);
double dy2 = (bound[3] - bound[2]) * (bound[3] - bound[2]);
double dz2 = (bound[5] - bound[4]) * (bound[5] - bound[4]);
return sqrt(dx2 + dy2 + dz2);
}
int FITKGraphRender::getGraphObjectCount()
{
if (m_objectManager)
return m_objectManager->getGraphObjCount();
return 0;
}
void FITKGraphRender::clear()
{
const int nActor = m_objectManager->getGraphObjCount();
for (int i = 0; i < nActor; ++i)
{
auto gobj = m_objectManager->getGraphObjTAt<FITKGraphObjectVTK>(i);
if (gobj == nullptr) continue;
//清除记录
gobj->setGraphWidget(nullptr);
const int nact = gobj->getActorCount();
if (m_renderer == nullptr) continue;
//显示层移除
for (int i = 0; i < nact; i++)
{
auto act = gobj->getActor(i);
m_renderer->RemoveActor(gobj->getActor(i));
}
}
m_objectManager->clear();
}
void FITKGraphRender::setBackgroundColor(float* rgb1, float* rgb2 /*= nullptr*/)
{
//错误判断
if (rgb1 == nullptr || m_renderer == nullptr) return;
//只有第一个值有效
if (rgb2 == nullptr) rgb2 = rgb1;
//设置背景色
m_renderer->SetGradientBackground(true);
m_renderer->SetBackground2(rgb1[0], rgb1[1], rgb1[2]);
m_renderer->SetBackground(rgb2[0],rgb2[1],rgb2[2]);
}
}

@ -0,0 +1,124 @@
/**
*
* @file FITKGraphRender.h
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*
*/
#ifndef _FITKRender_H_
#define _FITKRender_H_
#include "FITKRenderWindowVTKAPI.h"
#include <QObject>
#include <QMutex>
class vtkRenderer;
class vtkRenderWindow;
namespace Core
{
class FITKGraphObjectManager;
class FITKGraphObjManager;
}
namespace Comp
{
class FITKGraphObjectVTK;
class FITKGraph3DWindowVTK;
// class FITKGraphObjectManager;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
class FITKRenderWindowVTKAPI FITKGraphRender :public QObject
{
Q_OBJECT;
public:
/**
* @brief Construct a new FITKCompRender object
* @param[i] renderWin
* @param[i] type
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
FITKGraphRender(FITKGraph3DWindowVTK* graphWin);
/**
* @brief Destroy the FITKCompRender object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
virtual ~FITKGraphRender();
/**
* @brief
* @param[i] object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void addObject(FITKGraphObjectVTK* object);
/**
* @brief
* @param[i] object
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
void removeObject(FITKGraphObjectVTK* object);
/**
* @brief
* @return vtkRenderer*
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
vtkRenderer* getRenderer();
/**
* @brief actor
* @param[o] bound
* @return double 线<0
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-14
*/
double getActorBounds(double* bound);
/**
* @brief
* @return int
* @author Libaojun (libaojunqd@foxmail.com)
* @date 2024-04-26
*/
int getGraphObjectCount();
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-28
*/
void clear();
/**
* @brief
* @param[i] rgb1
* @param[i] rgb2
* @author libaojun (libaojunqd@foxmail.com)
* @date 2024-05-08
*/
void setBackgroundColor(float* rgb1, float* rgb2 = nullptr);
private:
FITKGraph3DWindowVTK* _graphWidget{};
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-11
*/
vtkRenderer* m_renderer = nullptr;
/**
* @brief
* @author BaGuijun (baguijun@163.com)
* @date 2024-03-22
*/
Core::FITKGraphObjManager* m_objectManager = nullptr;
};
}
#endif

@ -0,0 +1,67 @@
<RCC>
<qresource prefix="/">
<file>FITKIcons/icoR_viewFront.svg</file>
<file>FITKIcons/icoR_viewBack.svg</file>
<file>FITKIcons/icoR_viewTop.svg</file>
<file>FITKIcons/icoR_viewBottom.svg</file>
<file>FITKIcons/icoR_viewLeft.svg</file>
<file>FITKIcons/icoR_viewRight.svg</file>
<file>FITKIcons/icoR_viewIso.svg</file>
<file>FITKIcons/icoR_viewUser1.svg</file>
<file>FITKIcons/icoR_viewUser2.svg</file>
<file>FITKIcons/icoR_viewUser3.svg</file>
<file>FITKIcons/icoR_viewSave.svg</file>
<file>FITKIcons/icoR_info.svg</file>
<file>FITKIcons/icoR_modelSmall.svg</file>
<file>FITKIcons/icoR_profile.svg</file>
<file>FITKIcons/icoR_assignShellNormal.svg</file>
<file>FITKIcons/icoR_partInstance.svg</file>
<file>FITKIcons/icoR_plotCommonOptions.svg</file>
<file>FITKIcons/icoR_plotContourDeformed.svg</file>
<file>FITKIcons/icoR_plotDeformed.svg</file>
<file>FITKIcons/icoR_plotContourOptions.svg</file>
<file>FITKIcons/icoR_animScaleFactor.svg</file>
<file>FITKIcons/icoR_options.svg</file>
<file>FITKIcons/icoR_animHarmonic.svg</file>
<file>FITKIcons/icoR_xyData.svg</file>
<file>FITKIcons/icoR_xyData_manager.svg</file>
<file>FITKIcons/icoR_viewCut.svg</file>
<file>FITKIcons/icoR_freeBodyDiagram.svg</file>
<file>FITKIcons/icoR_synchLayers.svg</file>
<file>FITKIcons/icoR_viewPan.svg</file>
<file>FITKIcons/icoR_viewRotate.svg</file>
<file>FITKIcons/icoR_viewZoom.svg</file>
<file>FITKIcons/icoR_viewZoomRectangle.svg</file>
<file>FITKIcons/icoR_boundaryCondition.svg</file>
<file>FITKIcons/icoR_colorCode.svg</file>
<file>FITKIcons/icoR_constraint.svg</file>
<file>FITKIcons/icoR_displayGroupRemove.svg</file>
<file>FITKIcons/icoR_displayGroupReplace.svg</file>
<file>FITKIcons/icoR_displayGroupShowAll.svg</file>
<file>FITKIcons/icoR_fieldOutput.svg</file>
<file>FITKIcons/icoR_fileNew.svg</file>
<file>FITKIcons/icoR_fileOpen.svg</file>
<file>FITKIcons/icoR_fileSave.svg</file>
<file>FITKIcons/icoR_framePrevious.svg</file>
<file>FITKIcons/icoR_frameNext.svg</file>
<file>FITKIcons/icoR_frameFirst.svg</file>
<file>FITKIcons/icoR_frameLast.svg</file>
<file>FITKIcons/icoR_historyOutput.svg</file>
<file>FITKIcons/icoR_interaction.svg</file>
<file>FITKIcons/icoR_interactionProperty.svg</file>
<file>FITKIcons/icoR_job.svg</file>
<file>FITKIcons/icoR_load.svg</file>
<file>FITKIcons/icoR_materialAdd.svg</file>
<file>FITKIcons/icoR_meshVerify.svg</file>
<file>FITKIcons/icoR_part.svg</file>
<file>FITKIcons/icoR_referencePoint.svg</file>
<file>FITKIcons/icoR_section.svg</file>
<file>FITKIcons/icoR_sectionAssign.svg</file>
<file>FITKIcons/icoR_step.svg</file>
<file>FITKIcons/icoR_viewFit.svg</file>
<file>FITKIcons/icoR_viewParallel.svg</file>
<file>FITKIcons/icoR_viewPerspective.svg</file>
<file>FITKIcons/icoR_autofit.png</file>
<file>FITKIcons/icoR_saveimage.png</file>
</qresource>
</RCC>

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:none;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#FE9100;}
</style>
<rect x="3.5" y="6.5" class="st0" width="25" height="22"/>
<line class="st1" x1="3.5" y1="11" x2="28.5" y2="11"/>
<line class="st1" x1="8.5" y1="6.5" x2="8.5" y2="10.5"/>
<line class="st1" x1="13.8" y1="6.5" x2="13.8" y2="10.5"/>
<line class="st1" x1="19.2" y1="6.5" x2="19.2" y2="10.5"/>
<line class="st1" x1="24" y1="6.5" x2="24" y2="10.5"/>
<path class="st2" d="M19.4,25.8c-0.1,0-0.2,0-0.2,0c-0.7-0.1-1.4-0.4-2-1.1c-0.6-0.7-1.1-1.6-1.5-2.9c-0.7-2.2-1.4-3.7-2.1-4.7
c-0.5-0.7-1-1.1-1.5-1.1h0c-0.8,0-1.7,1-2.7,2.9c-0.8,1.6-1.2,3.1-1.2,3.2l-1.2-0.4c0-0.1,0.5-1.7,1.3-3.4c1.2-2.4,2.4-3.6,3.7-3.6
h0c0.9,0,1.7,0.5,2.5,1.6c0.8,1.1,1.5,2.8,2.2,5.1c0.6,1.9,1.4,3,2.4,3.1c0.4,0,0.9-0.1,1.5-0.4c0.5-0.3,1-0.7,1.6-1.3
c1-1.1,1.8-2.3,2.1-2.8l1.1,0.6c-0.3,0.6-1.2,2-2.3,3.2c-0.6,0.7-1.2,1.2-1.8,1.5C20.7,25.6,20,25.8,19.4,25.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:none;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#FE9100;}
</style>
<rect x="3.5" y="6.5" class="st0" width="25" height="22"/>
<line class="st1" x1="3.5" y1="11" x2="28.5" y2="11"/>
<line class="st1" x1="8.5" y1="6.5" x2="8.5" y2="10.5"/>
<line class="st1" x1="13.8" y1="6.5" x2="13.8" y2="10.5"/>
<line class="st1" x1="19.2" y1="6.5" x2="19.2" y2="10.5"/>
<line class="st1" x1="24" y1="6.5" x2="24" y2="10.5"/>
<path class="st1" d="M6.5,19.5c0,0,10,0,10-5"/>
<path class="st1" d="M6.5,19.5c0,0,10,0,10,5"/>
<path class="st2" d="M22,14.4l-0.6,0.6c1.1,1.2,1.7,2.6,1.9,4.3c0.1,1.4-0.2,2.6-0.8,3.7l-0.9-0.6l-0.3,3.4l2.9-1.8l-1-0.6
c0.7-1.2,1-2.6,0.9-4.2C23.9,17.4,23.2,15.8,22,14.4L22,14.4L22,14.4z"/>
<path class="st2" d="M22,24.8L22,24.8c1.3-1.4,1.9-3,2.1-4.8c0.1-1.6-0.2-3-0.9-4.2l1-0.6l-2.9-1.8l0.3,3.4l0.9-0.6
c0.6,1,0.9,2.3,0.8,3.7c-0.1,1.7-0.7,3.1-1.9,4.3L22,24.8L22,24.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st3{fill:#FE9100;}
.st4{fill:#374C5C;}
.st5{font-family:'ArialMT';}
.st6{font-size:12px;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<rect x="4.8" y="15.2" class="st1" width="22.4" height="13"/>
<line class="st2" x1="15.7" y1="11.8" x2="15.7" y2="21.8"/>
<polygon class="st3" points="13.2,11.9 18.2,11.9 15.8,7.7 "/>
<text transform="matrix(1 0 0 1 4.2232 10.5654)" class="st4 st5 st6">n</text>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st2{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<line class="st1" x1="6.1" y1="24" x2="3.1" y2="29"/>
<line class="st1" x1="11.6" y1="24" x2="8.6" y2="29"/>
<line class="st1" x1="17" y1="24" x2="14" y2="29"/>
<line class="st1" x1="22.5" y1="24" x2="19.5" y2="29"/>
<line class="st1" x1="27.9" y1="24" x2="24.9" y2="29"/>
<path class="st2" d="M3.1,6.6h8.5V16h17v8H3C3,24,3.1,6.5,3.1,6.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE0E0;}
.st1{fill:#697689;}
.st2{fill:#719943;}
.st3{fill:#47B1D8;}
.st4{fill:#DE4130;}
.st5{fill:#FFFFFF;stroke:#697689;stroke-miterlimit:10;}
</style>
<g>
<path class="st0" d="M15.5,30.6c-2.8,0-5.1-0.8-6.2-2.2c-0.5-0.6-0.7-1.3-0.6-1.9c0.2-1.1,1-1.5,2-1.8c0.5-0.2,1-0.4,1.4-0.8
c0.7-0.7,1.1-1.6,1-2.6c0-1.2-0.7-3.3-2.9-3.6c-0.3,0-0.5-0.1-0.8-0.1c-0.5,0-1,0.1-1.5,0.1c-0.5,0.1-1,0.1-1.4,0.1
c-0.7,0-1.7-0.1-2.6-1.1C3,15.9,2.9,13,4.1,10.1c0.8-2,3.4-6.6,9.8-6.6c0.4,0,0.9,0,1.4,0.1c12.4,1.2,13.1,11.2,13.1,14.2
c-0.1,5.2-4.7,12.8-12.7,12.8L15.5,30.6z"/>
<path class="st1" d="M13.9,4c0.4,0,0.9,0,1.3,0.1c11.9,1.2,12.7,10.8,12.6,13.7c-0.1,5-4.5,12.3-12.2,12.3l-0.1,0
c-3.8,0-5.4-1.4-5.9-2c-0.4-0.5-0.6-1-0.5-1.5c0.1-0.8,0.7-1.1,1.7-1.5c0.5-0.2,1.1-0.5,1.5-0.9c0.8-0.8,1.2-1.8,1.2-3
c0-1.3-0.8-3.7-3.3-4.1c-0.3,0-0.6-0.1-0.9-0.1c-0.5,0-1.1,0.1-1.6,0.1c-0.5,0.1-0.9,0.1-1.4,0.1c-0.7,0-1.4-0.1-2.3-1
c-0.5-0.5-0.8-3.1,0.4-6.1C5.5,8,8.1,4,13.9,4 M13.9,3C3.4,3,1.3,14.9,3.4,17.1c1,1,2,1.3,3,1.3c1,0,2-0.2,2.9-0.2
c0.2,0,0.5,0,0.7,0.1c2.1,0.3,2.5,2.5,2.5,3.1c0,0.6-0.1,1.5-0.9,2.2c-0.9,0.9-3.1,0.8-3.5,2.9c-0.4,2.1,2.1,4.6,7.4,4.7
c0,0,0.1,0,0.1,0c8.5,0,13.1-8,13.2-13.3C28.9,13.2,27,4.2,15.3,3.1C14.8,3.1,14.4,3,13.9,3L13.9,3z"/>
</g>
<circle class="st2" cx="22" cy="20" r="2"/>
<circle class="st3" cx="18" cy="25" r="2"/>
<circle class="st4" cx="20" cy="14" r="2"/>
<circle class="st5" cx="13" cy="11" r="3"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#FE9100;stroke:#657386;stroke-miterlimit:10;}
.st3{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<line class="st1" x1="9.5" y1="19.8" x2="21.5" y2="19.8"/>
<path class="st1" d="M21.5,19.5c0-3.9-5.4-7-12-7"/>
<path class="st1" d="M21.5,19.5c0,3.9-5.4,7-12,7"/>
<rect x="21.5" y="16.3" class="st2" width="7" height="7"/>
<rect x="-4" y="15.8" transform="matrix(1.850483e-07 1 -1 1.850483e-07 25.2542 12.2542)" class="st3" width="21" height="6"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FFA800;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#697483;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="21" cy="16.3" r="7"/>
<circle class="st1" cx="11" cy="16.3" r="7"/>
<circle class="st2" cx="21" cy="16.3" r="7"/>
</svg>

After

Width:  |  Height:  |  Size: 683 B

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FFA800;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#697483;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="11" cy="15.3" r="7"/>
<circle class="st1" cx="21" cy="15.3" r="7"/>
<circle class="st2" cx="11" cy="15.3" r="7"/>
</svg>

After

Width:  |  Height:  |  Size: 683 B

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFA800;stroke:#657386;stroke-miterlimit:10;}
</style>
<circle class="st0" cx="15.5" cy="16.5" r="7"/>
</svg>

After

Width:  |  Height:  |  Size: 518 B

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{display:none;fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#657386;}
.st3{font-family:'04b03';}
.st4{font-size:8.5px;}
.st5{fill:url(#SVGID_1_);stroke:#657386;stroke-miterlimit:10;}
.st6{fill:none;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<path class="st1" d="M3.5,4.5h9v10h16v8h-25C3.5,22.5,3.4,4.4,3.5,4.5z"/>
<text transform="matrix(1 0 0 1 4.5566 30.1455)" class="st2 st3 st4">11010</text>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.1847" y1="4.9525" x2="24.6161" y2="26.3839">
<stop offset="0" style="stop-color:#FF0000"/>
<stop offset="0.245" style="stop-color:#FFFF00"/>
<stop offset="0.6361" style="stop-color:#00FF00"/>
<stop offset="1" style="stop-color:#0000FF"/>
</linearGradient>
<path class="st5" d="M3.5,4.6H12V14h17v8H3.5C3.5,22,3.5,4.5,3.5,4.6z"/>
<line class="st6" x1="16.5" y1="20.6" x2="16.5" y2="15.6"/>
<polygon class="st2" points="18.9,20 14,20 16.4,24.2 "/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#657386;}
</style>
<path class="st0" d="M24.9,8.2l-5.5-4.8H5.8v25.7h20.9V9.9L24.9,8.2z M24.3,9.9h-4V6.3L24.3,9.9z M7.4,27.5V5h11.2v6.4h6.4v16.1H7.4
z"/>
</svg>

After

Width:  |  Height:  |  Size: 569 B

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#657386;}
.st1{fill:#FFA800;}
</style>
<path class="st0" d="M26.9,15.9H7.8c-0.7,0-1.3,0.4-1.5,1.1l-1.7,5.1V8.3h7.9c0,1.8,1.4,3.2,3.2,3.2h7.9v2.4c0,0.4,0.4,0.8,0.8,0.8
c0.4,0,0.8-0.4,0.8-0.8c0,0,0,0,0,0h0v-2.4c0-0.9-0.7-1.6-1.6-1.6h-7.9c-0.9,0-1.6-0.7-1.6-1.6c0-0.4-0.2-0.8-0.5-1.1
c-0.3-0.3-0.7-0.5-1.1-0.5H4.6C3.7,6.7,3,7.4,3,8.3V27c0,0.9,0.7,1.6,1.6,1.6h19.1c0.7,0,1.3-0.4,1.5-1.1l3.3-10
C28.4,16.6,27.7,15.9,26.9,15.9z"/>
<path class="st1" d="M28.4,7.5c-1-1.9-4.1-5.9-11.8-1.7c0,0,8.5-2.1,9.5,2.6l-1.4,0l3.5,2.2l1.3-3.9C29.5,6.7,28.4,7.5,28.4,7.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 973 B

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
</style>
<path class="st0" d="M4.3,3.4v21.1c0,1.9,1.6,3.5,3.5,3.5h21.1V3.4C28.8,3.4,4.3,3.4,4.3,3.4z M23.6,26.2h-7v-3.5H13v3.5H9.5v-7h14
L23.6,26.2L23.6,26.2z M25.3,14c0,0.9-0.9,1.8-1.8,1.8h-14c-0.9,0-1.8-0.9-1.8-1.8V5.2h17.5L25.3,14L25.3,14z"/>
</svg>

After

Width:  |  Height:  |  Size: 672 B

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{display:none;fill:#4D82B6;}
.st1{display:none;fill:#657386;}
.st2{fill:#4D82B6;}
.st3{fill:#657386;}
</style>
<path class="st0" d="M25,18.4c0.2-0.8,0.3-2.6,0.2-3.5c-0.4-6-7.3-9-12.2-7.8c3.7,1.3,7.4,4.7,7.4,8.8c0,0.5,0,1-0.1,1.5l-3.9-0.4
l2.6,3l2.6,3l3.3-2.1l3.3-2.1L25,18.4z"/>
<path class="st0" d="M7,13.9c-0.2,0.8-0.3,2.6-0.3,3.5c0.3,6.1,7.1,9.2,12,8.1c-3.6-1.4-7.3-4.9-7.2-9c0-0.5,0.1-1,0.1-1.5l3.9,0.5
l-2.5-3l-2.5-3l-3.3,2l-3.3,2L7,13.9z"/>
<path class="st0" d="M16.1,8.3L5.5,13.6c-2,1-2,3.8,0,4.8l10.7,5.3c1.3,0.7,2.9,0.1,3.6-1.2c0.2-0.4,0.3-0.8,0.3-1.2V10.7
C20,9.2,18.8,8,17.3,8C16.9,8,16.5,8.1,16.1,8.3L16.1,8.3z"/>
<rect x="23" y="8" class="st1" width="2" height="16"/>
<path class="st0" d="M16.9,8.3C16.5,8.1,16.1,8,15.7,8C14.2,8,13,9.2,13,10.7v10.7c0,0.4,0.1,0.8,0.3,1.2c0.7,1.3,2.3,1.9,3.6,1.2
l10.7-5.3c2-1,2-3.8,0-4.8L16.9,8.3L16.9,8.3z"/>
<rect x="8" y="8" transform="matrix(-1 -4.547486e-11 4.547486e-11 -1 18 32.0095)" class="st1" width="2" height="16"/>
<path class="st0" d="M17,10.6c-0.3-0.1-0.5-0.2-0.8-0.2c-1,0-1.9,0.8-1.9,1.9l0,7.5c0,0.3,0.1,0.6,0.2,0.8c0.5,0.9,1.6,1.3,2.5,0.8
l7.5-3.8c1.4-0.7,1.4-2.7,0-3.4L17,10.6L17,10.6z"/>
<rect x="27" y="8.1" class="st1" width="2" height="16"/>
<path class="st0" d="M7.6,10.6c-0.3-0.1-0.5-0.2-0.8-0.2c-1,0-1.9,0.8-1.9,1.9l0,7.5c0,0.3,0.1,0.6,0.2,0.8c0.5,0.9,1.6,1.3,2.5,0.8
l7.5-3.8c1.4-0.7,1.4-2.7,0-3.4L7.6,10.6L7.6,10.6z"/>
<path class="st2" d="M16.9,10.6l-7.5,3.8c-1.4,0.7-1.4,2.7,0,3.4l7.5,3.8c0.9,0.5,2.1,0.1,2.5-0.8c0.1-0.3,0.2-0.5,0.2-0.8l0-7.5
c0-1-0.8-1.9-1.9-1.9C17.4,10.4,17.1,10.5,16.9,10.6L16.9,10.6z"/>
<rect x="4.9" y="8.1" transform="matrix(-1 -4.547486e-11 4.547486e-11 -1 11.7428 32.1436)" class="st3" width="2" height="16"/>
<path class="st2" d="M26.3,10.6l-7.5,3.8c-1.4,0.7-1.4,2.7,0,3.4l7.5,3.8c0.9,0.5,2.1,0.1,2.5-0.8c0.1-0.3,0.2-0.5,0.2-0.8l0-7.5
c0-1-0.8-1.9-1.9-1.9C26.8,10.4,26.5,10.5,26.3,10.6L26.3,10.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{display:none;fill:#4D82B6;}
.st1{display:none;fill:#657386;}
.st2{fill:#4D82B6;}
.st3{fill:#657386;}
</style>
<path class="st0" d="M25,18.4c0.2-0.8,0.3-2.6,0.2-3.5c-0.4-6-7.3-9-12.2-7.8c3.7,1.3,7.4,4.7,7.4,8.8c0,0.5,0,1-0.1,1.5l-3.9-0.4
l2.6,3l2.6,3l3.3-2.1l3.3-2.1L25,18.4z"/>
<path class="st0" d="M7,13.9c-0.2,0.8-0.3,2.6-0.3,3.5c0.3,6.1,7.1,9.2,12,8.1c-3.6-1.4-7.3-4.9-7.2-9c0-0.5,0.1-1,0.1-1.5l3.9,0.5
l-2.5-3l-2.5-3l-3.3,2l-3.3,2L7,13.9z"/>
<path class="st0" d="M16.1,8.3L5.5,13.6c-2,1-2,3.8,0,4.8l10.7,5.3c1.3,0.7,2.9,0.1,3.6-1.2c0.2-0.4,0.3-0.8,0.3-1.2V10.7
C20,9.2,18.8,8,17.3,8C16.9,8,16.5,8.1,16.1,8.3L16.1,8.3z"/>
<rect x="23" y="8" class="st1" width="2" height="16"/>
<path class="st0" d="M16.9,8.3C16.5,8.1,16.1,8,15.7,8C14.2,8,13,9.2,13,10.7v10.7c0,0.4,0.1,0.8,0.3,1.2c0.7,1.3,2.3,1.9,3.6,1.2
l10.7-5.3c2-1,2-3.8,0-4.8L16.9,8.3L16.9,8.3z"/>
<rect x="8" y="8" transform="matrix(-1 -4.547486e-11 4.547486e-11 -1 18 32.0095)" class="st1" width="2" height="16"/>
<path class="st2" d="M17,10.6c-0.3-0.1-0.5-0.2-0.8-0.2c-1,0-1.9,0.8-1.9,1.9l0,7.5c0,0.3,0.1,0.6,0.2,0.8c0.5,0.9,1.6,1.3,2.5,0.8
l7.5-3.8c1.4-0.7,1.4-2.7,0-3.4L17,10.6L17,10.6z"/>
<rect x="27" y="8.1" class="st3" width="2" height="16"/>
<path class="st2" d="M7.6,10.6c-0.3-0.1-0.5-0.2-0.8-0.2c-1,0-1.9,0.8-1.9,1.9l0,7.5c0,0.3,0.1,0.6,0.2,0.8c0.5,0.9,1.6,1.3,2.5,0.8
l7.5-3.8c1.4-0.7,1.4-2.7,0-3.4L7.6,10.6L7.6,10.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,39 @@
<svg id="_48-3" data-name="48-3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 32 32">
<metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c142 79.160924, 2017/07/13-01:06:39 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""/>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?></metadata>
<defs>
<style>
.cls-1 {
fill: #657386;
}
</style>
</defs>
<rect id="矩形_28" data-name="矩形 28" class="cls-1" x="6" y="8" width="2" height="16"/>
<image id="上一曲" x="11" y="8" width="16" height="16" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAV1BMVEVNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrZNgrYAAACB0dl7AAAAG3RSTlMAFJLEaATF0GwI89VxDdp2Et97F+R/4++qmcbJW5VnAAAAAWJLR0QcnARBBwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+gFHBAAD2h16vkAAABUSURBVBjThY9JEoAgEAPHXcQNBbf8/59aFqjkYh+7ajKJJCmyvJCXEhdVrR7R4Ea3nRcI9MMYC8BMcywA60gAjsXCwvycUCi9DcVWrr7xONlxfOefjP0SCBXUDPwAAAAASUVORK5CYII="/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{display:none;fill:#4D82B6;}
.st1{fill:#4D82B6;}
.st2{fill:#657386;}
</style>
<path class="st0" d="M25,18.4c0.2-0.8,0.3-2.6,0.2-3.5c-0.4-6-7.3-9-12.2-7.8c3.7,1.3,7.4,4.7,7.4,8.8c0,0.5,0,1-0.1,1.5l-3.9-0.4
l2.6,3l2.6,3l3.3-2.1l3.3-2.1L25,18.4z"/>
<path class="st0" d="M7,13.9c-0.2,0.8-0.3,2.6-0.3,3.5c0.3,6.1,7.1,9.2,12,8.1c-3.6-1.4-7.3-4.9-7.2-9c0-0.5,0.1-1,0.1-1.5l3.9,0.5
l-2.5-3l-2.5-3l-3.3,2l-3.3,2L7,13.9z"/>
<path class="st1" d="M16.1,8.3L5.5,13.6c-2,1-2,3.8,0,4.8l10.7,5.3c1.3,0.7,2.9,0.1,3.6-1.2c0.2-0.4,0.3-0.8,0.3-1.2V10.7
C20,9.2,18.8,8,17.3,8C16.9,8,16.5,8.1,16.1,8.3L16.1,8.3z"/>
<rect x="23" y="8" class="st2" width="2" height="16"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#4D82B6;}
.st3{fill:#FF9200;}
.st4{fill:none;stroke:#FF9200;stroke-miterlimit:10;}
.st5{fill:#657386;}
</style>
<rect x="5.5" y="10.5" class="st0" width="6" height="4"/>
<line class="st0" x1="11.5" y1="14.5" x2="11.5" y2="10.5"/>
<rect x="5.5" y="14.5" class="st0" width="6" height="4"/>
<line class="st0" x1="11.5" y1="18.5" x2="11.5" y2="14.5"/>
<rect x="5.5" y="18.5" class="st0" width="6" height="4"/>
<line class="st0" x1="11.5" y1="22.5" x2="11.5" y2="18.5"/>
<rect x="5.5" y="22.5" class="st0" width="6" height="4"/>
<line class="st0" x1="11.5" y1="26.5" x2="11.5" y2="22.5"/>
<rect x="5.5" y="6.5" class="st0" width="6" height="4"/>
<line class="st0" x1="11.5" y1="10.5" x2="11.5" y2="6.5"/>
<path class="st1" d="M8.2,0.6"/>
<path class="st1" d="M11.4,4.6"/>
<path class="st1" d="M25.6,8.6"/>
<path class="st1" d="M25.6,12.6"/>
<path class="st2" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<path class="st3" d="M19.2,15l-1.1-1.8l4.4-0.4l-2.2,3.9L19.2,15z"/>
<path class="st3" d="M17.1,16.6L16,14.8l4.4-0.4l-2.2,3.9L17.1,16.6z"/>
<line class="st4" x1="10.5" y1="20.5" x2="18" y2="16"/>
<path class="st3" d="M18.5,23.8l-1.1,1.8l4.4,0.4L19.7,22L18.5,23.8z"/>
<line class="st4" x1="11.9" y1="19.8" x2="19.4" y2="24.3"/>
<rect x="10" y="4" class="st5" width="2" height="24"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{display:none;fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#657386;}
.st3{font-family:'04b03';}
.st4{font-size:8.5px;}
.st5{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st6{fill:none;stroke:#657386;stroke-miterlimit:10;}
.st7{fill:#56A844;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<path class="st1" d="M3.5,4.5h9v10h16v8h-25C3.5,22.5,3.4,4.4,3.5,4.5z"/>
<text transform="matrix(1 0 0 1 4.5566 30.1455)" class="st2 st3 st4">11010</text>
<path class="st5" d="M3.5,4.6H12V14h17v8H3.5C3.5,22,3.5,4.5,3.5,4.6z"/>
<line class="st6" x1="16.5" y1="20.6" x2="16.5" y2="15.6"/>
<polygon class="st2" points="18.9,20 14,20 16.4,24.2 "/>
<rect x="2" y="3" class="st7" width="4" height="4"/>
<rect x="2" y="20" class="st7" width="4" height="4"/>
<rect x="10" y="12" class="st7" width="4" height="4"/>
<rect x="18" y="12" class="st7" width="4" height="4"/>
<rect x="26" y="12" class="st7" width="4" height="4"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
</style>
<path class="st0" d="M16,4C9.2,4,3.6,9.6,3.6,16.4S9.2,28.8,16,28.8s12.4-5.6,12.4-12.4S22.9,4,16,4z M16,23.9
c-0.7,0-1.2-0.6-1.2-1.2s0.6-1.2,1.2-1.2c0.7,0,1.2,0.6,1.2,1.2S16.7,23.9,16,23.9L16,23.9z M17.3,20.1h-2.5V9h2.5V20.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 663 B

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#56A844;}
.st3{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st4{fill:#FE9100;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<line class="st1" x1="6.5" y1="20.6" x2="6.5" y2="15.6"/>
<polygon class="st2" points="9,19 4,19 6.4,23.2 "/>
<polygon class="st2" points="9,16 4,16 6.4,11.8 "/>
<line class="st1" x1="14.5" y1="20.6" x2="14.5" y2="15.6"/>
<polygon class="st2" points="17,19 12,19 14.4,23.2 "/>
<polygon class="st2" points="17,16 12,16 14.4,11.8 "/>
<rect x="2.5" y="6.5" class="st3" width="16" height="6"/>
<rect x="2.5" y="22.5" class="st4" width="16" height="6"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#56A844;}
.st3{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st4{fill:#FE9100;stroke:#657386;stroke-miterlimit:10;}
.st5{fill:none;stroke:#FF5500;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<line class="st1" x1="6.5" y1="20.6" x2="6.5" y2="15.6"/>
<polygon class="st2" points="9,19 4,19 6.4,23.2 "/>
<polygon class="st2" points="9,16 4,16 6.4,11.8 "/>
<line class="st1" x1="14.5" y1="20.6" x2="14.5" y2="15.6"/>
<polygon class="st2" points="17,19 12,19 14.4,23.2 "/>
<polygon class="st2" points="17,16 12,16 14.4,11.8 "/>
<rect x="2.5" y="6.5" class="st3" width="16" height="6"/>
<rect x="2.5" y="22.5" class="st4" width="16" height="6"/>
<g>
<line class="st5" x1="2.5" y1="17.5" x2="19.5" y2="17.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#657386;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<rect x="5.3" y="24.6" class="st1" width="12.2" height="3.9"/>
<rect x="8.9" y="23.5" class="st1" width="5" height="1"/>
<rect x="3.5" y="10.5" class="st1" width="16" height="12"/>
<rect x="7" y="26" class="st2" width="2" height="1"/>
<rect x="14" y="26" class="st2" width="2" height="1"/>
<rect x="6" y="13" class="st0" width="3" height="1"/>
<rect x="11" y="13" class="st0" width="5.5" height="1"/>
<rect x="6" y="15" class="st0" width="3" height="1"/>
<rect x="11" y="15" class="st0" width="5.5" height="1"/>
<rect x="6" y="18" class="st0" width="3" height="1"/>
<rect x="11" y="18" class="st0" width="5.5" height="1"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{display:none;fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st3{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st4{fill:#FE9100;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<path class="st1" d="M3.5,4.5h9v10h16v8h-25C3.5,22.5,3.4,4.4,3.5,4.5z"/>
<path class="st2" d="M3.1,10.6h8.5V20h17v8H3C3,28,3.1,10.5,3.1,10.6z"/>
<line class="st3" x1="17.5" y1="14.6" x2="17.5" y2="7.6"/>
<polygon class="st4" points="20,14 15,14 17.4,18.2 "/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st1{fill:#657386;}
.st2{fill:#374C5C;}
.st3{font-family:'ArialMT';}
.st4{font-size:12px;}
.st5{fill:#4D82B6;}
</style>
<path class="st0" d="M4.3,28.5C4.3,20.1,15,14.4,27,14.4"/>
<path class="st1" d="M3.8,28.1h24v1h-24V28.1z"/>
<path class="st1" d="M3.8,28.9l0-24l1,0l0,24L3.8,28.9z"/>
<text transform="matrix(1 0 0 1 21.5552 26.3951)" class="st2 st3 st4">ε</text>
<text transform="matrix(1 0 0 1 7.3318 14.7705)" class="st2 st3 st4">σ</text>
<path class="st5" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#4D82B6;}
.st3{fill:#56A844;}
</style>
<rect x="3.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="23.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 -3)" class="st0" width="4" height="4"/>
<rect x="23.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 52 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 36 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 13)" class="st0" width="4" height="4"/>
<rect x="3.5" y="8.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="8.5" class="st0" width="4" height="4"/>
<path class="st1" d="M7.5,2.6"/>
<path class="st1" d="M7.5,6.6"/>
<path class="st1" d="M23.6,8.6"/>
<path class="st1" d="M23.6,12.6"/>
<path class="st2" d="M29.3,5.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,3.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,2,26.1,2,26,2.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,2,23.2,2,23.1,2.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,7.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,11
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V5.8C29.6,5.6,29.5,5.5,29.3,5.4z M24.8,8.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,8.1,24.8,8.1z"/>
<path class="st3" d="M17.8,19.6L14,15.8l1-1l2.8,2.8l5.1-5.1l1,1L17.8,19.6L17.8,19.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:#DFE9F5;}
.st2{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st3{fill:#56A844;}
.st4{fill:#FE9100;stroke:#657386;stroke-miterlimit:10;}
.st5{fill:#4D82B6;stroke:#657386;stroke-miterlimit:10;}
</style>
<rect x="3.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="23.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 -3)" class="st0" width="4" height="4"/>
<rect x="23.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 52 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 36 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 13)" class="st0" width="4" height="4"/>
<rect x="3.5" y="8.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="8.5" class="st0" width="4" height="4"/>
<rect x="4" y="8" class="st1" width="6" height="4"/>
<line class="st2" x1="7.5" y1="6.6" x2="7.5" y2="2.6"/>
<polygon class="st3" points="9.9,6 5,6 7.4,10.2 "/>
<line class="st2" x1="23.6" y1="12.6" x2="23.6" y2="8.6"/>
<polygon class="st3" points="26.1,12 21.1,12 23.5,16.2 "/>
<rect x="19" y="20" class="st1" width="9.2" height="5"/>
<rect x="20.1" y="16" class="st4" width="7" height="7"/>
<circle class="st5" cx="23.6" cy="5" r="3.5"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#657386;}
.st1{fill:#4D82B6;}
</style>
<rect x="3" y="6" class="st0" width="4" height="4"/>
<rect x="10" y="6" class="st0" width="18" height="4"/>
<rect x="3" y="13" class="st1" width="4" height="4"/>
<rect x="10" y="13" class="st1" width="18" height="4"/>
<rect x="3" y="20" class="st0" width="4" height="4"/>
<rect x="10" y="20" class="st0" width="18" height="4"/>
</svg>

After

Width:  |  Height:  |  Size: 783 B

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:#4D82B6;}
</style>
<polygon class="st0" points="7.8,7.9 16.5,7.9 16.5,17.6 28,17.6 28,25.2 24.1,29 4,29 4,11.8 "/>
<polygon class="st0" points="4,11.8 12.6,11.8 12.6,21.4 24.2,21.4 24.2,29.1 4,29.1 4,11.8 "/>
<line class="st0" x1="12.6" y1="11.8" x2="16.5" y2="7.9"/>
<line class="st0" x1="12.6" y1="21.4" x2="16.5" y2="17.5"/>
<line class="st0" x1="24.2" y1="21.4" x2="28" y2="17.5"/>
<path class="st1" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:#4D82B6;}
.st2{fill:#56A844;}
</style>
<polygon class="st0" points="5.5,10.1 13.2,10.1 13.2,18.8 23.6,18.8 23.6,25.6 20.1,29 2,29 2,13.5 "/>
<polygon class="st0" points="2,13.5 9.8,13.5 9.8,22.2 20.1,22.2 20.1,29.1 2,29.1 2,13.5 "/>
<line class="st0" x1="9.8" y1="13.5" x2="13.2" y2="10.1"/>
<line class="st0" x1="9.8" y1="22.2" x2="13.2" y2="18.7"/>
<line class="st0" x1="20.1" y1="22.2" x2="23.6" y2="18.7"/>
<path class="st1" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<path class="st2" d="M22.8,14.2l-3.2-3.5c-0.1-0.1-0.3-0.1-0.5,0C19,10.8,19,10.9,19,11v1.9c-2.7,0-4.8,2.1-4.8,4.8
c0,0.6,0.1,1.3,0.4,1.9c0.4-2,2.3-3.5,4.4-3.5v1.9c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.1,0.2,0.1c0.1,0,0.2,0,0.2-0.1l3.2-3.4
c0.1-0.1,0.1-0.1,0.1-0.2C22.9,14.4,22.8,14.3,22.8,14.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#4D82B6;}
.st3{font-family:'MicrosoftYaHei';}
.st4{font-size:10px;}
</style>
<rect x="3.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="12.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="16.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="20.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="24.5" class="st0" width="4" height="4"/>
<rect x="23.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 -3)" class="st0" width="4" height="4"/>
<rect x="23.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 52 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 1)" class="st0" width="4" height="4"/>
<rect x="19.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 48 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 5)" class="st0" width="4" height="4"/>
<rect x="15.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 44 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="20.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 36 9)" class="st0" width="4" height="4"/>
<rect x="11.5" y="24.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 40 13)" class="st0" width="4" height="4"/>
<rect x="3.5" y="8.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="8.5" class="st0" width="4" height="4"/>
<path class="st1" d="M7.5,2.6"/>
<path class="st1" d="M7.5,6.6"/>
<path class="st1" d="M23.6,8.6"/>
<path class="st1" d="M23.6,12.6"/>
<text transform="matrix(1 0 0 1 12.6875 14.1875)" class="st2 st3 st4">123</text>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);stroke:#657386;stroke-miterlimit:10;}
</style>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="1.012" y1="8.988" x2="24.012" y2="31.988">
<stop offset="0" style="stop-color:#FF0000"/>
<stop offset="0.3243" style="stop-color:#FFFF00"/>
<stop offset="0.6807" style="stop-color:#00FF00"/>
<stop offset="0.948" style="stop-color:#0000FF"/>
</linearGradient>
<path class="st0" d="M3.5,6.5h8v12c0,0,15,0,16,2v8c0,0-10-2-16-2s-8,0-8,0V6.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 891 B

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#SVGID_1_);stroke:#657386;stroke-miterlimit:10;}
.st1{fill:#657386;}
</style>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.5" y1="3.5" x2="15.5" y2="15.5">
<stop offset="0" style="stop-color:#FF0000"/>
<stop offset="0.3243" style="stop-color:#FFFF00"/>
<stop offset="0.6807" style="stop-color:#00FF00"/>
<stop offset="0.948" style="stop-color:#0000FF"/>
</linearGradient>
<rect x="3.5" y="3.5" class="st0" width="12" height="12"/>
<rect x="16" y="19" class="st1" width="2" height="2"/>
<rect x="19" y="19" class="st1" width="11" height="2"/>
<rect x="16" y="23" class="st1" width="2" height="2"/>
<rect x="19" y="23" class="st1" width="11" height="2"/>
<rect x="16" y="27" class="st1" width="2" height="2"/>
<rect x="19" y="27" class="st1" width="11" height="2"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st1{display:none;fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#657386;stroke-miterlimit:10;}
</style>
<rect x="3.5" y="10.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="10.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="14.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="14.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="18.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="18.5" class="st0" width="4" height="4"/>
<rect x="3.5" y="22.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="22.5" class="st0" width="4" height="4"/>
<rect x="23.5" y="18.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 46 -5)" class="st1" width="4" height="4"/>
<rect x="23.5" y="22.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 50 -1)" class="st1" width="4" height="4"/>
<rect x="19.5" y="18.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 42 -1)" class="st1" width="4" height="4"/>
<rect x="19.5" y="22.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 46 3)" class="st1" width="4" height="4"/>
<rect x="15.5" y="18.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 38 3)" class="st1" width="4" height="4"/>
<rect x="15.5" y="22.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 42 7)" class="st1" width="4" height="4"/>
<rect x="11.5" y="18.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 34 7)" class="st1" width="4" height="4"/>
<rect x="11.5" y="22.5" transform="matrix(-1.836970e-16 1 -1 -1.836970e-16 38 11)" class="st1" width="4" height="4"/>
<rect x="3.5" y="6.5" class="st0" width="4" height="4"/>
<rect x="7.5" y="6.5" class="st0" width="4" height="4"/>
<path class="st0" d="M11.5,18.5c0,0,14,0,16,2v8c0,0-7-2-16-2V18.5z"/>
<path class="st2" d="M11.5,22.5c0,0,10,0,16,2"/>
<path class="st2" d="M14.5,18.5c0,0,1,3,0.2,8.2"/>
<path class="st2" d="M18.5,18.5c0,0,1,3,0.2,8.2"/>
<path class="st2" d="M22.5,19c0,0,1,3,0.2,8.2"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st3{fill:#FE9100;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<rect x="3.8" y="15.2" class="st1" width="22.4" height="13"/>
<rect x="6.7" y="17.7" class="st1" width="16.7" height="8.1"/>
<line class="st2" x1="14.7" y1="11.8" x2="14.7" y2="29.8"/>
<polygon class="st3" points="12.2,11.9 17.2,11.9 14.8,7.7 "/>
<line class="st2" x1="25.6" y1="21.7" x2="2.6" y2="21.7"/>
<polygon class="st3" points="25.5,24.2 25.5,19.2 29.7,21.6 "/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#374C5C;}
.st1{font-family:'MicrosoftYaHei';}
.st2{font-size:24px;}
.st3{fill:#4D82B6;}
.st4{font-family:'ArialMT';}
.st5{font-size:10px;}
</style>
<text transform="matrix(1 0 0 1 6.4404 26.6553)" class="st0 st1 st2">x</text>
<text transform="matrix(1 0 0 1 15.3318 12.7705)" class="st3 st4 st5">RP</text>
</svg>

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st3{fill:#FE9100;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<polygon class="st1" points="5.1,14.5 10.6,14.5 10.6,19.9 21.8,19.9 21.8,14.5 27.4,14.5 27.4,29.4 21.8,29.4 21.8,24.7 10.6,24.7
10.6,29.4 5.1,29.4 "/>
<line class="st2" x1="23.6" y1="22.2" x2="26.9" y2="22.2"/>
<line class="st2" x1="18.7" y1="22.2" x2="22" y2="22.2"/>
<line class="st2" x1="14.1" y1="22.2" x2="17.4" y2="22.2"/>
<line class="st2" x1="9.2" y1="22.2" x2="12.5" y2="22.2"/>
<line class="st2" x1="4.7" y1="22.2" x2="7.9" y2="22.2"/>
<polygon class="st3" points="4.6,19.5 4.6,24.5 0.5,22 "/>
<line class="st2" x1="15.7" y1="16.2" x2="15.7" y2="19.5"/>
<line class="st2" x1="15.7" y1="11.8" x2="15.7" y2="15.1"/>
<polygon class="st3" points="13.2,11.9 18.2,11.9 15.8,7.7 "/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
.st2{fill:none;stroke:#FE9100;stroke-miterlimit:10;}
.st3{fill:#FE9100;}
.st4{fill:#56A844;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<polygon class="st1" points="17.9,7.7 17.9,13.2 12.6,13.2 12.6,24.4 17.9,24.4 17.9,30 3.1,30 3.1,24.4 7.8,24.4 7.8,13.2
3.1,13.2 3.1,7.7 "/>
<line class="st2" x1="10.3" y1="26.2" x2="10.3" y2="29.5"/>
<line class="st2" x1="10.3" y1="21.3" x2="10.3" y2="24.6"/>
<line class="st2" x1="10.3" y1="16.7" x2="10.3" y2="20"/>
<line class="st2" x1="10.3" y1="11.8" x2="10.3" y2="15.1"/>
<line class="st2" x1="10.3" y1="7.3" x2="10.3" y2="10.5"/>
<polygon class="st3" points="13,7.2 8,7.2 10.4,3.1 "/>
<line class="st2" x1="16.3" y1="18.3" x2="13" y2="18.3"/>
<line class="st2" x1="20.7" y1="18.3" x2="17.4" y2="18.3"/>
<polygon class="st3" points="20.6,15.8 20.6,20.8 24.8,18.4 "/>
<path class="st4" d="M22.3,29.1L23,26l3.8-0.2L23,25.5l-0.7-3.1l6.6,3.3L22.3,29.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:none;stroke:#56A844;stroke-miterlimit:10;}
.st2{fill:#56A844;}
.st3{fill:#FE9100;stroke:#657386;stroke-miterlimit:10;}
.st4{fill:#DFE9F5;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<line class="st1" x1="18.6" y1="22.4" x2="8.6" y2="22.4"/>
<polygon class="st2" points="16.1,19.9 16.1,24.9 20.3,22.5 "/>
<rect x="20.3" y="18" class="st3" width="8.9" height="8.9"/>
<circle class="st4" cx="7.2" cy="22.4" r="4.8"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
</style>
<path class="st0" d="M25,18.4c0.2-0.8,0.3-2.6,0.2-3.5c-0.4-6-7.3-9-12.2-7.8c3.7,1.3,7.4,4.7,7.4,8.8c0,0.5,0,1-0.1,1.5l-3.9-0.4
l2.6,3l2.6,3l3.3-2.1l3.3-2.1L25,18.4z"/>
<path class="st0" d="M7,13.9c-0.2,0.8-0.3,2.6-0.3,3.5c0.3,6.1,7.1,9.2,12,8.1c-3.6-1.4-7.3-4.9-7.2-9c0-0.5,0.1-1,0.1-1.5l3.9,0.5
l-2.5-3l-2.5-3l-3.3,2l-3.3,2L7,13.9z"/>
</svg>

After

Width:  |  Height:  |  Size: 772 B

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#56A844;}
.st1{fill:#FF9100;}
.st2{fill:#374C5C;}
.st3{font-family:'ArialMT';}
.st4{font-size:12px;}
</style>
<path class="st0" d="M27.3,26.1h-20v1.8h20V26.1z"/>
<path class="st0" d="M7.5,24.4L3,27l4.4,2.7V24.4z"/>
<path class="st1" d="M27.4,27.9l0-20l-1.8,0l0,20L27.4,27.9z"/>
<path class="st1" d="M29.1,8.8l-2.7-4.4l-2.6,4.4L29.1,8.8z"/>
<text transform="matrix(1 0 0 1 6.4404 22.6888)" class="st2 st3 st4">x</text>
<text transform="matrix(1 0 0 1 17.0609 11.7012)" class="st2 st3 st4">y</text>
</svg>

After

Width:  |  Height:  |  Size: 916 B

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#56A844;}
.st1{fill:#4D82B8;}
.st2{fill:#374C5C;}
.st3{font-family:'ArialMT';}
.st4{font-size:12px;}
</style>
<path class="st0" d="M4.8,26.1h20v1.8h-20V26.1z"/>
<path class="st0" d="M24.7,24.4l4.4,2.6l-4.4,2.7V24.4z"/>
<path class="st1" d="M4.8,27.9l0-20l1.8,0l0,20L4.8,27.9z"/>
<path class="st1" d="M3,8.8l2.7-4.4l2.6,4.4L3,8.8z"/>
<text transform="matrix(1 0 0 1 21.7289 22.6888)" class="st2 st3 st4">x</text>
<text transform="matrix(1 0 0 1 11.2698 11.7012)" class="st2 st3 st4">z</text>
</svg>

After

Width:  |  Height:  |  Size: 910 B

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4D82B6;}
.st1{fill:url(#SVGID_1_);stroke:#657386;stroke-miterlimit:10;}
.st2{fill:#FFFFFF;}
.st3{fill:none;stroke:#657386;stroke-miterlimit:10;}
</style>
<path class="st0" d="M29.3,6.4l-0.6-0.1c-0.1,0-0.3-0.1-0.3-0.2c-0.1-0.3-0.3-0.6-0.5-0.8c-0.1-0.1-0.1-0.3-0.1-0.4L28,4.3
c0.1-0.2,0-0.4-0.2-0.5l-1.4-0.8C26.4,3,26.1,3,26,3.1l-0.4,0.5c-0.1,0.1-0.2,0.2-0.4,0.1c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0
c-0.1,0-0.3,0-0.4-0.1l-0.4-0.5C23.5,3,23.2,3,23.1,3.1l-1.4,0.8c-0.2,0.1-0.2,0.3-0.2,0.5l0.2,0.6c0.1,0.1,0,0.3-0.1,0.4
c-0.2,0.2-0.3,0.5-0.5,0.8c-0.1,0.1-0.2,0.2-0.3,0.2l-0.6,0.1c-0.2,0-0.3,0.2-0.3,0.4v1.6c0,0.2,0.1,0.4,0.3,0.4L21,8.9
c0.1,0,0.3,0.1,0.3,0.2c0.1,0.3,0.3,0.6,0.5,0.8c0.1,0.1,0.1,0.3,0.1,0.4l-0.2,0.6c-0.1,0.2,0,0.4,0.2,0.5l1.4,0.8
c0.2,0.1,0.4,0.1,0.5-0.1l0.4-0.5c0.1-0.1,0.2-0.2,0.4-0.1c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0c0.1,0,0.3,0,0.4,0.1L26,12
c0.1,0.2,0.3,0.2,0.5,0.1l1.4-0.8c0.2-0.1,0.2-0.3,0.2-0.5l-0.2-0.6c-0.1-0.1,0-0.3,0.1-0.4c0.2-0.2,0.3-0.5,0.5-0.8
c0.1-0.1,0.2-0.2,0.3-0.2l0.6-0.1c0.2,0,0.3-0.2,0.3-0.4V6.8C29.6,6.6,29.5,6.5,29.3,6.4z M24.8,9.1c-0.8,0-1.5-0.7-1.5-1.5
s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5S25.6,9.1,24.8,9.1z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.1847" y1="7.9525" x2="24.6161" y2="29.3839">
<stop offset="0" style="stop-color:#FF0000"/>
<stop offset="0.245" style="stop-color:#FFFF00"/>
<stop offset="0.6361" style="stop-color:#00FF00"/>
<stop offset="1" style="stop-color:#0000FF"/>
</linearGradient>
<path class="st1" d="M3.5,7.6H12V17h17v8H3.5C3.5,25,3.5,7.5,3.5,7.6z"/>
<g>
<rect x="17.6" y="17.5" class="st2" width="10.9" height="7"/>
</g>
<line class="st3" x1="17.7" y1="5.8" x2="17.7" y2="9.8"/>
<line class="st3" x1="17.7" y1="10.8" x2="17.7" y2="14.8"/>
<line class="st3" x1="17.7" y1="15.8" x2="17.7" y2="19.8"/>
<line class="st3" x1="17.7" y1="20.8" x2="17.7" y2="24.8"/>
<line class="st3" x1="17.7" y1="26.8" x2="17.7" y2="30.8"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="32px" height="32px" viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#657386;}
.st2{fill:#FE9100;}
</style>
<g>
<rect x="3.5" y="3.5" class="st0" width="25" height="25"/>
<path class="st1" d="M28,4v24H4V4H28 M29,3H3v26h26V3L29,3z"/>
</g>
<path class="st2" d="M10.3,8.5l4.7,4.7l-1.7,1.7l-4.7-4.7L5.8,13V5.8h7.3L10.3,8.5z M21.8,23.5l-4.7-4.7l1.7-1.7l4.7,4.7l2.8-2.8
v7.3H19C19.1,26.2,21.8,23.5,21.8,23.5z M23.5,10.2l-4.7,4.7l-1.7-1.7l4.7-4.7l-2.7-2.7h7.3V13C26.3,13,23.5,10.2,23.5,10.2z
M8.6,21.8l4.7-4.7l1.7,1.7l-4.7,4.7l2.7,2.7H5.8V19L8.6,21.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 921 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save