模型添加彩绘配置文件
parent
11c9ccc3a9
commit
6412d9c865
Binary file not shown.
|
@ -105,7 +105,6 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="src\Editor\EditorWidget.cpp" />
|
<ClCompile Include="src\Editor\EditorWidget.cpp" />
|
||||||
<ClCompile Include="src\CaptionButton.cpp" />
|
|
||||||
<ClCompile Include="src\Editor\EditorWidgetItem.cpp" />
|
<ClCompile Include="src\Editor\EditorWidgetItem.cpp" />
|
||||||
<ClCompile Include="src\Editor\ElementManager.cpp" />
|
<ClCompile Include="src\Editor\ElementManager.cpp" />
|
||||||
<ClCompile Include="src\Editor\ElementPoolWidget.cpp" />
|
<ClCompile Include="src\Editor\ElementPoolWidget.cpp" />
|
||||||
|
@ -122,8 +121,8 @@
|
||||||
<ClCompile Include="src\Editor\util\PainterPathUtil.cpp" />
|
<ClCompile Include="src\Editor\util\PainterPathUtil.cpp" />
|
||||||
<ClCompile Include="src\Editor\util\PaintingUtil.cpp" />
|
<ClCompile Include="src\Editor\util\PaintingUtil.cpp" />
|
||||||
<ClCompile Include="src\Editor\util\SvgFileLoader.cpp" />
|
<ClCompile Include="src\Editor\util\SvgFileLoader.cpp" />
|
||||||
|
<ClCompile Include="src\FluentMenu.cpp" />
|
||||||
<ClCompile Include="src\gl.c" />
|
<ClCompile Include="src\gl.c" />
|
||||||
<ClCompile Include="src\IconWidget.cpp" />
|
|
||||||
<ClCompile Include="src\main.cpp" />
|
<ClCompile Include="src\main.cpp" />
|
||||||
<ClCompile Include="src\MainWindow.cpp" />
|
<ClCompile Include="src\MainWindow.cpp" />
|
||||||
<ClCompile Include="src\NavigationBarWidget.cpp" />
|
<ClCompile Include="src\NavigationBarWidget.cpp" />
|
||||||
|
@ -151,7 +150,6 @@
|
||||||
<ClCompile Include="src\Renderer\Painting\StraightLine.cpp" />
|
<ClCompile Include="src\Renderer\Painting\StraightLine.cpp" />
|
||||||
<ClCompile Include="src\Renderer\VirtualTextureManager.cpp" />
|
<ClCompile Include="src\Renderer\VirtualTextureManager.cpp" />
|
||||||
<ClCompile Include="src\SvgParser.cpp" />
|
<ClCompile Include="src\SvgParser.cpp" />
|
||||||
<ClCompile Include="src\TitleWidget.cpp" />
|
|
||||||
<QtUic Include="EditorWidget.ui" />
|
<QtUic Include="EditorWidget.ui" />
|
||||||
<QtUic Include="EditorWidgetItem.ui" />
|
<QtUic Include="EditorWidgetItem.ui" />
|
||||||
<QtUic Include="MainWindow.ui" />
|
<QtUic Include="MainWindow.ui" />
|
||||||
|
@ -189,7 +187,6 @@
|
||||||
<QtMoc Include="src\Editor\RightBar\LayerTreeWidget.h" />
|
<QtMoc Include="src\Editor\RightBar\LayerTreeWidget.h" />
|
||||||
<QtMoc Include="src\Editor\RightBar\InfoDisplayWidget.h" />
|
<QtMoc Include="src\Editor\RightBar\InfoDisplayWidget.h" />
|
||||||
<QtMoc Include="src\MainWindow.h" />
|
<QtMoc Include="src\MainWindow.h" />
|
||||||
<ClInclude Include="resource.h" />
|
|
||||||
<QtMoc Include="src\Editor\EditorWidget.h" />
|
<QtMoc Include="src\Editor\EditorWidget.h" />
|
||||||
<ClInclude Include="src\Editor\ElementManager.h" />
|
<ClInclude Include="src\Editor\ElementManager.h" />
|
||||||
<QtMoc Include="src\Editor\ElementPoolWidget.h" />
|
<QtMoc Include="src\Editor\ElementPoolWidget.h" />
|
||||||
|
@ -205,6 +202,7 @@
|
||||||
<ClInclude Include="src\Editor\util\PainterPathUtil.h" />
|
<ClInclude Include="src\Editor\util\PainterPathUtil.h" />
|
||||||
<ClInclude Include="src\Editor\util\PaintingUtil.h" />
|
<ClInclude Include="src\Editor\util\PaintingUtil.h" />
|
||||||
<ClInclude Include="src\Editor\util\SvgFileLoader.h" />
|
<ClInclude Include="src\Editor\util\SvgFileLoader.h" />
|
||||||
|
<QtMoc Include="src\FluentMenu.h" />
|
||||||
<ClInclude Include="src\Renderer\IblUtils.h" />
|
<ClInclude Include="src\Renderer\IblUtils.h" />
|
||||||
<ClInclude Include="src\Renderer\Painting\BaseStyle.h" />
|
<ClInclude Include="src\Renderer\Painting\BaseStyle.h" />
|
||||||
<ClInclude Include="src\Renderer\Painting\CubicBezierSignedDistance.h" />
|
<ClInclude Include="src\Renderer\Painting\CubicBezierSignedDistance.h" />
|
||||||
|
@ -217,9 +215,6 @@
|
||||||
<ClInclude Include="src\Renderer\Preview\ElementRenderer.h" />
|
<ClInclude Include="src\Renderer\Preview\ElementRenderer.h" />
|
||||||
<ClInclude Include="src\Renderer\VirtualTextureManager.h" />
|
<ClInclude Include="src\Renderer\VirtualTextureManager.h" />
|
||||||
<ClInclude Include="src\SvgParser.h" />
|
<ClInclude Include="src\SvgParser.h" />
|
||||||
<QtMoc Include="src\TitleWidget.h" />
|
|
||||||
<QtMoc Include="src\IconWidget.h" />
|
|
||||||
<QtMoc Include="src\CaptionButton.h" />
|
|
||||||
<QtMoc Include="src\NavigationBarWidget.h" />
|
<QtMoc Include="src\NavigationBarWidget.h" />
|
||||||
<QtMoc Include="src\Renderer\RendererWidget.h" />
|
<QtMoc Include="src\Renderer\RendererWidget.h" />
|
||||||
<QtMoc Include="src\Editor\EditorWidgetItem.h" />
|
<QtMoc Include="src\Editor\EditorWidgetItem.h" />
|
||||||
|
@ -247,9 +242,6 @@
|
||||||
<Project>{8f360763-a045-3808-87a9-3fae38e69819}</Project>
|
<Project>{8f360763-a045-3808-87a9-3fae38e69819}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="ArchitectureColoredPainting.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
||||||
<Import Project="$(QtMsBuild)\qt.targets" />
|
<Import Project="$(QtMsBuild)\qt.targets" />
|
||||||
|
|
|
@ -111,15 +111,6 @@
|
||||||
<ClCompile Include="src\NavigationBarWidget.cpp">
|
<ClCompile Include="src\NavigationBarWidget.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="src\CaptionButton.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\IconWidget.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\TitleWidget.cpp">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="src\Renderer\Painting\BvhTree.cpp">
|
<ClCompile Include="src\Renderer\Painting\BvhTree.cpp">
|
||||||
<Filter>Source Files\Renderer\Painting</Filter>
|
<Filter>Source Files\Renderer\Painting</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -216,6 +207,9 @@
|
||||||
<ClCompile Include="src\Editor\ElementPoolWidget.cpp">
|
<ClCompile Include="src\Editor\ElementPoolWidget.cpp">
|
||||||
<Filter>Source Files\Editor</Filter>
|
<Filter>Source Files\Editor</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="src\FluentMenu.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="src\Editor\util\PaintingUtil.cpp">
|
<ClCompile Include="src\Editor\util\PaintingUtil.cpp">
|
||||||
<Filter>Source Files\Editor\util</Filter>
|
<Filter>Source Files\Editor\util</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -233,15 +227,6 @@
|
||||||
<QtMoc Include="src\NavigationBarWidget.h">
|
<QtMoc Include="src\NavigationBarWidget.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
<QtMoc Include="src\CaptionButton.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</QtMoc>
|
|
||||||
<QtMoc Include="src\IconWidget.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</QtMoc>
|
|
||||||
<QtMoc Include="src\TitleWidget.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</QtMoc>
|
|
||||||
<QtMoc Include="src\MainWindow.h">
|
<QtMoc Include="src\MainWindow.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
@ -260,6 +245,9 @@
|
||||||
<QtMoc Include="src\Editor\ElementPoolWidget.h">
|
<QtMoc Include="src\Editor\ElementPoolWidget.h">
|
||||||
<Filter>Header Files\Editor</Filter>
|
<Filter>Header Files\Editor</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
<QtMoc Include="src\FluentMenu.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</QtMoc>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\data.json" />
|
<None Include="..\data.json" />
|
||||||
|
@ -465,7 +453,4 @@
|
||||||
<Filter>Resource Files</Filter>
|
<Filter>Resource Files</Filter>
|
||||||
</QtRcc>
|
</QtRcc>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="ArchitectureColoredPainting.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,2 @@
|
||||||
|
17876391417123941155.jpg 0.json 0 0 1 1
|
||||||
|
11474523244911310074.jpg 1.json 0 0 1 1
|
|
@ -13,7 +13,7 @@
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>RendererWidget</string>
|
<string>RendererWidget</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1">
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,1">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -31,8 +31,14 @@
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<property name="sizeConstraint">
|
<property name="leftMargin">
|
||||||
<enum>QLayout::SetDefaultConstraint</enum>
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>5</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QtMaterialFlatButton" name="openButton">
|
<widget class="QtMaterialFlatButton" name="openButton">
|
||||||
|
@ -44,12 +50,18 @@
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>80</width>
|
<width>50</width>
|
||||||
<height>40</height>
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>50</width>
|
||||||
|
<height>30</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>打开</string>
|
<string>文件</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="flat">
|
<property name="flat">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
|
@ -71,34 +83,6 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QMenuBar" name="menuBar">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Ignored">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<widget class="QMenu" name="menu">
|
|
||||||
<property name="minimumSize">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="title">
|
|
||||||
<string>打开</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<addaction name="menu"/>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0">
|
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0">
|
||||||
<property name="sizeConstraint">
|
<property name="sizeConstraint">
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
//{{NO_DEPENDENCIES}}
|
|
||||||
// Microsoft Visual C++ generated include file.
|
|
||||||
// Used by ArchitectureColoredPainting.rc
|
|
||||||
|
|
||||||
// 新对象的下一组默认值
|
|
||||||
//
|
|
||||||
#ifdef APSTUDIO_INVOKED
|
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
|
||||||
#endif
|
|
||||||
#endif
|
|
|
@ -1,261 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "CaptionButton.h"
|
|
||||||
|
|
||||||
CaptionButton::CaptionButton(QWidget *parent) : QWidget(parent)
|
|
||||||
{
|
|
||||||
m_is_active = false;
|
|
||||||
m_is_under_mouse = false;
|
|
||||||
m_is_pressed = false;
|
|
||||||
m_icon_dark = false;
|
|
||||||
|
|
||||||
setAttribute(Qt::WA_Hover);
|
|
||||||
}
|
|
||||||
|
|
||||||
CaptionButton::~CaptionButton()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
QPixmap CaptionButton::drawIcon(const QPixmap &icon, bool active, bool force_light)
|
|
||||||
{
|
|
||||||
QImage tmp = icon.toImage();
|
|
||||||
|
|
||||||
if (!active)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < tmp.height(); i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < tmp.width(); j++)
|
|
||||||
{
|
|
||||||
QColor pixel = QColor::fromRgba(tmp.pixel(j, i));
|
|
||||||
|
|
||||||
pixel.setRedF(pixel.redF() * 0.5f);
|
|
||||||
pixel.setGreenF(pixel.greenF() * 0.5f);
|
|
||||||
pixel.setBlueF(pixel.blueF() * 0.5f);
|
|
||||||
|
|
||||||
tmp.setPixel(j, i, pixel.rgba());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_icon_dark && !force_light)
|
|
||||||
tmp.invertPixels();
|
|
||||||
|
|
||||||
return QPixmap::fromImage(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::init(IconType type)
|
|
||||||
{
|
|
||||||
m_type = type;
|
|
||||||
|
|
||||||
setColors();
|
|
||||||
drawIcons();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::drawIcons()
|
|
||||||
{
|
|
||||||
switch (m_type)
|
|
||||||
{
|
|
||||||
case IconType::Minimize:
|
|
||||||
{
|
|
||||||
QPixmap icon = QPixmap(":/images/icon_window_minimize.png");
|
|
||||||
|
|
||||||
m_active_icon = drawIcon(icon, true);
|
|
||||||
m_inactive_icon = drawIcon(icon, false);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IconType::Restore:
|
|
||||||
{
|
|
||||||
QPixmap icon = QPixmap(":/images/icon_window_restore.png");
|
|
||||||
|
|
||||||
m_active_icon = drawIcon(icon, true);
|
|
||||||
m_inactive_icon = drawIcon(icon, false);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IconType::Maximize:
|
|
||||||
{
|
|
||||||
QPixmap icon = QPixmap(":/images/icon_window_maximize.png");
|
|
||||||
|
|
||||||
m_active_icon = drawIcon(icon, true);
|
|
||||||
m_inactive_icon = drawIcon(icon, false);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IconType::Close:
|
|
||||||
{
|
|
||||||
QPixmap icon = QPixmap(":/images/icon_window_close.png");
|
|
||||||
|
|
||||||
m_active_icon = drawIcon(icon, true);
|
|
||||||
m_inactive_icon = drawIcon(icon, false);
|
|
||||||
m_close_icon_hover = drawIcon(icon, true, true);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::setColors()
|
|
||||||
{
|
|
||||||
if (m_icon_dark)
|
|
||||||
{
|
|
||||||
if (m_type == IconType::Close)
|
|
||||||
{
|
|
||||||
m_normal = QColor("transparent");
|
|
||||||
m_hover = QColor("#F00000");
|
|
||||||
m_pressed = QColor("#F1707A");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_normal = QColor("transparent");
|
|
||||||
m_hover = QColor("#E5E5E5");
|
|
||||||
m_pressed = QColor("#CACACB");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (m_type == IconType::Close)
|
|
||||||
{
|
|
||||||
m_normal = QColor("transparent");
|
|
||||||
m_hover = QColor("#F00000");
|
|
||||||
m_pressed = QColor("#F1707A");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_normal = QColor("transparent");
|
|
||||||
m_hover = QColor("#505050");
|
|
||||||
m_pressed = QColor("#3F3F3F");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::setIconMode(bool icon_dark)
|
|
||||||
{
|
|
||||||
m_icon_dark = icon_dark;
|
|
||||||
|
|
||||||
drawIcons();
|
|
||||||
setColors();
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::setActive(bool is_active)
|
|
||||||
{
|
|
||||||
m_is_active = is_active;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::setState(int state)
|
|
||||||
{
|
|
||||||
switch (state)
|
|
||||||
{
|
|
||||||
case QEvent::HoverEnter:
|
|
||||||
{
|
|
||||||
m_is_under_mouse = true;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case QEvent::HoverLeave:
|
|
||||||
{
|
|
||||||
m_is_under_mouse = false;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case QEvent::MouseButtonPress:
|
|
||||||
{
|
|
||||||
m_is_pressed = true;
|
|
||||||
|
|
||||||
m_is_under_mouse = true;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case QEvent::MouseButtonRelease:
|
|
||||||
{
|
|
||||||
m_is_pressed = false;
|
|
||||||
|
|
||||||
m_is_under_mouse = false;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptionButton::paintEvent(QPaintEvent *event)
|
|
||||||
{
|
|
||||||
Q_UNUSED(event)
|
|
||||||
|
|
||||||
QPixmap current_icon = m_active_icon;
|
|
||||||
QColor current_color = m_normal;
|
|
||||||
|
|
||||||
//Change icon if needed
|
|
||||||
if (m_is_under_mouse)
|
|
||||||
{
|
|
||||||
if (m_type == IconType::Close)
|
|
||||||
current_icon = m_close_icon_hover;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!m_is_active)
|
|
||||||
current_icon = m_inactive_icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Change background color if needed
|
|
||||||
if (m_is_pressed)
|
|
||||||
{
|
|
||||||
if (m_is_under_mouse)
|
|
||||||
current_color = m_pressed;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (m_is_under_mouse)
|
|
||||||
current_color = m_hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
|
|
||||||
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
|
|
||||||
|
|
||||||
painter.fillRect(rect(), current_color);
|
|
||||||
|
|
||||||
QRect target_rect;
|
|
||||||
target_rect = current_icon.rect();
|
|
||||||
target_rect.setSize(QSize(16, 16));
|
|
||||||
target_rect = QRect(rect().center() - target_rect.center(), target_rect.size());
|
|
||||||
painter.drawPixmap(target_rect, current_icon);
|
|
||||||
}
|
|
|
@ -1,81 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CAPTIONBUTTON_H
|
|
||||||
#define CAPTIONBUTTON_H
|
|
||||||
|
|
||||||
#include <QtCore>
|
|
||||||
#include <QtGui>
|
|
||||||
#include <QtWidgets>
|
|
||||||
|
|
||||||
class CaptionButton : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit CaptionButton(QWidget *parent = nullptr);
|
|
||||||
~CaptionButton();
|
|
||||||
|
|
||||||
enum class IconType
|
|
||||||
{
|
|
||||||
Minimize,
|
|
||||||
Restore,
|
|
||||||
Maximize,
|
|
||||||
Close
|
|
||||||
};
|
|
||||||
|
|
||||||
void init(IconType type);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void clicked();
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setIconMode(bool icon_dark);
|
|
||||||
void setActive(bool is_active);
|
|
||||||
void setState(int state);
|
|
||||||
|
|
||||||
private:
|
|
||||||
//Functions
|
|
||||||
QPixmap drawIcon(const QPixmap &icon, bool active, bool force_light = false);
|
|
||||||
void setColors();
|
|
||||||
void drawIcons();
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
|
|
||||||
//Variables
|
|
||||||
QPixmap m_inactive_icon;
|
|
||||||
QPixmap m_active_icon;
|
|
||||||
|
|
||||||
QPixmap m_close_icon_hover;
|
|
||||||
|
|
||||||
QColor m_normal;
|
|
||||||
QColor m_hover;
|
|
||||||
QColor m_pressed;
|
|
||||||
|
|
||||||
IconType m_type;
|
|
||||||
bool m_is_active;
|
|
||||||
bool m_is_under_mouse;
|
|
||||||
bool m_is_pressed;
|
|
||||||
bool m_icon_dark;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CAPTIONBUTTON_H
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include "FluentMenu.h"
|
||||||
|
#include <QPainter>
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
|
::FluentMenu::FluentMenu(QWidget* parent) : QMenu(parent)
|
||||||
|
{
|
||||||
|
setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
|
||||||
|
setAttribute(Qt::WA_TranslucentBackground);
|
||||||
|
setStyleSheet(QString::fromStdString(std::format("QMenu {{margin:{}px;border-radius:{}px;padding:4px;border: 1px solid #c1c1c1;}}"
|
||||||
|
"QMenu::item {{height:30px;width:100px;padding-left:20px;border-radius:{}px;}}"
|
||||||
|
"QMenu::item:selected {{background-color:#dedede;}}", shadowRadius, borderRadius, itemBorderRadius)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ::FluentMenu::paintEvent(QPaintEvent* event)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
for (qreal i = 0; i < shadowRadius; i += 1 / devicePixelRatioF())
|
||||||
|
{
|
||||||
|
painter.setPen(QColor(0, 0, 0, glm::mix(0.22 * 255, 0., glm::pow(i / shadowRadius, 0.2))));
|
||||||
|
painter.drawRoundedRect(QRectF(shadowRadius - i, shadowRadius - i, width() - (shadowRadius - i) * 2, height() - (shadowRadius - i) * 2), borderRadius + i, borderRadius + i);
|
||||||
|
}
|
||||||
|
QMenu::paintEvent(event);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
class FluentMenu : public QMenu
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit FluentMenu(QWidget* parent = nullptr);
|
||||||
|
void paintEvent(QPaintEvent* event) override;
|
||||||
|
int shadowRadius = 16;
|
||||||
|
int borderRadius = 6;
|
||||||
|
int itemBorderRadius = 4;
|
||||||
|
};
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "iconwidget.h"
|
|
||||||
|
|
||||||
#define ICONWIDTH 16
|
|
||||||
#define ICONHEIGHT 16
|
|
||||||
|
|
||||||
IconWidget::IconWidget(QWidget *parent) : QWidget(parent)
|
|
||||||
{
|
|
||||||
m_active = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IconWidget::setPixmap(const QPixmap &pixmap)
|
|
||||||
{
|
|
||||||
m_pixmap = pixmap;
|
|
||||||
|
|
||||||
QImage tmp = m_pixmap.toImage();
|
|
||||||
|
|
||||||
for (int i = 0; i < m_pixmap.width(); i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < m_pixmap.height(); j++)
|
|
||||||
{
|
|
||||||
int gray = qGray(tmp.pixel(i, j));
|
|
||||||
|
|
||||||
int alpha = qAlpha(tmp.pixel(i, j));
|
|
||||||
|
|
||||||
tmp.setPixel(i, j, qRgba(gray, gray, gray, alpha));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_grayed_pixmap = QPixmap::fromImage(tmp);
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IconWidget::setActive(bool active)
|
|
||||||
{
|
|
||||||
m_active = active;
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void IconWidget::paintEvent(QPaintEvent *event)
|
|
||||||
{
|
|
||||||
Q_UNUSED(event)
|
|
||||||
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
|
|
||||||
|
|
||||||
painter.drawPixmap((width() - ICONWIDTH)/ 2,
|
|
||||||
(height() - ICONHEIGHT) / 2,
|
|
||||||
ICONWIDTH, ICONHEIGHT,
|
|
||||||
m_active ? m_pixmap : m_grayed_pixmap);
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ICONWIDGET_H
|
|
||||||
#define ICONWIDGET_H
|
|
||||||
|
|
||||||
#include <QtCore>
|
|
||||||
#include <QtGui>
|
|
||||||
#include <QtWidgets>
|
|
||||||
|
|
||||||
class IconWidget : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit IconWidget(QWidget *parent = nullptr);
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setPixmap(const QPixmap &pixmap);
|
|
||||||
void setActive(bool active);
|
|
||||||
|
|
||||||
private:
|
|
||||||
//Functions
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
|
|
||||||
//Variables
|
|
||||||
QPixmap m_pixmap;
|
|
||||||
QPixmap m_grayed_pixmap;
|
|
||||||
bool m_active;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // ICONWIDGET_H
|
|
|
@ -15,7 +15,7 @@ FRAMELESSHELPER_USE_NAMESPACE
|
||||||
CentralWidget::CentralWidget(QWidget* parent) : QMainWindow(parent)
|
CentralWidget::CentralWidget(QWidget* parent) : QMainWindow(parent)
|
||||||
{
|
{
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
NavigationBarWidget* navigationBarWidget = new NavigationBarWidget();
|
NavigationBarWidget* navigationBarWidget = new NavigationBarWidget(this);
|
||||||
ui.gridLayout->addWidget(navigationBarWidget, 0, 0, 1, 1, Qt::AlignTop | Qt::AlignHCenter);
|
ui.gridLayout->addWidget(navigationBarWidget, 0, 0, 1, 1, Qt::AlignTop | Qt::AlignHCenter);
|
||||||
QObject::connect(navigationBarWidget->tabs, &QtMaterialTabs::currentChanged, ui.stackedWidget, &QStackedWidget::setCurrentIndex);
|
QObject::connect(navigationBarWidget->tabs, &QtMaterialTabs::currentChanged, ui.stackedWidget, &QStackedWidget::setCurrentIndex);
|
||||||
QObject::connect(ui.stackedWidget, &QStackedWidget::currentChanged,
|
QObject::connect(ui.stackedWidget, &QStackedWidget::currentChanged,
|
||||||
|
|
|
@ -45,19 +45,41 @@ void Model::drawShadow() {
|
||||||
|
|
||||||
void Renderer::Model::loadModel(QString path)
|
void Renderer::Model::loadModel(QString path)
|
||||||
{
|
{
|
||||||
directory = path;
|
QFileInfo modelFile(path);
|
||||||
|
name = modelFile.baseName();
|
||||||
|
directory = modelFile.dir();
|
||||||
|
|
||||||
Assimp::Importer importer;
|
Assimp::Importer importer;
|
||||||
const aiScene* scene = importer.ReadFile(directory.absolutePath().toUtf8(), aiProcess_Triangulate | aiProcess_FlipUVs);
|
const aiScene* scene = importer.ReadFile(modelFile.absoluteFilePath().toUtf8(), aiProcess_Triangulate | aiProcess_FlipUVs);
|
||||||
if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode)
|
if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode)
|
||||||
{
|
{
|
||||||
qDebug() << "ERROR::ASSIMP::" << importer.GetErrorString() << endl;
|
qCritical() << "ERROR::ASSIMP::" << importer.GetErrorString() << endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qDebug() << directory.absolutePath() << "Loaded Successfully";
|
qDebug() << modelFile.absoluteFilePath() << "Loaded Successfully";
|
||||||
qDebug() << "NumMeshes: " << scene->mNumMeshes;
|
qDebug() << "NumMeshes: " << scene->mNumMeshes;
|
||||||
qDebug() << "NumMaterials: " << scene->mNumMaterials;
|
qDebug() << "NumMaterials: " << scene->mNumMaterials;
|
||||||
qDebug() << "NumTextures: " << scene->mNumTextures;
|
qDebug() << "NumTextures: " << scene->mNumTextures;
|
||||||
directory.cdUp();
|
|
||||||
|
if (QFile paintingConfigFile(directory.filePath(name + ".txt")); paintingConfigFile.open(QFile::ReadOnly | QIODevice::Text))
|
||||||
|
{
|
||||||
|
paintingMap.clear();
|
||||||
|
QTextStream stream(&paintingConfigFile);
|
||||||
|
while (!stream.atEnd())
|
||||||
|
{
|
||||||
|
QString source, target;
|
||||||
|
glm::vec2 leftBottom, rightTop;
|
||||||
|
stream >> source >> target >> leftBottom.x >> leftBottom.y >> rightTop.x >> rightTop.y;
|
||||||
|
qDebug() << source << target << leftBottom.x << leftBottom.y << rightTop.x << rightTop.y;
|
||||||
|
paintingMap.emplace(source.toStdString(), std::forward_as_tuple(target.toStdString(), leftBottom, rightTop));
|
||||||
|
}
|
||||||
|
paintingConfigFile.close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qWarning() << "Painting Config Not Found!";
|
||||||
|
}
|
||||||
|
|
||||||
minX = std::numeric_limits<float>::max();
|
minX = std::numeric_limits<float>::max();
|
||||||
maxX = std::numeric_limits<float>::min();
|
maxX = std::numeric_limits<float>::min();
|
||||||
minY = std::numeric_limits<float>::max();
|
minY = std::numeric_limits<float>::max();
|
||||||
|
@ -99,8 +121,9 @@ std::unique_ptr<Drawable> Model::processMesh(aiMesh* mesh, const aiScene* scene,
|
||||||
aiString str;
|
aiString str;
|
||||||
material->GetTexture(aiTextureType_BASE_COLOR, 0, &str);
|
material->GetTexture(aiTextureType_BASE_COLOR, 0, &str);
|
||||||
|
|
||||||
if (paintingProgram != nullptr && (std::strcmp(str.C_Str(), "17876391417123941155.jpg") == 0 || std::strcmp(str.C_Str(), "11474523244911310074.jpg") == 0))
|
if (auto iter = paintingMap.find(std::string(str.C_Str())); paintingProgram != nullptr && iter != paintingMap.end())
|
||||||
{
|
{
|
||||||
|
auto& [paintingPath, leftBottom, rightTop] = iter->second;
|
||||||
qDebug() << str.C_Str() << "Replaced";
|
qDebug() << str.C_Str() << "Replaced";
|
||||||
// ³õʼ»¯Íø¸ñ
|
// ³õʼ»¯Íø¸ñ
|
||||||
auto m_mesh = std::make_unique<PaintingMesh>(glFunc, paintingProgram, shadowProgram, modelQ);
|
auto m_mesh = std::make_unique<PaintingMesh>(glFunc, paintingProgram, shadowProgram, modelQ);
|
||||||
|
@ -129,7 +152,7 @@ std::unique_ptr<Drawable> Model::processMesh(aiMesh* mesh, const aiScene* scene,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mesh->paintingId = loadPainting(std::string(str.C_Str()));
|
m_mesh->paintingId = loadPainting(paintingPath);
|
||||||
auto& handle = vtManager->getPaintingHandle(m_mesh->paintingId);
|
auto& handle = vtManager->getPaintingHandle(m_mesh->paintingId);
|
||||||
m_mesh->textureBasecolor = handle.baseColor;
|
m_mesh->textureBasecolor = handle.baseColor;
|
||||||
m_mesh->textureMetallicRoughness = handle.metallicRoughness;
|
m_mesh->textureMetallicRoughness = handle.metallicRoughness;
|
||||||
|
@ -250,7 +273,7 @@ GLuint Renderer::Model::loadPainting(std::string path)
|
||||||
};
|
};
|
||||||
Painting painting;
|
Painting painting;
|
||||||
|
|
||||||
if (path == "17876391417123941155.jpg")
|
if (path == "0.json")
|
||||||
{
|
{
|
||||||
painting.addElement(*element[0], ElementTransform{ glm::vec2(-0.45,-0.45), glm::vec2(0.5,0.5) / 2.f, 0, glm::bvec2(false), 0 });
|
painting.addElement(*element[0], ElementTransform{ glm::vec2(-0.45,-0.45), glm::vec2(0.5,0.5) / 2.f, 0, glm::bvec2(false), 0 });
|
||||||
painting.addElement(*element[1], ElementTransform{ glm::vec2(-0.45, 0.45), glm::vec2(0.5,0.5) / 2.f, 0, glm::bvec2(false), 0 });
|
painting.addElement(*element[1], ElementTransform{ glm::vec2(-0.45, 0.45), glm::vec2(0.5,0.5) / 2.f, 0, glm::bvec2(false), 0 });
|
||||||
|
@ -266,7 +289,6 @@ GLuint Renderer::Model::loadPainting(std::string path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
painting.generateBuffers(glFunc);
|
painting.generateBuffers(glFunc);
|
||||||
|
|
||||||
auto index = vtManager->createVirtualTexture(painting);
|
auto index = vtManager->createVirtualTexture(painting);
|
||||||
|
|
|
@ -17,20 +17,20 @@ namespace Renderer
|
||||||
void loadModel(QString path);
|
void loadModel(QString path);
|
||||||
Model(QOpenGLContext* context, QOpenGLShaderProgram* shaderProgram, QOpenGLShaderProgram* paintingProgram, QOpenGLShaderProgram* shadowProgram, VirtualTextureManager* vtManager);
|
Model(QOpenGLContext* context, QOpenGLShaderProgram* shaderProgram, QOpenGLShaderProgram* paintingProgram, QOpenGLShaderProgram* shadowProgram, VirtualTextureManager* vtManager);
|
||||||
private:
|
private:
|
||||||
QOpenGLContext* context;
|
QOpenGLContext* context = nullptr;
|
||||||
QOpenGLFunctions_4_5_Core* glFunc = nullptr;
|
QOpenGLFunctions_4_5_Core* glFunc = nullptr;
|
||||||
QOpenGLShaderProgram* shaderProgram = nullptr;
|
QOpenGLShaderProgram* shaderProgram = nullptr;
|
||||||
QOpenGLShaderProgram* paintingProgram = nullptr;
|
QOpenGLShaderProgram* paintingProgram = nullptr;
|
||||||
QOpenGLShaderProgram* shadowProgram = nullptr;
|
QOpenGLShaderProgram* shadowProgram = nullptr;
|
||||||
VirtualTextureManager* vtManager = nullptr;
|
VirtualTextureManager* vtManager = nullptr;
|
||||||
|
|
||||||
/* 模型数据 */
|
std::unordered_map<std::string, std::tuple<std::string, glm::vec2, glm::vec2>> paintingMap;
|
||||||
std::unordered_map<std::string, GLuint> paintingLoaded;
|
std::unordered_map<std::string, GLuint> paintingLoaded;
|
||||||
std::unordered_map<std::string, QOpenGLTexture> texturesLoaded;
|
std::unordered_map<std::string, QOpenGLTexture> texturesLoaded;
|
||||||
std::vector<std::unique_ptr<Drawable>> meshes;
|
std::vector<std::unique_ptr<Drawable>> meshes;
|
||||||
|
|
||||||
/// 模型所在路径
|
QDir directory; /// 模型所在路径
|
||||||
QDir directory;
|
QString name; /// 模型文件名
|
||||||
|
|
||||||
float minX, maxX, minY, maxY, minZ, maxZ;
|
float minX, maxX, minY, maxY, minZ, maxZ;
|
||||||
|
|
||||||
|
|
|
@ -118,9 +118,7 @@ Renderer::ElementRenderer::ElementRenderer(QOpenGLWidget* glWidget)
|
||||||
: glWidget(glWidget)
|
: glWidget(glWidget)
|
||||||
{
|
{
|
||||||
surface.create();
|
surface.create();
|
||||||
|
|
||||||
thread = std::jthread([&] {
|
thread = std::jthread([&] {
|
||||||
std::cout << thread.get_id();
|
|
||||||
QOpenGLContext context;
|
QOpenGLContext context;
|
||||||
context.create();
|
context.create();
|
||||||
context.makeCurrent(&surface);
|
context.makeCurrent(&surface);
|
||||||
|
|
|
@ -1,25 +1,44 @@
|
||||||
#include "RendererWidget.h"
|
#include "RendererWidget.h"
|
||||||
#include "RendererGLWidget.h"
|
#include "RendererGLWidget.h"
|
||||||
|
#include "../FluentMenu.h"
|
||||||
|
|
||||||
Renderer::RendererWidget::RendererWidget(QWidget *parent)
|
Renderer::RendererWidget::RendererWidget(QWidget* parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
ui.setupUi(this);
|
ui.setupUi(this);
|
||||||
|
|
||||||
|
FluentMenu* menu = new FluentMenu(this);
|
||||||
|
auto openAction = new QAction(QStringLiteral("´ò¿ª"), menu);
|
||||||
|
auto saveAction = new QAction(QStringLiteral("±£´æ"), menu);
|
||||||
|
menu->addAction(openAction);
|
||||||
|
menu->addAction(saveAction);
|
||||||
|
|
||||||
ui.openButton->setHaloVisible(false);
|
ui.openButton->setHaloVisible(false);
|
||||||
ui.openButton->setOverlayStyle(::Material::TintedOverlay);
|
ui.openButton->setOverlayStyle(::Material::TintedOverlay);
|
||||||
|
ui.openButton->setCheckable(true);
|
||||||
|
|
||||||
|
QObject::connect(menu, &QMenu::aboutToShow, [&]() {
|
||||||
|
ui.openButton->setChecked(true);
|
||||||
|
});
|
||||||
|
QObject::connect(menu, &QMenu::aboutToHide, [&]() {
|
||||||
|
ui.openButton->setChecked(false);
|
||||||
|
});
|
||||||
|
QObject::connect(ui.openButton, &QPushButton::clicked, [&, menu]() {
|
||||||
|
menu->exec(ui.openButton->mapToGlobal(QPoint(-menu->shadowRadius, ui.openButton->height() - menu->shadowRadius)));
|
||||||
|
});
|
||||||
|
|
||||||
QObject::connect(ui.horizontalSlider, &QSlider::valueChanged,
|
QObject::connect(ui.horizontalSlider, &QSlider::valueChanged,
|
||||||
ui.openGLWidget, &Renderer::RendererGLWidget::setMainLightPitch);
|
ui.openGLWidget, &Renderer::RendererGLWidget::setMainLightPitch);
|
||||||
QObject::connect(ui.horizontalSlider_2, &QSlider::valueChanged,
|
QObject::connect(ui.horizontalSlider_2, &QSlider::valueChanged,
|
||||||
ui.openGLWidget, &Renderer::RendererGLWidget::setMainLightYaw);
|
ui.openGLWidget, &Renderer::RendererGLWidget::setMainLightYaw);
|
||||||
QObject::connect(ui.exposureSlider, &QSlider::valueChanged, [&](int value) {
|
QObject::connect(ui.exposureSlider, &QSlider::valueChanged, [&](int value) {
|
||||||
ui.openGLWidget->setExposure(value/100.f);
|
ui.openGLWidget->setExposure(value / 100.f);
|
||||||
});
|
});
|
||||||
|
QObject::connect(openAction, &QAction::triggered, ui.openGLWidget, &Renderer::RendererGLWidget::setModel);
|
||||||
|
|
||||||
ui.horizontalSlider->setValue(105);
|
ui.horizontalSlider->setValue(105);
|
||||||
ui.horizontalSlider_2->setValue(80);
|
ui.horizontalSlider_2->setValue(80);
|
||||||
ui.exposureSlider->setValue(60);
|
ui.exposureSlider->setValue(60);
|
||||||
QObject::connect(ui.openButton, &QPushButton::clicked,
|
|
||||||
ui.openGLWidget, &Renderer::RendererGLWidget::setModel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Renderer::RendererWidget::~RendererWidget()
|
Renderer::RendererWidget::~RendererWidget()
|
||||||
|
@ -35,4 +54,5 @@ void Renderer::RendererWidget::currentTabChanged(int index)
|
||||||
{
|
{
|
||||||
ui.openGLWidget->stopTimer();
|
ui.openGLWidget->stopTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QMenu>
|
||||||
#include "ui_RendererWidget.h"
|
#include "ui_RendererWidget.h"
|
||||||
namespace Renderer
|
namespace Renderer
|
||||||
{
|
{
|
||||||
class RendererWidget : public QWidget
|
class RendererWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RendererWidget(QWidget* parent = nullptr);
|
RendererWidget(QWidget* parent = nullptr);
|
||||||
~RendererWidget();
|
~RendererWidget();
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "titlewidget.h"
|
|
||||||
|
|
||||||
TitleWidget::TitleWidget(QWidget *parent) : QWidget(parent)
|
|
||||||
{
|
|
||||||
m_active = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TitleWidget::setText(const QString &text)
|
|
||||||
{
|
|
||||||
m_title = text;
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TitleWidget::setActive(bool active)
|
|
||||||
{
|
|
||||||
m_active = active;
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TitleWidget::setTitleColor(const QColor &active_color, const QColor &inactive_color)
|
|
||||||
{
|
|
||||||
m_active_color = active_color;
|
|
||||||
m_inactive_color = inactive_color;
|
|
||||||
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TitleWidget::paintEvent(QPaintEvent *event)
|
|
||||||
{
|
|
||||||
Q_UNUSED(event)
|
|
||||||
|
|
||||||
QPainter painter(this);
|
|
||||||
painter.setRenderHints(QPainter::Antialiasing);
|
|
||||||
|
|
||||||
QFont font;
|
|
||||||
font.setPointSize(10);
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
font.setFamily("Segoe UI, Microsoft YaHei UI");
|
|
||||||
#else
|
|
||||||
font.setFamily(qApp->font().family());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
painter.setFont(font);
|
|
||||||
|
|
||||||
QPen pen;
|
|
||||||
pen.setColor(m_active ? m_active_color : m_inactive_color);
|
|
||||||
|
|
||||||
painter.setPen(pen);
|
|
||||||
|
|
||||||
QFontMetrics metrics(painter.font());
|
|
||||||
QSize title_size = metrics.size(0, m_title);
|
|
||||||
|
|
||||||
QString title = metrics.elidedText(m_title, Qt::ElideRight, width());
|
|
||||||
|
|
||||||
painter.drawText(0, (height() - title_size.height()) / 2, title_size.width(), title_size.height(), 0, title);
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © 2018-2022 Antonio Dias
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef TITLEWIDGET_H
|
|
||||||
#define TITLEWIDGET_H
|
|
||||||
|
|
||||||
#include <QtCore>
|
|
||||||
#include <QtGui>
|
|
||||||
#include <QtWidgets>
|
|
||||||
|
|
||||||
class TitleWidget : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit TitleWidget(QWidget *parent = nullptr);
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setText(const QString &text);
|
|
||||||
void setActive(bool active);
|
|
||||||
void setTitleColor(const QColor &active_color, const QColor &inactive_color);
|
|
||||||
|
|
||||||
private:
|
|
||||||
//Functions
|
|
||||||
void paintEvent(QPaintEvent *event);
|
|
||||||
|
|
||||||
//Variables
|
|
||||||
QString m_title;
|
|
||||||
bool m_active;
|
|
||||||
QColor m_active_color;
|
|
||||||
QColor m_inactive_color;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // TITLEWIDGET_H
|
|
|
@ -22,7 +22,6 @@ namespace UnitTest
|
||||||
void initializeGL() override
|
void initializeGL() override
|
||||||
{
|
{
|
||||||
initializeOpenGLFunctions();
|
initializeOpenGLFunctions();
|
||||||
renderer.initialize();
|
|
||||||
};
|
};
|
||||||
void paintGL() override
|
void paintGL() override
|
||||||
{
|
{
|
||||||
|
@ -35,7 +34,7 @@ namespace UnitTest
|
||||||
transform.scale(10, 10);
|
transform.scale(10, 10);
|
||||||
path = transform.map(path);
|
path = transform.map(path);
|
||||||
float pixelRatio = devicePixelRatioF();
|
float pixelRatio = devicePixelRatioF();
|
||||||
auto [img, pos] = renderer.drawElement(path, style, pixelRatio, false);
|
auto [img, pos] = renderer.drawElement(path, style, pixelRatio);
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
painter.setRenderHint(QPainter::HighQualityAntialiasing);
|
painter.setRenderHint(QPainter::HighQualityAntialiasing);
|
||||||
|
|
Loading…
Reference in New Issue