程序示例精选
VS+C++VTK-VCG三维网格模型鼠标框选拉普拉斯局部平滑
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
前言
这篇博客针对《VS+C++VTK-VCG三维网格模型鼠标框选拉普拉斯局部平滑》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
文章目录
一、所需工具软件
 二、使用步骤
        1. 主要代码
        2. 运行结果
 三、在线协助
 
一、所需工具软件
       1. Visual Studio
        2. C++, VTK, VCG
二、使用步骤
代码如下(示例):
#include <vtkSTLReader.h>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
#include "vtkDICOMImageReader.h"
#include "vtkFixedPointVolumeRayCastMapper.h"
#include "vtkColorTransferFunction.h"
#include "vtkPiecewiseFunction.h"
#include "vtkVolumeProperty.h"
#include "vtkVolume.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkImageMapToColors.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkCutter.h"
#include "vtkPlane.h"
#include "vtkImageActor.h"
#include "vtkImageData.h"
#include "vtkImageCast.h"
#include "vtkPointData.h"
#include "vtkImageShiftScale.h"
#include "vtkPolyDataToImageStencil.h"
#include "vtkImageStencil.h"
#include "vtkLookupTable.h"
#include "vtkImagePlaneWidget.h"
#include "vtkCellArray.h"
#include "vtkType.h"
#include "vtkPlaneWidget.h"
using namespace vcg;
using namespace std;
class MyFace;
class MyVertex;
struct MyUsedTypes : public UsedTypes<Use<MyVertex>::AsVertexType, Use<MyFace>::AsFaceType> {};
class MyVertex : public Vertex<MyUsedTypes, vertex::VFAdj, vertex::Coord3f, vertex::Normal3f, vertex::BitFlags> {};
class MyFace : public Face<MyUsedTypes, face::VFAdj, face::Normal3f, face::VertexRef, face::BitFlags> {};
class MyMesh : public vcg::tri::TriMesh<vector<MyVertex>, vector<MyFace>> {};
// 加载选定的点的函数
void LoadSelectedPoints(const string& filename, vector<Point3f>& selectedPoints) {
    ifstream file(filename);
    if (!file.is_open()) {
        cerr << "Could not open the file: " << filename << endl;
        return;
    }
    string line;
    while (getline(file, line)) {
        stringstream ss(line);
        float x, y, z;
        if (ss >> x >> y >> z) { // 读取 x, y, z 坐标
            selectedPoints.emplace_back(x, y, z);
        }
    }
    file.close();
}
// 文件复制函数
bool CopyFile(const std::string& source, const std::string& destination)
{
    std::ifstream src(source, std::ios::binary);
    std::ofstream dest(destination, std::ios::binary);
    if (!src || !dest) {
        std::cerr << "文件复制失败:" << source << " 到 " << destination << std::endl;
        return false;
    }
    dest << src.rdbuf();
    return true;
}
int main(int, char* [])
{
    /*MyMesh m;*/
    int mask;
    if (tri::io::ImporterSTL<MyMesh>::Open(m, "eros.stl", mask) != tri::io::Importer<MyMesh>::E_NOERROR) {
        std::cerr << "Error while opening the file" << std::endl;
        return 0;
    )
    vtkNew<vtkNamedColors> colors;
    //vtkNew<vtkPointSource> pointSource;
    //pointSource->SetNumberOfPoints(20);
    //pointSource->Update();
    // 代码中的适当位置加入以下内容
    std::string originalFilename = "eros.stl";
    std::string tempFilename = "customer_model_1temp.stl";
    // 复制文件
    if (!CopyFile(originalFilename, tempFilename)) {
        std::cerr << "复制文件失败,请检查文件路径。" << std::endl;
        return 0;
    }
    std::string inputFilename = "customer_model_1temp.stl";
    vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
    reader->SetFileName(inputFilename.c_str());
    reader->Update();
    vtkNew<vtkIdFilter> idFilter;
    idFilter->SetInputConnection(reader->GetOutputPort());
#if VTK890
    idFilter->SetCellIdsArrayName("OriginalIds");
    idFilter->SetPointIdsArrayName("OriginalIds");
#else
    idFilter->SetIdsArrayName("OriginalIds");
#endif
    idFilter->Update();
    vtkNew<vtkDataSetSurfaceFilter> surfaceFilter;
    surfaceFilter->SetInputConnection(idFilter->GetOutputPort());
    surfaceFilter->Update();
    vtkPolyData* input = surfaceFilter->GetOutput();
    // Create a mapper and actor
    vtkNew<vtkPolyDataMapper> mapper;
    mapper->SetInputData(input);
    mapper->ScalarVisibilityOff();
    vtkNew<vtkActor> actor;
    actor->SetMapper(mapper);
    actor->GetProperty()->SetPointSize(3);
    //actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData());
    actor->GetProperty()->SetColor(0.60784313725, 0.60784313725, 0.60784313725);
    actor->GetProperty()->SetEdgeColor(0, 0, 1); // 设置边缘颜色为蓝色
    actor->GetProperty()->SetEdgeVisibility(1);
    // Visualize
    vtkNew<vtkRenderer> renderer;
    vtkNew<vtkRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("HighlightSelectedPoints");
    vtkNew<vtkAreaPicker> areaPicker;
    vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
    renderWindowInteractor->SetPicker(areaPicker);
    renderWindowInteractor->SetRenderWindow(renderWindow);
    renderer->AddActor(actor);
    renderer->SetBackground(colors->GetColor3d("Black").GetData());
    renderWindow->Render();
    vtkNew<InteractorStyle> style;
    style->SetPoints(input);
    renderWindowInteractor->SetInteractorStyle(style);
    renderWindowInteractor->Start();
    return EXIT_SUCCESS;
}
 
运行结果
平滑之前
 
 平滑之后
 
三、在线协助:
如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作
当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
 个人博客主页:https://blog.csdn.net/alicema1111?type=blog
 博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog
 
博主推荐:
 Python人脸识别考勤打卡系统:
 https://blog.csdn.net/alicema1111/article/details/133434445
 Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
 Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
 Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
 Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
 Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
 Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445
 Python+Yolov5道路障碍物识别:https://blog.csdn.net/alicema1111/article/details/129589741
 Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别:https://blog.csdn.net/alicema1111/article/details/129272048

















