当前位置: 首页 > wzjs >正文

网站自定义链接怎么做怎样退订3d卫星街景会员费用

网站自定义链接怎么做,怎样退订3d卫星街景会员费用,网站建设 总结,wordpress查看ip帐号密码文章目录 增加边框BoundingBox添加addBoundingBox添加BoundingBox控制按钮点击按钮之后的槽函数 添加坐标轴增加点线面显隐控制按钮添加控制点线面显隐的按钮到三维显示界面控制面显示槽函数控制线显示槽函数控制点显示槽函数 增加边框BoundingBox 增加边框BoundingBox并通过按…

文章目录

  • 增加边框BoundingBox
    • 添加addBoundingBox
    • 添加BoundingBox控制按钮
    • 点击按钮之后的槽函数
  • 添加坐标轴
  • 增加点线面显隐控制按钮
    • 添加控制点线面显隐的按钮到三维显示界面
    • 控制面显示槽函数
    • 控制线显示槽函数
    • 控制点显示槽函数

增加边框BoundingBox

增加边框BoundingBox并通过按钮控制显隐
需要的全局变量

    // 显示场景QVTKOpenGLWidget *m_pScene;vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow_;vtkSmartPointer<vtkRenderer> renderer_;// 边框显示vtkSmartPointer<vtkActor> boundingBoxActor_; // 用于存储BoundingBox的Actorbool isBoundingBoxVisible_;                  // 控制BoundingBox的显隐状态vtkSmartPointer<vtkTextActor> boundingBoxButtonActor_; 

添加addBoundingBox

void ThreeDimensionalDisplayPage::addBoundingBox(vtkSmartPointer<vtkPolyData> polyData)
{if (boundingBoxActor_){renderer_->RemoveActor(boundingBoxActor_);boundingBoxActor_ = nullptr;}vtkNew<vtkOutlineFilter> outlineFilter;outlineFilter->SetInputData(polyData);outlineFilter->Update();vtkNew<vtkPolyDataMapper> outlineMapper;outlineMapper->SetInputConnection(outlineFilter->GetOutputPort());boundingBoxActor_ = vtkSmartPointer<vtkActor>::New();boundingBoxActor_->SetMapper(outlineMapper);boundingBoxActor_->GetProperty()->SetColor(1.0, 0.0, 0.0);boundingBoxActor_->GetProperty()->SetLineWidth(2.0);boundingBoxActor_->SetVisibility(isBoundingBoxVisible_); // 根据状态决定是否显示renderer_->AddActor(boundingBoxActor_);
}

添加BoundingBox控制按钮

void ThreeDimensionalDisplayPage::addBoundingBoxControlButton()
{// 避免重复添加if (boundingBoxButtonActor_ && renderer_->HasViewProp(boundingBoxButtonActor_))return;vtkNew<vtkTextActor> textActor;textActor->SetInput("Hide Bounding Box");vtkTextProperty *textProp = textActor->GetTextProperty();textProp->SetFontSize(24);textProp->SetColor(0.0, 0.0, 0.0);           // 黑色文字textProp->SetBackgroundColor(0.8, 0.8, 0.8); // 灰色背景textProp->SetBackgroundOpacity(1.0);textProp->SetFrame(1);textProp->SetFrameColor(0.0, 0.0, 0.0);textActor->SetDisplayPosition(10, 10);renderer_->AddActor2D(textActor);boundingBoxButtonActor_ = textActor;// 注册鼠标点击事件(只注册一次)static bool observerAdded = false;if (!observerAdded){vtkNew<vtkCallbackCommand> clickCallback;clickCallback->SetClientData(this);clickCallback->SetCallback([](vtkObject *caller, unsigned long, void *clientData, void *){auto *self = static_cast<ThreeDimensionalDisplayPage *>(clientData);int *clickPos = static_cast<vtkRenderWindowInteractor *>(caller)->GetEventPosition();int x = clickPos[0];int y = clickPos[1];// 判断是否点击在按钮上(近似判断)int *pos = self->boundingBoxButtonActor_->GetPositionCoordinate()->GetComputedDisplayValue(self->renderer_);int btnX = pos[0];int btnY = pos[1];int width = 220, height = 40;if (x >= btnX && x <= btnX + width &&y >= btnY && y <= btnY + height){self->OnBoundingBoxButtonClicked();} });interactor_->AddObserver(vtkCommand::LeftButtonPressEvent, clickCallback);observerAdded = true;}isBoundingBoxVisible_ = true;
}

点击按钮之后的槽函数


void ThreeDimensionalDisplayPage::OnBoundingBoxButtonClicked()
{if (!boundingBoxActor_)return;isBoundingBoxVisible_ = !isBoundingBoxVisible_;boundingBoxActor_->SetVisibility(isBoundingBoxVisible_);if (boundingBoxButtonActor_){boundingBoxButtonActor_->SetInput(isBoundingBoxVisible_ ? "Hide Bounding Box" : "Show Bounding Box");}renderWindow_->Render();
}

添加坐标轴

需要的全局变量,防止重复创建

    // 坐标轴显示vtkSmartPointer<vtkAxesActor> axes_;vtkSmartPointer<vtkOrientationMarkerWidget> marker_;

创建坐标轴

void ThreeDimensionalDisplayPage::addCoordinateAxes()
{if (!axes_)axes_ = vtkSmartPointer<vtkAxesActor>::New();axes_->SetTotalLength(10.0, 10.0, 10.0);if (!marker_)marker_ = vtkSmartPointer<vtkOrientationMarkerWidget>::New();marker_->SetOrientationMarker(axes_);marker_->SetOutlineColor(0.9300, 0.5700, 0.1300);marker_->SetInteractor(m_pScene->GetInteractor());marker_->SetDefaultRenderer(renderer_);marker_->SetViewport(0.8, 0.0, 1.0, 0.2);marker_->SetEnabled(1);marker_->InteractiveOn();
}

增加点线面显隐控制按钮

需要的全局变量,防止重复创建

    // 添加控制点线面显隐的按钮到三维显示界面void addObjVisibilityControlButtons();// 控制面显示槽函数void toggleSurfaceVisibility();// 控制线显示槽函数void toggleWireframeVisibility();// 控制点显示槽函数void togglePointsVisibility();// 控制obj点线面的显隐vtkSmartPointer<vtkActor> surfaceActor_;vtkSmartPointer<vtkActor> wireframeActor_;vtkSmartPointer<vtkActor> pointsActor_;// 控制obj点线面显隐的按钮vtkSmartPointer<vtkTextActor> surfaceToggleButton_;vtkSmartPointer<vtkTextActor> wireframeToggleButton_;vtkSmartPointer<vtkTextActor> pointsToggleButton_;

添加控制点线面显隐的按钮到三维显示界面

void ThreeDimensionalDisplayPage::addObjVisibilityControlButtons()
{// 如果已经创建过按钮,则直接重新添加到 renderer_if (surfaceToggleButton_){surfaceToggleButton_->SetInput("Hide Surface");wireframeToggleButton_->SetInput("Hide Wireframe");pointsToggleButton_->SetInput("Hide Points");renderer_->AddActor2D(surfaceToggleButton_);renderer_->AddActor2D(wireframeToggleButton_);renderer_->AddActor2D(pointsToggleButton_);return;}// 按钮文字及初始状态std::vector<std::pair<std::string, vtkSmartPointer<vtkTextActor> *>> buttons = {{"Hide Surface", &surfaceToggleButton_},{"Hide Wireframe", &wireframeToggleButton_},{"Hide Points", &pointsToggleButton_}};int startY = 60; // 初始 Y 位置for (auto &[text, actorPtr] : buttons){auto textActor = vtkSmartPointer<vtkTextActor>::New();textActor->SetInput(text.c_str());auto *textProp = textActor->GetTextProperty();textProp->SetFontSize(20);textProp->SetColor(0.0, 0.0, 0.0);textProp->SetBackgroundColor(0.9, 0.9, 0.9);textProp->SetBackgroundOpacity(1.0);textProp->SetFrame(1);textProp->SetFrameColor(0.0, 0.0, 0.0);textActor->SetDisplayPosition(10, startY);renderer_->AddActor2D(textActor);*actorPtr = textActor;startY += 50; // 下一个按钮向下偏移}// 注册鼠标事件(只注册一次)static bool observerAdded = false;if (!observerAdded){vtkNew<vtkCallbackCommand> clickCallback;clickCallback->SetClientData(this);clickCallback->SetCallback([](vtkObject *caller, unsigned long, void *clientData, void *){auto* self = static_cast<ThreeDimensionalDisplayPage*>(clientData);int* clickPos = static_cast<vtkRenderWindowInteractor*>(caller)->GetEventPosition();int x = clickPos[0];int y = clickPos[1];std::vector<std::pair<vtkSmartPointer<vtkTextActor>, std::function<void()>>> buttons = {{self->surfaceToggleButton_, [&]() { self->toggleSurfaceVisibility(); }},{self->wireframeToggleButton_, [&]() { self->toggleWireframeVisibility(); }},{self->pointsToggleButton_, [&]() { self->togglePointsVisibility(); }}};for (auto& [actor, func] : buttons){int* pos = actor->GetPositionCoordinate()->GetComputedDisplayValue(self->renderer_);int bx = pos[0];int by = pos[1];int width = 200, height = 40;if (x >= bx && x <= bx + width &&y >= by && y <= by + height){func();break;}} });interactor_->AddObserver(vtkCommand::LeftButtonPressEvent, clickCallback);observerAdded = true;}
}

控制面显示槽函数


void ThreeDimensionalDisplayPage::toggleSurfaceVisibility()
{if (surfaceActor_){bool visible = surfaceActor_->GetVisibility();surfaceActor_->SetVisibility(!visible);if (surfaceToggleButton_)surfaceToggleButton_->SetInput(visible ? "Show Surface" : "Hide Surface");renderWindow_->Render();}
}

控制线显示槽函数

void ThreeDimensionalDisplayPage::toggleWireframeVisibility()
{if (wireframeActor_){bool visible = wireframeActor_->GetVisibility();wireframeActor_->SetVisibility(!visible);if (wireframeToggleButton_)wireframeToggleButton_->SetInput(visible ? "Show Wireframe" : "Hide Wireframe");renderWindow_->Render();}
}

控制点显示槽函数


void ThreeDimensionalDisplayPage::togglePointsVisibility()
{if (pointsActor_){bool visible = pointsActor_->GetVisibility();pointsActor_->SetVisibility(!visible);if (pointsToggleButton_)pointsToggleButton_->SetInput(visible ? "Show Points" : "Hide Points");renderWindow_->Render();}
}

也可以使用qpushbutton进行控制,逻辑更加简单,不需要场景里添加按钮了,创建按钮后直接连接toggleSurfaceVisibility即可。


文章转载自:

http://B120uaQu.ysbhj.cn
http://ZSvbYHjm.ysbhj.cn
http://faum0Tf0.ysbhj.cn
http://r4e1Gsc3.ysbhj.cn
http://eyAdOYQG.ysbhj.cn
http://6MKt69iw.ysbhj.cn
http://lyewOgkT.ysbhj.cn
http://Pi1NOWef.ysbhj.cn
http://eTFCEOSa.ysbhj.cn
http://ykVq0NmO.ysbhj.cn
http://g8rOq9oA.ysbhj.cn
http://9RidULPR.ysbhj.cn
http://lFC6oAgy.ysbhj.cn
http://ZlAuovoU.ysbhj.cn
http://CLvM3oP9.ysbhj.cn
http://4UpHSnu0.ysbhj.cn
http://DeXadueu.ysbhj.cn
http://vE574KnY.ysbhj.cn
http://ML6QbN9J.ysbhj.cn
http://IRdZwkb2.ysbhj.cn
http://f7sCqSch.ysbhj.cn
http://U6DKhGRl.ysbhj.cn
http://mZvpHjGz.ysbhj.cn
http://MYNDPIyZ.ysbhj.cn
http://mlWAlFcu.ysbhj.cn
http://k5QzPFQe.ysbhj.cn
http://lqX0Fc2G.ysbhj.cn
http://7AB7seYh.ysbhj.cn
http://ReAF3RMH.ysbhj.cn
http://skDQc8IH.ysbhj.cn
http://www.dtcms.com/wzjs/639144.html

相关文章:

  • 网站系统发生错误装饰公司网络营销
  • 哪个网站有淘宝做图的素材做app和网站怎样
  • 上海专业网站建设报宁波网络推广教程
  • 网站 简约漯河网做网站
  • 网站建设丶金手指下拉13江门推广平台排行榜
  • 住建设部官方网站工作招聘58同城
  • 南昌定制网站公司网站软件下载
  • html网站模板免费seo优化总结
  • 58同城网站建设如何创建微信公众号要钱吗
  • 用户体验的互动展示网站影视广告网站
  • 商城网站开发教程多媒体网站开发实验报告
  • 网站正在建设中英语怎么说中国排名第一的游戏
  • 17年哪个网站做h5最好含山微信搭建网站建设
  • ps在线网站西安市建设工程
  • 手机做任务网站有哪些内容wordpress加载特效
  • 买网站多少钱南通做网站的
  • 十堰网站制作价格厦门seo关键词优化
  • 网站建设和商城有什么好处赣州网站建设费用
  • 网站上怎么做弹幕效果深圳优化公司高粱seo较
  • 电商网站开发需要掌握哪些知识技能深圳网络公司招聘
  • iis 网站无法访问手机网站 php
  • 做的好看的国内网站欣赏发布网页
  • 代做一个网站多少钱复古网站设计
  • 石家庄网站快速备案wordpress结合cms
  • 怎么创造一个网站做外卖有哪些网站
  • 设计和建设一个网站要多少钱wordpress 门户主题
  • 网站建设怎样布局环保h5微网站
  • 网站一起做网店制作微信小程序步骤
  • 深圳网站建设公司专业正确的网址格式输入
  • 网站做任务佣金石家庄制作网站推广