Sun, 03 Jul 2022 13:44:11 +0300
Extract the triangulation and triangle merging code into a new source file and clean it up somewhat
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>729</width> <height>600</height> </rect> </property> <property name="dockNestingEnabled"> <bool>false</bool> </property> <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <widget class="QMdiArea" name="mdiArea"> <property name="verticalScrollBarPolicy"> <enum>Qt::ScrollBarAsNeeded</enum> </property> <property name="horizontalScrollBarPolicy"> <enum>Qt::ScrollBarAsNeeded</enum> </property> <property name="viewMode"> <enum>QMdiArea::TabbedView</enum> </property> <property name="documentMode"> <bool>true</bool> </property> <property name="tabsClosable"> <bool>true</bool> </property> <property name="tabsMovable"> <bool>true</bool> </property> </widget> </item> </layout> </widget> <widget class="QMenuBar" name="menubar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>729</width> <height>35</height> </rect> </property> <widget class="QMenu" name="menuFile"> <property name="title"> <string>File</string> </property> <widget class="QMenu" name="menuRecentFiles"> <property name="title"> <string>Recent files</string> </property> </widget> <addaction name="actionNew"/> <addaction name="actionOpen"/> <addaction name="menuRecentFiles"/> <addaction name="actionSave"/> <addaction name="actionSaveAs"/> <addaction name="actionClose"/> <addaction name="separator"/> <addaction name="actionSettingsEditor"/> <addaction name="separator"/> <addaction name="actionQuit"/> </widget> <widget class="QMenu" name="menuView"> <property name="title"> <string>View</string> </property> <addaction name="actionRenderStyleNormal"/> <addaction name="actionRenderStyleBfc"/> <addaction name="actionRenderStyleRandom"/> <addaction name="actionRenderStylePickScene"/> <addaction name="actionWireframe"/> <addaction name="separator"/> <addaction name="actionAdjustGridToView"/> <addaction name="actionDrawAxes"/> <addaction name="separator"/> <addaction name="actionTileSubWindows"/> <addaction name="actionCascadeSubWindows"/> </widget> <widget class="QMenu" name="menuEdit"> <property name="title"> <string>Edit</string> </property> <addaction name="actionSelectAll"/> <addaction name="separator"/> <addaction name="actionInvert"/> <addaction name="actionDelete"/> <addaction name="separator"/> <addaction name="actionGridFine"/> <addaction name="actionGridMedium"/> <addaction name="actionGridCoarse"/> <addaction name="separator"/> <addaction name="actionMakeUnofficial"/> </widget> <widget class="QMenu" name="menuHelp"> <property name="title"> <string>Help</string> </property> <addaction name="actionAbout"/> <addaction name="actionAboutQt"/> </widget> <addaction name="menuFile"/> <addaction name="menuView"/> <addaction name="menuEdit"/> <addaction name="menuHelp"/> </widget> <widget class="QStatusBar" name="statusbar"/> <widget class="QToolBar" name="fileToolBar"> <property name="windowTitle"> <string>toolBar</string> </property> <property name="toolButtonStyle"> <enum>Qt::ToolButtonTextUnderIcon</enum> </property> <attribute name="toolBarArea"> <enum>TopToolBarArea</enum> </attribute> <attribute name="toolBarBreak"> <bool>false</bool> </attribute> <addaction name="actionNew"/> <addaction name="actionOpen"/> <addaction name="actionSave"/> <addaction name="actionSaveAs"/> </widget> <widget class="QToolBar" name="toolBar"> <property name="windowTitle"> <string>toolBar</string> </property> <property name="toolButtonStyle"> <enum>Qt::ToolButtonTextUnderIcon</enum> </property> <attribute name="toolBarArea"> <enum>TopToolBarArea</enum> </attribute> <attribute name="toolBarBreak"> <bool>false</bool> </attribute> <addaction name="actionRenderStyleNormal"/> <addaction name="actionRenderStyleBfc"/> <addaction name="actionRenderStyleRandom"/> <addaction name="actionWireframe"/> <addaction name="actionDrawAxes"/> </widget> <widget class="QToolBar" name="editToolBar"> <property name="windowTitle"> <string>toolBar_2</string> </property> <property name="toolButtonStyle"> <enum>Qt::ToolButtonTextUnderIcon</enum> </property> <attribute name="toolBarArea"> <enum>TopToolBarArea</enum> </attribute> <attribute name="toolBarBreak"> <bool>false</bool> </attribute> <addaction name="actionInvert"/> <addaction name="actionDelete"/> <addaction name="actionGridFine"/> <addaction name="actionGridMedium"/> <addaction name="actionGridCoarse"/> </widget> <widget class="QToolBar" name="editingModesToolBar"> <property name="windowTitle"> <string>toolBar_2</string> </property> <property name="toolButtonStyle"> <enum>Qt::ToolButtonTextUnderIcon</enum> </property> <attribute name="toolBarArea"> <enum>LeftToolBarArea</enum> </attribute> <attribute name="toolBarBreak"> <bool>false</bool> </attribute> </widget> <widget class="QDockWidget" name="toolOptionsDock"> <property name="features"> <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set> </property> <property name="windowTitle"> <string>Tool options</string> </property> <attribute name="dockWidgetArea"> <number>8</number> </attribute> <widget class="QWidget" name="dockWidgetContents_2"> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QStackedWidget" name="toolWidgetStack"/> </item> </layout> </widget> </widget> <widget class="QDockWidget" name="dockWidget_3"> <property name="features"> <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set> </property> <property name="windowTitle"> <string>Model body</string> </property> <attribute name="dockWidgetArea"> <number>2</number> </attribute> <widget class="QWidget" name="dockWidgetContents_3"> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> <widget class="QListView" name="modelListView"> <property name="alternatingRowColors"> <bool>true</bool> </property> <property name="selectionMode"> <enum>QAbstractItemView::ExtendedSelection</enum> </property> <property name="selectionBehavior"> <enum>QAbstractItemView::SelectRows</enum> </property> <property name="verticalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="horizontalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="wordWrap"> <bool>true</bool> </property> <property name="selectionRectVisible"> <bool>true</bool> </property> </widget> </item> </layout> </widget> </widget> <widget class="QDockWidget" name="messageLogDock"> <property name="features"> <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set> </property> <property name="windowTitle"> <string>Message log</string> </property> <attribute name="dockWidgetArea"> <number>8</number> </attribute> <widget class="QWidget" name="dockWidgetContents"> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QTableView" name="messageLog"> <property name="verticalScrollBarPolicy"> <enum>Qt::ScrollBarAlwaysOn</enum> </property> <property name="horizontalScrollBarPolicy"> <enum>Qt::ScrollBarAlwaysOn</enum> </property> <property name="alternatingRowColors"> <bool>true</bool> </property> <property name="verticalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="horizontalScrollMode"> <enum>QAbstractItemView::ScrollPerPixel</enum> </property> <property name="gridStyle"> <enum>Qt::DotLine</enum> </property> <attribute name="horizontalHeaderDefaultSectionSize"> <number>150</number> </attribute> <attribute name="horizontalHeaderStretchLastSection"> <bool>true</bool> </attribute> <attribute name="verticalHeaderVisible"> <bool>false</bool> </attribute> </widget> </item> </layout> </widget> </widget> <action name="actionQuit"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/close.png</normaloff>:/icons/close.png</iconset> </property> <property name="text"> <string>Quit</string> </property> </action> <action name="actionOpen"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/folder-open-outline.png</normaloff>:/icons/folder-open-outline.png</iconset> </property> <property name="text"> <string>Open…</string> </property> <property name="shortcut"> <string>Ctrl+O</string> </property> </action> <action name="actionNew"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/document-outline.png</normaloff>:/icons/document-outline.png</iconset> </property> <property name="text"> <string>New</string> </property> <property name="shortcut"> <string>Ctrl+N</string> </property> </action> <action name="actionSettingsEditor"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/settings-outline.png</normaloff>:/icons/settings-outline.png</iconset> </property> <property name="text"> <string>Preferences…</string> </property> </action> <action name="actionRenderStyleNormal"> <property name="checkable"> <bool>true</bool> </property> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/renderstyle-normal.png</normaloff>:/icons/renderstyle-normal.png</iconset> </property> <property name="text"> <string>Normal colours</string> </property> </action> <action name="actionRenderStyleBfc"> <property name="checkable"> <bool>true</bool> </property> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/renderstyle-bfc.png</normaloff>:/icons/renderstyle-bfc.png</iconset> </property> <property name="text"> <string>BFC color coding</string> </property> </action> <action name="actionRenderStyleRandom"> <property name="checkable"> <bool>true</bool> </property> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/renderstyle-randomcolors.png</normaloff>:/icons/renderstyle-randomcolors.png</iconset> </property> <property name="text"> <string>Random colours</string> </property> </action> <action name="actionRenderStylePickScene"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Pick scene colours</string> </property> </action> <action name="actionAdjustGridToView"> <property name="text"> <string>Adjust grid to view</string> </property> <property name="shortcut"> <string>Ctrl+G</string> </property> </action> <action name="actionSave"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/save-outline.png</normaloff>:/icons/save-outline.png</iconset> </property> <property name="text"> <string>Save</string> </property> <property name="shortcut"> <string>Ctrl+S</string> </property> </action> <action name="actionSaveAs"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/save-as-outline.png</normaloff>:/icons/save-as-outline.png</iconset> </property> <property name="text"> <string>Save as…</string> </property> <property name="shortcut"> <string>Ctrl+Shift+S</string> </property> </action> <action name="actionClose"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/close-circle-outline.png</normaloff>:/icons/close-circle-outline.png</iconset> </property> <property name="text"> <string>Close</string> </property> <property name="shortcut"> <string>Ctrl+W</string> </property> </action> <action name="actionDelete"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/trash-bin-outline.png</normaloff>:/icons/trash-bin-outline.png</iconset> </property> <property name="text"> <string>Delete</string> </property> <property name="shortcut"> <string>Del</string> </property> </action> <action name="actionDrawAxes"> <property name="checkable"> <bool>true</bool> </property> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/axes.png</normaloff>:/icons/axes.png</iconset> </property> <property name="text"> <string>Draw axes</string> </property> </action> <action name="actionGridFine"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Fine grid</string> </property> <property name="shortcut"> <string>Ctrl+1</string> </property> </action> <action name="actionGridMedium"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Medium grid</string> </property> <property name="shortcut"> <string>Ctrl+2</string> </property> </action> <action name="actionGridCoarse"> <property name="checkable"> <bool>true</bool> </property> <property name="text"> <string>Coarse grid</string> </property> <property name="shortcut"> <string>Ctrl+3</string> </property> </action> <action name="actionInvert"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/invert.png</normaloff>:/icons/invert.png</iconset> </property> <property name="text"> <string>Invert</string> </property> </action> <action name="actionAboutQt"> <property name="text"> <string>About Qt</string> </property> </action> <action name="actionWireframe"> <property name="checkable"> <bool>true</bool> </property> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/renderstyle-wireframe.png</normaloff>:/icons/renderstyle-wireframe.png</iconset> </property> <property name="text"> <string>Wireframe</string> </property> </action> <action name="actionMakeUnofficial"> <property name="text"> <string>Make unofficial</string> </property> </action> <action name="actionAbout"> <property name="icon"> <iconset resource="../resources.qrc"> <normaloff>:/icons/appicon.png</normaloff>:/icons/appicon.png</iconset> </property> <property name="text"> <string>About %1</string> </property> </action> <action name="actionTileSubWindows"> <property name="text"> <string>Tile subwindows</string> </property> </action> <action name="actionCascadeSubWindows"> <property name="text"> <string>Cascade subwindows</string> </property> </action> <action name="actionSelectAll"> <property name="text"> <string>Select all</string> </property> <property name="shortcut"> <string>Ctrl+A</string> </property> </action> </widget> <resources> <include location="../resources.qrc"/> <include location="../resources.qrc"/> </resources> <connections> <connection> <sender>actionTileSubWindows</sender> <signal>triggered()</signal> <receiver>mdiArea</receiver> <slot>tileSubWindows()</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>231</x> <y>202</y> </hint> </hints> </connection> <connection> <sender>actionCascadeSubWindows</sender> <signal>triggered()</signal> <receiver>mdiArea</receiver> <slot>cascadeSubWindows()</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>231</x> <y>202</y> </hint> </hints> </connection> <connection> <sender>actionSelectAll</sender> <signal>triggered()</signal> <receiver>modelListView</receiver> <slot>selectAll()</slot> <hints> <hint type="sourcelabel"> <x>-1</x> <y>-1</y> </hint> <hint type="destinationlabel"> <x>589</x> <y>216</y> </hint> </hints> </connection> </connections> </ui>