Windows Qt C++ VTK 借助msys环境搭建
本示例仅仅是搭建环境,后续使用还得大佬指导。
Qt 6.6.0 MinGW 64bit
借助msys2 来安装VTK 包,把*.dll 链接进来,就可以用了。
先安装VTK 包。
Package: mingw-w64-x86_64-vtk - MSYS2 Packages
执行 pacman 命令:pacman -S mingw-w64-x86_64-vtk
鉴于csdn下载要C币,把demo例子全贴出来。
*.pro文件:
QT += core guiQT += openglwidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetINCLUDEPATH += C:/msys64/mingw64/include/vtk
DEPENDPATH += C:/msys64/mingw64/include/vtkLIBS += -LC:/msys64/mingw64/bin/ -llibvtkTestingIOSQL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkTestingRendering
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkUtilitiesBenchmarks
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkverdict
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkViewsContext2D
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkViewsCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkViewsInfovis
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkViewsQt
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkvpic
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkWrappingPythonCore3.11
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkWrappingTools
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkxdmf2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkxdmf3
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkxdmfcore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkzfp
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkAcceleratorsVTKmCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkAcceleratorsVTKmDataModel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkAcceleratorsVTKmFilters
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkChartsCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonArchive
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonColor
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonComputationalGeometry
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonDataModel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonExecutionModel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonMath
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonMisc
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonPython
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonSystem
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkCommonTransforms
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkDICOMParser
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkDomainsChemistry
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkDomainsChemistryOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkDomainsMicroscopy
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkexodusII
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkfides
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersAMR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersCellGrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersExtraction
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersFlowPaths
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersGeneral
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersGeneric
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersGeometry
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersGeometryPreview
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersHybrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersHyperTree
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersImaging
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersModeling
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersOpenTURNS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersParallel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersParallelDIY2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersParallelImaging
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersParallelStatistics
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersPoints
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersProgrammable
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersPython
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersReduction
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersReebGraph
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersSelection
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersSMP
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersSources
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersStatistics
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersTensor
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersTexture
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersTopology
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkFiltersVerdict
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkGeovisCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkGeovisGDAL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkGUISupportQt
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkGUISupportQtQuick
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkGUISupportQtSQL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkh5part
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingColor
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingFourier
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingGeneral
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingHybrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingMath
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingMorphological
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingSources
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingStatistics
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkImagingStencil
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInfovisBoostGraphAlgorithms
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInfovisCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInfovisLayout
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInteractionImage
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInteractionStyle
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkInteractionWidgets
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOADIOS2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOAMR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOAsynchronous
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCellGrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCesium3DTiles
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCGNSReader
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOChemistry
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCityGML
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCONVERGECFD
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOEnSight
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOExodus
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOExport
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOExportGL2PS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOExportPDF
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOFFMPEG
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOFides
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOFLUENTCFF
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOGDAL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOGeoJSON
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOGeometry
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOH5part
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOH5Rage
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOHDF
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOImage
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOImport
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOInfovis
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOIOSS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOLAS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOLegacy
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOLSDyna
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOMINC
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOMotionFX
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOMovie
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOMySQL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIONetCDF
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOOCCT
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOODBC
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOOggTheora
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOOMF
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOOpenVDB
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOParallel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOParallelExodus
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOParallelLSDyna
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOParallelXML
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOPDAL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOPIO
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOPLY
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOPostgreSQL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOSegY
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOSQL
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkioss
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOTecplotTable
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOTRUCHAS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOVeraOut
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOVideo
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOVPIC
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOXdmf2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOXdmf3
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOXML
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkIOXMLParser
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkkissfft
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkloguru
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_cont_testing-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_cont-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_clean_grid-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_connected_components-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_contour-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_core-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_density_estimate-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_entity_extraction-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_field_conversion-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_field_transform-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_flow-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_geometry_refinement-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_image_processing-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_mesh_info-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_multi_block-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_resampling-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_scalar_topology-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_vector_analysis-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_filter_zfp-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_io-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_source-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkm_worklet-2.0
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkmdiympi_nompi
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkmetaio
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkParallelCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkParallelDIY
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkPythonContext2D
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkPythonInterpreter
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingAnnotation
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingCellGrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingContext2D
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingContextOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingCore
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingExternal
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingFFMPEGOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingFreeType
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingFreeTypeFontConfig
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingGL2PSOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingHyperTreeGrid
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingImage
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingLabel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingLICOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingLOD
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingMatplotlib
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingOpenVR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingOpenXR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingParallel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingQt
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingRayTracing
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingSceneGraph
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingUI
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingVolume
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingVolumeAMR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingVolumeOpenGL2
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingVR
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkRenderingVtkJS
LIBS += -LC:/msys64/mingw64/bin/ -llibvtksys
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkTestingDataModel
LIBS += -LC:/msys64/mingw64/bin/ -llibvtkTestingGenericBridge
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui
{class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget* parent = nullptr);~MainWindow();void test0();void test1();void test2();void test3();void test4();void create();private:Ui::MainWindow* ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"#include "QVTKOpenGLNativeWidget.h"#include <vtkSmartPointer.h>
#include <vtkGenericOpenGLRenderWindow.h>#include <vtkNamedColors.h>#include <vtkSphereSource.h>#include <vtkActor.h>#include <vtkPolyDataMapper.h>#include <vtkProperty.h>#include <qsurfaceformat.h>
#include <QVTKOpenGLNativeWidget.h>#include <vtkSphereSource.h>
#include <vtkCubeSource.h>#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkNamedColors.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>#include "vtkAutoInit.h"#include <QVTKOpenGLNativeWidget.h>
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkImageCanvasSource2D.h>
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkAxesActor.h>
#include <vtkPolyData.h>
#include <vtkCellArray.h>
#include <vtkPoints.h>
#include <vtkPolyLine.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkPointData.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkDataSetMapper.h>
#include <vtkProperty.h>
#include <vtkCubeAxesActor2D.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkInteractorStyleTrackball.h>
#include <vtkSimplePointsReader.h>
#include <vtkWarpScalar.h>
#include <vtkAxisActor2D.h>#include <vtkOrientationMarkerWidget.h>MainWindow::MainWindow(QWidget* parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);this->test4();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::test0()
{//初始化VTK窗口,命名为qvtkWidget(原理和QPushButton这种QT自带的控件一样,只是该控件由VTK提供,用法跟QPushButton是一样的)QVTKOpenGLNativeWidget* qvtkWidget = new QVTKOpenGLNativeWidget();//初始化VTK的渲染器,平时用的比较多是vtkRenderWindow,但是在QT中要改用vtkGenericOpenGLRenderWindow,实质上与vtkRenderWindow功能一致vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());//QVTKOpenGLNativeWidget* widget = new QVTKOpenGLNativeWidget();vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();//创建一个球体sphereSource->SetRadius(2.0f);vtkSmartPointer<vtkCubeSource> cubeSource = vtkSmartPointer<vtkCubeSource>::New();//创建一个立方体// cubeSource->SetRadius(2.0f);vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();//球体数据映射到渲染场景中// sphereMapper->SetInputConnection(sphereSource->GetOutputPort());sphereMapper->SetInputConnection(cubeSource->GetOutputPort());vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New();sphereActor->SetMapper(sphereMapper);sphereActor->GetProperty()->SetColor(colors->GetColor4d("Red").GetData());vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(sphereActor);renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());renderWindow->AddRenderer(renderer);renderWindow->SetWindowName("RenderWindowNoUIFile");//将渲染器加入到VTK窗口中。可以先写这一行,后续再将准备好的vtkRenderer加入到renderWindow中也是可以同步数据的qvtkWidget->setRenderWindow(renderWindow);this->setCentralWidget(qvtkWidget);
}void MainWindow::test1()
{QVTKOpenGLNativeWidget* qvtkWidget = new QVTKOpenGLNativeWidget();// 创建VTK渲染器和渲染窗口vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);// 设置VTK渲染窗口到Qt WidgetqvtkWidget->setRenderWindow(renderWindow);// 创建频谱图数据vtkSmartPointer<vtkImageCanvasSource2D> imageSource = vtkSmartPointer<vtkImageCanvasSource2D>::New();imageSource->SetScalarTypeToUnsignedChar();imageSource->SetNumberOfScalarComponents(3);imageSource->SetExtent(0, 100, 0, 100, 0, 100);imageSource->SetDrawColor(255, 0, 0); // 设置颜色为红色imageSource->FillBox(0, 100, 0, 100);// 创建频谱图演员vtkSmartPointer<vtkImageActor> imageActor = vtkSmartPointer<vtkImageActor>::New();imageActor->SetInputData(imageSource->GetOutput());// 添加演员到渲染器renderer->AddActor(imageActor);renderer->ResetCamera();// 创建VTK交互器vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);// 设置VTK交互器样式vtkSmartPointer<vtkInteractorStyleImage> interactorStyle = vtkSmartPointer<vtkInteractorStyleImage>::New();renderWindowInteractor->SetInteractorStyle(interactorStyle);renderWindowInteractor->Start();qvtkWidget->show();
}void MainWindow::test2()
{QVTKOpenGLNativeWidget* qvtkWidget = new QVTKOpenGLNativeWidget();vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();points->InsertNextPoint(0.0, 0.0, 0.0);points->InsertNextPoint(1.0, 1.0, 1.0);points->InsertNextPoint(3.0, 2.0, 2.0);points->InsertNextPoint(4.0, 2.0, 2.0);points->InsertNextPoint(6.0, 2.0, 7.0);vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++){vertices->InsertNextCell(1);vertices->InsertCellPoint(i);}vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata->SetPoints(points);polydata->SetVerts(vertices);vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polydata);vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor);renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderWindow->Render();renderWindowInteractor->Start();qvtkWidget->setRenderWindow(renderWindow);this->setCentralWidget(qvtkWidget);
}void MainWindow::test3()
{// Read the filevtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();reader->SetFileName ( "d://simple.xyz" );reader->Update();vtkSmartPointer<vtkPolyData> inputPolyData = vtkSmartPointer<vtkPolyData>::New();inputPolyData ->CopyStructure(reader->GetOutput());// warp planevtkSmartPointer<vtkWarpScalar> warp = vtkSmartPointer<vtkWarpScalar>::New();warp->SetInputData(inputPolyData);// warp->SetInput(inputPolyData);warp->SetScaleFactor(0.0);// VisualizevtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();mapper->SetInputConnection(warp->GetOutputPort());vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->GetProperty()->SetPointSize(4);actor->SetMapper(mapper);vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);renderer->AddActor(actor);renderer->SetBackground(.3, .6, .3);renderWindow->Render();vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();renderWindowInteractor->SetInteractorStyle(style);// add & render CubeAxesvtkSmartPointer<vtkCubeAxesActor2D> axes = vtkSmartPointer<vtkCubeAxesActor2D>::New();axes->SetInputData(warp->GetOutput());axes->SetFontFactor(3.0);axes->SetFlyModeToNone();axes->SetCamera(renderer->GetActiveCamera());vtkSmartPointer<vtkAxisActor2D> xAxis = axes->GetXAxisActor2D();xAxis->SetAdjustLabels(1);// 添加坐标轴vtkSmartPointer<vtkAxesActor> axesActor = vtkSmartPointer<vtkAxesActor>::New();vtkSmartPointer<vtkOrientationMarkerWidget> widget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();widget->SetOutlineColor(0.9300, 0.5700, 0.1300);widget->SetOrientationMarker(axesActor);widget->SetInteractor(renderWindowInteractor);widget->SetViewport(0.0, 0.0, 0.2, 0.2);widget->SetEnabled(1);widget->InteractiveOn();renderer->AddViewProp(axes);renderWindowInteractor->Start();
}void MainWindow::test4()
{// 创建读取器vtkSmartPointer<vtkSimplePointsReader> reader = vtkSmartPointer<vtkSimplePointsReader>::New();reader->SetFileName("points.txt"); // 替换为你的数据文件路径// 创建映射器和演员vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(reader->GetOutputPort());vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);// 创建渲染器和渲染窗口vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);// 创建交互器vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();renderWindowInteractor->SetRenderWindow(renderWindow);// 将演员添加到渲染器中renderer->AddActor(actor);// 设置渲染器和窗口属性renderer->SetBackground(1.0, 1.0, 1.0); // 设置背景颜色为白色renderWindow->SetSize(800, 600);// 重置相机以适应数据范围renderer->ResetCamera();// 绘制曲线vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();points->InsertNextPoint(0.0, 0.0, 0.0);points->InsertNextPoint(1.0, 1.0, 0.0);points->InsertNextPoint(2.0, 0.0, 0.0);vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();vtkSmartPointer<vtkPolyLine> line = vtkSmartPointer<vtkPolyLine>::New();line->GetPointIds()->SetNumberOfIds(3);for (int i = 0; i < 3; ++i){line->GetPointIds()->SetId(i, i);}lines->InsertNextCell(line);vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();polydata->SetPoints(points);polydata->SetLines(lines);vtkSmartPointer<vtkPolyDataMapper> curveMapper = vtkSmartPointer<vtkPolyDataMapper>::New();curveMapper->SetInputData(polydata);vtkSmartPointer<vtkActor> curveActor = vtkSmartPointer<vtkActor>::New();curveActor->SetMapper(curveMapper);curveActor->GetProperty()->SetColor(1.0, 0.0, 0.0); // 设置曲线颜色为红色renderer->AddActor(curveActor);// 添加坐标轴vtkSmartPointer<vtkAxesActor> axesActor = vtkSmartPointer<vtkAxesActor>::New();vtkSmartPointer<vtkOrientationMarkerWidget> widget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();widget->SetOutlineColor(0.9300, 0.5700, 0.1300);widget->SetOrientationMarker(axesActor);widget->SetInteractor(renderWindowInteractor);widget->SetViewport(0.0, 0.0, 0.2, 0.2);widget->SetEnabled(1);widget->InteractiveOn();// 开始渲染renderWindow->Render();// 启动交互renderWindowInteractor->Start();
}void MainWindow::create()
{//存放三角网的顶点vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();//存放Cell顶点vtkSmartPointer<vtkCellArray> strips = vtkSmartPointer<vtkCellArray>::New();//存放每个顶点的标量值vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();//vtkSmartPointer<vtkPolyData> PolyData = vtkSmartPointer<vtkPolyData>::New();vtkSmartPointer<vtkPolyDataMapper> PolyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();vtkSmartPointer<vtkLODActor> Actor = vtkSmartPointer<vtkLODActor>::New();//定义用于将属性映射到RGB颜色值的传递函数vtkSmartPointer<vtkColorTransferFunction> clrTransferFunc = vtkSmartPointer<vtkColorTransferFunction>::New();clrTransferFunc->SetColorSpaceToRGB();//获取三角网的(序号,顶点坐标)std::vector<SurfaceDataReader::SeqPoint> pts = m_sfReader->getTrianglePtLst();//获取三角网所有顶点的序号std::vector<int> topIdLst = m_sfReader->getTopIdLst();//将顶点坐标加入points、z值作为标量加入scalarsTGS::Point3D pt;for (int index = 0; index < pts.size(); ++index){pt = pts[index].second;scalars->InsertValue(pts[index].first, pt.z);points->InsertPoint(pts[index].first, pt.x, pt.y, pt.z);}//遍历所有序号,按每3个序号组合成一个cellfor (int i = 0; i < topIdLst.size(); i += 3){strips->InsertNextCell(3);strips->InsertCellPoint(topIdLst[i]);strips->InsertCellPoint(topIdLst[i + 1]);strips->InsertCellPoint(topIdLst[i + 2]);}PolyData->SetPoints(points);PolyData->SetStrips(strips);PolyData->GetPointData()->SetScalars(scalars);//计算三角网格顶点的法向量,平滑过渡颜色vtkSmartPointer<vtkPolyDataNormals> normFilter = vtkSmartPointer<vtkPolyDataNormals>::New();normFilter->SetInputData(PolyData);//开启点法向量计算normFilter->SetComputePointNormals(1);//关闭单元法向量计算normFilter->SetComputeCellNormals(0);normFilter->SetAutoOrientNormals(1);normFilter->SetSplitting(0);normFilter->Update();//获取色标信息std::vector<ColorBar::ColorInfo> clrs = m_clrBar->getColorBar();double dRange = m_zMax - m_zMin;double dValue = 0.0;for (int i = 0; i < clrs.size(); i++){dValue = m_zMin + dRange * clrs[i].m_percent;unsigned int a, r, g, b;m_clrBar->convertColorToArgb(clrs[i].m_color, a, r, g, b);clrTransferFunc->AddRGBPoint(dValue, r / 255.0, g / 255.0, b / 255.0);}clrTransferFunc->Build();//PolyDataMapper->SetInputData(normFilter->GetOutput());PolyDataMapper->SetScalarRange(m_zMin, m_zMax);PolyDataMapper->SetLookupTable(clrTransferFunc);PolyDataMapper->ScalarVisibilityOn();Actor->SetMapper(PolyDataMapper);double* scale = m_vtkView->zoomScale();Actor->SetScale(scale[0], scale[1], scale[2]);m_pRender->AddActor(Actor);//m_pCtLine->initRender();m_pCtLine->create();}
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
simple.xyz;
0.0 0.0 3.0
1.0 4.0 0.0
0.0 1.0 0.0
4.0 0.0 3.0
1.0 4.0 7.0
0.0 6.0 0.0
借鉴了:
c++ - 使用VTK的3D等高线图C ++示例? - Thinbug
https://zhaojichao.blog.csdn.net/article/details/131714961?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-14-131714961-blog-123477490.235%5Ev40%5Epc_relevant_rights_sort&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-14-131714961-blog-123477490.235%5Ev40%5Epc_relevant_rights_sort&utm_relevant_index=21
相关文章:

Windows Qt C++ VTK 借助msys环境搭建
本示例仅仅是搭建环境,后续使用还得大佬指导。 Qt 6.6.0 MinGW 64bit 借助msys2 来安装VTK 包,把*.dll 链接进来,就可以用了。 先安装VTK 包。 Package: mingw-w64-x86_64-vtk - MSYS2 Packages 执行 pacman 命令:pacman -…...

尚硅谷Nginx高级配置笔记
写在前面:本笔记是学习尚硅谷nginx可成的时候的笔记,不是原创,如有需要,可以去官网看视频,以下是pdf文件 Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云…...

论rtp协议的重要性
rtp ps流工具 rtp 协议,实时传输协议,为什么这么重要,可以这么说,几乎所有的标准协议都是国外创造的,感叹一下,例如rtsp协议,sip协议,webrtc,都是以rtp协议为基础&#…...

【Github搭建网站】零基础零成本搭建个人Web网站~
Github网站:https://github.com/ 这是我个人搭建的网站:https://xf2001.github.io/xf/ 大家可以搭建完后发评论区看看!!! 搭建教程:https://www.bilibili.com/video/BV1xc41147Vb/?spm_id_from333.999.0.0…...

unocss+iconify技术在vue项目中使用20000+的图标
安装依赖 npm i unocss iconify/json配置依赖 vue.config.js文件 uno.config.js文件 main.js文件 使用 <i class"i-fa:user"></i> <i class"i-fa:key"></i>class名是 i- 开头,跟库名:图标名,那都有什么库…...

python 自动化模块 - pyautogui初探
python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标,画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘,以自动化与其他应用程序的交互。API的设计非常简…...

UE5 蓝图编辑美化学习
虚幻引擎中干净整洁蓝图的15个提示_哔哩哔哩_bilibili 1.双击线段成节点。 好用,爱用 2.用序列节点 好用,爱用 3.用枚举。 好用,能避免一些的拼写错误 4.对齐节点 两点一水平线 5.节点上下贴节点 (以前不懂,现在经常…...

基于动态顺序表实现通讯录项目
本文中,我们将使用顺序表的结构来完成通讯录的实现。 我们都知道,顺序表实际上就是一个数组。而使用顺序表来实现通讯录,其内核是将顺序表中存放的数据类型改为结构体,将联系人的信息存放到结构体中,通过对顺序表的操…...

python使用jupyter记笔记
目录 一、安装 二、运行jupyter 三、使用 四、记笔记 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享程序文档&a…...

C#封装服务
C#封装服务 新建服务项目;重构 OnStart 和 OnStop using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using S…...

手写Vue3源码
Vue3核心源码 B站视频地址:https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式,只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块,…...

如何无需重复输入FTP信息来安装WordPress主题和插件
WordPress作为一个广受欢迎的内容管理系统,提供了丰富的主题和插件来扩展网站的功能和外观。然而,许多用户在安装这些主题和插件时,经常遇到需要重复输入FTP信息的麻烦。幸运的是,有几种方法可以解决这个问题,让安装过…...

开发安全之:JSON Injection
Overview 在 XXX.php 的第 X 行中,responsemsg() 方法将未经验证的输入写入 JSON。攻击者可以利用此调用将任意元素或属性注入 JSON 实体。 Details JSON injection 会在以下情况中出现: 1. 数据从一个不可信赖的数据源进入程序。 2. 将数据写入到 …...

各种Linux版本安装Docker
文章目录 一、Ubuntu 20.04.61. 网卡和DNS配置2. Docker安装 二、CentOS Linux 7.91. 网卡和DNS配置2. Docker安装 三、Alibaba Cloud Linux 31. DNS配置2. repo说明3. Docker安装 四、验证是否安装成功 一、Ubuntu 20.04.6 1. 网卡和DNS配置 /etc/netplan 找到 *.yaml 文件 …...

git中合并分支时出现了代码冲突怎么办
目录 第一章、Git代码冲突介绍1.1)什么是Git代码冲突①git merge命令介绍②代码冲突原因 1.2)提示代码冲突的两种情况①本地不同分支的文件有差异时:②本地仓库和git远程仓库的文件有差异时: 1.3)解决合并时的代码冲突…...

什么是防火墙?
目录 什么是防火墙,为什么需要防火墙?防火墙与交换机、路由器对比防火墙和路由器实现安全控制的区别防火墙的发展史1989年至1994年1995年至2004年2005年至今 什么是防火墙,为什么需要防火墙? “防火墙”一词起源于建筑领域&#x…...

tui.calender日历创建、删除、编辑事件、自定义样式
全是坑🕳!全是坑🕳!全是坑🕳!能不用就不用! 官方文档:https://github.com/nhn/tui.calendar/blob/main/docs/en/apis/calendar.md 实例的一些方法,比如创建、删除、修改、…...

OpenHarmonyOS-gn与Ninja
GN语法及在鸿蒙的使用 [gnninja学习 0x01]gn和ninja是什么 ohos_sdk/doc/subsys-build-gn-coding-style-and-best-practice.md GN 语言与操作 一、gn简介 gn是generate ninja的缩写,它是一个元编译系统(meta-build system),是ninja的前端&am…...

Docker部署Traefik结合内网穿透远程访问Dashboard界面
文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…...

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题二 理论题
竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…...

从代码到项目管理:程序员的职业跃迁与PMP认证之路
哈喽,我是eleven,软件工程专业毕业,工作六年多的时间从事过测试岗、研发岗、项目经理岗。一路走来一直按照自己的职业规划向前发展,每一步都成功转型,目前已顺利拿到PMP项目管理资格认证。希望能通过自己的经验给大家带来些许帮助…...

空间形状对结构加法产物的影响
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 有2个点被固定在一个5*5的平面内,在这个平面内还有2个点在随机的运动。最终这4个点是如何分布的? 1 - - - 5 - - 1 9 - - 1 - 13 - - - 1 1 1 - 1 …...

构建高效外卖系统:技术实践与代码示例
外卖系统在现代社会中扮演着重要的角色,为用户提供了便捷的用餐解决方案。在这篇文章中,我们将探讨构建高效外卖系统的技术实践,同时提供一些基础的代码示例,帮助开发者更好地理解和应用这些技术。 1. 技术栈选择 构建外卖系统…...

HCIP-BGP选路实验
一.实验拓扑图 二.详细配置 R1 interface GigabitEthernet0/0/0 ip address 12.1.1.1 255.255.255.0interface LoopBack0 ip address 1.1.1.1 255.255.255.0interface LoopBack1 ip address 10.1.1.1 255.255.255.0bgp 1 router-id 1.1.1.1 peer 12.1.1.2 as-number 2ipv4-fa…...

线性表--顺序表
目录 1.什么是顺序表 2.动态顺序表实现 2.1动态顺序表结构体 2.2初始化 2.3打印验证函数 2.4判断是否扩容,按需扩容 2.5头插/尾插 2.6头删/尾删 2.7指定位置插入数据/指定位置删除数据 3.动态顺序表代码 1.什么是顺序表 线性表是n个具有相同特性的数据元素的…...

前端面试题:节流和防抖
节流和防抖都是通过降低事件执行的频率而达到节省资源的效果 节流 一段时间只执行一次,多少秒之后获取验证码、resize 事件和scroll 事件等 类似王者荣耀中的传送,一段时间内只能传送一次,具体实现如下: function throttle(fn, delay) {let lastTime = 0;return functi…...

网络工程师学习笔记——交换机路由器 数据传输
交换机和路由器是数据通信最核心,也是所有网工最熟悉的设备。今天学习:交换机%路由器数据传输过程。 目录 一、交换机 1、交换机原理 2、交换机数据传输过程 3、交换机基本原理配置命令 二、路由器 1、路由器原理 2、路由器数据传输过程 3、静态…...

【论文笔记】A Survey on 3D Gaussian Splatting
原文链接:https://arxiv.org/abs/2401.03890 1. 引言 NeRF在计算效率和可控性上具有局限性,这导致了3D高斯溅射(3D GS)的出现,重新定义了场景表达和渲染。 3D GS通过引入新的场景表达技术,用大量的3D高斯…...

项目实战————苍穹外卖(DAY11)
苍穹外卖-day11 课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现:数据统计 数据统计效果图: 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观&#x…...

非常好用的Mac清理工具CleanMyMac X 4.14.7 如何取消您对CleanMyMac X的年度订购
CleanMyMac X 4.14.7是Mac平台上的一款非常著名同时非常好用的Mac清理工具。全方位扫描您的Mac系统,让垃圾无处藏身,您只需要轻松单击2次鼠标左键即可清理数G的垃圾,就这么简单。瞬间提升您Mac速度。 CleanMyMac X 4.14.7下载地址:…...