20 #include <QAbstractButton>
22 #include <QColorDialog>
24 #include <QDesktopServices>
25 #include <QDockWidget>
26 #include <QFileDialog>
27 #include <QHBoxLayout>
30 #include <QMainWindow>
33 #include <QMessageBox>
34 #include <QMouseEvent>
35 #include <QProgressBar>
36 #include <QPushButton>
44 #include <QToolButton>
46 #include <QVBoxLayout>
61 class cc3DMouseManager;
62 class ccGamepadManager;
73 class ecvDeepSemanticSegmentationTool;
78 #if defined(USE_PCL_BACKEND)
79 class cvViewSelectionManager;
80 class cvSelectionData;
81 class cvSelectionHighlighter;
82 class cvSelectionToolController;
83 class cvFindDataDockWidget;
100 class QTreeWidgetItem;
106 class MainViewerClass;
109 #ifdef BUILD_RECONSTRUCTION
111 class ReconstructionWidget;
175 void addToDBAuto(
const QStringList& filenames,
bool displayDialog =
true);
177 void addToDB(
const QStringList& filenames,
178 QString fileFilter = QString(),
179 bool displayDialog =
true);
214 QString xAxisLabel)
override;
222 void refreshAll(
bool only2D =
false,
bool forceRedraw =
true)
override;
225 void refreshSelected(
bool only2D =
false,
bool forceRedraw =
true)
override;
228 bool forceRedraw =
true)
override;
231 bool forceRedraw =
true)
override;
236 const ccHObjectContext&
context)
override;
239 return m_selectedEntities;
246 bool updateZoom =
false,
247 bool autoExpandDBTree =
true,
248 bool checkDimensions =
false,
249 bool autoRedraw =
true)
override;
274 #ifdef USE_PCL_BACKEND
276 cvViewSelectionManager* getSelectionManager()
const;
279 cvSelectionToolController* getSelectionController()
const {
280 return m_selectionController;
286 void connectActions();
288 void initLanguages();
289 void initApplicationUpdate();
291 void initStatusBar();
296 QString formatBytes(qint64
bytes);
299 void updateMemoryUsageWidgetSize();
303 void updateAllToolbarIconSizes();
305 #ifdef USE_PCL_BACKEND
307 void initSelectionController();
311 void disableAllSelectionTools(
void* except =
nullptr);
318 void addEditPlaneAction(QMenu& menu)
const;
326 void doComputePlaneOrientation(
bool fitFacet);
328 void toggleActiveWindowCenteredPerspective()
override;
329 void toggleActiveWindowViewerBasedPerspective()
override;
332 void setupInputDevices();
334 void destroyInputDevices();
337 void populateActionList();
340 void showShortcutDialog();
344 void createComponentsClouds(
347 unsigned minPointPerComponent,
349 bool selectComponents,
350 bool sortBysize =
true);
358 void onMousePosChanged(
const QPoint& pos);
359 void updateMemoryUsage();
361 void doActionOpenFile();
362 void doActionSaveFile();
364 void doActionSaveProject();
366 void changeLanguage();
367 void doActionGlobalShiftSeetings();
368 void doActionResetGUIElementsPos();
369 void doActionRestoreWindowOnStartup(
bool state);
370 void doActionSaveCustomLayout();
371 void doActionRestoreDefaultLayout();
372 void doActionRestoreCustomLayout();
373 void doShowPrimitiveFactory();
375 void doCheckForUpdate();
377 void doActionComputeNormals();
378 void doActionInvertNormals();
379 void doActionConvertNormalsToHSV();
380 void doActionOrientNormalsFM();
381 void doActionOrientNormalsMST();
382 void doActionExportNormalToSF();
383 void doActionConvertNormalsToDipDir();
385 void doActionComputeOctree();
386 void doActionResampleWithOctree();
388 void doBoxAnnotation();
389 void doSemanticAnnotation();
390 void doAnnotations(
int mode);
393 void createSinglePointCloud();
395 void createPointCloudFromClipboard();
398 void doActionComputeKdTree();
399 void doComputeBestFitBB();
400 void doActionComputeDistanceMap();
401 void doActionComputeDistToBestFitQuadric3D();
402 void doAction4pcsRegister();
403 void doSphericalNeighbourhoodExtractionTest();
404 void doCylindricalNeighbourhoodExtractionTest();
405 void doActionCreateCloudFromEntCenters();
406 void doActionComputeBestICPRmsMatrix();
407 void doActionFindBiggestInnerRectangle();
410 void doEnableQtWarnings(
bool);
413 void doActionComputeMeshAA();
414 void doActionComputeMeshLS();
415 void doActionConvexHull();
416 void doActionPoissonReconstruction();
417 void doMeshTwoPolylines();
419 void doActionMeshScanGrids();
420 void doActionCreateGBLSensor();
421 void doActionCreateCameraSensor();
422 void doActionModifySensor();
423 void doActionProjectUncertainty();
424 void doActionCheckPointsInsideFrustum();
425 void doActionComputeDistancesFromSensor();
426 void doActionComputeScatteringAngles();
427 void doActionSetViewFromSensor();
428 void doActionShowDepthBuffer();
429 void doActionExportDepthBuffer();
430 void doActionComputePointsVisibility();
432 void doActionShowWaveDialog();
433 void doActionCompressFWFData();
435 void doActionConvertTextureToColor();
436 void doActionSamplePointsOnMesh();
437 void doActionSamplePointsOnPolyline();
438 void doActionSmoohPolyline();
439 void doConvertPolylinesToMesh();
440 void doBSplineFittingFromCloud();
441 void doActionSmoothMeshSF();
442 void doActionEnhanceMeshSF();
443 void doActionSubdivideMesh();
444 void doActionFlipMeshTriangles();
445 void doActionSmoothMeshLaplacian();
446 void doActionFlagMeshVertices();
447 void doActionMeasureMeshVolume();
448 void doActionMeasureMeshSurface();
450 void doActionCreatePlane();
451 void doActionEditPlane();
452 void doActionFlipPlane();
453 void doActionComparePlanes();
454 void doActionPromoteCircleToCylinder();
457 void doActionClone();
458 void doActionMerge();
460 void activateTracePolylineMode();
461 void deactivateTracePolylineMode(
bool);
463 void popMenuInConsole(
const QPoint&);
464 void clearConsoleItems();
466 void copyConsoleItems();
470 void toggleFullScreen(
bool state);
472 void onExclusiveFullScreenToggled(
bool);
473 void showDisplayOptions();
475 void toggleActiveWindowAutoPickRotCenter(
bool state);
476 void toggleRotationCenterVisibility(
bool state);
477 void doActionResetRotCenter();
479 void doActionEditCamera();
480 void toggleLockRotationAxis();
481 void doActionAnimation();
482 void doActionScreenShot();
483 void doActionToggleOrientationMarker(
bool state);
484 void doActionToggleCameraOrientationWidget(
bool state);
488 void showEvent(QShowEvent*
event)
override;
489 void closeEvent(QCloseEvent*
event)
override;
490 void moveEvent(QMoveEvent*
event)
override;
491 void resizeEvent(QResizeEvent*
event)
override;
492 bool eventFilter(QObject* obj, QEvent*
event)
override;
493 void keyPressEvent(QKeyEvent*
event)
override;
496 void handleEscapeKey();
498 void toggleVisualDebugTraces();
500 void updateUIWithSelection();
501 void doActionApplyTransformation();
502 void doActionApplyScale();
503 void activateTranslateRotateMode();
504 void deactivateTranslateRotateMode(
bool state);
507 void on3DViewActivated(QMdiSubWindow*);
513 void activatePointPickingMode();
514 void deactivatePointPickingMode(
bool);
517 void activatePointListPickingMode();
518 void deactivatePointListPickingMode(
bool);
524 void doActionSetUniqueColor();
525 void doActionColorize();
526 void doActionRGBToGreyScale();
527 void doActionSetColor(
bool colorize);
528 void doActionSetColorGradient();
529 void doActionInterpolateColors();
530 void doActionChangeColorLevels();
531 void doActionEnhanceRGBWithIntensities();
532 void doActionColorFromScalars();
533 void doActionRGBGaussianFilter();
534 void doActionRGBBilateralFilter();
535 void doActionRGBMeanFilter();
536 void doActionRGBMedianFilter();
539 void showSelectedEntitiesHistogram();
540 void doActionComputeStatParams();
541 void doActionSFGradient();
542 void doActionOpenColorScalesManager();
543 void doActionSFGaussianFilter();
544 void doActionSFBilateralFilter();
545 void doActionFilterByLabel();
546 void doActionFilterByValue();
548 void doActionScalarFieldFromColor();
549 void doActionSFConvertToRGB();
550 void doActionSFConvertToRandomRGB();
551 void doActionRenameSF();
552 void doActionAddConstantSF();
553 void doActionImportSFFromFile();
554 void doActionAddIdField();
555 void doActionExportCoordToSF();
556 void doActionSetSFAsCoord();
557 void doActionInterpolateScalarFields();
558 void doActionScalarFieldArithmetic();
561 void doActionToggleActiveSFColorScale();
562 void doActionShowActiveSFPrevious();
563 void doActionShowActiveSFNext();
570 void doApplyActiveSFAction(
int action);
572 void doRemoveDuplicatePoints();
573 void doActionSubsample();
574 void doActionEditGlobalShiftAndScale();
577 void doActionMatchScales();
578 void doActionMatchBBCenters();
579 void doActionRegister();
580 void activateRegisterPointPairTool();
581 void deactivateRegisterPointPairTool(
bool state);
583 inline void doActionMoveBBCenterToOrigin() {
584 doActionFastRegistration(MoveBBCenterToOrigin);
586 inline void doActionMoveBBMinCornerToOrigin() {
587 doActionFastRegistration(MoveBBMinCornerToOrigin);
589 inline void doActionMoveBBMaxCornerToOrigin() {
590 doActionFastRegistration(MoveBBMaxCornerToOrigin);
594 void doSemanticSegmentation();
595 void deactivateSemanticSegmentation(
bool);
598 void doActionDBScanCluster();
599 void doActionPlaneSegmentation();
602 void activateSegmentationMode();
603 void deactivateSegmentationMode(
bool);
604 void doActionMeasurementMode(
int mode);
605 void activateDistanceMode();
606 void activateContourMode();
607 void activateProtractorMode();
609 void doActionFilterMode(
int mode);
610 void activateClippingMode();
611 void activateSliceMode();
612 void activateProbeMode();
613 void activateDecimateMode();
614 void activateIsoSurfaceMode();
615 void activateThresholdMode();
616 void activateSmoothMode();
617 void activateGlyphMode();
618 void activateStreamlineMode();
620 void doActionLabelConnectedComponents();
621 void doActionKMeans();
622 void doActionFrontPropagation();
623 void doActionExportPlaneInfo();
624 void doActionExportCloudInfo();
626 #ifdef USE_PCL_BACKEND
627 void onSelectionFinished(
const cvSelectionData& selectionData);
628 void onSelectionRestored(
const cvSelectionData& selection);
629 void onSelectionToolActivated(QAction* action);
644 void doActionCloudCloudDist();
645 void doActionCloudMeshDist();
646 void doActionCloudPrimitiveDist();
647 void deactivateComparisonMode(
int result);
648 void doActionComputeCPS();
650 void doActionFitPlane();
651 void doActionFitSphere();
652 void doActionFitCircle();
653 void doActionFitFacet();
654 void doActionFitQuadric();
656 void doActionSORFilter();
657 void doActionFilterNoise();
658 void doActionVoxelSampling();
660 void doActionUnroll();
661 void doComputeGeometricFeature();
665 void applyTransformation(
const ccGLMatrixd& transMat);
671 void getFileFilltersAndHistory(QStringList& fileFilters,
672 QString& currentOpenDlgFilter);
681 QString inviteMessage = QString());
683 void toggleSelectedEntitiesProperty(
687 enum FastRegistrationMode {
688 MoveBBCenterToOrigin,
689 MoveBBMinCornerToOrigin,
690 MoveBBMaxCornerToOrigin
693 void doActionFastRegistration(FastRegistrationMode mode);
696 Ui::MainViewerClass* m_ui;
711 QToolButton* m_viewModePopupButton;
722 struct ccMDIDialogs {
732 void repositionOverlayDialog(ccMDIDialogs& mdiDlg);
735 std::vector<ccMDIDialogs> m_mdiDialogs;
761 ecvDeepSemanticSegmentationTool* m_dssTool;
771 #if defined(USE_PCL_BACKEND)
774 cvSelectionToolController* m_selectionController;
779 cvFindDataDockWidget* m_findDataDock;
782 QVBoxLayout* m_layout;
784 QLabel* m_mousePosLabel;
785 QLabel* m_systemInfoLabel;
788 QWidget* m_memoryUsageWidget;
789 QProgressBar* m_memoryUsageProgressBar;
790 QLabel* m_memoryUsageLabel;
791 QTimer* m_memoryUsageTimer;
794 QWidget* m_currentFullWidget;
796 bool m_exclusiveFullscreen;
798 QByteArray m_formerGeometry;
800 enum VIEWMODE { PERSPECTIVE, ORTHOGONAL };
801 VIEWMODE m_lastViewMode;
811 cc3DMouseManager* m_3DMouseManager;
814 ccGamepadManager* m_gamepadManager;
820 QList<QAction*> m_actions;
823 QAction* m_selectionPropsAction =
nullptr;
826 #ifdef BUILD_RECONSTRUCTION
827 void initReconstructions();
828 void autoShowReconstructionToolBar(
bool state);
CC_VIEW_ORIENTATION
View orientation.
const int CLOUDVIEWER_LANG_CHINESE
const int CLOUDVIEWER_LANG_ENGLISH
QMenu * createPopupMenu() override
Override to add custom actions to right-click menu on toolbars.
static QWidget * GetRenderWindow(const QString &title)
Returns a given GL sub-window (determined by its title)
QWidget * getWindow(int index) const
void enablePickingOperation(QString message)
ccHObject * dbRootObject() override
Returns DB root (as a ccHObject)
ccHObjectContext removeObjectTemporarilyFromDBTree(ccHObject *obj) override
Removes object temporarily from DB tree.
void increasePointSize() override
QMdiSubWindow * getMDISubWindow(QWidget *win)
Returns MDI area subwindow corresponding to a given 3D view.
void decreasePointSize() override
int getRenderWindowCount() const
Returns the number of 3D views.
const ccHObject::Container & getSelectedEntities() const override
Returns currently selected entities ("read only")
void freezeUI(bool state) override
Freezes/unfreezes UI.
static MainWindow * TheInstance()
Returns the unique instance of this object.
void cancelPreviousPickingOperation(bool aborted)
ccDBRoot * db()
Returns real 'dbRoot' object.
void setUiManager(QUIWidget *uiManager)
void refreshObjects(ccHObject::Container objs, bool only2D=false, bool forceRedraw=true) override
void registerOverlayDialog(ccOverlayDialog *dlg, Qt::Corner pos) override
Registers a MDI area 'overlay' dialog.
void addToDB(const QStringList &filenames, QString fileFilter=QString(), bool displayDialog=true)
void dispToConsole(QString message, ConsoleMessageLevel level=STD_CONSOLE_MESSAGE) override
void updateOverlayDialogsPlacement() override
Forces the update of all registered MDI 'overlay' dialogs.
static void GetRenderWindows(std::vector< QWidget * > &windows)
Returns all GL sub-windows.
void doActionSaveViewportAsCamera()
void addToDBAuto(const QStringList &filenames, bool displayDialog=true)
static QWidget * GetActiveRenderWindow()
Static shortcut to MainWindow::getActiveWindow.
void setAutoPickPivot(bool state)
ccUniqueIDGenerator::Shared getUniqueIDGenerator() override
Returns the unique ID generator.
static bool s_autoSaveGuiElementPos
static void UpdateUI()
Static shortcut to MainWindow::updateUI.
void setGlobalZoom() override
void zoomOnEntities(ccHObject *obj) override
void refreshObject(ccHObject *obj, bool only2D=false, bool forceRedraw=true) override
void doActionOrthogonalProjection()
void removeFromDB(ccHObject *obj, bool autoDelete=true) override
Removes an entity from main db tree.
void onItemPicked(const PickedItem &pi) override
Inherited from ccPickingListener.
ccColorScalesManager * getColorScalesManager() override
Returns color scale manager (unique instance)
void spawnHistogramDialog(const std::vector< unsigned > &histoValues, double minVal, double maxVal, QString title, QString xAxisLabel) override
void addWidgetToQMdiArea(QWidget *widget) override
ccPickingHub * pickingHub() override
void refreshAll(bool only2D=false, bool forceRedraw=true) override
Redraws all GL windows that have the 'refresh' flag on.
void toggleExclusiveFullScreen(bool state) override
ccHObject * loadFile(QString filename, bool silent) override
Attempts to load a file.
void toggle3DView(bool state) override
void exclusiveFullScreenToggled(bool exclusive)
Signal emitted when the exclusive full screen is toggled.
void refreshSelected(bool only2D=false, bool forceRedraw=true) override
QMainWindow * getMainWindow() override
Returns main window.
void forceConsoleDisplay() override
Forces display of console widget.
void doActionPerspectiveProjection()
void updateFullScreenMenu(bool state)
void translation(const CCVector3d &t)
Signal emitted when the selected object is translated by the user.
bool m_FirstShow
Flag: first time the window is made visible.
void unregisterOverlayDialog(ccOverlayDialog *dlg) override
Unregisters a MDI area 'overlay' dialog.
ccBBox getSelectedEntityBbox()
void updateViewModePopUpMenu()
static void ChangeStyle(const QString &qssFile)
QWidget * getActiveWindow() override
void resetSelectedBBox() override
void initPlugins()
Sets up the UI (menus and toolbars) based on loaded plugins.
void putObjectBackIntoDBTree(ccHObject *obj, const ccHObjectContext &context) override
Adds back object to DB tree.
void rotation(const ccGLMatrixd &rotMat)
Signal emitted when the selected object is rotated by the user.
void zoomOnSelectedEntities() override
void enableAll() override
Enables all windows.
void setView(CC_VIEW_ORIENTATION view) override
void updatePropertiesView()
Updates the 'Properties' view.
void setPerspectiveView()
static void DestroyInstance()
Deletes current main window instance.
void disableAll() override
Disables all windows.
void saveGUIElementsPos()
Saves position and state of all GUI elements.
void setSelectedInDB(ccHObject *obj, bool selected) override
Selects or unselects an entity (in db tree)
Manages the updater instances.
Color scales manager/container.
Dialog for cloud/cloud or cloud/mesh comparison setting.
Double version of ccGLMatrixTpl.
A 3D cloud interface with associated features (color, normals, octree, etc.)
Hierarchical CLOUDVIEWER Object.
std::vector< ccHObject * > Container
Standard instances container (for children, etc.)
Generic overlay dialog interface.
Point/triangle picking hub.
Point/triangle picking listener interface.
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Dialog/interactor to graphically pick a list of points.
Dialog for simple point picking (information, distance, etc.)
QSharedPointer< ccUniqueIDGenerator > Shared
Shared type.
Dialog to interactively edit the camera pose parameters.
Dialog to interactively edit the camera pose parameters.
Layout manager for MainWindow.
Main application interface (for plugins)
ConsoleMessageLevel
Console message level (see dispToConsole)
Generic file read and write utility for python interface.
TRIANGULATION_TYPES
Triangulation types.
std::vector< ReferenceCloud * > ReferenceCloudContainer
A standard container to store several subsets of points.
Precise statistics about current selection.