1. 程式人生 > >【VTK】在Mac上學習VTK

【VTK】在Mac上學習VTK

MAC OS X上的編譯:

https://www.vtk.org/Wiki/VTK/Building/MacOSX

編譯vtk使得QT版本為5

cmake configure:


cmake ./ -G "Unix Makefiles" \

-DVTK_USE_QVTK:BOOL=ON \

-DCMAKE_INSTALL_PREFIX=/usr/local \

-DVTK_USE_GUISUPPORT:BOOL=ON \

-DVTK_QT_VERSION=5 \

-DModule_vtkGUISupportQt:BOOL=ON \

-DModule_vtkGUISupportQtOpenGL
:BOOL=ON \
-DModule_vtkGUISupportQtSQL:BOOL=ON \ -DModule_vtkGUISupportQtWebkit:BOOL=ON \ -DModule_vtkRenderingQt:BOOL=ON \ -DModule_vtkViewsQt:BOOL=ON

then make and make install

vtk在mac上的編譯安裝就完成了。

doxgen文件:

https://www.vtk.org/doc/nightly/html/index.html

CSDN部落格推薦:

https://blog.csdn.net/www_doling_net/article/details/8763686

Unix平臺編譯,檢視CMakeCache.txt中的值是有效的。連結路徑為LD_LIBRARY_PATH。

The basic setup of source -> mapper -> actor -> renderer -> renderwindow is typical of most VTK programs.

step1 練習:/Users/weiyang/Downloads/VTK-8.1.1/Examples/Tutorial/Step1/Cxx


➜ cmake ./

➜ make

Scanning dependencies of target Cone
[ 50%] Building CXX object CMakeFiles/Cone.dir/Cone.cxx.o [100%] Linking CXX executable Cone.app/Contents/MacOS/Cone [100%] Built target Cone

搜尋cpp 的類:

vtkRegularPolygonSource類對應的URL是:

https://www.vtk.org/doc/nightly/html/classvtkRegularPolygonSource.html

如果要搜尋其他的類介紹,可以直接將classvtkRegularPolygonSource換成class + 類名 即可。

cmake 線上查詢:https://cmake.org/cmake/help/v3.10/search.html
官網:https://cmake.org/cmake-tutorial/
教程推薦:https://www.jianshu.com/p/bbf68f9ddffa

例子:
寫、讀STL檔案

#include <vtkPolyData.h>
#include <vtkSTLWriter.h>
#include <vtkSTLReader.h>
#include <vtkConeSource.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>

void generateSTL( std::string filename )
{
    vtkSmartPointer<vtkConeSource> coneSource =
    vtkSmartPointer<vtkConeSource>::New();
    coneSource->Update();

    vtkSmartPointer<vtkSTLWriter> stlWriter =
    vtkSmartPointer<vtkSTLWriter>::New();
    stlWriter->SetFileName(filename.c_str());
    stlWriter->SetInputConnection(coneSource->GetOutputPort());
    stlWriter->Write();
}

void readSTL( std::string inputFilename )
{
    vtkSmartPointer<vtkSTLReader> reader =
            vtkSmartPointer<vtkSTLReader>::New();
    reader->SetFileName( inputFilename.c_str() );
    reader->Update();

    vtkSmartPointer<vtkPolyDataMapper> mapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection( reader->GetOutputPort() );

    vtkSmartPointer<vtkActor> actor =
            vtkSmartPointer<vtkActor>::New();
    actor->GetProperty()->SetColor( 0, 1, 0 );
    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 );
    actor->SetPosition( 0 , 0, 0 );
    renderer->AddActor(actor);
    renderer->SetBackground( 0, 0, 0 ); // Background color green

    renderWindow->Render();
    renderWindowInteractor->Start();
}

int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        std::cout << "Required parameters: filename.stl" << std::endl;
        return EXIT_FAILURE;
    }

    generateSTL( argv[1] );

    readSTL( argv[1] );

    return EXIT_SUCCESS;
}

相關CMakeLists.txt為:

cmake_minimum_required(VERSION 2.8)

PROJECT(vtkLearn)

find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

add_executable(${PROJECT_NAME} main.cpp )

target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})

編譯執行:

cmake ./
make
./vtkLearn cone.stl

得到:
這裡寫圖片描述

關於vtkObject中的PrintSelf:
PrintSelf的介面是這樣的:
void PrintSelf(ostream& os, vtkIndent indent) override;
想要列印到標準輸出中,我們可以這樣:

ostream out( std::cout.rdbuf() );
renWin->PrintSelf( out, *vtkIndent::New() );
// renWin是指向vtkRenderWindow物件的指標

VTK線上學習例子:
https://lorensen.github.io/VTKExamples/site/Cxx/
涉及到向量,矩陣的時候可能自己需要寫寫筆記,常用的latex數學符號:
http://www.mohu.org/info/symbols/symbols.htm