Release 2023.06

This commit is contained in:
Magne Sjaastad
2023-06-19 13:48:44 +02:00
committed by GitHub
parent a7108f0a09
commit 77bf792b1a
1390 changed files with 66974 additions and 11511 deletions

View File

@@ -14,7 +14,7 @@ jobs:
- name: Set apt mirror
# see https://github.com/actions/runner-images/issues/7048
if: "contains( matrix.os, 'ubuntu')"
if: ${{contains( matrix.os, 'ubuntu') }}
run: |
# make sure there is a `\t` between URL and `priority:*` attributes
printf 'http://azure.archive.ubuntu.com/ubuntu priority:1\n' | sudo tee /etc/apt/mirrors.txt
@@ -22,7 +22,7 @@ jobs:
sudo sed -i 's/http:\/\/azure.archive.ubuntu.com\/ubuntu\//mirror+file:\/etc\/apt\/mirrors.txt/' /etc/apt/sources.list
- name: Install Linux dependencies
if: "contains( matrix.os, 'ubuntu')"
if: ${{contains( matrix.os, 'ubuntu') }}
run: |
sudo apt-get update --option="APT::Acquire::Retries=3"
sudo apt-get install --option="APT::Acquire::Retries=3" libxkbcommon-x11-0 libgl1-mesa-dev mesa-common-dev libglfw3-dev libglu1-mesa-dev
@@ -35,27 +35,48 @@ jobs:
dir: "${{ github.workspace }}/Qt/"
cache: true
- name: Build AppFwk with Unit Tests
uses: lukka/run-cmake@v3
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: "${{ github.workspace }}/Fwk/AppFwk/CMakeLists.txt"
buildDirectory: ${{ github.workspace }}/cmakebuild
buildWithCMakeArgs: "--config Release"
useVcpkgToolchainFile: false
- name: Get CMake and Ninja
uses: lukka/get-cmake@latest
- name: Run Unit Tests Windows
if: contains( matrix.os, 'windows')
shell: bash
- name: Use MSVC (Windows)
uses: ilammy/msvc-dev-cmd@v1
- name: Configure
shell: cmake -P {0}
run: |
cmakebuild/cafProjectDataModel/cafPdmCore/cafPdmCore_UnitTests/Release/cafPdmCore_UnitTests
cmakebuild/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/Release/cafPdmXml_UnitTests
cmakebuild/cafProjectDataModel/cafProjectDataModel_UnitTests/Release/cafProjectDataModel_UnitTests
execute_process(
COMMAND cmake
-S Fwk/AppFwk
-B cmakebuild
-G Ninja
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Build
shell: cmake -P {0}
run: |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ")
execute_process(
COMMAND cmake --build cmakebuild
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Run Unit Tests Linux
if: "!contains( matrix.os, 'windows')"
- name: Run Unit Tests
shell: bash
run: |
cmakebuild/cafProjectDataModel/cafPdmCore/cafPdmCore_UnitTests/cafPdmCore_UnitTests
cmakebuild/cafProjectDataModel/cafPdmXml/cafPdmXml_UnitTests/cafPdmXml_UnitTests
cmakebuild/cafProjectDataModel/cafProjectDataModel_UnitTests/cafProjectDataModel_UnitTests
cmakebuild/cafPdmScripting/cafPdmScripting_UnitTests/cafPdmScripting_UnitTests
- name: Run Unit Tests Windows (does not work on Linux)
if: contains( matrix.os, 'windows')
shell: bash
run: |
cmakebuild/cafUserInterface/cafUserInterface_UnitTests/cafUserInterface_UnitTests

View File

@@ -6,7 +6,7 @@ on:
schedule:
# Every day at 1am to make sure we have a build cache for the current date
# build cache is
- cron: "0 1 * * * "
- cron: '0 1 * * *'
env:
BUILD_TYPE: Release
BUILDCACHE_VERSION: 0.27.6
@@ -33,6 +33,7 @@ jobs:
vcpkg-triplet: x64-windows,
build-python-module: true,
execute-unit-tests: true,
unity-build: true,
}
- {
name: "Ubuntu Latest gcc",
@@ -43,6 +44,7 @@ jobs:
vcpkg-triplet: x64-linux,
build-python-module: true,
execute-unit-tests: true,
unity-build: false,
}
- {
name: "Ubuntu Latest clang",
@@ -53,6 +55,7 @@ jobs:
vcpkg-triplet: x64-linux,
build-python-module: true,
execute-unit-tests: true,
unity-build: false,
}
steps:
- name: Checkout
@@ -134,7 +137,7 @@ jobs:
- name: Set apt mirror
# see https://github.com/actions/runner-images/issues/7048
if: "contains( matrix.config.os, 'ubuntu')"
if: ${{contains( matrix.config.os, 'ubuntu') }}
run: |
# make sure there is a `\t` between URL and `priority:*` attributes
printf 'http://azure.archive.ubuntu.com/ubuntu priority:1\n' | sudo tee /etc/apt/mirrors.txt
@@ -142,7 +145,7 @@ jobs:
sudo sed -i 's/http:\/\/azure.archive.ubuntu.com\/ubuntu\//mirror+file:\/etc\/apt\/mirrors.txt/' /etc/apt/sources.list
- name: Install Linux dependencies
if: "contains( matrix.config.os, 'ubuntu')"
if: ${{contains( matrix.config.os, 'ubuntu') }}
run: |
sudo apt-get update --option="APT::Acquire::Retries=3"
sudo apt-get install --option="APT::Acquire::Retries=3" libxkbcommon-x11-0 libgl1-mesa-dev mesa-common-dev libglfw3-dev libglu1-mesa-dev libhdf5-dev
@@ -152,14 +155,9 @@ jobs:
uses: jurplel/install-qt-action@v3
with:
version: 5.12.12
modules: qtscript
dir: "${{ github.workspace }}/Qt/"
cache: true
- name: Set vcpkg's response file path used as part of cache's key.
uses: lukka/set-shell-env@master
with:
VCPKGRESPONSEFILE: ${{ github.workspace }}/${{ matrix.config.vcpkg-response-file }}
- name: Restore from cache and install vcpkg
uses: lukka/run-vcpkg@v7
id: runvcpkg
@@ -167,18 +165,17 @@ jobs:
vcpkgArguments: "@${{ github.workspace }}/${{ matrix.config.vcpkg-response-file }}"
vcpkgDirectory:
"${{ github.workspace }}/ThirdParty/vcpkg"
# Ensure the cache key changes any time the content of the response file changes.
appendedCacheKey: ${{ hashFiles(env.VCPKGRESPONSEFILE) }}-cache-key-v2
appendedCacheKey: ${{ matrix.config.os }}-${{ matrix.config.cxx }}-cache-key-v2
- name: Cache dynamic version of OpenSSL (Linux)
if: "contains( matrix.config.os, 'ubuntu_disabled')"
if: ${{contains( matrix.config.os, 'ubuntu_disabled') }}
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/ThirdParty/vcpkg/installed/x64-linux-dynamic
key: ${{ matrix.config.os }}-vcpkg-x64-linux-dynamic_v05
- name: Install dynamic version of OpenSSL (Linux)
if: "contains( matrix.config.os, 'ubuntu')"
if: ${{contains( matrix.config.os, 'ubuntu') }}
run: |
$VCPKG_ROOT/vcpkg install --overlay-triplets=${{ github.workspace }}/ThirdParty/vcpkg-custom-triplets --triplet x64-linux-dynamic openssl
@@ -197,9 +194,12 @@ jobs:
-D RESINSIGHT_BUNDLE_OPENSSL=true
-D RESINSIGHT_INCLUDE_APPLICATION_UNIT_TESTS=true
-D RESINSIGHT_TREAT_WARNINGS_AS_ERRORS=true
-D RESINSIGHT_ENABLE_UNITY_BUILD=${{ matrix.config.unity-build }}
-D RESINSIGHT_ENABLE_GRPC=${{ matrix.config.build-python-module }}
-D RESINSIGHT_GRPC_PYTHON_EXECUTABLE=${{ steps.python-path.outputs.PYTHON_EXECUTABLE }}
-D RESINSIGHT_GRPC_DOWNLOAD_PYTHON_MODULE=true
-D RESINSIGHT_ENABLE_HDF5=false
-D RESINSIGHT_BUILD_LIBS_FROM_SOURCE=false
-D CMAKE_TOOLCHAIN_FILE=ThirdParty/vcpkg/scripts/buildsystems/vcpkg.cmake
-G Ninja
RESULT_VARIABLE result
@@ -222,13 +222,13 @@ jobs:
- name: Stats for buildcache
run: ${{ github.workspace }}/buildcache/bin/buildcache -s
- name: Run Unit Tests
if: "matrix.config.execute-unit-tests == true"
if: matrix.config.execute-unit-tests == 'true'
shell: bash
run: |
cmakebuild/ApplicationExeCode/ResInsight --unittest
- name: Run pytest
if: "matrix.config.build-python-module == true"
if: matrix.config.build-python-module == 'true'
env:
RESINSIGHT_EXECUTABLE: ${{ runner.workspace }}/ResInsight/cmakebuild/ApplicationExeCode/ResInsight
run: |

View File

@@ -4,7 +4,7 @@ on: [push]
jobs:
clang-format-job:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: Set apt mirror
# GitHub Actions apt proxy is super unstable
@@ -15,27 +15,28 @@ jobs:
curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
sudo sed -i 's/http:\/\/azure.archive.ubuntu.com\/ubuntu\//mirror+file:\/etc\/apt\/mirrors.txt/' /etc/apt/sources.list
- name: Install clang-format 10.0
- name: Install clang-format 15.0
run: |
sudo apt-get install --option="APT::Acquire::Retries=3" clang-format-10
clang-format-10 --version
sudo apt-get update
sudo apt-get install --option="APT::Acquire::Retries=3" clang-format-15
clang-format-15 --version
- uses: actions/checkout@v3
- name: Check format - ApplicationLibCode
run: |
cd ApplicationLibCode
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | xargs clang-format-10 -i
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | xargs clang-format-15 -i
git diff
- name: Check format - ApplicationExeCode
run: |
cd ApplicationExeCode
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | xargs clang-format-10 -i
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | xargs clang-format-15 -i
git diff
- name: Check format - AppFwk
run: |
cd Fwk/AppFwk
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | grep -v gtest | xargs clang-format-10 -i
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | grep -v gtest | xargs clang-format-15 -i
git diff
- uses: peter-evans/create-pull-request@v4
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Fixes by clang-format"

View File

@@ -1,21 +1,25 @@
name: clang-tidy
on:
push:
paths:
- '**.clang-tidy'
workflow_dispatch:
schedule:
# Once every night
- cron: "0 1 * * * "
- cron: "0 1 * * *"
jobs:
ResInsight-x64-buildcache:
runs-on: ${{ matrix.config.os }}
continue-on-error: true
strategy:
fail-fast: false
matrix:
config:
- {
name: "Ubuntu 20.04",
os: ubuntu-20.04,
name: "Ubuntu 22.04",
os: ubuntu-22.04,
cc: "gcc",
cxx: "g++",
vcpkg-response-file: vcpkg_x64-linux.txt,
@@ -29,10 +33,11 @@ jobs:
submodules: true
- name: Install Linux dependencies
if: "contains( matrix.config.os, 'ubuntu')"
if: ${{contains( matrix.config.os, 'ubuntu') }}
run: |
sudo apt-get update --option="APT::Acquire::Retries=3"
sudo apt-get install --option="APT::Acquire::Retries=3" libxkbcommon-x11-0 libgl1-mesa-dev mesa-common-dev libglfw3-dev libglu1-mesa-dev libhdf5-dev
sudo apt-get install clang-tidy-15 clang-format-15
- name: Install Qt
uses: jurplel/install-qt-action@v3
@@ -42,10 +47,6 @@ jobs:
dir: "${{ github.workspace }}/Qt/"
cache: true
- name: Set vcpkg's response file path used as part of cache's key.
uses: lukka/set-shell-env@master
with:
VCPKGRESPONSEFILE: ${{ github.workspace }}/${{ matrix.config.vcpkg-response-file }}
- name: Run vcpkg
uses: lukka/run-vcpkg@v7
id: runvcpkg
@@ -53,44 +54,29 @@ jobs:
vcpkgArguments: "@${{ github.workspace }}/${{ matrix.config.vcpkg-response-file }}"
vcpkgDirectory:
"${{ github.workspace }}/ThirdParty/vcpkg"
# Ensure the cache key changes any time the content of the response file changes.
appendedCacheKey: ${{ hashFiles(env.VCPKGRESPONSEFILE) }}-clang-tidy-v01
- name: Create compile commands and run clang-tidy
# https://clang.llvm.org/extra/doxygen/run-clang-tidy_8py_source.html
run: |
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=${{ matrix.config.cmake-toolchain }} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
sudo apt-get install clang-tidy
cmake -DCMAKE_TOOLCHAIN_FILE=${{ matrix.config.cmake-toolchain }} -DRESINSIGHT_USE_OPENMP=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
mv compile_commands.json compile_commands_original.json
python ../scripts/fix_json_database.py compile_commands_original.json >> compile_commands.json
- name: clang-tidy on ApplicationLibCode/Application
- name: Run clang-tidy and apply fixes, clang-format after fixes
run: |
cd build
run-clang-tidy -fix files ApplicationLibCode/Application
- name: clang-tidy on ApplicationLibCode/ProjectDataModel
run-clang-tidy-15 -fix files ApplicationLibCode/Application ApplicationLibCode/ProjectDataModel ApplicationLibCode/ReservoirDataModel ApplicationLibCode/Commands ApplicationLibCode/GeoMech
- name: Run clang-format after clang-tidy
run: |
cd build
run-clang-tidy -fix files ApplicationLibCode/ProjectDataModel
- name: clang-tidy on ApplicationLibCode/ReservoirDataModel
run: |
cd build
run-clang-tidy -fix files ApplicationLibCode/ReservoirDataModel
- name: clang-tidy on ApplicationLibCode/Commands
run: |
cd build
run-clang-tidy -fix files ApplicationLibCode/Commands
- name: clang-tidy on ApplicationLibCode/GeoMech
run: |
cd build
run-clang-tidy -fix files ApplicationLibCode/GeoMech
cd build/ApplicationLibCode
find -name '*.h' -o -name '*.cpp' -o -name '*.inl' | xargs clang-format-15 -i
- name: Remove Qt before creating PR
run: |
rm -rf Qt
cd ThirdParty/vcpkg
git reset --hard HEAD
git clean -fxd
- uses: peter-evans/create-pull-request@v4
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Fixes by clang-tidy"

20
.github/workflows/close-label.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Set label 'PendingRelease' on closed issues
on:
issues:
types:
- closed
jobs:
label_issues:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ["PendingRelease"]
})

View File

@@ -28,7 +28,7 @@ jobs:
cd ..
git diff
- uses: peter-evans/create-pull-request@v4
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Fixes by cmake-format"

View File

@@ -8,12 +8,14 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: (Python) Use black to do linting
run: |
pip install black
cd GrpcInterface
black .
- uses: peter-evans/create-pull-request@v4
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Python code linting changes detected by black"

View File

@@ -11,7 +11,7 @@ jobs:
- uses: sobolevn/misspell-fixer-action@master
with:
options: "-rsvnuR ApplicationLibCode/"
- uses: peter-evans/create-pull-request@v4
- uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Fixes by misspell-fixer"

6
.gitmodules vendored
View File

@@ -16,3 +16,9 @@
[submodule "ThirdParty/roffcpp"]
path = ThirdParty/roffcpp
url = https://github.com/CeetronSolutions/roffcpp
[submodule "ThirdParty/openzgy"]
path = ThirdParty/openzgy
url = https://github.com/CeetronSolutions/openzgy.git
[submodule "ThirdParty/regression-analysis"]
path = ThirdParty/regression-analysis
url = https://github.com/CeetronSolutions/regression-analysis.git

View File

@@ -256,8 +256,10 @@ endif()
# According to ivarun rt is needed on OpenSuse, and Fedora. See:
# https://github.com/OPM/ResInsight/pull/7
#
# atomic is needed by openzgy library
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
list(APPEND THIRD_PARTY_LIBRARIES rt)
list(APPEND THIRD_PARTY_LIBRARIES rt atomic)
endif()
set(LINK_LIBRARIES
@@ -275,9 +277,10 @@ if(RESINSIGHT_ENABLE_GRPC)
list(APPEND LINK_LIBRARIES GrpcInterface)
endif()
list(APPEND LINK_LIBRARIES RigGeoMechDataModel)
if(RESINSIGHT_USE_ODB_API)
add_definitions(-DUSE_ODB_API)
list(APPEND LINK_LIBRARIES RigGeoMechDataModel)
list(APPEND LINK_LIBRARIES RifOdbReader)
endif()
@@ -332,24 +335,53 @@ if(MSVC)
endforeach(aDLL)
foreach(aDLL ${RI_ODB_DLLS})
list(APPEND RI_DLL_FILENAMES ${RESINSIGHT_ODB_API_DIR}/lib/${aDLL})
list(APPEND RI_FILENAMES ${RESINSIGHT_ODB_API_DIR}/lib/${aDLL})
endforeach()
endif()
# OpenVDS Dlls
set(OPENVDS_DLL_NAMES openvds segyutils)
foreach(OPENVDS_DLL_NAME ${OPENVDS_DLL_NAMES})
list(APPEND RI_FILENAMES
${RESINSIGHT_OPENVDS_API_DIR}/bin/msvc_141/${OPENVDS_DLL_NAME}.dll
)
endforeach(OPENVDS_DLL_NAME)
list(APPEND RI_FILENAMES
${RESINSIGHT_OPENVDS_API_DIR}/bin/msvc_141/SEGYImport.exe
)
# HDF5 Dlls
if(RESINSIGHT_FOUND_HDF5)
set(HDF5_DLL_NAMES hdf5 hdf5_cpp szip zlib)
foreach(HDF5_DLL_NAME ${HDF5_DLL_NAMES})
list(APPEND RI_DLL_FILENAMES
${RESINSIGHT_HDF5_DIR}/bin/${HDF5_DLL_NAME}.dll
)
list(APPEND RI_FILENAMES ${RESINSIGHT_HDF5_DIR}/bin/${HDF5_DLL_NAME}.dll)
endforeach(HDF5_DLL_NAME)
endif()
else()
# Linux
# OpenVDS lib files
list(APPEND RI_FILENAMES ${RESINSIGHT_OPENVDS_API_DIR}/bin/SEGYImport)
set(OPENVDS_LIB_NAMES
libopenvds.so
libopenvds.so.3
libopenvds.so.3.2.3
libopenvds-968eeb36.so.3.2.3
libsegyutils.so
libsegyutils.so.3
libsegyutils.so.3.2.3
)
foreach(OPENVDS_LIB_NAME ${OPENVDS_LIB_NAMES})
list(APPEND RI_FILENAMES
${RESINSIGHT_OPENVDS_API_DIR}/lib64/${OPENVDS_LIB_NAME}
)
endforeach(OPENVDS_LIB_NAME)
endif(MSVC)
# Copy to target directory
foreach(FILE_TO_COPY ${RI_DLL_FILENAMES})
# Copy dependencies to make it possible to run ResInsight from the build folder
foreach(FILE_TO_COPY ${RI_FILENAMES})
add_custom_command(
TARGET ResInsight
POST_BUILD
@@ -503,7 +535,7 @@ if(RESINSIGHT_PRIVATE_INSTALL)
CODE "exec_program (\"${CMAKE_COMMAND}\" ARGS -E touch \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}ResInsight${CMAKE_EXECUTABLE_SUFFIX}.local)"
)
set(RESINSIGHT_FILES ${RI_DLL_FILENAMES})
set(RESINSIGHT_FILES ${RI_FILENAMES})
if(WIN32
AND TARGET Qt5::qmake

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

View File

@@ -2,5 +2,5 @@
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<polygon points="8,4 8,7 15,7 4,18 6,20 17,9 17,16 20,16 20,4 "/>
<polygon stroke="#5F6368" fill="#5F6368" points="8,4 8,7 15,7 4,18 6,20 17,9 17,16 20,16 20,4 "/>
</svg>

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -145,8 +145,6 @@
<file>SummaryPlotLight16x16.png</file>
<file>SummaryPlots16x16.png</file>
<file>SummaryPlotsLight16x16.png</file>
<file>SummaryTemplate16x16.png</file>
<file>SummaryEnsembleTemplate16x16.png</file>
<file>SummaryXPlotLight16x16.png</file>
<file>SummaryXPlotsLight16x16.png</file>
<file>Swap.png</file>
@@ -274,6 +272,13 @@
<file>DataVector.svg</file>
<file>DataVectorCalculated.svg</file>
<file>open-text-editor.svg</file>
<file>Seismic16x16.png</file>
<file>SeismicDelta16x16.png</file>
<file>Fullscreen.png</file>
<file>plot-template-standard.svg</file>
<file>plot-template-ensemble.svg</file>
<file>decline-curve.svg</file>
<file>regression-curve.svg</file>
</qresource>
<qresource prefix="/Shader">
<file>fs_CellFace.glsl</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 952 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -3,23 +3,24 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:#5F6368;stroke:#5F6368;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;}
</style>
<path class="st0" d="M4.4,1.6L6,3.3c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0s-0.9-2.4,0-3.3c0,0,0,0,0,0L4.4,1.6z"/>
<path class="st0" d="M12,1.6l1.6,1.6c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0c-0.9-0.9-0.9-2.4,0-3.3c0,0,0,0,0,0L12,1.6z"/>
<path class="st0" d="M19.3,1.6L21,3.3c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0c-0.9-0.9-0.9-2.4,0-3.3c0,0,0,0,0,0L19.3,1.6z"/>
<line class="st0" x1="1.5" y1="9.5" x2="22.2" y2="9.5"/>
<line class="st0" x1="1.5" y1="15.1" x2="22.2" y2="15.1"/>
<circle cx="4.4" cy="11.4" r="0.5"/>
<circle cx="11.9" cy="11.4" r="0.5"/>
<circle cx="19.4" cy="11.4" r="0.5"/>
<circle cx="4.4" cy="13.5" r="0.5"/>
<circle cx="11.9" cy="13.5" r="0.5"/>
<circle cx="19.4" cy="13.5" r="0.5"/>
<circle cx="8.1" cy="11.3" r="0.5"/>
<circle cx="8.1" cy="13.4" r="0.5"/>
<circle cx="15.6" cy="11.3" r="0.5"/>
<circle cx="15.6" cy="13.4" r="0.5"/>
<circle class="st1" cx="4.4" cy="11.4" r="0.5"/>
<circle class="st1" cx="11.9" cy="11.4" r="0.5"/>
<circle class="st1" cx="19.4" cy="11.4" r="0.5"/>
<circle class="st1" cx="4.4" cy="13.5" r="0.5"/>
<circle class="st1" cx="11.9" cy="13.5" r="0.5"/>
<circle class="st1" cx="19.4" cy="13.5" r="0.5"/>
<circle class="st1" cx="8.1" cy="11.3" r="0.5"/>
<circle class="st1" cx="8.1" cy="13.4" r="0.5"/>
<circle class="st1" cx="15.6" cy="11.3" r="0.5"/>
<circle class="st1" cx="15.6" cy="13.4" r="0.5"/>
<path class="st0" d="M4.4,17.3L6,18.9c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0s-0.9-2.4,0-3.3c0,0,0,0,0,0L4.4,17.3z"/>
<path class="st0" d="M12,17.3l1.6,1.6c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0c-0.9-0.9-0.9-2.4,0-3.3c0,0,0,0,0,0L12,17.3z"/>
<path class="st0" d="M19.3,17.3l1.6,1.6c0.9,0.9,0.9,2.4,0,3.3s-2.4,0.9-3.3,0c-0.9-0.9-0.9-2.4,0-3.3c0,0,0,0,0,0L19.3,17.3z"/>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-box"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-box"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>

Before

Width:  |  Height:  |  Size: 463 B

After

Width:  |  Height:  |  Size: 458 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-divide-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-divide-square"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="8" y1="12" x2="16" y2="12"></line><line x1="12" y1="16" x2="12" y2="16"></line><line x1="12" y1="8" x2="12" y2="8"></line></svg>

Before

Width:  |  Height:  |  Size: 419 B

After

Width:  |  Height:  |  Size: 414 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>

Before

Width:  |  Height:  |  Size: 425 B

After

Width:  |  Height:  |  Size: 420 B

View File

@@ -3,8 +3,8 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#5F6368;stroke-linecap:round;stroke-linejoin:round;}
</style>
<path class="st0" d="M21,16V8c0-0.7-0.4-1.4-1-1.7l-7-4c-0.6-0.4-1.4-0.4-2,0l-7,4C3.4,6.6,3,7.3,3,8v8c0,0.7,0.4,1.4,1,1.7l7,4
c0.6,0.4,1.4,0.4,2,0l7-4C20.6,17.4,21,16.7,21,16z"/>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-grid"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-grid"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg>

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 400 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-circle"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 352 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-more-horizontal"><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg>

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 339 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-share-2"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-share-2"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 441 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder-plus"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder-plus"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><line x1="12" y1="11" x2="12" y2="17"></line><line x1="9" y1="14" x2="15" y2="14"></line></svg>

Before

Width:  |  Height:  |  Size: 406 B

After

Width:  |  Height:  |  Size: 401 B

View File

@@ -3,8 +3,8 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#5F6368;stroke-linecap:round;stroke-linejoin:round;}
</style>
<path class="st0" d="M14.6,17.8c0.7,0.4,1,0.9,1,1.4c0,1.3-2.7,2.4-6,2.4s-6-1.1-6-2.4c0-0.6,0.4-1.1,1.2-1.5"/>
<path class="st0" d="M15.5,8.7c0,4.6-5.9,8.5-5.9,8.5s-5.9-4-5.9-8.5c0-3.2,2.6-5.9,5.9-5.9S15.5,5.4,15.5,8.7z"/>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -3,7 +3,7 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
</style>
<path class="st0" d="M18.8,16.7c0.9,0.5,1.4,1.2,1.4,1.9c0,1.8-3.7,3.3-8.2,3.3s-8.2-1.5-8.2-3.3c0-0.8,0.6-1.5,1.7-2"/>
<path class="st0" d="M17.9,9c0,4.6-5.9,8.5-5.9,8.5S6.1,13.5,6.1,9c0-3.2,2.6-5.9,5.9-5.9S17.9,5.7,17.9,9z"/>

Before

Width:  |  Height:  |  Size: 745 B

After

Width:  |  Height:  |  Size: 745 B

View File

@@ -4,11 +4,11 @@
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.97;}
.st1{fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
.st2{fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.7582,1.7582;}
.st3{fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.3703,2.3703;}
.st1{fill:none;stroke:#5F6368;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
.st2{fill:none;stroke:#5F6368;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.7582,1.7582;}
.st3{fill:none;stroke:#5F6368;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.3703,2.3703;}
</style>
<path d="M12,2.4c-5.3,0-9.6,4.3-9.6,9.6s4.3,9.6,9.6,9.6s9.6-4.3,9.6-9.6c0,0-9.6,0-9.6,0V2.4z"/>
<path stroke="#5F6368" fill="#5F6368" d="M12,2.4c-5.3,0-9.6,4.3-9.6,9.6s4.3,9.6,9.6,9.6s9.6-4.3,9.6-9.6c0,0-9.6,0-9.6,0V2.4z"/>
<g class="st0">
<g>
<path class="st1" d="M14.3,0.6c0.3,0,0.7,0,1,0.1"/>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-help-circle"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#5F6368" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-help-circle"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 361 B

View File

@@ -3,23 +3,23 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#5F6368;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;}
</style>
<line class="st0" x1="6.1" y1="20.7" x2="10" y2="8.9"/>
<line class="st0" x1="13.9" y1="8.9" x2="17.8" y2="20.8"/>
<line class="st0" x1="12" y1="5.8" x2="12" y2="22.6"/>
<line class="st1" x1="6.8" y1="18.5" x2="17.6" y2="20.2"/>
<line class="st1" x1="9.4" y1="10.7" x2="15" y2="12.3"/>
<path d="M3.7,13.6"/>
<path d="M12.5,10.2h-1c-0.9,0-2.8-1.7-2.9-1.7V7.3c0-0.3,0.2-0.5,0.5-0.5H15c0.3,0,0.5,0.2,0.5,0.5v1.2
<path stroke="#5F6368" fill="#5F6368"d="M3.7,13.6"/>
<path stroke="#5F6368" fill="#5F6368" d="M12.5,10.2h-1c-0.9,0-2.8-1.7-2.9-1.7V7.3c0-0.3,0.2-0.5,0.5-0.5H15c0.3,0,0.5,0.2,0.5,0.5v1.2
C15.5,8.5,13.4,10.2,12.5,10.2z"/>
<path d="M16.5,16.1H7.4c-0.4,0-0.7-0.3-0.7-0.7v-0.2c0-0.4,0.3-0.7,0.7-0.7h9.1c0.4,0,0.7,0.3,0.7,0.7v0.2
<path stroke="#5F6368" fill="#5F6368" d="M16.5,16.1H7.4c-0.4,0-0.7-0.3-0.7-0.7v-0.2c0-0.4,0.3-0.7,0.7-0.7h9.1c0.4,0,0.7,0.3,0.7,0.7v0.2
C17.2,15.8,16.9,16.1,16.5,16.1z"/>
<line class="st1" x1="8.2" y1="14.5" x2="15" y2="12.3"/>
<line class="st1" x1="6.8" y1="18.5" x2="16.3" y2="16.1"/>
<path d="M14.3,4.1c0,0.7-0.5,0.2-1,0.4c-0.6,0.3-0.7,0.6-1,0.5c-0.2,0,0.4-1.2,0.9-1.3C13.8,3.5,14.3,3.8,14.3,4.1z"/>
<path d="M16.4,1.5c-0.1,0.9-0.9,0.3-1.8,0.5c-1.2,0.3-1.3,0.8-1.8,0.7c-0.4-0.1,0.9-1.6,1.8-1.8C15.6,0.6,16.4,1.1,16.4,1.5z"/>
<path d="M9.9,3.4c0,0.7,0.5,0.2,1,0.4c0.6,0.3,0.7,0.6,1,0.5c0.2,0-0.4-1.2-0.9-1.3C10.3,2.9,9.8,3.2,9.9,3.4z"/>
<path d="M8.5,1.3c0,0.9,0.8,0.3,1.5,0.6c1,0.3,1.1,0.8,1.5,0.7c0.3-0.1-0.6-1.5-1.4-1.8C9.2,0.6,8.5,1,8.5,1.3z"/>
<path stroke="#5F6368" fill="#5F6368" d="M14.3,4.1c0,0.7-0.5,0.2-1,0.4c-0.6,0.3-0.7,0.6-1,0.5c-0.2,0,0.4-1.2,0.9-1.3C13.8,3.5,14.3,3.8,14.3,4.1z"/>
<path stroke="#5F6368" fill="#5F6368" d="M16.4,1.5c-0.1,0.9-0.9,0.3-1.8,0.5c-1.2,0.3-1.3,0.8-1.8,0.7c-0.4-0.1,0.9-1.6,1.8-1.8C15.6,0.6,16.4,1.1,16.4,1.5z"/>
<path stroke="#5F6368" fill="#5F6368" d="M9.9,3.4c0,0.7,0.5,0.2,1,0.4c0.6,0.3,0.7,0.6,1,0.5c0.2,0-0.4-1.2-0.9-1.3C10.3,2.9,9.8,3.2,9.9,3.4z"/>
<path stroke="#5F6368" fill="#5F6368" d="M8.5,1.3c0,0.9,0.8,0.3,1.5,0.6c1,0.3,1.1,0.8,1.5,0.7c0.3-0.1-0.6-1.5-1.4-1.8C9.2,0.6,8.5,1,8.5,1.3z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -3,9 +3,9 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st2{fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;}
.st0{fill:none;stroke:#5F6368;stroke-linecap:round;stroke-linejoin:round;}
.st1{fill:none;stroke:#5F6368;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.st2{fill:none;stroke:#5F6368;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;}
</style>
<line class="st0" x1="6.1" y1="20.7" x2="12" y2="8.9"/>
<line class="st0" x1="12" y1="8.9" x2="17.8" y2="20.8"/>
@@ -13,7 +13,7 @@
<line class="st0" x1="7.7" y1="17.6" x2="16.2" y2="17.6"/>
<line class="st0" x1="9.6" y1="13.7" x2="14.4" y2="13.7"/>
<line class="st1" x1="7.1" y1="6.2" x2="22.1" y2="14"/>
<path d="M6.6,11.5l-2.9,2.1c-0.5,0.3-1.1,0-1-0.6L3,9.4l4.3-7.6c0,0,1.7-0.5,2.5,0c0.7,0.4,1.1,2.1,1.1,2.1L6.6,11.5z"/>
<rect x="20.7" y="17.6" width="2.6" height="3.5"/>
<path stroke="#5F6368" fill="#5F6368" d="M6.6,11.5l-2.9,2.1c-0.5,0.3-1.1,0-1-0.6L3,9.4l4.3-7.6c0,0,1.7-0.5,2.5,0c0.7,0.4,1.1,2.1,1.1,2.1L6.6,11.5z"/>
<rect stroke="#5F6368" fill="#5F6368" x="20.7" y="17.6" width="2.6" height="3.5"/>
<line class="st2" x1="22" y1="14" x2="22" y2="19.4"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 3.5C13 2.119 10.761 1 8 1C5.239 1 3 2.119 3 3.5C3 3.54 3.02 3.577 3.024 3.617H3V12.489L3.056 12.846C3.336 14.056 5.429 15 8 15C10.571 15 12.664 14.056 12.944 12.846L13 12.489V3.617H12.976C12.98 3.577 13 3.54 13 3.5ZM8 2.032C10.442 2.032 12 2.996 12 3.5C12 4.004 10.442 4.968 8 4.968C5.558 4.968 4 4 4 3.5C4 3 5.558 2.032 8 2.032ZM12 12.49L11.97 12.621C11.855 13.116 10.431 14 8 14C5.569 14 4.145 13.116 4.03 12.621L4 12.49V4.99C5.21092 5.69833 6.59796 6.04855 8 6C9.40243 6.04734 10.7895 5.69572 12 4.986V12.486V12.49Z" fill="#424242"/>
<path d="M13 3.5C13 2.119 10.761 1 8 1C5.239 1 3 2.119 3 3.5C3 3.54 3.02 3.577 3.024 3.617H3V12.489L3.056 12.846C3.336 14.056 5.429 15 8 15C10.571 15 12.664 14.056 12.944 12.846L13 12.489V3.617H12.976C12.98 3.577 13 3.54 13 3.5ZM8 2.032C10.442 2.032 12 2.996 12 3.5C12 4.004 10.442 4.968 8 4.968C5.558 4.968 4 4 4 3.5C4 3 5.558 2.032 8 2.032ZM12 12.49L11.97 12.621C11.855 13.116 10.431 14 8 14C5.569 14 4.145 13.116 4.03 12.621L4 12.49V4.99C5.21092 5.69833 6.59796 6.04855 8 6C9.40243 6.04734 10.7895 5.69572 12 4.986V12.486V12.49Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 24 24"
style="enable-background:new 0 0 24 24;"
xml:space="preserve"
sodipodi:docname="decline-curve.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs36"><rect
x="3.3651412"
y="2.1265823"
width="18.835443"
height="19.793574"
id="rect250" /></defs><sodipodi:namedview
id="namedview34"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="42.791667"
inkscape:cx="7.8169425"
inkscape:cy="11.731256"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style20">
.st0{fill:url(#SVGID_1_);stroke:#8F9090;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st1{fill:none;stroke:#8DC584;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="1.1804"
y1="12.4846"
x2="22.8196"
y2="12.4846">
<stop
offset="1.118836e-07"
style="stop-color:#9D9D9C"
id="stop22" />
<stop
offset="0.5652"
style="stop-color:#CECECE"
id="stop24" />
<stop
offset="1"
style="stop-color:#5C5C5B"
id="stop26" />
</linearGradient>
<path
class="st1"
d="M -0.00605706,15.819399"
id="path31"
style="stroke:#bd0733;stroke-opacity:1;stroke-width:1.98604205;stroke-dasharray:none" />
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bd0733;stroke-width:1.565;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 2.4077345,0.80063714 3.81634,8.62890286 5.4896595,4.489577 9.570206,3.94828"
id="path4987" /><path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bd0733;stroke-width:1.465;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="M 4.700913,5.9856087 C 4.637569,6.0857332 4.5585215,6.1779002 4.5108819,6.2859813 c -0.051071,0.1158674 0.025688,0.1399555 0.053646,0.2353594 0.017368,0.059267 0.01643,0.1222573 0.026823,0.1830572 0.02173,0.1271177 -0.01461,0.2640694 0,0.3922657 0.014935,0.1310479 0.04141,0.2610464 0.053646,0.3922658 0.048669,0.521948 0.048905,1.0459338 0.080469,1.5690624 0.03245,0.5378441 0.1713768,1.0952752 0.2682293,1.6213642 0.1219286,0.662301 0.1819265,1.447159 0.4559901,2.065933 0.08573,0.193562 0.2197557,0.363325 0.3218754,0.549173 0.032154,0.05851 0.050016,0.123679 0.080469,0.183057 0.023315,0.04547 0.065488,0.08207 0.080469,0.130755 0.012846,0.04175 -0.00494,0.08743 0,0.130755 0.01951,0.171195 0.028787,0.04125 0.080469,0.209209 0.015627,0.05078 0.00963,0.1066 0.026823,0.156906 0.036756,0.107507 0.093932,0.207478 0.1341147,0.313812 0.022503,0.05954 0.02671,0.125285 0.053646,0.183058 0.018499,0.03968 0.062313,0.06477 0.080469,0.104608 0.018516,0.04062 0.010812,0.08913 0.026823,0.130755 0.011317,0.02943 0.03923,0.05035 0.053646,0.07846 0.021533,0.04199 0.03004,0.08984 0.053646,0.130755 0.123227,0.213582 0.2781483,0.415727 0.4023441,0.627625 0.028056,0.04786 0.019717,0.112801 0.053646,0.156906 0.011996,0.0156 0.042556,0.01 0.053646,0.02615 0.053416,0.07812 0.067443,0.176041 0.1072916,0.261511 0.073304,0.157229 0.1639831,0.319751 0.2414065,0.470718 0.021533,0.04199 0.028874,0.09051 0.053646,0.130755 0.029455,0.04786 0.077837,0.0829 0.1072916,0.130756 0.024772,0.04025 0.029758,0.08999 0.053646,0.130755 0.035633,0.0608 0.1177174,0.100726 0.1609377,0.156906 0.188053,0.244457 0.3947491,0.511867 0.6437506,0.706079 0.1090581,0.08506 0.2111754,0.17849 0.3218753,0.26151 0.070868,0.05315 0.2034612,0.09376 0.2682295,0.156907 0.014136,0.01379 0.012685,0.03852 0.026823,0.0523 0.066825,0.06515 0.1647891,0.107104 0.2414065,0.156906 0.1495494,0.0972 0.2685552,0.235518 0.429166,0.313812 0.1569328,0.0765 0.3218278,0.120276 0.4828142,0.183058 0.2988,0.116525 0.577056,0.265986 0.885156,0.366114 0.104921,0.0341 0.218324,0.04059 0.321876,0.07846 0.123202,0.04504 0.209522,0.123309 0.321875,0.183057 0.118556,0.06305 0.255475,0.09839 0.375522,0.156907 0.02262,0.01108 0.03102,0.04127 0.05365,0.0523 0.02529,0.01233 0.05365,0.01744 0.08047,0.02615 0.03577,0.02615 0.06731,0.05896 0.107296,0.07846 0.197301,0.09618 0.411981,0.134277 0.616928,0.209208 0.06984,0.02554 0.08222,0.05926 0.160938,0.07846 0.07997,0.01949 0.164871,0.02246 0.241406,0.0523 0.05987,0.02334 0.101419,0.08043 0.160938,0.104609 0.05021,0.0204 0.108846,0.01097 0.160938,0.02615 0.07668,-0.04755 0.09227,0.05806 0.134114,0.07846 0.09314,0.04541 0.361754,0.177092 0.375521,0.183057 0.15118,0.06551 0.329875,0.07484 0.482813,0.130755 0.03019,0.01108 0.05365,0.03487 0.08047,0.0523 0.08941,0.02615 0.17767,0.05638 0.26823,0.07846 0.169084,0.04121 0.342197,0.08995 0.509635,0.130755 0.08109,0.01976 0.115289,-0.0029 0.214584,0.02615 0.159612,0.04669 0.317757,0.09858 0.482812,0.130756 0.0526,0.01029 0.107836,-0.0074 0.160938,0 0.459431,0.06399 -0.427927,-0.01818 0.295053,0.0523 0.02669,0.0026 0.05468,-0.0072 0.08047,0 0.105575,0.02941 0.216432,0.09649 0.321875,0.130755 0.05684,0.01848 0.161249,0.0263 0.214584,0.05231 0.01136,0.0055 0.01471,0.0226 0.02682,0.02615 0.372467,0.108939 0.750049,0.161396 1.126563,0.26151 0.154563,0.0411 0.299894,0.116323 0.455991,0.156907 0.06109,0.01588 0.126157,0.01229 0.18776,0.02615 0.129799,0.02921 0.175355,0.0523 0.295052,0.0523"
id="path11967" /><path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#bd0733;stroke-width:1.365;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 4.1142342,4.6591036 c 0.7162731,0.3603528 0.3547182,0.096268 0.6917,0.4500807 0.060227,0.063236 0.1314934,0.1164444 0.1877606,0.1830573 0.3092215,0.3660775 0.5492063,0.7846792 0.8583342,1.1506459 0.056267,0.066613 0.127533,0.1198216 0.1877606,0.1830573 0.2314472,0.2430074 0.08879,0.1322094 0.3486983,0.3661146 0.1287487,0.1158681 0.2786617,0.2193789 0.4023441,0.339964 0.045591,0.044449 0.066017,0.1086147 0.1072916,0.156906 0.1235958,0.1445999 0.35606,0.326915 0.5096358,0.4184161 0.065183,0.038842 0.148257,0.041505 0.2145835,0.078456 0.06063,0.033784 0.1044623,0.09071 0.1609377,0.1307562 0.3349201,0.2374762 0.7593845,0.4678622 1.1533866,0.601473 0.3228228,0.1094764 0.6730628,0.1396649 0.9924492,0.2615112 0.3681446,0.1404482 0.7257936,0.3177567 1.0997406,0.444567 0.192644,0.06533 0.423003,0.09936 0.616927,0.1569072 0.390938,0.1160003 0.213279,0.095712 0.616928,0.235359 0.167892,0.058079 0.341867,0.098487 0.509637,0.156906 0.08293,0.028872 0.157867,0.077461 0.241406,0.1046089 0.291747,0.09482 0.03668,-0.04749 0.295052,0.07846 0.217191,0.105873 0.423964,0.238462 0.64375,0.339964 0.174056,0.08038 0.35696,0.141152 0.53646,0.209208 0.26904,0.102002 0.578063,0.171066 0.858334,0.235361 0.05294,0.01214 0.10896,0.01052 0.160937,0.02615 0.06508,0.01953 0.123163,0.05746 0.187761,0.07846 0.06995,0.02273 0.143055,0.03487 0.214584,0.0523 0.116233,0.03487 0.234276,0.06445 0.348697,0.10461 0.109363,0.03838 0.210293,0.09902 0.321876,0.130755 0.183491,0.05218 0.377852,0.05941 0.563282,0.104608 0.457244,0.111446 0.920729,0.220769 1.36797,0.366116 0.266491,0.0866 -0.0031,0.01159 0.295053,0.156906 0.178495,0.08702 0.497598,0.229223 0.697396,0.287661 0.04366,0.01277 0.09142,0.01052 0.134115,0.02615 0.07031,-0.02292 0.06578,0.06226 0.107296,0.07846 0.115291,0.04496 0.235516,0.07558 0.348699,0.130756 0.01136,0.0055 0.01788,0.01744 0.02682,0.02615 0.03577,0.01743 0.07089,0.03617 0.107296,0.0523 0.135046,0.05985 0.302484,0.10895 0.429167,0.183057 0.02168,0.01269 0.03102,0.04127 0.05365,0.0523 0.016,0.0078 0.03668,-0.0055 0.05365,0 0.04646,0.0151 0.09108,0.08363 0.134115,0.104608 0.03298,0.01607 0.07277,0.01353 0.107297,0.02615 0.114998,0.04204 0.229542,0.101711 0.348697,0.130755 0.17801,0.04339 0.381906,0.0302 0.563282,0.05231 0.08635,0.01052 0.02598,0.02574 0.08047,0.0523 0.100512,0.04899 0.198343,0.04174 0.295051,0.104608"
id="path11973" /></svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.23 1H11.77L3.52002 9.25L3.35999 9.46997L1 13.59L2.41003 15L6.53003 12.64L6.75 12.48L15 4.22998V2.77002L13.23 1ZM2.41003 13.59L3.92004 10.59L5.37 12.04L2.41003 13.59ZM6.23999 11.53L4.46997 9.76001L12.47 1.76001L14.24 3.53003L6.23999 11.53Z" fill="#424242"/>
<path d="M13.23 1H11.77L3.52002 9.25L3.35999 9.46997L1 13.59L2.41003 15L6.53003 12.64L6.75 12.48L15 4.22998V2.77002L13.23 1ZM2.41003 13.59L3.92004 10.59L5.37 12.04L2.41003 13.59ZM6.23999 11.53L4.46997 9.76001L12.47 1.76001L14.24 3.53003L6.23999 11.53Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 373 B

After

Width:  |  Height:  |  Size: 373 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 14H15V13H2V0H1V13.5L1.5 14ZM3 11.5V3.5L3.5 3H5.5L6 3.5V11.5L5.5 12H3.5L3 11.5ZM5 11V4H4V11H5ZM11 1.5V11.5L11.5 12H13.5L14 11.5V1.5L13.5 1H11.5L11 1.5ZM13 2V11H12V2H13ZM7 11.5V5.5L7.5 5H9.5L10 5.5V11.5L9.5 12H7.5L7 11.5ZM9 11V6H8V11H9Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 14H15V13H2V0H1V13.5L1.5 14ZM3 11.5V3.5L3.5 3H5.5L6 3.5V11.5L5.5 12H3.5L3 11.5ZM5 11V4H4V11H5ZM11 1.5V11.5L11.5 12H13.5L14 11.5V1.5L13.5 1H11.5L11 1.5ZM13 2V11H12V2H13ZM7 11.5V5.5L7.5 5H9.5L10 5.5V11.5L9.5 12H7.5L7 11.5ZM9 11V6H8V11H9Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 11.29L5 10.29V11.71L3.85 12.85L3 12.5V10H1.5L1 9.5V1.5L1.5 1H13.5L14 1.5V6H13V2H2V9H3.5L4 9.5V11.29ZM10.29 13L12.15 14.85L13 14.5V13H14.5L15 12.5V7.5L14.5 7H6.5L6 7.5V12.5L6.5 13H10.29ZM10.5 12H7V8H14V12H12.5L12 12.5V13.29L10.85 12.15L10.5 12Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 11.29L5 10.29V11.71L3.85 12.85L3 12.5V10H1.5L1 9.5V1.5L1.5 1H13.5L14 1.5V6H13V2H2V9H3.5L4 9.5V11.29ZM10.29 13L12.15 14.85L13 14.5V13H14.5L15 12.5V7.5L14.5 7H6.5L6 7.5V12.5L6.5 13H10.29ZM10.5 12H7V8H14V12H12.5L12 12.5V13.29L10.85 12.15L10.5 12Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 417 B

After

Width:  |  Height:  |  Size: 417 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 6.49999L14.5302 5.99999H7V1.4698L6.5302 1H1.4698L1 1.4698V9.53019L1.4698 9.99999H4V14.5302L4.4698 15H14.5302L15 14.5302V6.49999ZM2 8.99999V3H6V8.99999H2ZM14 14H5V9.99999H6.5302L7 9.53019V8.01341H14V14Z" fill="#424242"/>
<path d="M15 6.49999L14.5302 5.99999H7V1.4698L6.5302 1H1.4698L1 1.4698V9.53019L1.4698 9.99999H4V14.5302L4.4698 15H14.5302L15 14.5302V6.49999ZM2 8.99999V3H6V8.99999H2ZM14 14H5V9.99999H6.5302L7 9.53019V8.01341H14V14Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 336 B

After

Width:  |  Height:  |  Size: 336 B

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 24 24"
style="enable-background:new 0 0 24 24;"
xml:space="preserve"
sodipodi:docname="plot-template-ensemble.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs36"><rect
x="3.3651412"
y="2.1265823"
width="18.835443"
height="19.793574"
id="rect250" /></defs><sodipodi:namedview
id="namedview34"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="42.791667"
inkscape:cx="8.5881207"
inkscape:cy="11.684518"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style20">
.st0{fill:url(#SVGID_1_);stroke:#8F9090;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st1{fill:none;stroke:#8DC584;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="1.1804"
y1="12.4846"
x2="22.8196"
y2="12.4846">
<stop
offset="1.118836e-07"
style="stop-color:#9D9D9C"
id="stop22" />
<stop
offset="0.5652"
style="stop-color:#CECECE"
id="stop24" />
<stop
offset="1"
style="stop-color:#5C5C5B"
id="stop26" />
</linearGradient>
<path
class="st1"
d="M1.72,17.75"
id="path31" />
<text
xml:space="preserve"
style="font-size:24.1697px;fill:#5F6368;stroke-width:13.7989"
x="3.2187378"
y="21.453714"
id="text320"
transform="scale(1.0556178,0.94731255)"><tspan
sodipodi:role="line"
id="tspan318"
x="3.2187378"
y="21.453714"
style="stroke-width:13.7989">E</tspan></text></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 24 24"
style="enable-background:new 0 0 24 24;"
xml:space="preserve"
sodipodi:docname="plot-template-standard.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs36"><rect
x="3.3651412"
y="2.1265823"
width="18.835443"
height="19.793574"
id="rect250" /></defs><sodipodi:namedview
id="namedview34"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="42.791667"
inkscape:cx="5.1996105"
inkscape:cy="12.36222"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style20">
.st0{fill:url(#SVGID_1_);stroke:#8F9090;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st1{fill:none;stroke:#8DC584;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="1.1804"
y1="12.4846"
x2="22.8196"
y2="12.4846">
<stop
offset="1.118836e-07"
style="stop-color:#9D9D9C"
id="stop22" />
<stop
offset="0.5652"
style="stop-color:#CECECE"
id="stop24" />
<stop
offset="1"
style="stop-color:#5C5C5B"
id="stop26" />
</linearGradient>
<path
class="st1"
d="M1.72,17.75"
id="path31" />
<text
xml:space="preserve"
style="font-size:22.7244px;fill:#5F6368;stroke-width:12.9737"
x="4.0029178"
y="21.346537"
id="text348"
transform="scale(1.09047,0.91703578)"><tspan
sodipodi:role="line"
id="tspan346"
x="4.0029178"
y="21.346537"
style="stroke-width:12.9737">T</tspan></text></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 14H15V13H2V0H1V13.5L1.5 14ZM3 11.5V3.5L3.5 3H5.5L6 3.5V11.5L5.5 12H3.5L3 11.5ZM5 11V4H4V11H5ZM11 1.5V11.5L11.5 12H13.5L14 11.5V1.5L13.5 1H11.5L11 1.5ZM13 2V11H12V2H13ZM7 11.5V5.5L7.5 5H9.5L10 5.5V11.5L9.5 12H7.5L7 11.5ZM9 11V6H8V11H9Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 14H15V13H2V0H1V13.5L1.5 14ZM3 11.5V3.5L3.5 3H5.5L6 3.5V11.5L5.5 12H3.5L3 11.5ZM5 11V4H4V11H5ZM11 1.5V11.5L11.5 12H13.5L14 11.5V1.5L13.5 1H11.5L11 1.5ZM13 2V11H12V2H13ZM7 11.5V5.5L7.5 5H9.5L10 5.5V11.5L9.5 12H7.5L7 11.5ZM9 11V6H8V11H9Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -1,6 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 12.23V3.77L13.13 3H14V2H13L12.69 2.09L11.5 2.9L10.28 2.08L10 2H9V3H9.85L11 3.77V12.23L9.87 13H9V14H10L10.31 13.91L11.5 13.1L12.72 13.92L13 14H14V13H13.15L12 12.23Z" fill="#424242"/>
<path d="M1 10.5V5.5L1.5 5H10V6H2V10H10V11H1.5L1 10.5Z" fill="#424242"/>
<path d="M13 5H14.5L15 5.5V10.5L14.5 11H13V10H14V6H13V5Z" fill="#424242"/>
<path d="M3 7.5V8.5L3.5 9H7.5L8 8.5V7.5L7.5 7H3.5L3 7.5Z" fill="#424242"/>
<path d="M12 12.23V3.77L13.13 3H14V2H13L12.69 2.09L11.5 2.9L10.28 2.08L10 2H9V3H9.85L11 3.77V12.23L9.87 13H9V14H10L10.31 13.91L11.5 13.1L12.72 13.92L13 14H14V13H13.15L12 12.23Z" fill="#5F6368"/>
<path d="M1 10.5V5.5L1.5 5H10V6H2V10H10V11H1.5L1 10.5Z" fill="#5F6368"/>
<path d="M13 5H14.5L15 5.5V10.5L14.5 11H13V10H14V6H13V5Z" fill="#5F6368"/>
<path d="M3 7.5V8.5L3.5 9H7.5L8 8.5V7.5L7.5 7H3.5L3 7.5Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 521 B

After

Width:  |  Height:  |  Size: 521 B

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 24 24"
style="enable-background:new 0 0 24 24;"
xml:space="preserve"
sodipodi:docname="regression-curve.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs36"><linearGradient
id="linearGradient1188"
inkscape:swatch="gradient"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop1184" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop1186" /></linearGradient><rect
x="3.3651412"
y="2.1265823"
width="18.835443"
height="19.793574"
id="rect250" /></defs><sodipodi:namedview
id="namedview34"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="7.5645695"
inkscape:cx="-53.076385"
inkscape:cy="34.63515"
inkscape:window-width="2560"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style20">
.st0{fill:url(#SVGID_1_);stroke:#8F9090;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st1{fill:none;stroke:#8DC584;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="1.1804"
y1="12.4846"
x2="22.8196"
y2="12.4846">
<stop
offset="1.118836e-07"
style="stop-color:#9D9D9C"
id="stop22" />
<stop
offset="0.5652"
style="stop-color:#CECECE"
id="stop24" />
<stop
offset="1"
style="stop-color:#5C5C5B"
id="stop26" />
</linearGradient>
<ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331"
cx="15.38851"
cy="2.4771178"
rx="1.8812073"
ry="1.6592015" /><ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331-3"
cx="9.4047928"
cy="7.4029331"
rx="1.8812073"
ry="1.6592015" /><ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331-4"
cx="22.297638"
cy="7.4029331"
rx="1.8812073"
ry="1.6592015" /><ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331-2"
cx="5.7637262"
cy="20.495371"
rx="1.8812073"
ry="1.6592015" /><ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331-1"
cx="20.027578"
cy="13.672131"
rx="1.8812073"
ry="1.6592015" /><ellipse
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:1.428;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
id="path1331-8"
cx="12"
cy="19.498796"
rx="1.8812073"
ry="1.6592015" /><path
style="fill:#000000;fill-opacity:1;stroke:#940e44;stroke-width:2.128;stroke-miterlimit:3.4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.5576649,21.966894 21.767013,0.63096397"
id="path1387" /></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.708 5.578L2.061 8.224L4.708 10.87L4 11.578L1 8.578V7.87L4 4.87L4.708 5.578ZM11.708 4.87L11 5.578L13.647 8.224L11 10.87L11.708 11.578L14.708 8.578V7.87L11.708 4.87ZM4.908 13L5.802 13.448L10.802 3.448L9.908 3L4.908 13Z" fill="#424242"/>
<path d="M4.708 5.578L2.061 8.224L4.708 10.87L4 11.578L1 8.578V7.87L4 4.87L4.708 5.578ZM11.708 4.87L11 5.578L13.647 8.224L11 10.87L11.708 11.578L14.708 8.578V7.87L11.708 4.87ZM4.908 13L5.802 13.448L10.802 3.448L9.908 3L4.908 13Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 350 B

After

Width:  |  Height:  |  Size: 350 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 1L3 2V14L4 15H12L13 14V2L12 1H4ZM4 3V2H12V14H4V13H6V12H4V10H8V9H4V7H6V6H4V4H8V3H4Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 1L3 2V14L4 15H12L13 14V2L12 1H4ZM4 3V2H12V14H4V13H6V12H4V10H8V9H4V7H6V6H4V4H8V3H4Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 256 B

After

Width:  |  Height:  |  Size: 256 B

View File

@@ -27,39 +27,64 @@ $plotGridColor: #394046; // Plot grid color
$auxiliaryCurveColor: #000000; // Auxiliary curve color
$externalInputColor: #e82257; // External input background color
QCheckBox::indicator, QTreeView::indicator, QTableView::indicator, QListWidget::indicator {
svg {
stroke: white;
stroke-width: 2;
fill: none;
}
/*
*/
QCheckBox::indicator,
QTreeView::indicator,
QTableView::indicator,
QListWidget::indicator {
background-color: $backgroundColor1;
border-radius: 3px;
width: 16px;
height: 16px;
}
QCheckBox::indicator:unchecked, QTreeView::indicator:unchecked, QTableView::indicator:unchecked, QListWidget::indicator:unchecked
{
QCheckBox::indicator:unchecked,
QTreeView::indicator:unchecked,
QTableView::indicator:unchecked,
QListWidget::indicator:unchecked {
image: url(:/themes/dark/checkbox-unchecked.svg);
}
QCheckBox::indicator:checked, QTreeView::indicator:checked, QTableView::indicator:checked, QListWidget::indicator:checked
{
QCheckBox::indicator:checked,
QTreeView::indicator:checked,
QTableView::indicator:checked,
QListWidget::indicator:checked {
image: url(:/themes/dark/checkbox-checked.svg);
}
QCheckBox::indicator:indeterminate, QTreeView::indicator:indeterminate, QTableView::indicator:indeterminate, QListWidget::indicator:indeterminate
{
QCheckBox::indicator:indeterminate,
QTreeView::indicator:indeterminate,
QTableView::indicator:indeterminate,
QListWidget::indicator:indeterminate {
image: url(:/themes/dark/checkbox-indeterminate.svg);
}
QCheckBox::indicator:unchecked:disabled, QTreeView::indicator:unchecked:disabled, QTableView::indicator:unchecked:disabled, QListWidget::indicator:unchecked:disabled
{
QCheckBox::indicator:unchecked:disabled,
QTreeView::indicator:unchecked:disabled,
QTableView::indicator:unchecked:disabled,
QListWidget::indicator:unchecked:disabled {
image: url(:/themes/dark/checkbox-unchecked-disabled.svg);
}
QCheckBox::indicator:checked:disabled, QTreeView::indicator:checked:disabled, QTableView::indicator:checked:disabled, QListWidget::indicator:checked:disabled
{
QCheckBox::indicator:checked:disabled,
QTreeView::indicator:checked:disabled,
QTableView::indicator:checked:disabled,
QListWidget::indicator:checked:disabled {
image: url(:/themes/dark/checkbox-checked-disabled.svg);
}
QCheckBox::indicator:indeterminate:disabled, QTreeView::indicator:indeterminate:disabled, QTableView::indicator:indeterminate:disabled, QListWidget::indicator:indeterminate:disabled
{
QCheckBox::indicator:indeterminate:disabled,
QTreeView::indicator:indeterminate:disabled,
QTableView::indicator:indeterminate:disabled,
QListWidget::indicator:indeterminate:disabled {
image: url(:/themes/dark/checkbox-indeterminate-disabled.svg);
}
@@ -76,7 +101,7 @@ RiuQwtPlotWidget {
}
QwtPlot QWidget {
color: $textColor;
color: $textColor;
}
QwtTextLabel {
@@ -93,42 +118,42 @@ QwtPlot["PvtPlot"]::curve["Auxiliary"] {
QwtPlot["PvtPlot"]::curve["Oil"] {
line-color: $curveColorOil;
symbol-color: $curveColorOil;
symbol-color: $curveColorOil;
}
QwtPlot["PvtPlot"]::curve["Gas"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["KRW"] {
line-color: $curveColorWater;
symbol-color: $curveColorWater;
symbol-color: $curveColorWater;
}
QwtPlot["RelPermPlot"]::curve["KROW"] {
line-color: $curveColorWater;
symbol-color: $curveColorWater;
symbol-color: $curveColorWater;
}
QwtPlot["RelPermPlot"]::curve["PCOW"] {
line-color: $tertiaryColor;
symbol-color: $tertiaryColor;
symbol-color: $tertiaryColor;
}
QwtPlot["RelPermPlot"]::curve["KRG"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["KROG"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["PCOG"] {
line-color: $senaryColor;
symbol-color: $senaryColor;
symbol-color: $senaryColor;
}
QwtPlot["PvtPlot"]::lineMarker["*"] {
@@ -146,38 +171,52 @@ QToolBox {
QToolButton {
background-color: $backgroundColor1;
color: $textColor;
border-width : 0px;
border-width: 0px;
padding-top: 6px;
padding-bottom: 6px;
padding-left: 4px;
padding-right: 4px;
padding-bottom: 6px;
padding-left: 4px;
padding-right: 4px;
}
QToolButton:checked {
background-color: $backgroundColor3;
color: $textColor;
border-width : 0px;
border-width: 0px;
padding-top: 6px;
padding-bottom: 6px;
padding-left: 4px;
padding-right: 4px;
padding-bottom: 6px;
padding-left: 4px;
padding-right: 4px;
}
QLabel {
background-color: transparent;
color: $textColor;
}
.QWidget, QFrame, QMainWindow, QDialog, QMenu, QLabel, QCheckBox, QTabBar, QDockWidget, QTextEdit, QPlainTextEdit, QScrollArea, QTextBrowser, QGroupBox, QRadioButton {
QWidget,
QFrame,
QMainWindow,
QDialog,
QMenu,
QLabel,
QCheckBox,
QTabBar,
QDockWidget,
QTextEdit,
QPlainTextEdit,
QScrollArea,
QTextBrowser,
QGroupBox,
QRadioButton {
background-color: $mainBackgroundColor;
color: $textColor;
border-color: $borderColor;
selection-background-color: $primaryColor;
}
RiuAbstractOverlayContentFrame, RiuDraggableOverlayFrame {
background-color: rgba(36,41,46,0.3);
RiuAbstractOverlayContentFrame,
RiuDraggableOverlayFrame {
background-color: rgba(36, 41, 46, 0.3);
}
QProgressBar {
@@ -221,8 +260,7 @@ QTreeView::branch:open:has-children:has-siblings {
icon-size: 12px;
}
QHeaderView::section
{
QHeaderView::section {
background-color: $backgroundColor1;
color: $textColor;
padding: 4px;
@@ -232,22 +270,22 @@ QTableView QTableCornerButton::section {
background: transparent;
}
QHeaderView
{
QHeaderView {
background-color: $backgroundColor1;
}
QDockWidget {
background-color: $mainBackgroundColor;
titlebar-close-icon: url(:/themes/dark/blank.svg);
titlebar-normal-icon: url(:/themes/dark/blank.svg);
titlebar-close-icon: url(:/themes/dark/blank.svg);
titlebar-normal-icon: url(:/themes/dark/blank.svg);
}
QDockWidget::title {
background-color: $backgroundColor1;
}
QDockWidget::close-button, QDockWidget::float-button {
QDockWidget::close-button,
QDockWidget::float-button {
background: transparent;
border: none;
icon-size: 12px;
@@ -255,19 +293,19 @@ QDockWidget::close-button, QDockWidget::float-button {
}
QDockWidget::float-button {
image: url(:/themes/dark/float.svg);
image: url(:/themes/dark/float.svg);
}
QDockWidget::close-button {
image: url(:/themes/dark/close.svg);
image: url(:/themes/dark/close.svg);
}
QDockWidget::float-button:hover {
image: url(:/themes/dark/float-hover.svg);
image: url(:/themes/dark/float-hover.svg);
}
QDockWidget::close-button:hover {
image: url(:/themes/dark/close-hover.svg);
image: url(:/themes/dark/close-hover.svg);
}
QToolBar QWidget {
@@ -293,8 +331,12 @@ QMenu::item:selected {
color: $textColor;
}
QLineEdit, QComboBox, QSpinBox,
QDoubleSpinBox, QDateEdit, QDateTimeEdit {
QLineEdit,
QComboBox,
QSpinBox,
QDoubleSpinBox,
QDateEdit,
QDateTimeEdit {
background-color: $inputColor;
color: $textColor;
padding: 3px;
@@ -302,8 +344,12 @@ QDoubleSpinBox, QDateEdit, QDateTimeEdit {
selection-background-color: $secondaryColor;
}
QLineEdit:focus, QComboBox:focus, QSpinBox:focus,
QDoubleSpinBox:focus, QDateEdit:focus, QDateTimeEdit:focus {
QLineEdit:focus,
QComboBox:focus,
QSpinBox:focus,
QDoubleSpinBox:focus,
QDateEdit:focus,
QDateTimeEdit:focus {
border: 2px solid $primaryColor;
}
@@ -324,7 +370,7 @@ QToolBar QToolButton:hover {
QLCDNumber {
color: $textColor;
border-color: $borderColor;
border-width : 1.5px;
border-width: 1.5px;
border-style: solid;
border-radius: 5px;
}
@@ -345,7 +391,7 @@ QTabWidget {
background-color: #535353;
}
QTabWidget::pane {
QTabWidget::pane {
border-top: 1px solid $backgroundColor3;
background-color: $mainBackgroundColor;
}
@@ -358,7 +404,8 @@ QTabBar::tab {
padding: 6px;
}
QTabBar::tab:selected, QTabBar::tab:hover {
QTabBar::tab:selected,
QTabBar::tab:hover {
background-color: $backgroundColor3;
}
@@ -370,76 +417,78 @@ QTabBar::tab:!selected {
color: $textColor;
}
/* Scrollbars */
QScrollBar:vertical {
border: 0px;;
background: transparent;
width: 15px;
margin: 0px 0px 0px 0px;
}
QScrollBar:vertical:hover {
background: $backgroundColor2;
}
QScrollBar::handle:vertical {
background: $backgroundColor4;
min-height: 20px;
margin: 3px 3px 3px 3px;
border-radius: 3px;
}
QScrollBar::handle:vertical::hover,
QScrollBar::handle:horizontal::hover {
background: $backgroundColor5;
}
QScrollBar::handle:vertical::pressed,
QScrollBar::handle:horizontal::pressed {
background: white;
}
QScrollBar::add-line:vertical,
QScrollBar::sub-line:vertical,
QScrollBar::add-line:horizontal,
QScrollBar::sub-line:horizontal {
border: 0px;
height: 0px;
}
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical,
QScrollBar::down-arrow:horizontal,
QScrollBar::up-arrow:horizontal {
border: 0px;
background: none;
border: 0px;
;
background: transparent;
width: 15px;
margin: 0px 0px 0px 0px;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical,
QScrollBar::add-page:horizontal,
QScrollBar:vertical:hover {
background: $backgroundColor2;
}
QScrollBar::handle:vertical {
background: $backgroundColor4;
min-height: 20px;
margin: 3px 3px 3px 3px;
border-radius: 3px;
}
QScrollBar::handle:vertical::hover,
QScrollBar::handle:horizontal::hover {
background: $backgroundColor5;
}
QScrollBar::handle:vertical::pressed,
QScrollBar::handle:horizontal::pressed {
background: white;
}
QScrollBar::add-line:vertical,
QScrollBar::sub-line:vertical,
QScrollBar::add-line:horizontal,
QScrollBar::sub-line:horizontal {
border: 0px;
height: 0px;
}
QScrollBar::up-arrow:vertical,
QScrollBar::down-arrow:vertical,
QScrollBar::down-arrow:horizontal,
QScrollBar::up-arrow:horizontal {
border: 0px;
background: none;
}
QScrollBar::add-page:vertical,
QScrollBar::sub-page:vertical,
QScrollBar::add-page:horizontal,
QScrollBar::sub-page:horizontal {
background: none;
}
background: none;
}
QScrollBar:horizontal {
border: 0px;
background: transparent;
height: 15px;
margin: 0px 0px 0px 0px;
}
border: 0px;
background: transparent;
height: 15px;
margin: 0px 0px 0px 0px;
}
QScrollBar:horizontal:hover {
background: $backgroundColor2;
}
background: $backgroundColor2;
}
QScrollBar::handle:horizontal {
background: $backgroundColor4;
min-width: 20px;
margin: 3px 3px 3px 3px;
border-radius: 3px;
}
QScrollBar::handle:horizontal {
background: $backgroundColor4;
min-width: 20px;
margin: 3px 3px 3px 3px;
border-radius: 3px;
}
QFrame#FramedGroupContent {
background-color: $mainBackgroundColor;
@@ -460,11 +509,14 @@ QMinimizePanel {
border: 2px solid $backgroundColor2;
}
QMinimizePanel QLabel, QMinimizePanel QCheckBox, QToolButton {
QMinimizePanel QLabel,
QMinimizePanel QCheckBox,
QToolButton {
background-color: transparent;
}
QTextEdit, QPlainTextEdit {
QTextEdit,
QPlainTextEdit {
border: 2px solid $borderColor;
}
@@ -493,4 +545,350 @@ QComboBox::down-arrow {
image: url(:/themes/dark/expanded.svg);
width: 18px;
height: 16px;
}
/*
* Styling for advanced docking system
* Based on \ResInsight\ThirdParty\qtadvanceddocking\src\stylesheets\default.css
*/
/*
* Default style sheet on Windows Platforms
*/
/*****************************************************************************
* CDockContainerWidget
*****************************************************************************/
ads--CDockContainerWidget {
background: $mainBackgroundColor;
}
/*****************************************************************************
* CDockSplitter
*****************************************************************************/
ads--CDockContainerWidget>QSplitter {
padding: 1 0 1 0;
}
ads--CDockContainerWidget ads--CDockSplitter::handle {
background: $backgroundColor3;
}
/*****************************************************************************
* CDockAreaWidget
*****************************************************************************/
ads--CDockAreaWidget {
background: $mainBackgroundColor;
}
ads--CTitleBarButton {
padding: 0px 0px;
background: $backgroundColor2;
}
#tabsMenuButton::menu-indicator {
image: none;
}
#tabsMenuButton {
qproperty-icon: url(:/ads/images/tabs-menu-button.svg);
qproperty-iconSize: 16px;
}
#dockAreaCloseButton {
qproperty-icon: url(:/ads/images/close-button.svg), url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#detachGroupButton {
qproperty-icon: url(:/ads/images/detach-button.svg), url(:/ads/images/detach-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
/*****************************************************************************
* CDockWidgetTab and close button styling
*****************************************************************************/
ads--CDockWidgetTab {
background: $mainBackgroundColor;
border-color: $backgroundColor1;
border-style: solid;
border-width: 0 1px 0 0;
padding: 0 0px;
}
ads--CDockWidgetTab[activeTab="true"] {
background: $backgroundColor1;
}
ads--CDockWidgetTab QLabel {
color: $textColor;
background: $mainBackgroundColor;
}
ads--CDockWidgetTab[activeTab="true"] QLabel {
color: $textColor;
background: $backgroundColor1;
}
#tabCloseButton {
margin-top: 2px;
background: $backgroundColor2;
border: none;
padding: 0px -2px;
qproperty-icon: url(:/ads/images/close-button.svg), url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#tabCloseButton:hover {
border: 1px solid $backgroundColor3;
background: $backgroundColor3;
}
#tabCloseButton:pressed {
background: $backgroundColor2;
}
/*****************************************************************************
* CDockWidget
*****************************************************************************/
ads--CDockWidget {
background: $mainBackgroundColor;
border-color: $backgroundColor1;
border-style: solid;
border-width: 1px 0 0 0;
}
QScrollArea#dockWidgetScrollArea {
padding: 0px;
border: none;
}
/*****************************************************************************
*
* Styling of auto hide functionality
*
*****************************************************************************/
/*****************************************************************************
* CAutoHideTab
*****************************************************************************/
ads--CAutoHideTab {
qproperty-iconSize: 16px 16px;
/* this is optional in case you would like to change icon size*/
background: none;
border: none;
padding-left: 2px;
padding-right: 0px;
text-align: center;
min-height: 20px;
padding-bottom: 2px;
}
ads--CAutoHideTab:hover {
color: palette(highlight);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/**
* Auto hide tabs with icon only
*/
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"] {
border-left: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"] {
border-right: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
/**
* Auto hide tabs with icon only hover
*/
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"][activeTab="true"] {
border-left: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"][activeTab="true"] {
border-right: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/*****************************************************************************
* CAutoHideSideBar
*****************************************************************************/
ads--CAutoHideSideBar {
background: palette(window);
border: none;
qproperty-spacing: 12;
}
#sideTabsContainerWidget {
background: transparent;
}
ads--CAutoHideSideBar[sideBarLocation="0"] {
border-bottom: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="1"] {
border-right: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="2"] {
border-left: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="3"] {
border-top: 1px solid palette(dark);
}
/*****************************************************************************
* CAutoHideDockContainer
*****************************************************************************/
ads--CAutoHideDockContainer {
background: palette(window);
}
ads--CAutoHideDockContainer ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
/*
* This is required because the ads--CDockAreaWidget[focused="true"] will
* overwrite the ads--CAutoHideDockContainer ads--CDockAreaTitleBar rule
*/
ads--CAutoHideDockContainer ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
#autoHideTitleLabel {
padding-left: 4px;
color: palette(light);
}
/*****************************************************************************
* CAutoHideDockContainer titlebar buttons
*****************************************************************************/
#dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaCloseButton {
qproperty-icon: url(:/ads/images/close-button-focused.svg)
}
ads--CAutoHideDockContainer ads--CTitleBarButton:hover {
background: rgba(255, 255, 255, 48);
}
ads--CAutoHideDockContainer ads--CTitleBarButton:pressed {
background: rgba(255, 255, 255, 96);
}
/*****************************************************************************
* CAutoHideDockContainer Titlebar and Buttons
*****************************************************************************/
/*****************************************************************************
* CResizeHandle
*****************************************************************************/
ads--CResizeHandle {
background: palette(window);
}
ads--CAutoHideDockContainer[sideBarLocation="0"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="1"] ads--CResizeHandle {
border-left: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="2"] ads--CResizeHandle {
border-right: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="3"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}

View File

@@ -24,12 +24,15 @@ $plotGridColor: #394046; // Plot grid color
$auxiliaryCurveColor: #000000; // Auxiliary curve color
$externalInputColor: #fff2a7; // Background color for external input fields
/*
*/
QwtPlot {
background-color: QPalette::Base;
background-color: $mainBackgroundColor;
}
QwtPlot > QWidget {
background-color: QPalette::Base;
QwtPlot>QWidget {
background-color: $mainBackgroundColor;
}
QwtPlot["*"]::grid["*"] {
@@ -42,49 +45,50 @@ QwtPlot["PvtPlot"]::curve["Auxiliary"] {
QwtPlot["PvtPlot"]::curve["Oil"] {
line-color: $curveColorOil;
symbol-color: $curveColorOil;
symbol-color: $curveColorOil;
}
QwtPlot["PvtPlot"]::curve["Gas"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["KRW"] {
line-color: $curveColorWater;
symbol-color: $curveColorWater;
symbol-color: $curveColorWater;
}
QwtPlot["RelPermPlot"]::curve["KROW"] {
line-color: $curveColorWater;
symbol-color: $curveColorWater;
symbol-color: $curveColorWater;
}
QwtPlot["RelPermPlot"]::curve["PCOW"] {
line-color: $tertiaryColor;
symbol-color: $tertiaryColor;
symbol-color: $tertiaryColor;
}
QwtPlot["RelPermPlot"]::curve["KRG"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["KROG"] {
line-color: $curveColorGas;
symbol-color: $curveColorGas;
symbol-color: $curveColorGas;
}
QwtPlot["RelPermPlot"]::curve["PCOG"] {
line-color: $senaryColor;
symbol-color: $senaryColor;
symbol-color: $senaryColor;
}
QwtPlot["PvtPlot"]::lineMarker["*"] {
color: $textColor;
}
QLabel, RiuQwtPlotLegend {
QLabel,
RiuQwtPlotLegend {
background-color: transparent;
}
@@ -97,6 +101,356 @@ QListView[state="ExternalInput"] {
border: 2px solid $borderColor;
}
RiuAbstractOverlayContentFrame, RiuDraggableOverlayFrame {
background-color: rgba(255,255,255,0.4);
RiuAbstractOverlayContentFrame,
RiuDraggableOverlayFrame {
background-color: rgba(255, 255, 255, 0.4);
}
svg {
stroke: currentColor;
stroke-width: 2;
fill: none;
}
/*
* Styling for advanced docking system
* Based on \ResInsight\ThirdParty\qtadvanceddocking\src\stylesheets\default.css
*/
/*
* Default style sheet on Windows Platforms
*/
/*****************************************************************************
* CDockContainerWidget
*****************************************************************************/
ads--CDockContainerWidget {
background: palette(window);
}
/*****************************************************************************
* CDockSplitter
*****************************************************************************/
ads--CDockContainerWidget>QSplitter {
padding: 1 0 1 0;
}
ads--CDockContainerWidget ads--CDockSplitter::handle {
background: palette(dark);
}
/*****************************************************************************
* CDockAreaWidget
*****************************************************************************/
ads--CDockAreaWidget {
background: palette(window);
}
ads--CTitleBarButton {
padding: 0px 0px;
}
#tabsMenuButton::menu-indicator {
image: none;
}
#tabsMenuButton {
qproperty-icon: url(:/ads/images/tabs-menu-button.svg);
qproperty-iconSize: 16px;
}
#dockAreaCloseButton {
qproperty-icon: url(:/ads/images/close-button.svg), url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#detachGroupButton {
qproperty-icon: url(:/ads/images/detach-button.svg), url(:/ads/images/detach-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
/*****************************************************************************
* CDockWidgetTab and close button styling
*****************************************************************************/
ads--CDockWidgetTab {
background: palette(window);
border-color: palette(light);
border-style: solid;
border-width: 0 1px 0 0;
padding: 0 0px;
}
ads--CDockWidgetTab[activeTab="true"] {
background: qlineargradient(spread: pad, x1: 0, y1: 0, x2: 0, y2: 0.5, stop: 0 palette(window), stop: 1 palette(light));
/*background: palette(highlight);*/
}
ads--CDockWidgetTab QLabel {
color: palette(dark);
}
ads--CDockWidgetTab[activeTab="true"] QLabel {
color: palette(foreground);
}
#tabCloseButton {
margin-top: 2px;
background: none;
border: none;
padding: 0px -2px;
qproperty-icon: url(:/ads/images/close-button.svg), url(:/ads/images/close-button-disabled.svg) disabled;
qproperty-iconSize: 16px;
}
#tabCloseButton:hover {
border: 1px solid rgba(0, 0, 0, 32);
background: rgba(0, 0, 0, 16);
}
#tabCloseButton:pressed {
background: rgba(0, 0, 0, 32);
}
/*****************************************************************************
* CDockWidget
*****************************************************************************/
ads--CDockWidget {
background: palette(light);
border-color: palette(light);
border-style: solid;
border-width: 1px 0 0 0;
}
QScrollArea#dockWidgetScrollArea {
padding: 0px;
border: none;
}
/*****************************************************************************
*
* Styling of auto hide functionality
*
*****************************************************************************/
/*****************************************************************************
* CAutoHideTab
*****************************************************************************/
ads--CAutoHideTab {
qproperty-iconSize: 16px 16px;
/* this is optional in case you would like to change icon size*/
background: none;
border: none;
padding-left: 2px;
padding-right: 0px;
text-align: center;
min-height: 20px;
padding-bottom: 2px;
}
ads--CAutoHideTab:hover {
color: palette(highlight);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="0"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="0"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="2"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="1"],
ads--CAutoHideTab:hover[iconOnly="false"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="1"][activeTab="true"],
ads--CAutoHideTab[iconOnly="false"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/**
* Auto hide tabs with icon only
*/
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"] {
border-top: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"] {
border-left: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"] {
border-right: 6px solid rgba(0, 0, 0, 48);
}
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"] {
border-bottom: 6px solid rgba(0, 0, 0, 48);
}
/**
* Auto hide tabs with icon only hover
*/
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="0"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="0"][activeTab="true"] {
border-top: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="1"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="1"][activeTab="true"] {
border-left: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="2"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="2"][activeTab="true"] {
border-right: 6px solid palette(highlight);
}
ads--CAutoHideTab:hover[iconOnly="true"][sideBarLocation="3"],
ads--CAutoHideTab[iconOnly="true"][sideBarLocation="3"][activeTab="true"] {
border-bottom: 6px solid palette(highlight);
}
/*****************************************************************************
* CAutoHideSideBar
*****************************************************************************/
ads--CAutoHideSideBar {
background: palette(window);
border: none;
qproperty-spacing: 12;
}
#sideTabsContainerWidget {
background: transparent;
}
ads--CAutoHideSideBar[sideBarLocation="0"] {
border-bottom: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="1"] {
border-right: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="2"] {
border-left: 1px solid palette(dark);
}
ads--CAutoHideSideBar[sideBarLocation="3"] {
border-top: 1px solid palette(dark);
}
/*****************************************************************************
* CAutoHideDockContainer
*****************************************************************************/
ads--CAutoHideDockContainer {
background: palette(window);
}
ads--CAutoHideDockContainer ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
/*
* This is required because the ads--CDockAreaWidget[focused="true"] will
* overwrite the ads--CAutoHideDockContainer ads--CDockAreaTitleBar rule
*/
ads--CAutoHideDockContainer ads--CDockAreaWidget[focused="true"] ads--CDockAreaTitleBar {
background: palette(highlight);
padding: 0px;
border: none;
}
#autoHideTitleLabel {
padding-left: 4px;
color: palette(light);
}
/*****************************************************************************
* CAutoHideDockContainer titlebar buttons
*****************************************************************************/
#dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaAutoHideButton {
qproperty-icon: url(:/ads/images/vs-pin-button-pinned-focused.svg);
qproperty-iconSize: 16px;
}
ads--CAutoHideDockContainer #dockAreaCloseButton {
qproperty-icon: url(:/ads/images/close-button-focused.svg)
}
ads--CAutoHideDockContainer ads--CTitleBarButton:hover {
background: rgba(255, 255, 255, 48);
}
ads--CAutoHideDockContainer ads--CTitleBarButton:pressed {
background: rgba(255, 255, 255, 96);
}
/*****************************************************************************
* CAutoHideDockContainer Titlebar and Buttons
*****************************************************************************/
/*****************************************************************************
* CResizeHandle
*****************************************************************************/
ads--CResizeHandle {
background: palette(window);
}
ads--CAutoHideDockContainer[sideBarLocation="0"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="1"] ads--CResizeHandle {
border-left: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="2"] ads--CResizeHandle {
border-right: 1px solid palette(dark);
}
ads--CAutoHideDockContainer[sideBarLocation="3"] ads--CResizeHandle {
border-top: 1px solid palette(dark);
}

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="3.8" width="2.8" height="2.8" fill="#424242" y="1"/>
<rect x="3.8" y="6.6" width="2.8" height="2.8" fill="#424242"/>
<rect x="3.8" y="12.2" width="2.8" height="2.8" fill="#424242"/>
<rect x="9.4" width="2.8" height="2.8" fill="#424242" y="1"/>
<rect x="9.4" y="6.6" width="2.8" height="2.8" fill="#424242"/>
<rect x="9.4" y="12.2" width="2.8" height="2.8" fill="#424242"/>
<rect x="3.8" width="2.8" height="2.8" fill="#5F6368" y="1"/>
<rect x="3.8" y="6.6" width="2.8" height="2.8" fill="#5F6368"/>
<rect x="3.8" y="12.2" width="2.8" height="2.8" fill="#5F6368"/>
<rect x="9.4" width="2.8" height="2.8" fill="#5F6368" y="1"/>
<rect x="9.4" y="6.6" width="2.8" height="2.8" fill="#5F6368"/>
<rect x="9.4" y="12.2" width="2.8" height="2.8" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 535 B

After

Width:  |  Height:  |  Size: 535 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 10V9H6.20703C6.11588 9.32228 6.05337 9.65659 6.02242 10H1ZM7.25716 7C7.57052 6.62057 7.93379 6.28389 8.33692 6H1V7H7.25716ZM6.59971 13C6.43777 12.6832 6.30564 12.3486 6.20703 12H1V13H6.59971ZM15 3V4H1V3H15ZM11.6406 13.0312C13.0386 13.0312 14.1719 11.898 14.1719 10.5C14.1719 9.10203 13.0386 7.96875 11.6406 7.96875C10.7037 7.96875 9.88566 8.47778 9.448 9.23438H10.5156V10.0781H8.54688L8.125 9.65625V7.40625H8.96875V8.43775C9.58599 7.63922 10.5533 7.125 11.6406 7.125C13.5046 7.125 15.0156 8.63604 15.0156 10.5C15.0156 12.364 13.5046 13.875 11.6406 13.875C10.2564 13.875 9.06688 13.0417 8.5462 11.8495L9.32848 11.5317C9.7234 12.4154 10.6101 13.0312 11.6406 13.0312Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 10V9H6.20703C6.11588 9.32228 6.05337 9.65659 6.02242 10H1ZM7.25716 7C7.57052 6.62057 7.93379 6.28389 8.33692 6H1V7H7.25716ZM6.59971 13C6.43777 12.6832 6.30564 12.3486 6.20703 12H1V13H6.59971ZM15 3V4H1V3H15ZM11.6406 13.0312C13.0386 13.0312 14.1719 11.898 14.1719 10.5C14.1719 9.10203 13.0386 7.96875 11.6406 7.96875C10.7037 7.96875 9.88566 8.47778 9.448 9.23438H10.5156V10.0781H8.54688L8.125 9.65625V7.40625H8.96875V8.43775C9.58599 7.63922 10.5533 7.125 11.6406 7.125C13.5046 7.125 15.0156 8.63604 15.0156 10.5C15.0156 12.364 13.5046 13.875 11.6406 13.875C10.2564 13.875 9.06688 13.0417 8.5462 11.8495L9.32848 11.5317C9.7234 12.4154 10.6101 13.0312 11.6406 13.0312Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 838 B

After

Width:  |  Height:  |  Size: 838 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.707 3H14.5L15 3.5V12.5L14.5 13H1.5L1 12.5V3.5L1.5 3H5.293L6.146 2.146L6.5 2H9.5L9.854 2.146L10.707 3ZM2 12H14V4H10.5L10.146 3.854L9.293 3H6.707L5.854 3.854L5.5 4H2V12ZM3.5 5C3.40111 5 3.30444 5.02932 3.22222 5.08427C3.13999 5.13921 3.0759 5.2173 3.03806 5.30866C3.00022 5.40002 2.99031 5.50055 3.00961 5.59755C3.0289 5.69454 3.07652 5.78363 3.14645 5.85355C3.21637 5.92348 3.30546 5.9711 3.40246 5.99039C3.49945 6.00969 3.59998 5.99978 3.69134 5.96194C3.78271 5.9241 3.86079 5.86001 3.91574 5.77779C3.97068 5.69556 4 5.59889 4 5.5C4 5.36739 3.94732 5.24021 3.85355 5.14645C3.75979 5.05268 3.63261 5 3.5 5ZM8 6C8.39556 6 8.78224 6.1173 9.11114 6.33706C9.44004 6.55682 9.69639 6.86918 9.84776 7.23463C9.99914 7.60009 10.0387 8.00222 9.96157 8.39018C9.8844 8.77814 9.69392 9.13451 9.41421 9.41421C9.13451 9.69392 8.77814 9.8844 8.39018 9.96157C8.00222 10.0387 7.60009 9.99913 7.23463 9.84776C6.86918 9.69638 6.55683 9.44004 6.33706 9.11114C6.1173 8.78224 6 8.39556 6 8C6 7.46957 6.21071 6.96086 6.58579 6.58579C6.96086 6.21071 7.46957 6 8 6ZM8 5C7.40666 5 6.82664 5.17595 6.33329 5.50559C5.83994 5.83524 5.45543 6.30377 5.22836 6.85195C5.0013 7.40013 4.94189 8.00333 5.05765 8.58527C5.1734 9.16721 5.45912 9.70176 5.87868 10.1213C6.29824 10.5409 6.83279 10.8266 7.41473 10.9424C7.99667 11.0581 8.59987 10.9987 9.14805 10.7716C9.69623 10.5446 10.1648 10.1601 10.4944 9.66671C10.8241 9.17336 11 8.59334 11 8C11 7.20435 10.6839 6.44129 10.1213 5.87868C9.55871 5.31607 8.79565 5 8 5Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.707 3H14.5L15 3.5V12.5L14.5 13H1.5L1 12.5V3.5L1.5 3H5.293L6.146 2.146L6.5 2H9.5L9.854 2.146L10.707 3ZM2 12H14V4H10.5L10.146 3.854L9.293 3H6.707L5.854 3.854L5.5 4H2V12ZM3.5 5C3.40111 5 3.30444 5.02932 3.22222 5.08427C3.13999 5.13921 3.0759 5.2173 3.03806 5.30866C3.00022 5.40002 2.99031 5.50055 3.00961 5.59755C3.0289 5.69454 3.07652 5.78363 3.14645 5.85355C3.21637 5.92348 3.30546 5.9711 3.40246 5.99039C3.49945 6.00969 3.59998 5.99978 3.69134 5.96194C3.78271 5.9241 3.86079 5.86001 3.91574 5.77779C3.97068 5.69556 4 5.59889 4 5.5C4 5.36739 3.94732 5.24021 3.85355 5.14645C3.75979 5.05268 3.63261 5 3.5 5ZM8 6C8.39556 6 8.78224 6.1173 9.11114 6.33706C9.44004 6.55682 9.69639 6.86918 9.84776 7.23463C9.99914 7.60009 10.0387 8.00222 9.96157 8.39018C9.8844 8.77814 9.69392 9.13451 9.41421 9.41421C9.13451 9.69392 8.77814 9.8844 8.39018 9.96157C8.00222 10.0387 7.60009 9.99913 7.23463 9.84776C6.86918 9.69638 6.55683 9.44004 6.33706 9.11114C6.1173 8.78224 6 8.39556 6 8C6 7.46957 6.21071 6.96086 6.58579 6.58579C6.96086 6.21071 7.46957 6 8 6ZM8 5C7.40666 5 6.82664 5.17595 6.33329 5.50559C5.83994 5.83524 5.45543 6.30377 5.22836 6.85195C5.0013 7.40013 4.94189 8.00333 5.05765 8.58527C5.1734 9.16721 5.45912 9.70176 5.87868 10.1213C6.29824 10.5409 6.83279 10.8266 7.41473 10.9424C7.99667 11.0581 8.59987 10.9987 9.14805 10.7716C9.69623 10.5446 10.1648 10.1601 10.4944 9.66671C10.8241 9.17336 11 8.59334 11 8C11 7.20435 10.6839 6.44129 10.1213 5.87868C9.55871 5.31607 8.79565 5 8 5Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.5 2H1.5L1 2.5V13.5L1.5 14H14.5L15 13.5V2.5L14.5 2ZM14 13H2V6H14V13ZM14 5H2V3H14V5Z" fill="#424242"/>
<path d="M14.5 2H1.5L1 2.5V13.5L1.5 14H14.5L15 13.5V2.5L14.5 2ZM14 13H2V6H14V13ZM14 5H2V3H14V5Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 217 B

After

Width:  |  Height:  |  Size: 217 B

View File

@@ -1,3 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 1.5L6.5 1H14.5L15 1.5V3.5V8.5L14.5 9H12V8H14V4H7V5H6V3.5V1.5ZM7 2V3H14V2H7ZM1.5 7L1 7.5V14.5L1.5 15H9.5L10 14.5V7.5L9.5 7H1.5ZM2 9V8H9V9H2ZM2 10H9V14H2V10Z" fill="#424242"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 1.5L6.5 1H14.5L15 1.5V3.5V8.5L14.5 9H12V8H14V4H7V5H6V3.5V1.5ZM7 2V3H14V2H7ZM1.5 7L1 7.5V14.5L1.5 15H9.5L10 14.5V7.5L9.5 7H1.5ZM2 9V8H9V9H2ZM2 10H9V14H2V10Z" fill="#5F6368"/>
</svg>

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 329 B

View File

@@ -1,5 +1,5 @@
---
Checks: '-*,modernize-use-override,modernize-use-nullptr,modernize-deprecated-headers,bugprone-bool-pointer-implicit-conversion,bugprone-parent-virtual-call,bugprone-redundant-branch-condition,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare'
Checks: '-*,modernize-use-override,modernize-deprecated-headers,modernize-use-using,bugprone-bool-pointer-implicit-conversion,bugprone-parent-virtual-call,bugprone-redundant-branch-condition,bugprone-suspicious-semicolon,bugprone-suspicious-string-compare,modernize-redundant-void-arg,readability-static-accessed-through-instance'
WarningsAsErrors: ''
HeaderFilterRegex: 'ApplicationLibCode/*.*$'
FormatStyle: 'file'

View File

@@ -616,3 +616,47 @@ FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
for more details.
===============================================================================
Notice for the open-vds library
===============================================================================
https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/blob/master/LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
===============================================================================
Notice for the open-zgy library
===============================================================================
https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-zgy/-/blob/master/LICENSE.txt
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
===============================================================================
Notice for the regression-analysis library
===============================================================================
https://github.com/CeetronSolutions/regression-analysis
Copyright (C) 2023- Equinor ASA
regression-analysis is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
regression-analysis is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
for more details.

View File

@@ -32,3 +32,5 @@
#define RESINSIGHT_PATCH_VERSION "@RESINSIGHT_PATCH_VERSION@"
#define RESINSIGHT_OCTAVE_VERSION "@OCTAVE_VERSION_STRING@"
#define RESINSIGHT_PYTHON_VERSION "@Python3_VERSION@"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,457 @@
// ResInsight version string : 2023.06.0-RC_03
// Report generated : Mon Jun 12 12:27:33 2023
//
//
AnalysisPlot
AnalysisPlotCollection
AnalysisPlotDataEntry
Annotations
AsciiDataCurve
CalcScript
CellEdgeResultSlot
CellFilterCollection
CellPropertyFilter
CellPropertyFilters
CellRangeFilter
CellRangeFilterCollection
ChangeDataSourceFeatureUi
CmdAddItemExecData
CmdDeleteItemExecData
CmdSelectionChangeExecData
ColorLegend
ColorLegendCollection
ColorLegendItem
CompletionTemplateCollection
CorrelationMatrixPlot
CorrelationPlot
CorrelationPlotCollection
CorrelationReportPlot
CrossSection
CrossSectionCollection
CsvSummaryCase
CurveIntersection
DataContainerFloat
DataContainerString
DataContainerTime
DeclineCurve
DepthTrackPlot
DoubleParameter
Eclipse2dViewCollection
EclipseCase
EclipseGeometrySelectionItem
EclipseResultAddress
ElasticProperties
ElasticPropertyScaling
ElasticPropertyScalingCollection
EnsembleFractureStatistics
EnsembleFractureStatisticsPlot
EnsembleFractureStatisticsPlotCollection
EnsembleStatisticsSurface
EnsembleSurface
EnsembleWellLogStatisticsCurve
EnsembleWellLogs
EnsembleWellLogsCollection
FaciesInitialPressureConfig
FaciesProperties
Fault
Faults
FileSummaryCase
FileSurface
FishbonesCollection
FishbonesMultipleSubs
FishbonesPipeProperties
FlowCharacteristicsPlot
FlowDiagSolution
FlowPlotCollection
FormationNames
FormationNamesCollectionObject
FractureContainment
FractureDefinitionCollection
FractureGroupStatisticsCollection
FractureTemplateCollection
GeoMech2dViewCollection
GeoMechGeometrySelectionItem
GeoMechPart
GeoMechPartCollection
GeoMechPropertyFilter
GeoMechPropertyFilters
GeoMechResultDefinition
GeoMechResultSlot
GeoMechView
GridCaseSurface
GridCollection
GridCrossPlotCurve
GridCrossPlotCurveSet
GridInfo
GridInfoCollection
GridStatisticsPlot
GridStatisticsPlotCollection
GridSummaryCase
GridTimeHistoryCurve
IntegerParameter
Intersection2dView
Intersection2dViewCollection
IntersectionBox
IntersectionCollection
IntersectionResultDefinition
Legend
ListParameter
MainPlotCollection
MdiWindowController
MockModelSettings
ModeledWellPath
MultiPlot
MultiSnapshotDefinition
MultiSummaryPlot
NonNetLayers
ObservedDataCollection
ObservedFmuRftData
ObservedPressureDepthData
ParameterGroup
ParameterList
ParameterResultCrossPlot
PdmDocument
PdmObjectCollection
PdmObjectGroup
Perforation
PerforationCollection
PlotDataFilterCollection
PlotDataFilterItem
PlotTemplateCollection
PlotTemplateFileItem
PolyLineFilter
PolygonFilter
PolylineTarget
PolylinesFromFileAnnotation
PressureTable
PressureTableItem
PropertyFilter
RegressionAnalysisCurve
ResInsightAnalysisModels
ResInsightGeoMechCase
ResInsightGeoMechModels
ResInsightOilField
ResInsightProject
ResampleData
ReservoirCellResultStorage
ReservoirView
ResultDefinition
ResultSlot
ResultStorageEntryInfo
RftAddress
RiaMemoryCleanup
RiaPreferences
RiaPreferencesGeoMech
RiaPreferencesSummary
RiaPreferencesSystem
RiaRegressionTest
RicCaseAndFileExportSettingsUi
RicCellRangeUi
RicCreateDepthAdjustedLasFilesUi
RicCreateEnsembleSurfaceUi
RicCreateEnsembleWellLogUi
RicCreateMultipleWellPathLateralsUi
RicDeleteItemExecData
RicExportCarfinUi
RicExportCompletionDataSettingsUi
RicExportContourMapToTextUi
RicExportEclipseInputGridUi
RicExportLgrUi
RicExportToLasFileObj
RicExportToLasFileResampleUi
RicExportWellPathsUi
RicGridCalculator
RicHoloLensCreateSessionUi
RicHoloLensExportToFolderUi
RicHoloLensServerSettings
RicLinkVisibleViewsFeatureUi
RicPasteAsciiDataToSummaryPlotFeatureUi
RicSaturationPressureUi
RicSaveEclipseInputVisibleCellsUi
RicSaveMultiPlotTemplateFeatureSettings
RicSelectCaseOrEnsembleUi
RicSelectPlotTemplateUi
RicSelectSummaryPlotUI
RicSelectViewUI
RicSummaryAddressSelection
RicSummaryCurveCalculator
RicSummaryCurveCreator
RicWellPathsUnitSystemSettingsUi
RifReaderSettings
Rim3dWellLogCurveCollection
Rim3dWellLogExtractionCurve
Rim3dWellLogFileCurve
Rim3dWellLogRftCurve
RimAnnotationCollection
RimAnnotationCollectionBase
RimAnnotationGroupCollection
RimAnnotationLineAppearance
RimAnnotationTextAppearance
RimBinaryExportSettings
RimCaseCollection
RimCellFilterCollection
RimCommandExecuteScript
RimCommandIssueFieldChanged
RimCommandObject
RimCommandRouter
RimContourMapView
RimCsvUserData
RimCustomObjectiveFunction
RimCustomObjectiveFunctionCollection
RimCustomObjectiveFunctionWeight
RimDerivedEnsembleCase
RimDerivedEnsembleCaseCollection
RimDialogData
RimEclipseContourMapProjection
RimEclipseResultAddressCollection
RimElementVectorResult
RimEllipseFractureTemplate
RimEnsembleCurveFilter
RimEnsembleCurveFilterCollection
RimEnsembleCurveSet
RimEnsembleCurveSetCollection
RimEnsembleStatistics
RimEnsembleWellLogCurveSet
RimEquilibriumAxisAnnotation
RimExportInputSettings
RimFaultResultSlot
RimFractureExportSettings
RimGeoMechContourMapProjection
RimGeoMechContourMapView
RimGeoMechFaultReactivationResult
RimGridCalculation
RimGridCalculationCollection
RimGridCalculationVariable
RimGridCrossPlot
RimGridCrossPlotCollection
RimGridCrossPlotCurveSetNameConfig
RimGridCrossPlotNameConfig
RimIdenticalGridCaseGroup
RimInputProperty
RimInputPropertyCollection
RimInputReservoir
RimIntersectionResultsDefinitionCollection
RimMeasurement
RimMswCompletionParameters
RimMudWeightWindowParameters
RimMultiPlotCollection
RimMultipleEclipseResults
RimMultipleLocations
RimMultipleValveLocations
RimNonDarcyPerforationParameters
RimObjectiveFunction
RimObservedEclipseUserData
RimOilFieldEntry
RimOilRegionEntry
RimPlotAxisAnnotation
RimPlotCellFilterCollection
RimPlotCellPropertyFilter
RimPolylineAppearance
RimPolylinesAnnotationInView
RimPolylinesFromFileAnnotationInView
RimProcess
RimReachCircleAnnotation
RimReachCircleAnnotationInView
RimResultSelectionUi
RimRftCase
RimRftTopologyCurve
RimRoffCase
RimSEGYConvertOptions
RimSaturationPressurePlot
RimSaturationPressurePlotCollection
RimStatisticalCalculation
RimStatisticalCollection
RimStimPlanColors
RimStimPlanFractureTemplate
RimStimPlanLegendConfig
RimSummaryAddressCollection
RimSummaryCalculation
RimSummaryCalculationCollection
RimSummaryCalculationVariable
RimSummaryCurveCollection
RimSummaryCurveCollectionModifier
RimSummaryMultiPlotCollection
RimSummaryPlotManager
RimSummaryTable
RimSummaryTableCollection
RimSurfaceIntersectionBand
RimSurfaceIntersectionCollection
RimSurfaceIntersectionCurve
RimTensorResults
RimTernaryLegendConfig
RimTextAnnotation
RimTextAnnotationInView
RimThermalFractureTemplate
RimTimeAxisAnnotation
RimTimeStepFilter
RimUserDefinedPolylinesAnnotationInView
RimVfpPlotCollection
RimViewLinkerCollection
RimViewNameConfig
RimVirtualPerforationResults
RimWellAllocationOverTimePlot
RimWellConnectivityTable
RimWellIASettings
RimWellIASettingsCollection
RimWellLogExtractionCurve
RimWellLogExtractionCurveNameConfig
RimWellLogFileCurveNameConfig
RimWellLogPlotNameConfig
RimWellLogRftCurveNameConfig
RimWellLogWbsCurve
RimWellPathEntry
RimWellPathImport
RimWellPathTieIn
RiuCreateMultipleFractionsUi
RiuMultipleFractionsOptions
ScriptLocation
SeismicCollection
SeismicData
SeismicDataCollection
SeismicDifferenceData
SeismicSection
SeismicSectionCollection
SimWellFracture
SimWellFractureCollection
StimPlanFractureTemplate
StimPlanModel
StimPlanModelCollection
StimPlanModelCurve
StimPlanModelPlot
StimPlanModelPlotCollection
StimPlanModelTemplate
StimPlanModelTemplateCollection
StreamlineInViewCollection
StringParameter
SummaryAddress
SummaryCaseCollection
SummaryCaseSubCollection
SummaryCrossPlot
SummaryCrossPlotCollection
SummaryCurve
SummaryCurveAutoName
SummaryObservedDataFile
SummaryPageDownloadEntity
SummaryPlot
SummaryPlotCollection
SummaryTimeAxisProperties
SummaryYAxisProperties
Surface
SurfaceCollection
SurfaceInView
SurfaceInViewCollection
SurfaceResultDefinition
TC2
TestCommand1
ThermalFractureTemplate
TofAccumulatedPhaseFractionsPlot
TotalWellAllocationPlot
TriangleGeometry
UserDefinedFilter
UserDefinedPolylinesAnnotation
ValveTemplate
ValveTemplateCollection
VfpPlot
View3dOverlayInfoConfig
ViewController
ViewLinker
WbsParameters
Well
WellAllocationPlot
WellAllocationPlotLegend
WellBoreStabilityPlot
WellDistributionPlot
WellDistributionPlotCollection
WellFlowRateCurve
WellLogCalculatedCurve
WellLogExtractionCurve
WellLogFile
WellLogFileChannel
WellLogFileCurve
WellLogPlot
WellLogPlotCollection
WellLogPlotTrack
WellLogRftCurve
WellMeasurement
WellMeasurementCurve
WellMeasurementFilePath
WellMeasurementInView
WellMeasurements
WellMeasurementsInView
WellPath
WellPathAicdParameters
WellPathAttribute
WellPathAttributes
WellPathBase
WellPathCompletionSettings
WellPathCompletions
WellPathFracture
WellPathFractureCollection
WellPathGeometry
WellPathGeometryDef
WellPathGroup
WellPathTarget
WellPathValve
WellPaths
WellPltPlot
WellPltPlotCollection
WellRftEnsembleCurveSet
WellRftPlot
WellRftPlotCollection
Wells
cafNamedTreeNode
cafObjectReferenceTreeNode
cafTreeNode
cloneView
closeProject
computeCaseGroupStatistics
createGridCaseGroup
createGridCaseGroupResult
createLgrForCompletions
createMultiPlot
createMultipleFractures
createSaturationPressurePlots
createStatisticsCase
createStatisticsCaseResult
createView
createViewResult
createWbsPlotResult
createWellBoreStabilityPlot
exportContourMapToText
exportFlowCharacteristics
exportLgrForCompletions
exportMsw
exportMultiCaseSnapshots
exportProperty
exportPropertyInViews
exportSimWellFractureCompletions
exportSnapshots
exportVisibleCells
exportWellLogPlotData
exportWellLogPlotDataResult
exportWellPathCompletions
exportWellPaths
importFormationNames
importWellLogFiles
importWellLogFilesResult
importWellPaths
importWellPathsResult
loadCase
loadCaseResult
openProject
replaceCase
replaceMultipleCases
replaceSourceCases
runOctaveScript
saveProject
saveProjectAs
scaleFractureTemplate
setExportFolder
setFractureContainment
setMainWindowSize
setPlotWindowSize
setStartDir
setTimeStep
stackCurves
unstackCurves

View File

@@ -30,8 +30,10 @@ set(SOURCE_GROUP_HEADER_FILES
${CMAKE_CURRENT_LIST_DIR}/RiaDateTimeDefines.h
${CMAKE_CURRENT_LIST_DIR}/RiaPlotCollectionScheduler.h
${CMAKE_CURRENT_LIST_DIR}/RiaScheduler.h
${CMAKE_CURRENT_LIST_DIR}/RiaSeismicDefines.h
${CMAKE_CURRENT_LIST_DIR}/RiaSummaryDefines.h
${CMAKE_CURRENT_LIST_DIR}/RiaLasDefines.h
${CMAKE_CURRENT_LIST_DIR}/RiaWellFlowDefines.h
)
set(SOURCE_GROUP_SOURCE_FILES
@@ -67,7 +69,9 @@ set(SOURCE_GROUP_SOURCE_FILES
${CMAKE_CURRENT_LIST_DIR}/RiaPlotCollectionScheduler.cpp
${CMAKE_CURRENT_LIST_DIR}/RiaScheduler.cpp
${CMAKE_CURRENT_LIST_DIR}/RiaSummaryDefines.cpp
${CMAKE_CURRENT_LIST_DIR}/RiaSeismicDefines.cpp
${CMAKE_CURRENT_LIST_DIR}/RiaLasDefines.cpp
${CMAKE_CURRENT_LIST_DIR}/RiaWellFlowDefines.cpp
)
list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES})

View File

@@ -39,7 +39,6 @@
#include "RicfCommandFileExecutor.h"
#include "RicfCommandObject.h"
#include "CommandRouter/RimCommandRouter.h"
#include "PlotTemplates/RimPlotTemplateFolderItem.h"
#include "Rim2dIntersectionViewCollection.h"
#include "RimAnnotationCollection.h"
@@ -47,6 +46,7 @@
#include "RimAnnotationTextAppearance.h"
#include "RimCellFilterCollection.h"
#include "RimCommandObject.h"
#include "RimCommandRouter.h"
#include "RimCompletionTemplateCollection.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseView.h"
@@ -124,6 +124,11 @@
#include "gtest/gtest.h"
#endif // USE_UNIT_TESTS
// Required to ignore warning of usused variable when defining caf::PdmMarkdownGenerator
#if defined( __clang__ )
#pragma clang diagnostic ignored "-Wunused-variable"
#endif
RiaApplication* RiaApplication::s_riaApplication = nullptr;
//--------------------------------------------------------------------------------------------------
@@ -244,7 +249,8 @@ void RiaApplication::createMockModelCustomized()
void RiaApplication::createInputMockModel()
{
bool createView = true;
RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( QStringList( RiaDefines::mockModelBasicInputCase() ), createView );
RiaImportEclipseCaseTools::openEclipseInputCaseAndPropertiesFromFileNames( QStringList( RiaDefines::mockModelBasicInputCase() ),
createView );
}
//--------------------------------------------------------------------------------------------------
@@ -562,8 +568,8 @@ bool RiaApplication::loadProject( const QString& projectFileName, ProjectLoadAct
oilField->fractureDefinitionCollection()->createAndAssignTemplateCopyForNonMatchingUnit();
{
std::vector<RimWellPathFracture*> wellPathFractures;
oilField->wellPathCollection->descendantsIncludingThisOfType( wellPathFractures );
std::vector<RimWellPathFracture*> wellPathFractures =
oilField->wellPathCollection->descendantsIncludingThisOfType<RimWellPathFracture>();
for ( auto fracture : wellPathFractures )
{
@@ -621,8 +627,7 @@ bool RiaApplication::loadProject( const QString& projectFileName, ProjectLoadAct
if ( m_project->isProjectFileVersionEqualOrOlderThan( "2018.1.0.103" ) )
{
std::vector<RimStimPlanColors*> stimPlanColors;
riv->descendantsIncludingThisOfType( stimPlanColors );
std::vector<RimStimPlanColors*> stimPlanColors = riv->descendantsIncludingThisOfType<RimStimPlanColors>();
if ( stimPlanColors.size() == 1 )
{
stimPlanColors[0]->updateConductivityResultName();

View File

@@ -19,6 +19,7 @@
#include "RiaCompletionTypeCalculationScheduler.h"
#include "RiaApplication.h"
#include "RiaResultNames.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"

View File

@@ -48,7 +48,7 @@ private:
~RiaCompletionTypeCalculationScheduler() override;
RiaCompletionTypeCalculationScheduler( const RiaCompletionTypeCalculationScheduler& o ) = delete;
void operator=( const RiaCompletionTypeCalculationScheduler& o ) = delete;
void operator=( const RiaCompletionTypeCalculationScheduler& o ) = delete;
private:
std::vector<caf::PdmPointer<RimEclipseCase>> m_eclipseCasesToRecalculate;

View File

@@ -46,6 +46,8 @@ template <>
void caf::AppEnum<RiaDefines::DateTimePeriod>::setUp()
{
addItem( RiaDefines::DateTimePeriod::NONE, "NONE", "None" );
addItem( RiaDefines::DateTimePeriod::MINUTE, "MINUTE", "Minute" );
addItem( RiaDefines::DateTimePeriod::HOUR, "HOUR", "Hour" );
addItem( RiaDefines::DateTimePeriod::DAY, "DAY", "Day" );
addItem( RiaDefines::DateTimePeriod::WEEK, "WEEK", "Week" );
addItem( RiaDefines::DateTimePeriod::MONTH, "MONTH", "Month" );

View File

@@ -45,6 +45,8 @@ enum class TimeFormatComponents
enum class DateTimePeriod
{
NONE = -1,
MINUTE,
HOUR,
DAY,
WEEK,
MONTH,

View File

@@ -41,6 +41,17 @@ void caf::AppEnum<RiaDefines::ResultCatType>::setUp()
setDefault( RiaDefines::ResultCatType::DYNAMIC_NATIVE );
}
template <>
void caf::AppEnum<RiaDefines::ResultDataType>::setUp()
{
addItem( RiaDefines::ResultDataType::UNKNOWN, "UNKNOWN", "Unknown" );
addItem( RiaDefines::ResultDataType::FLOAT, "FLOAT", "Float" );
addItem( RiaDefines::ResultDataType::DOUBLE, "DOUBLE", "Double" );
addItem( RiaDefines::ResultDataType::INTEGER, "INTEGER", "Integer" );
setDefault( RiaDefines::ResultDataType::FLOAT );
}
template <>
void caf::AppEnum<RiaDefines::DepthUnitType>::setUp()
{
@@ -123,7 +134,6 @@ void caf::AppEnum<RiaDefines::ThemeEnum>::setUp()
{
addItem( RiaDefines::ThemeEnum::DEFAULT, "DEFAULT", "Default theme" );
addItem( RiaDefines::ThemeEnum::DARK, "DARK", "Dark theme" );
addItem( RiaDefines::ThemeEnum::LIGHT, "LIGHT", "Light theme" );
setDefault( RiaDefines::ThemeEnum::DEFAULT );
}
@@ -159,15 +169,6 @@ void caf::AppEnum<RiaDefines::RowCount>::setUp()
} // namespace caf
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaDefines::isNativeCategoryResult( const QString& resultName )
{
return resultName.endsWith( "NUM" ) || resultName == RiaResultNames::indexIResultName() ||
resultName == RiaResultNames::indexJResultName() || resultName == RiaResultNames::indexKResultName();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -52,6 +52,14 @@ enum class ResultCatType
UNDEFINED = 999
};
enum class ResultDataType
{
UNKNOWN,
FLOAT,
DOUBLE,
INTEGER
};
// WARNING: DO NOT CHANGE THE ORDER WITHOUT KNOWING WHAT YOU ARE DOING!
// You may well change the behaviour of property filters.
enum class WellPathComponentType
@@ -79,8 +87,6 @@ enum class MeshModeType
NO_MESH
};
bool isNativeCategoryResult( const QString& resultName );
// Mock model text identifiers
QString mockModelBasic();
QString mockModelBasicWithResults();
@@ -165,7 +171,6 @@ enum class ThemeEnum
{
DEFAULT,
DARK,
LIGHT,
UNDEFINED
};

View File

@@ -70,6 +70,12 @@ std::vector<QString> RiaEclipseFileNameTools::findSummaryFileCandidates()
auto smryCandidate = relatedFilePath( EclipseFileType::ECLIPSE_SMSPEC );
auto esmryCandidate = relatedFilePath( EclipseFileType::ECLIPSE_ESMRY );
if ( !smryCandidate.isEmpty() && !esmryCandidate.isEmpty() )
{
// If both files exist, we prefer the SMSPEC file
esmryCandidate = "";
}
return { smryCandidate, esmryCandidate };
}

View File

@@ -81,6 +81,7 @@
#include "RimSummaryPlot.h"
#include "RimTextAnnotation.h"
#include "RimTextAnnotationInView.h"
#include "RimTools.h"
#include "RimViewLinker.h"
#include "RimViewLinkerCollection.h"
#include "RimWellLogFile.h"
@@ -1375,10 +1376,9 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences*
if ( this->project() )
{
std::vector<RimViewWindow*> allViewWindows;
project()->descendantsIncludingThisOfType( allViewWindows );
std::vector<RimViewWindow*> allViewWindows = project()->descendantsIncludingThisOfType<RimViewWindow>();
RimWellPathCollection* wellPathCollection = this->project()->activeOilField()->wellPathCollection();
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
bool existingViewsWithDifferentMeshLines = false;
bool existingViewsWithCustomColors = false;
@@ -1446,10 +1446,10 @@ void RiaGuiApplication::applyGuiPreferences( const RiaPreferences*
reply = QMessageBox::question( activeMainWindow(),
QString( "Apply %1 to Existing Views or Plots?" ).arg( listString ),
QString( "You have changed default %1 and have existing views or plots with "
"different settings.\n" )
"different settings.\n" )
.arg( listString ) +
QString( "Do you want to apply the new default settings to all existing "
"views?" ),
"views?" ),
QMessageBox::Ok | QMessageBox::Cancel );
applySettingsToAllViews = ( reply == QMessageBox::Ok );
}
@@ -1674,7 +1674,7 @@ bool RiaGuiApplication::notify( QObject* receiver, QEvent* event )
memoryExhaustedBox = new QMessageBox( QMessageBox::Critical,
"ResInsight Exhausted Memory",
"Memory is Exhausted!\n ResInsight could not allocate the memory needed, and is now "
"unstable and will probably crash soon." );
"unstable and will probably crash soon." );
}
bool done = false;

View File

@@ -19,9 +19,11 @@
#include "RiaMemoryCleanup.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseResultInfo.h"
#include "RigFemPartResultsCollection.h"
#include "RigFemResultAddress.h"
#include "RigGeoMechCaseData.h"
#include "Rim3dView.h"
#include "RimEclipseCase.h"
#include "RimEclipseResultDefinition.h"
@@ -29,8 +31,6 @@
#include "RimGeoMechResultDefinition.h"
#include "RimProject.h"
#include "RigEclipseResultInfo.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
@@ -46,17 +46,15 @@ CAF_PDM_SOURCE_INIT( RiaMemoryCleanup, "RiaMemoryCleanup" );
//--------------------------------------------------------------------------------------------------
RiaMemoryCleanup::RiaMemoryCleanup()
{
// clang-format off
CAF_PDM_InitFieldNoDefault(&m_case, "DataCase", "Case");
CAF_PDM_InitFieldNoDefault( &m_case, "DataCase", "Case" );
m_case = nullptr;
CAF_PDM_InitFieldNoDefault(&m_resultsToDelete, "ResultsToDelete", "Results In Memory");
m_resultsToDelete.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::TOP);
m_resultsToDelete.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault( &m_resultsToDelete, "ResultsToDelete", "Results In Memory" );
m_resultsToDelete.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::TOP );
m_resultsToDelete.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault(&m_performDelete, "ClearSelectedData", "");
caf::PdmUiPushButtonEditor::configureEditorForField(&m_performDelete);
// clang-format on
CAF_PDM_InitFieldNoDefault( &m_performDelete, "ClearSelectedData", "" );
caf::PdmUiPushButtonEditor::configureEditorForField( &m_performDelete );
}
//--------------------------------------------------------------------------------------------------
@@ -153,8 +151,7 @@ std::set<RigFemResultAddress> RiaMemoryCleanup::findGeoMechCaseResultsInUse() co
auto geoMechCase = dynamic_cast<RimGeoMechCase*>( m_case() );
if ( geoMechCase )
{
std::vector<RimFemResultObserver*> geoMechResults;
geoMechCase->descendantsIncludingThisOfType( geoMechResults );
std::vector<RimFemResultObserver*> geoMechResults = geoMechCase->descendantsIncludingThisOfType<RimFemResultObserver>();
for ( RimFemResultObserver* resultDef : geoMechResults )
{
auto pdmObj = dynamic_cast<caf::PdmObject*>( resultDef );
@@ -181,8 +178,7 @@ std::set<RigEclipseResultAddress> RiaMemoryCleanup::findEclipseResultsInUse() co
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case() );
if ( eclipseCase )
{
std::vector<RimEclipseResultDefinition*> eclipseResultDefs;
eclipseCase->descendantsIncludingThisOfType( eclipseResultDefs );
auto eclipseResultDefs = eclipseCase->descendantsIncludingThisOfType<RimEclipseResultDefinition>();
for ( RimEclipseResultDefinition* resultDef : eclipseResultDefs )
{
RigEclipseResultAddress resultAddr( resultDef->resultType(), resultDef->resultVariable() );

View File

@@ -432,7 +432,7 @@ void RiaPreferencesSummary::defineEditorAttribute( const caf::PdmFieldHandle* fi
auto attrib = dynamic_cast<caf::PdmUiListEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_heightHint = 30;
attrib->heightHint = 30;
}
}
}

View File

@@ -20,6 +20,8 @@
#include "RiaResultNames.h"
#include "RigEclipseResultAddress.h"
#include "cafAppEnum.h"
//--------------------------------------------------------------------------------------------------
@@ -361,6 +363,30 @@ QString RiaResultNames::indexKResultName()
return "INDEX_K";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEclipseResultAddress RiaResultNames::staticIntegerAddress( const QString& resultName )
{
return RigEclipseResultAddress( RiaDefines::ResultCatType::STATIC_NATIVE, RiaDefines::ResultDataType::INTEGER, resultName );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiaResultNames::faultDistanceName()
{
return "FAULTDIST";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiaResultNames::facies()
{
return "FACIES";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -20,7 +20,10 @@
#pragma once
class RigEclipseResultAddress;
#include <QString>
#include <set>
#include <vector>
@@ -66,9 +69,13 @@ QString faultReactAssessmentPrefix();
QString completionTypeResultName();
QString indexIResultName();
QString indexJResultName();
QString indexKResultName();
QString indexIResultName();
QString indexJResultName();
QString indexKResultName();
RigEclipseResultAddress staticIntegerAddress( const QString& resultName );
QString faultDistanceName();
QString facies();
QString soil();
QString sgas();

View File

@@ -0,0 +1,35 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2023 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RiaSeismicDefines.h"
#include "cafAppEnum.h"
namespace caf
{
template <>
void caf::AppEnum<RiaDefines::SeismicSectionType>::setUp()
{
addItem( RiaDefines::SeismicSectionType::SS_INLINE, "SS_INLINE", "Inline" );
addItem( RiaDefines::SeismicSectionType::SS_XLINE, "SS_XLINE", "Xline" );
addItem( RiaDefines::SeismicSectionType::SS_DEPTHSLICE, "SS_DEPTHSLICE", "Depth Slice" );
addItem( RiaDefines::SeismicSectionType::SS_POLYLINE, "SS_POLYLINE", "Polyline" );
addItem( RiaDefines::SeismicSectionType::SS_WELLPATH, "SS_WELLPATH", "Well Path" );
setDefault( RiaDefines::SeismicSectionType::SS_INLINE );
}
} // namespace caf

View File

@@ -0,0 +1,39 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2023 Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
namespace RiaDefines
{
enum class SeismicSliceDirection
{
INLINE,
XLINE,
DEPTH
};
enum class SeismicSectionType
{
SS_INLINE,
SS_XLINE,
SS_DEPTHSLICE,
SS_POLYLINE,
SS_WELLPATH
};
}; // namespace RiaDefines

View File

@@ -22,6 +22,13 @@
namespace RiaDefines
{
enum class FileType
{
SMSPEC,
REVEAL_SUMMARY,
STIMPLAN_SUMMARY
};
QString summaryField();
QString summaryAquifer();
QString summaryNetwork();

View File

@@ -0,0 +1,27 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2023- Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RiaWellFlowDefines.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiaDefines::reservoirTracerName()
{
return "Reservoir";
}

View File

@@ -0,0 +1,26 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2023- Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <QString>
namespace RiaDefines
{
QString reservoirTracerName();
}; // namespace RiaDefines

View File

@@ -531,6 +531,24 @@ const caf::ColorTable& RiaColorTables::correlationPaletteColors()
return colorTable;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const caf::ColorTable& RiaColorTables::heatMapPaletteColors()
{
static std::vector<cvf::Color3ub> colors{ cvf::Color3ub::DARK_BLUE,
cvf::Color3ub( 0, 0, 240 ), // Medium Blue
cvf::Color3ub( 0, 102, 204 ), // Transition Medium Blue to Cyan
cvf::Color3ub::CYAN,
cvf::Color3ub( 75, 255, 47 ), // Green/Yellow more green
cvf::Color3ub::DARK_ORANGE,
cvf::Color3ub::YELLOW };
static caf::ColorTable colorTable = caf::ColorTable( colors );
return colorTable;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -29,7 +29,7 @@
class RiaColorTables
{
public:
typedef std::map<RiaDefines::WellPathComponentType, cvf::Color3::ColorIdent> WellPathComponentColors;
using WellPathComponentColors = std::map<RiaDefines::WellPathComponentType, cvf::Color3::ColorIdent>;
static const caf::ColorTable& normalPaletteColors();
static const caf::ColorTable& normalPaletteOppositeOrderingColors();
@@ -62,6 +62,7 @@ public:
static const caf::ColorTable& wellPathsPaletteColors();
static const caf::ColorTable& waterAndRockPaletteColors();
static const caf::ColorTable& correlationPaletteColors();
static const caf::ColorTable& heatMapPaletteColors();
static cvf::Color3f undefinedCellColor();

View File

@@ -34,7 +34,7 @@ class QDateTime;
class RiaCurveDataTools
{
public:
typedef std::vector<std::pair<size_t, size_t>> CurveIntervals;
using CurveIntervals = std::vector<std::pair<size_t, size_t>>;
enum class ErrorAxis
{

View File

@@ -38,7 +38,7 @@ template <typename XValueType>
class RiaCurveMerger
{
public:
typedef XValueComparator<XValueType> XComparator;
using XComparator = XValueComparator<XValueType>;
RiaCurveMerger();
void addCurveData( const std::vector<XValueType>& xValues, const std::vector<double>& yValues );
@@ -78,7 +78,7 @@ private:
std::vector<std::vector<double>> m_interpolatedValuesForAllCurves;
};
typedef RiaCurveMerger<time_t> RiaTimeHistoryCurveMerger;
using RiaTimeHistoryCurveMerger = RiaCurveMerger<time_t>;
template <>
bool XValueComparator<double>::equals( const double& lhs, const double& rhs );

View File

@@ -64,12 +64,14 @@ QDateTime RiaDateStringParser::parseDateString( const std::string& dateString, O
//--------------------------------------------------------------------------------------------------
bool RiaDateStringParser::parseDateStringWithSeparators( const std::string& dateString, int& year, int& month, int& day, OrderPreference preference )
{
auto tryParseAllYearFirst = []( const std::string& dateString, int& year, int& month, int& day ) {
auto tryParseAllYearFirst = []( const std::string& dateString, int& year, int& month, int& day )
{
return tryParseYearFirst( dateString, year, month, day ) || tryParseDayFirst( dateString, year, month, day ) ||
tryParseMonthFirst( dateString, year, month, day );
};
auto tryParseAllDayFirst = []( const std::string& dateString, int& year, int& month, int& day ) {
auto tryParseAllDayFirst = []( const std::string& dateString, int& year, int& month, int& day )
{
return tryParseDayFirst( dateString, year, month, day ) || tryParseYearFirst( dateString, year, month, day ) ||
tryParseMonthFirst( dateString, year, month, day );
};
@@ -83,12 +85,14 @@ bool RiaDateStringParser::parseDateStringWithSeparators( const std::string& date
//--------------------------------------------------------------------------------------------------
bool RiaDateStringParser::parseDateStringWithoutSeparators( const std::string& dateString, int& year, int& month, int& day, OrderPreference preference )
{
auto tryParseAllYearFirstNoSeparators = []( const std::string& dateString, int& year, int& month, int& day ) {
auto tryParseAllYearFirstNoSeparators = []( const std::string& dateString, int& year, int& month, int& day )
{
return tryParseYearFirstNoSeparators( dateString, year, month, day ) ||
tryParseDayFirstNoSeparators( dateString, year, month, day ) || tryParseMonthFirstNoSeparators( dateString, year, month, day );
};
auto tryParseAllDayFirstNoSeparators = []( const std::string& dateString, int& year, int& month, int& day ) {
auto tryParseAllDayFirstNoSeparators = []( const std::string& dateString, int& year, int& month, int& day )
{
return tryParseDayFirstNoSeparators( dateString, year, month, day ) || tryParseYearFirstNoSeparators( dateString, year, month, day ) ||
tryParseMonthFirstNoSeparators( dateString, year, month, day );
};

View File

@@ -19,6 +19,7 @@
#include "RiaEnsembleNameTools.h"
#include "RiaFilePathTools.h"
#include "RiaSummaryDefines.h"
#include "RiaTextStringTools.h"
#include "RimCaseDisplayNameTools.h"
@@ -133,6 +134,105 @@ std::vector<QStringList> RiaEnsembleNameTools::groupFilesByEnsemble( const QStri
return groupedByIteration;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<QString, QStringList> RiaEnsembleNameTools::groupFilesByCustomEnsemble( const QStringList& fileNames, RiaDefines::FileType fileType )
{
std::vector<QStringList> componentsForAllFilePaths;
for ( const auto& filePath : fileNames )
{
QStringList components = RiaFilePathTools::splitPathIntoComponents( filePath );
componentsForAllFilePaths.push_back( components );
}
auto mapping = findUniqueCustomEnsembleNames( fileType, fileNames, componentsForAllFilePaths );
std::set<QString> iterations;
for ( const auto& [name, iterFileNamePair] : mapping )
{
iterations.insert( iterFileNamePair.first );
}
std::map<QString, QStringList> groupedByIteration;
for ( const QString& groupIteration : iterations )
{
QStringList fileNamesFromIteration;
for ( const auto& [name, iterFileNamePair] : mapping )
{
QString iteration = iterFileNamePair.first;
QString fileName = iterFileNamePair.second;
if ( groupIteration == iteration )
{
fileNamesFromIteration << fileName;
}
}
groupedByIteration[groupIteration] = fileNamesFromIteration;
}
return groupedByIteration;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<QString, std::pair<QString, QString>>
RiaEnsembleNameTools::findUniqueCustomEnsembleNames( RiaDefines::FileType fileType,
const QStringList& fileNames,
const std::vector<QStringList>& fileNameComponents )
{
CAF_ASSERT( fileNames.size() == static_cast<int>( fileNameComponents.size() ) );
std::map<QString, std::pair<QString, QString>> mapping;
int i = 0;
for ( const auto& fileComponents : fileNameComponents )
{
int numComponents = fileComponents.size();
if ( fileType == RiaDefines::FileType::STIMPLAN_SUMMARY )
{
if ( numComponents >= 8 && fileComponents[numComponents - 6] == "stimplan" )
{
// Expected path: realization/iteration/stimplan/output/well/job/fracture/data.csv
// Example: realization-1/iteration-1/stimplan/output/H-B33/job-01/mainfrac/data.csv
QString fileName = fileNames[i];
QString fracture = fileComponents[numComponents - 2];
QString job = fileComponents[numComponents - 3];
QString well = fileComponents[numComponents - 4];
QString iteration = fileComponents[numComponents - 7];
QString realization = fileComponents[numComponents - 8];
QString key = QString( "%1, %2, %3, %4, %5" ).arg( iteration, realization, well, fracture, job );
QString displayName = QString( "%1, %2, %3, %4" ).arg( iteration, well, fracture, job );
mapping[key] = std::make_pair( displayName, fileName );
}
}
else if ( fileType == RiaDefines::FileType::REVEAL_SUMMARY )
{
if ( numComponents >= 6 && fileComponents[numComponents - 4] == "reveal" )
{
// Expected path: realization/iteration/reveal/output/well/data.csv
// Example: realization-1/iteration-1/reveal/output/H-B33/data.csv
QString fileName = fileNames[i];
QString well = fileComponents[numComponents - 2];
QString iteration = fileComponents[numComponents - 5];
QString realization = fileComponents[numComponents - 6];
QString key = QString( "%1, %2, %3" ).arg( iteration, realization, well );
QString displayName = QString( "%1, %2" ).arg( iteration, well );
mapping[key] = std::make_pair( displayName, fileName );
}
}
i++;
}
return mapping;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -165,8 +265,7 @@ QString RiaEnsembleNameTools::uniqueShortNameForSummaryCase( RimSummaryCase* sum
{
std::set<QString> allAutoShortNames;
std::vector<RimSummaryCase*> allCases;
RimProject::current()->descendantsOfType( allCases );
std::vector<RimSummaryCase*> allCases = RimProject::current()->descendantsOfType<RimSummaryCase>();
for ( auto sumCase : allCases )
{
@@ -283,8 +382,10 @@ QString RiaEnsembleNameTools::findCommonBaseName( const QStringList& fileNames )
//--------------------------------------------------------------------------------------------------
QString RiaEnsembleNameTools::uniqueShortName( const QString& sourceFileName, const QStringList& allFileNames, const QString& ensembleCaseName )
{
std::map<QString, QStringList> keyFileComponentsForAllFiles = RiaFilePathTools::keyPathComponentsForEachFilePath( allFileNames );
// Handle ensemble with only one realizations separately.
if ( allFileNames.size() == 1 ) return ensembleCaseName;
std::map<QString, QStringList> keyFileComponentsForAllFiles = RiaFilePathTools::keyPathComponentsForEachFilePath( allFileNames );
return uniqueShortNameFromComponents( sourceFileName, keyFileComponentsForAllFiles, ensembleCaseName );
}

View File

@@ -23,6 +23,8 @@
#include <map>
#include <vector>
#include "RiaSummaryDefines.h"
class RimSummaryCase;
//==================================================================================================
@@ -49,7 +51,12 @@ public:
const std::map<QString, QStringList>& keyFileComponentsForAllFiles,
const QString& ensembleCaseName );
static std::vector<QStringList> groupFilesByEnsemble( const QStringList& fileNames, EnsembleGroupingMode groupingMode );
static std::vector<QStringList> groupFilesByEnsemble( const QStringList& fileNames, EnsembleGroupingMode groupingMode );
static std::map<QString, QStringList> groupFilesByCustomEnsemble( const QStringList& fileNames, RiaDefines::FileType fileType );
static std::map<QString, std::pair<QString, QString>> findUniqueCustomEnsembleNames( RiaDefines::FileType fileType,
const QStringList& fileNames,
const std::vector<QStringList>& fileNameComponents );
static QString uniqueShortNameForEnsembleCase( RimSummaryCase* summaryCase );
static QString uniqueShortNameForSummaryCase( RimSummaryCase* summaryCase );

View File

@@ -40,14 +40,14 @@ RigEclipseWellLogExtractor* RiaExtractionTools::findOrCreateWellLogExtractor( Ri
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigGeoMechWellLogExtractor* RiaExtractionTools::findOrCreateWellLogExtractor( RimWellPath* wellPath, RimGeoMechCase* geomCase )
RigGeoMechWellLogExtractor* RiaExtractionTools::findOrCreateWellLogExtractor( RimWellPath* wellPath, RimGeoMechCase* geomCase, int partId )
{
if ( !( wellPath && geomCase ) ) return nullptr;
auto wlPlotCollection = wellLogPlotCollection();
if ( !wlPlotCollection ) return nullptr;
return wlPlotCollection->findOrCreateExtractor( wellPath, geomCase );
return wlPlotCollection->findOrCreateExtractor( wellPath, geomCase, partId );
}
//--------------------------------------------------------------------------------------------------
@@ -60,8 +60,7 @@ RigEclipseWellLogExtractor* RiaExtractionTools::findOrCreateSimWellExtractor( co
auto wlPlotCollection = wellLogPlotCollection();
if ( !wlPlotCollection ) return nullptr;
RimEclipseCase* eclipseCase = nullptr;
simWell->firstAncestorOrThisOfType( eclipseCase );
auto eclipseCase = simWell->firstAncestorOrThisOfType<RimEclipseCase>();
if ( !( eclipseCase && eclipseCase->eclipseCaseData() ) )
{
return nullptr;

View File

@@ -37,7 +37,7 @@ class QString;
namespace RiaExtractionTools
{
RigEclipseWellLogExtractor* findOrCreateWellLogExtractor( RimWellPath* wellPath, RimEclipseCase* eclipseCase );
RigGeoMechWellLogExtractor* findOrCreateWellLogExtractor( RimWellPath* wellPath, RimGeoMechCase* geomCase );
RigGeoMechWellLogExtractor* findOrCreateWellLogExtractor( RimWellPath* wellPath, RimGeoMechCase* geomCase, int partId = 0 );
RigEclipseWellLogExtractor* findOrCreateSimWellExtractor( const RimSimWellInView* simWell, const RigWellPath* wellPathGeom );

View File

@@ -21,14 +21,14 @@
#include <fstream>
#include <iostream>
RiaImageCompareReporter::RiaImageCompareReporter( void )
RiaImageCompareReporter::RiaImageCompareReporter()
{
m_showOriginal = true;
m_showGenerated = true;
m_showInteractiveDiff = false;
}
RiaImageCompareReporter::~RiaImageCompareReporter( void )
RiaImageCompareReporter::~RiaImageCompareReporter()
{
}

View File

@@ -61,11 +61,11 @@ void RiaImageTools::distanceTransform2d( std::vector<std::vector<unsigned int>>&
}
}
auto f = []( int64_t x, int64_t i, const std::vector<std::vector<int64_t>>& g, int64_t y ) {
return ( x - i ) * ( x - i ) + g[i][y] * g[i][y];
};
auto f = []( int64_t x, int64_t i, const std::vector<std::vector<int64_t>>& g, int64_t y )
{ return ( x - i ) * ( x - i ) + g[i][y] * g[i][y]; };
auto sep = []( int64_t i, int64_t u, const std::vector<std::vector<int64_t>>& g, int64_t y ) {
auto sep = []( int64_t i, int64_t u, const std::vector<std::vector<int64_t>>& g, int64_t y )
{
if ( i == u ) return (int64_t)0;
int64_t numerator = u * u - i * i + g[u][y] * g[u][y] - g[i][y] * g[i][y];

View File

@@ -24,7 +24,6 @@
#include "SummaryPlotCommands/RicNewSummaryCurveFeature.h"
#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h"
#include "RiaApplication.h"
#include "RiaGuiApplication.h"
#include "RiaLogging.h"
@@ -74,8 +73,8 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList&
bool noDialog,
std::shared_ptr<RifReaderSettings> readerSettings )
{
RiaApplication* app = RiaApplication::instance();
RimProject* project = app->project();
RimProject* project = RimProject::current();
if ( !project ) return false;
// Get list of files to import
RifSummaryCaseRestartSelector selector;
@@ -124,11 +123,10 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList&
auto existingSummaryCase = sumCaseColl->findTopLevelSummaryCaseFromFileName( newSumCase->summaryHeaderFilename() );
if ( existingSummaryCase )
{
existingSummaryCase->firstAncestorOrThisOfType( existingCollection );
existingCollection = existingSummaryCase->firstAncestorOrThisOfType<RimSummaryCaseCollection>();
// Replace file summary case pointers in Rft Curves
std::vector<RimWellLogRftCurve*> rftCurves;
existingSummaryCase->objectsWithReferringPtrFieldsOfType( rftCurves );
auto rftCurves = existingSummaryCase->objectsWithReferringPtrFieldsOfType<RimWellLogRftCurve>();
for ( RimWellLogRftCurve* curve : rftCurves )
{
if ( curve->summaryCase() == existingSummaryCase )
@@ -139,8 +137,7 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList&
// Replace all occurrences of file sum with ecl sum
std::vector<RimSummaryCurve*> objects;
existingSummaryCase->objectsWithReferringPtrFieldsOfType( objects );
auto objects = existingSummaryCase->objectsWithReferringPtrFieldsOfType<RimSummaryCurve>();
// UI settings of a curve filter is updated based
// on the new case association for the curves in the curve filter
@@ -159,8 +156,7 @@ bool RiaImportEclipseCaseTools::openEclipseCasesFromFile( const QStringList&
summaryCurve->setSummaryCaseY( newSumCase );
}
RimSummaryCurveCollection* parentCollection = nullptr;
summaryCurve->firstAncestorOrThisOfType( parentCollection );
auto parentCollection = summaryCurve->firstAncestorOrThisOfType<RimSummaryCurveCollection>();
if ( parentCollection )
{
parentCollection->loadDataAndUpdate( true );
@@ -254,24 +250,25 @@ bool RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilter( const QString
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( const QStringList& fileNames, bool createDefaultView )
RiaImportEclipseCaseTools::CaseFileNameAndId
RiaImportEclipseCaseTools::openEclipseInputCaseAndPropertiesFromFileNames( const QStringList& fileNames, bool createDefaultView )
{
RimProject* project = RimProject::current();
if ( !project ) return { QString(), -1 };
auto* rimInputReservoir = new RimEclipseInputCase();
RiaApplication* app = RiaApplication::instance();
RimProject* project = app->project();
project->assignCaseIdToCase( rimInputReservoir );
bool gridImportSuccess = rimInputReservoir->openDataFileSet( fileNames );
if ( !gridImportSuccess )
{
RiaLogging::error( "Failed to import grid" );
return -1;
delete rimInputReservoir;
return { QString(), -1 };
}
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( analysisModels == nullptr ) return false;
if ( analysisModels == nullptr ) return { QString(), -1 };
analysisModels->cases.push_back( rimInputReservoir );
@@ -297,7 +294,22 @@ int RiaImportEclipseCaseTools::openEclipseInputCaseFromFileNames( const QStringL
Riu3DMainWindowTools::selectAsCurrentItem( eclipseView->cellResult() );
}
return rimInputReservoir->caseId();
return { rimInputReservoir->gridFileName(), rimInputReservoir->caseId() };
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<int> RiaImportEclipseCaseTools::openEclipseInputCasesFromFileNames( const QStringList& fileNames, bool createDefaultView )
{
std::vector<int> eclipseCaseIds;
for ( const auto& fileName : fileNames )
{
// Open with single file
auto [caseFileName, caseId] = openEclipseInputCaseAndPropertiesFromFileNames( { fileName }, createDefaultView );
eclipseCaseIds.push_back( caseId );
}
return eclipseCaseIds;
}
//--------------------------------------------------------------------------------------------------
@@ -318,6 +330,12 @@ int RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl( const QStr
bool createView,
std::shared_ptr<RifReaderSettings> readerSettings )
{
RimProject* project = RimProject::current();
if ( !project ) return -1;
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( analysisModels == nullptr ) return -1;
QFileInfo gridFileName( fileName );
QString caseName = gridFileName.completeBaseName();
@@ -325,16 +343,6 @@ int RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl( const QStr
rimResultReservoir->setCaseInfo( caseName, fileName );
rimResultReservoir->setReaderSettings( readerSettings );
RiaApplication* app = RiaApplication::instance();
RimProject* project = app->project();
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( analysisModels == nullptr )
{
delete rimResultReservoir;
return -1;
}
if ( RiaGuiApplication::isRunning() )
{
RicShowMainWindowFeature::showMainWindow();
@@ -345,9 +353,7 @@ int RiaImportEclipseCaseTools::openEclipseCaseShowTimeStepFilterImpl( const QStr
if ( !rimResultReservoir->importGridAndResultMetaData( showTimeStepFilter ) )
{
analysisModels->removeCaseFromAllGroups( rimResultReservoir );
delete rimResultReservoir;
return -1;
}
@@ -395,8 +401,8 @@ bool RiaImportEclipseCaseTools::addEclipseCases( const QStringList& fileNames, R
std::vector<std::vector<int>> mainCaseGridDimensions;
RimIdenticalGridCaseGroup* gridCaseGroup = nullptr;
RiaApplication* app = RiaApplication::instance();
RimProject* project = app->project();
RimProject* project = RimProject::current();
if ( !project ) return false;
{
QString firstFileName = fileNames[0];
@@ -409,7 +415,6 @@ bool RiaImportEclipseCaseTools::addEclipseCases( const QStringList& fileNames, R
if ( !rimResultReservoir->openEclipseGridFile() )
{
delete rimResultReservoir;
return false;
}
@@ -487,28 +492,81 @@ bool RiaImportEclipseCaseTools::addEclipseCases( const QStringList& fileNames, R
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RiaImportEclipseCaseTools::openRoffCaseFromFileNames( const QStringList& fileNames, bool createDefaultView )
std::vector<int> RiaImportEclipseCaseTools::openRoffCasesFromFileNames( const QStringList& fileNames, bool createDefaultView )
{
CAF_ASSERT( !fileNames.empty() );
auto* roffCase = new RimRoffCase();
RimProject* project = RimProject::current();
if ( !project ) return {};
RiaApplication* app = RiaApplication::instance();
RimProject* project = app->project();
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( !analysisModels ) return {};
std::vector<int> roffCaseIds;
for ( const auto& fileName : fileNames )
{
auto* roffCase = new RimRoffCase();
project->assignCaseIdToCase( roffCase );
roffCase->setGridFileName( fileName );
bool gridImportSuccess = roffCase->openEclipseGridFile();
if ( !gridImportSuccess )
{
const auto errMsg = "Failed to import grid from file: " + fileName.toStdString();
RiaLogging::error( errMsg.c_str() );
delete roffCase;
continue;
}
analysisModels->cases.push_back( roffCase );
RimEclipseView* eclipseView = nullptr;
if ( createDefaultView )
{
eclipseView = roffCase->createAndAddReservoirView();
eclipseView->cellResult()->setResultType( RiaDefines::ResultCatType::INPUT_PROPERTY );
if ( RiaGuiApplication::isRunning() )
{
if ( RiuMainWindow::instance() ) RiuMainWindow::instance()->selectAsCurrentItem( eclipseView->cellResult() );
}
eclipseView->loadDataAndUpdate();
}
analysisModels->updateConnectedEditors();
roffCaseIds.push_back( roffCase->caseId() );
}
return roffCaseIds;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimRoffCase* RiaImportEclipseCaseTools::openRoffCaseFromFileName( const QString& fileName, bool createDefaultView )
{
RimProject* project = RimProject::current();
if ( !project ) return nullptr;
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( !analysisModels ) return nullptr;
auto* roffCase = new RimRoffCase();
project->assignCaseIdToCase( roffCase );
roffCase->setGridFileName( fileNames[0] );
roffCase->setGridFileName( fileName );
bool gridImportSuccess = roffCase->openEclipseGridFile();
if ( !gridImportSuccess )
{
RiaLogging::error( "Failed to import grid" );
return -1;
const auto errMsg = "Failed to import grid from file: " + fileName.toStdString();
RiaLogging::error( errMsg.c_str() );
delete roffCase;
return nullptr;
}
RimEclipseCaseCollection* analysisModels = project->activeOilField() ? project->activeOilField()->analysisModels() : nullptr;
if ( !analysisModels ) return -1;
analysisModels->cases.push_back( roffCase );
analysisModels->updateConnectedEditors();
RimEclipseView* eclipseView = nullptr;
if ( createDefaultView )
@@ -516,16 +574,17 @@ int RiaImportEclipseCaseTools::openRoffCaseFromFileNames( const QStringList& fil
eclipseView = roffCase->createAndAddReservoirView();
eclipseView->cellResult()->setResultType( RiaDefines::ResultCatType::INPUT_PROPERTY );
eclipseView->loadDataAndUpdate();
roffCase->updateAllRequiredEditors();
if ( RiaGuiApplication::isRunning() )
{
if ( RiuMainWindow::instance() ) RiuMainWindow::instance()->selectAsCurrentItem( eclipseView->cellResult() );
}
eclipseView->loadDataAndUpdate();
// Make sure the call to setExpanded is done after the call to selectAsCurrentItem
Riu3DMainWindowTools::setExpanded( eclipseView );
}
}
analysisModels->updateConnectedEditors();
return roffCase->caseId();
return roffCase;
}

View File

@@ -20,11 +20,14 @@
#include <map>
#include <memory>
#include <utility>
#include <vector>
class QString;
class QStringList;
class RimIdenticalGridCaseGroup;
class RimRoffCase;
class RifReaderSettings;
//==================================================================================================
@@ -33,7 +36,8 @@ class RifReaderSettings;
class RiaImportEclipseCaseTools
{
public:
typedef std::map<QString, int> FileCaseIdMap;
using CaseFileNameAndId = std::pair<QString, int>;
using FileCaseIdMap = std::map<QString, int>;
static bool openEclipseCasesFromFile( const QStringList& fileNames,
bool createView,
@@ -43,14 +47,17 @@ public:
static bool openEclipseCaseShowTimeStepFilter( const QString& fileName );
static int openEclipseInputCaseFromFileNames( const QStringList& fileNames, bool createDefaultView );
static CaseFileNameAndId openEclipseInputCaseAndPropertiesFromFileNames( const QStringList& fileNames, bool createDefaultView );
static std::vector<int> openEclipseInputCasesFromFileNames( const QStringList& fileNames, bool createDefaultView );
static bool openMockModel( const QString& name );
static bool addEclipseCases( const QStringList& fileNames, RimIdenticalGridCaseGroup** resultingCaseGroup = nullptr );
static int openEclipseCaseFromFile( const QString& fileName, bool createView, std::shared_ptr<RifReaderSettings> readerSettings = nullptr );
static int openRoffCaseFromFileNames( const QStringList& fileNames, bool createDefaultView );
static std::vector<int> openRoffCasesFromFileNames( const QStringList& fileNames, bool createDefaultView );
static RimRoffCase* openRoffCaseFromFileName( const QString& fileName, bool createDefaultView );
private:
static int openEclipseCaseShowTimeStepFilterImpl( const QString& fileName,

View File

@@ -44,9 +44,8 @@ void RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( QList<caf::Pdm
{
options->push_back( caf::PdmOptionItemInfo( "None", nullptr ) );
RimMainPlotCollection* mainPlotColl = RimMainPlotCollection::current();
std::vector<RimEnsembleCurveSet*> ensembleCurveSets;
mainPlotColl->descendantsOfType( ensembleCurveSets );
RimMainPlotCollection* mainPlotColl = RimMainPlotCollection::current();
std::vector<RimEnsembleCurveSet*> ensembleCurveSets = mainPlotColl->descendantsOfType<RimEnsembleCurveSet>();
for ( auto ensembleCurveSet : ensembleCurveSets )
{
options->push_back( caf::PdmOptionItemInfo( ensembleCurveSet->name(), ensembleCurveSet ) );

View File

@@ -21,6 +21,7 @@
#include <QDateTime>
#include <QLocale>
#include <QString>
#include <QTime>
#include "cafPdmUiItem.h"
@@ -32,6 +33,8 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_MINUTE = DateTimeSpan( 0, 0, 0, 0, 1 );
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_HOUR = DateTimeSpan( 0, 0, 0, 1 );
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DAY = DateTimeSpan( 0, 0, 1 );
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_WEEK = DateTimeSpan( 0, 0, 7 );
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_MONTH = DateTimeSpan( 0, 1, 0 );
@@ -48,6 +51,22 @@ Qt::TimeSpec RiaQDateTimeTools::currentTimeSpec()
return Qt::UTC;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
quint64 RiaQDateTimeTools::secondsInMinute()
{
return 60;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
quint64 RiaQDateTimeTools::secondsInHour()
{
return 60 * 60;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -142,7 +161,12 @@ QDateTime RiaQDateTimeTools::addYears( const QDateTime& dt, double years )
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::addSpan( const QDateTime& dt, DateTimeSpan span )
{
return createUtcDateTime( dt ).addYears( span.years() ).addMonths( span.months() ).addDays( span.days() );
return createUtcDateTime( dt )
.addYears( span.years() )
.addMonths( span.months() )
.addDays( span.days() )
.addSecs( span.hours() * RiaQDateTimeTools::secondsInHour() )
.addSecs( span.minutes() * RiaQDateTimeTools::secondsInMinute() );
}
//--------------------------------------------------------------------------------------------------
@@ -150,7 +174,12 @@ QDateTime RiaQDateTimeTools::addSpan( const QDateTime& dt, DateTimeSpan span )
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::subtractSpan( const QDateTime& dt, DateTimeSpan span )
{
return createUtcDateTime( dt ).addYears( -span.years() ).addMonths( -span.months() ).addDays( -span.days() );
return createUtcDateTime( dt )
.addYears( -span.years() )
.addMonths( -span.months() )
.addDays( -span.days() )
.addSecs( -span.hours() * RiaQDateTimeTools::secondsInHour() )
.addSecs( -span.minutes() * RiaQDateTimeTools::secondsInMinute() );
}
//--------------------------------------------------------------------------------------------------
@@ -250,6 +279,10 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan( RiaDefines::DateTimePeriod perio
{
switch ( period )
{
case RiaDefines::DateTimePeriod::MINUTE:
return TIMESPAN_MINUTE;
case RiaDefines::DateTimePeriod::HOUR:
return TIMESPAN_HOUR;
case RiaDefines::DateTimePeriod::DAY:
return TIMESPAN_DAY;
case RiaDefines::DateTimePeriod::WEEK:
@@ -274,13 +307,19 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan( RiaDefines::DateTimePeriod perio
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::truncateTime( const QDateTime& dt, RiaDefines::DateTimePeriod period )
{
int y = dt.date().year();
int m = dt.date().month();
int d = dt.date().day();
int dow = dt.date().dayOfWeek();
int y = dt.date().year();
int m = dt.date().month();
int d = dt.date().day();
int dow = dt.date().dayOfWeek();
int h = dt.time().hour();
int minute = dt.time().minute();
switch ( period )
{
case RiaDefines::DateTimePeriod::MINUTE:
return createUtcDateTime( QDate( y, m, d ), QTime( h, minute, 0 ) );
case RiaDefines::DateTimePeriod::HOUR:
return createUtcDateTime( QDate( y, m, d ), QTime( h, 0, 0 ) );
case RiaDefines::DateTimePeriod::DAY:
return createUtcDateTime( QDate( y, m, d ) );
case RiaDefines::DateTimePeriod::WEEK:
@@ -499,3 +538,90 @@ QList<caf::PdmOptionItemInfo> RiaQDateTimeTools::createOptionItems( const std::v
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::set<QDateTime> RiaQDateTimeTools::createEvenlyDistributedDates( const std::vector<QDateTime>& inputDates, int numDates )
{
std::set<QDateTime> outputDates;
if ( inputDates.empty() || numDates <= 0 )
{
return {};
}
if ( static_cast<size_t>( numDates ) > inputDates.size() )
{
outputDates = std::set( inputDates.begin(), inputDates.end() );
return outputDates;
}
if ( numDates == 1 )
{
outputDates = { inputDates.front() };
return outputDates;
}
// Find the minimum and maximum dates in the input vector
QDateTime minDate = *std::min_element( inputDates.begin(), inputDates.end() );
QDateTime maxDate = *std::max_element( inputDates.begin(), inputDates.end() );
// Calculate the time step between each selected date
qint64 timeStep = ( maxDate.toMSecsSinceEpoch() - minDate.toMSecsSinceEpoch() ) / ( static_cast<qint64>( numDates ) - 1 );
// Find the index of the input date that is closest to each new date
for ( int i = 0; i < numDates; ++i )
{
qint64 targetTime = minDate.toMSecsSinceEpoch() + i * timeStep;
int closestIndex = 0;
qint64 closestTimeDiff = std::numeric_limits<qint64>::max();
for ( size_t j = 0; j < inputDates.size(); ++j )
{
qint64 timeDiff = std::abs( inputDates[j].toMSecsSinceEpoch() - targetTime );
if ( timeDiff < closestTimeDiff )
{
closestIndex = static_cast<int>( j );
closestTimeDiff = timeDiff;
}
}
// Add the closest date to the output vector
outputDates.insert( inputDates[closestIndex] );
}
return outputDates;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<QDateTime> RiaQDateTimeTools::getTimeStepsWithinSelectedRange( const std::vector<QDateTime>& timeSteps,
const QDateTime& fromTimeStep,
const QDateTime& toTimeStep )
{
std::vector<QDateTime> selectedTimeSteps;
auto isTimeStepInSelectedRange = [&]( const QDateTime& timeStep ) -> bool { return fromTimeStep <= timeStep && timeStep <= toTimeStep; };
std::copy_if( timeSteps.begin(), timeSteps.end(), std::back_inserter( selectedTimeSteps ), isTimeStepInSelectedRange );
return selectedTimeSteps;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::set<QDateTime>
RiaQDateTimeTools::createEvenlyDistributedDatesInInterval( const QDateTime& fromTimeStamp, const QDateTime& toTimeStamp, int numDates )
{
if ( numDates < 2 ) return {};
// Calculate the time step between the two time stamps
qint64 timeStep = ( toTimeStamp.toMSecsSinceEpoch() - fromTimeStamp.toMSecsSinceEpoch() ) / ( static_cast<qint64>( numDates ) - 1 );
// Create a set of evenly spaced datetimes.
std::set<QDateTime> outputDates;
for ( int i = 0; i < numDates; ++i )
{
qint64 targetTime = i * timeStep;
outputDates.insert( RiaQDateTimeTools::addMSecs( fromTimeStamp, targetTime ) );
}
return outputDates;
}

View File

@@ -24,6 +24,7 @@
#include <QString>
#include <set>
#include <string>
#include <vector>
@@ -88,12 +89,20 @@ public:
dateFormatString( const QString& fullDateFormat,
RiaDefines::DateFormatComponents dateComponents = RiaDefines::DateFormatComponents::DATE_FORMAT_YEAR_MONTH_DAY );
static QString
timeFormatString( const QString& fullTimeFormat,
timeFormatString( const QString& fullTimeFormat,
RiaDefines::TimeFormatComponents timeComponents = RiaDefines::TimeFormatComponents::TIME_FORMAT_HOUR_MINUTE_SECOND );
static QList<caf::PdmOptionItemInfo> createOptionItems( const std::vector<time_t>& timeSteps );
static std::set<QDateTime> createEvenlyDistributedDates( const std::vector<QDateTime>& inputDates, int numDates );
static std::set<QDateTime>
createEvenlyDistributedDatesInInterval( const QDateTime& fromTimeStep, const QDateTime& toTimeStep, int numDates );
static std::vector<QDateTime>
getTimeStepsWithinSelectedRange( const std::vector<QDateTime>& timeSteps, const QDateTime& fromTimeStep, const QDateTime& toTimeStep );
private:
static const DateTimeSpan TIMESPAN_MINUTE;
static const DateTimeSpan TIMESPAN_HOUR;
static const DateTimeSpan TIMESPAN_DAY;
static const DateTimeSpan TIMESPAN_WEEK;
static const DateTimeSpan TIMESPAN_MONTH;
@@ -104,6 +113,8 @@ private:
static quint64 secondsInDay();
static quint64 secondsInYear();
static quint64 secondsInHour();
static quint64 secondsInMinute();
};
//==================================================================================================
@@ -116,23 +127,31 @@ public:
: m_years( 0 )
, m_months( 0 )
, m_days( 0 )
, m_hours( 0 )
, m_minutes( 0 )
{
}
DateTimeSpan( int years, int months, int days )
DateTimeSpan( int years, int months, int days, int hours = 0, int minutes = 0 )
: m_years( years )
, m_months( months )
, m_days( days )
, m_hours( hours )
, m_minutes( minutes )
{
}
int years() const { return m_years; }
int months() const { return m_months; }
int days() const { return m_days; }
int hours() const { return m_hours; }
int minutes() const { return m_minutes; }
bool isEmpty() { return m_years == 0 && m_months == 0 && m_days; }
bool isEmpty() { return m_years == 0 && m_months == 0 && m_days == 0 && m_hours == 0 && m_minutes == 0; }
private:
int m_years;
int m_months;
int m_days;
int m_hours;
int m_minutes;
};

View File

@@ -33,10 +33,13 @@ std::vector<const RigWellPath*> RiaSimWellBranchTools::simulationWellBranches( c
{
std::vector<RimEclipseCase*> simCases = RimEclipseCaseTools::eclipseCases();
auto caseItr = std::find_if( simCases.begin(), simCases.end(), [&simWellName]( const RimEclipseCase* eclCase ) {
const auto& eclData = eclCase->eclipseCaseData();
return eclData != nullptr && eclData->hasSimulationWell( simWellName );
} );
auto caseItr = std::find_if( simCases.begin(),
simCases.end(),
[&simWellName]( const RimEclipseCase* eclCase )
{
const auto& eclData = eclCase->eclipseCaseData();
return eclData != nullptr && eclData->hasSimulationWell( simWellName );
} );
RimEclipseCase* eclipseCase = caseItr != simCases.end() ? *caseItr : nullptr;
RigEclipseCaseData* eclCaseData = eclipseCase != nullptr ? eclipseCase->eclipseCaseData() : nullptr;
return eclCaseData != nullptr ? eclCaseData->simulationWellBranches( simWellName, false, useAutoDetectionOfBranches )

View File

@@ -80,9 +80,8 @@ void RiaStdStringTools::splitByDelimiter( const std::string& str, Container& con
template <typename InputIt>
std::string join( InputIt begin, InputIt end, const std::string& separator = ", " )
{
auto compose_key = [&separator]( std::string& key, const std::string& key_part ) -> std::string {
return key.empty() ? key_part : key + separator + key_part;
};
auto compose_key = [&separator]( std::string& key, const std::string& key_part ) -> std::string
{ return key.empty() ? key_part : key + separator + key_part; };
return std::accumulate( begin, end, std::string(), compose_key );
}

View File

@@ -243,7 +243,7 @@ QStringList RiaSummaryStringTools::dataSourceNames( const std::vector<RimSummary
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::set<RifEclipseSummaryAddress> RiaSummaryStringTools::computeFilteredAddresses( const QStringList& textFilters,
std::set<RifEclipseSummaryAddress> RiaSummaryStringTools::computeFilteredAddresses( const QStringList& textFilters,
const std::set<RifEclipseSummaryAddress>& sourceAddresses,
bool includeDiffCurves )
{

View File

@@ -40,6 +40,8 @@
#include "RimSummaryMultiPlot.h"
#include "RimSummaryMultiPlotCollection.h"
#include "RimSummaryPlot.h"
#include "RimSummaryTable.h"
#include "RimSummaryTableCollection.h"
#include "cafPdmObject.h"
@@ -125,14 +127,12 @@ RimSummaryPlot* RiaSummaryTools::parentSummaryPlot( caf::PdmObject* object )
return nullptr;
}
RimSummaryPlot* summaryPlot = nullptr;
if ( object )
{
object->firstAncestorOrThisOfType( summaryPlot );
return object->firstAncestorOrThisOfType<RimSummaryPlot>();
}
return summaryPlot;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -140,14 +140,12 @@ RimSummaryPlot* RiaSummaryTools::parentSummaryPlot( caf::PdmObject* object )
//--------------------------------------------------------------------------------------------------
RimSummaryMultiPlotCollection* RiaSummaryTools::parentSummaryPlotCollection( caf::PdmObject* object )
{
RimSummaryMultiPlotCollection* summaryPlotColl = nullptr;
if ( object )
{
object->firstAncestorOrThisOfType( summaryPlotColl );
return object->firstAncestorOrThisOfType<RimSummaryMultiPlotCollection>();
}
return summaryPlotColl;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -155,14 +153,12 @@ RimSummaryMultiPlotCollection* RiaSummaryTools::parentSummaryPlotCollection( caf
//--------------------------------------------------------------------------------------------------
RimSummaryMultiPlot* RiaSummaryTools::parentSummaryMultiPlot( caf::PdmObject* object )
{
RimSummaryMultiPlot* multiPlot = nullptr;
if ( object )
{
object->firstAncestorOrThisOfType( multiPlot );
return object->firstAncestorOrThisOfType<RimSummaryMultiPlot>();
}
return multiPlot;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -170,14 +166,12 @@ RimSummaryMultiPlot* RiaSummaryTools::parentSummaryMultiPlot( caf::PdmObject* ob
//--------------------------------------------------------------------------------------------------
RimSummaryCrossPlot* RiaSummaryTools::parentCrossPlot( caf::PdmObject* object )
{
RimSummaryCrossPlot* crossPlot = nullptr;
if ( object )
{
object->firstAncestorOrThisOfType( crossPlot );
return object->firstAncestorOrThisOfType<RimSummaryCrossPlot>();
}
return crossPlot;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -185,14 +179,12 @@ RimSummaryCrossPlot* RiaSummaryTools::parentCrossPlot( caf::PdmObject* object )
//--------------------------------------------------------------------------------------------------
RimSummaryCrossPlotCollection* RiaSummaryTools::parentCrossPlotCollection( caf::PdmObject* object )
{
RimSummaryCrossPlotCollection* crossPlotColl = nullptr;
if ( object )
{
object->firstAncestorOrThisOfType( crossPlotColl );
return object->firstAncestorOrThisOfType<RimSummaryCrossPlotCollection>();
}
return crossPlotColl;
return nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -203,6 +195,32 @@ bool RiaSummaryTools::isSummaryCrossPlot( const RimSummaryPlot* plot )
return dynamic_cast<const RimSummaryCrossPlot*>( plot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryTable* RiaSummaryTools::parentSummaryTable( caf::PdmObject* object )
{
if ( object )
{
return object->firstAncestorOrThisOfType<RimSummaryTable>();
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryTableCollection* RiaSummaryTools::parentSummaryTableCollection( caf::PdmObject* object )
{
if ( object )
{
return object->firstAncestorOrThisOfType<RimSummaryTableCollection>();
}
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -260,7 +278,7 @@ void RiaSummaryTools::getSummaryCasesAndAddressesForCalculation( int
//--------------------------------------------------------------------------------------------------
std::pair<std::vector<time_t>, std::vector<double>> RiaSummaryTools::resampledValuesForPeriod( const RifEclipseSummaryAddress& address,
const std::vector<time_t>& timeSteps,
std::vector<double>& values,
const std::vector<double>& values,
RiaDefines::DateTimePeriod period )
{
RiaTimeHistoryCurveResampler resampler;

View File

@@ -33,6 +33,8 @@ class RimSummaryCrossPlotCollection;
class RimSummaryCaseMainCollection;
class RimSummaryCase;
class RimSummaryCaseCollection;
class RimSummaryTable;
class RimSummaryTableCollection;
class RimObservedDataCollection;
class RifEclipseSummaryAddress;
@@ -68,6 +70,9 @@ public:
static RimSummaryCrossPlotCollection* parentCrossPlotCollection( caf::PdmObject* object );
static bool isSummaryCrossPlot( const RimSummaryPlot* plot );
static RimSummaryTable* parentSummaryTable( caf::PdmObject* object );
static RimSummaryTableCollection* parentSummaryTableCollection( caf::PdmObject* object );
static bool hasAccumulatedData( const RifEclipseSummaryAddress& address );
static void getSummaryCasesAndAddressesForCalculation( int id,
std::vector<RimSummaryCase*>& cases,
@@ -75,7 +80,7 @@ public:
static std::pair<std::vector<time_t>, std::vector<double>> resampledValuesForPeriod( const RifEclipseSummaryAddress& address,
const std::vector<time_t>& timeSteps,
std::vector<double>& values,
const std::vector<double>& values,
RiaDefines::DateTimePeriod period );
static RimSummaryCase* summaryCaseById( int caseId );

View File

@@ -174,3 +174,11 @@ QStringList RiaTextStringTools::splitSkipEmptyParts( const QString& text, const
return text.split( regExp, QString::SkipEmptyParts );
#endif
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::strong_ordering operator<=>( const QString& lhs, const QString& rhs )
{
return lhs.compare( rhs ) <=> 0;
}

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