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

亚洲杯最新消息网站后端性能优化措施

亚洲杯最新消息,网站后端性能优化措施,英文版wordpress主题,上海营销型网站seo1. 样条曲线的创建 在OpenCASCADE中,样条曲线(B样条曲线)是通过控制点来定义的。我们使用GeomAPI_PointsToBSpline类来根据给定的控制点生成B样条曲线。 TColgp_Array1OfPnt points(1, 4); points.SetValue(1, gp_Pnt(-20, -20, 0)); points…

1. 样条曲线的创建

在OpenCASCADE中,样条曲线(B样条曲线)是通过控制点来定义的。我们使用GeomAPI_PointsToBSpline类来根据给定的控制点生成B样条曲线。

TColgp_Array1OfPnt points(1, 4);
points.SetValue(1, gp_Pnt(-20, -20, 0));
points.SetValue(2, gp_Pnt(0, 30, 20));
points.SetValue(3, gp_Pnt(40, -20, 0));
points.SetValue(4, gp_Pnt(60, 30, 20));
GeomAPI_PointsToBSpline bsplineBuilder(points);
Handle(Geom_BSplineCurve) curve = bsplineBuilder.Curve();
  • TColgp_Array1OfPnt用于存储控制点。
  • GeomAPI_PointsToBSpline根据控制点生成B样条曲线。
  • curve是生成的B样条曲线对象。

2. 球体的创建

使用BRepPrimAPI_MakeSphere类创建一个球体。

BRepPrimAPI_MakeSphere makeSphere(3.0); // 半径为3
TopoDS_Shape sphere = makeSphere.Shape();
Handle(AIS_Shape) aisSphere = new AIS_Shape(sphere);
  • BRepPrimAPI_MakeSphere用于创建球体。
  • sphere是球体的形状对象。
  • aisSphere是用于显示球体的AIS_Shape对象。

3. 显示样条曲线和球体

将样条曲线和球体添加到视图中进行显示。

TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(curve);
Handle(AIS_Shape) aisCurve = new AIS_Shape(edge);
context->Display(aisCurve, Standard_True);context->Display(aisSphere, Standard_True);
  • BRepBuilderAPI_MakeEdge将曲线转换为边。
  • aisCurve是用于显示曲线的AIS_Shape对象。
  • context->Display将对象添加到视图中显示。

4. 动画的实现

动画的核心是通过不断更新球体的位置来实现的。我们通过一个循环逐步改变球体在样条曲线上的位置。

void StartAnimation() {double uStart = curve->FirstParameter();double uEnd = curve->LastParameter();double t = 0.0;const double delta = 0.01;const int delayMs = 30;while (t <= 1.0) {MSG msg;while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {if (msg.message == WM_QUIT) {return;}TranslateMessage(&msg);DispatchMessage(&msg);}double u = uStart + t * (uEnd - uStart);gp_Pnt point;curve->D0(u, point);gp_Trsf trsf;trsf.SetTranslation(gp_Vec(point.X(), point.Y(), point.Z()));aisSphere->SetLocalTransformation(trsf);context->UpdateCurrentViewer();view->Redraw();std::this_thread::sleep_for(std::chrono::milliseconds(delayMs));t += delta;}
}
  • uStartuEnd是样条曲线的参数范围。
  • t是动画的参数,从0到1逐步增加。
  • u是当前的曲线参数,根据t计算得到。
  • curve->D0(u, point)计算曲线在参数u处的点point
  • gp_Trsf用于创建平移变换,将球体移动到point位置。
  • aisSphere->SetLocalTransformation(trsf)更新球体的位置。
  • context->UpdateCurrentViewer()view->Redraw()更新视图并重绘。
  • std::this_thread::sleep_for用于控制动画的速度。

5. 按钮点击事件

按钮点击事件触发动画函数StartAnimation

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_COMMAND:if (LOWORD(wParam) == 1) { // 按钮点击事件StartAnimation();}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProcW(hwnd, msg, wParam, lParam);}return 0;
}
  • WM_COMMAND消息处理按钮点击事件。
  • LOWORD(wParam) == 1判断点击的是哪个按钮。
  • 调用StartAnimation函数开始动画。

6. 完整代码

#include <Windows.h>
#include <AIS_Shape.hxx>
#include <AIS_InteractiveContext.hxx>
#include <V3d_Viewer.hxx>
#include <V3d_View.hxx>
#include <OpenGl_GraphicDriver.hxx>
#include <WNT_Window.hxx>
#include <GeomAPI_PointsToBSpline.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <gp_Pnt.hxx>
#include <gp_Trsf.hxx>
#include <TopoDS_Edge.hxx>
#include <Geom_BSplineCurve.hxx>
#include <chrono>
#include <thread>// 全局变量,用于存储OpenCASCADE对象
Handle(AIS_Shape) aisSphere;
Handle(Geom_BSplineCurve) curve;
Handle(V3d_View) view;
Handle(AIS_InteractiveContext) context;// 创建OpenCASCADE窗口
HWND CreateOCCWindow() {HINSTANCE hInstance = GetModuleHandle(NULL);WNDCLASSW wc = { 0 };wc.style = CS_HREDRAW | CS_VREDRAW;wc.lpfnWndProc = DefWindowProcW;wc.hInstance = hInstance;wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);wc.hCursor = LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.lpszClassName = L"OCCWindowClass";RegisterClassW(&wc);HWND hwnd = CreateWindowW(L"OCCWindowClass",L"OpenCASCADE Animation",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768,NULL, NULL, hInstance, NULL);ShowWindow(hwnd, SW_SHOW);UpdateWindow(hwnd);return hwnd;
}// 动画函数
void StartAnimation() {double uStart = curve->FirstParameter();double uEnd = curve->LastParameter();double t = 0.0;const double delta = 0.01;const int delayMs = 30;while (t <= 1.0) {MSG msg;while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {if (msg.message == WM_QUIT) {return;}TranslateMessage(&msg);DispatchMessage(&msg);}double u = uStart + t * (uEnd - uStart);gp_Pnt point;curve->D0(u, point);gp_Trsf trsf;trsf.SetTranslation(gp_Vec(point.X(), point.Y(), point.Z()));aisSphere->SetLocalTransformation(trsf);context->UpdateCurrentViewer();view->Redraw();std::this_thread::sleep_for(std::chrono::milliseconds(delayMs));t += delta;}
}LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_COMMAND:if (LOWORD(wParam) == 1) { // 按钮点击事件// 调用动画函数StartAnimation();}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProcW(hwnd, msg, wParam, lParam);}return 0;
}int main() {// 创建窗口HWND hwnd = CreateOCCWindow();// 创建按钮CreateWindowW(L"BUTTON",L"Start Animation",WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,10, 10, 100, 30,hwnd,(HMENU)1,NULL,NULL);// 设置窗口过程SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (LONG_PTR)WndProc);Handle(WNT_Window) window = new WNT_Window(hwnd);// 初始化图形驱动Handle(OpenGl_GraphicDriver) graphicDriver = new OpenGl_GraphicDriver(new Aspect_DisplayConnection());// 创建ViewerHandle(V3d_Viewer) viewer = new V3d_Viewer(graphicDriver);viewer->SetDefaultLights();viewer->SetLightOn();// 创建ViewHandle(V3d_View) view_temp = viewer->CreateView();view_temp->SetWindow(window);view_temp->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD, 0.08, V3d_WIREFRAME);view_temp->SetBackgroundColor(Quantity_NOC_BLACK);view_temp->MustBeResized();view_temp->Redraw();// 创建InteractiveContextHandle(AIS_InteractiveContext) context_temp = new AIS_InteractiveContext(viewer);context_temp->SetDisplayMode(AIS_Shaded, Standard_True);// 创建样条曲线TColgp_Array1OfPnt points(1, 4);points.SetValue(1, gp_Pnt(-20, -20, 0));points.SetValue(2, gp_Pnt(0, 30, 20));points.SetValue(3, gp_Pnt(40, -20, 0));points.SetValue(4, gp_Pnt(60, 30, 20));GeomAPI_PointsToBSpline bsplineBuilder(points);Handle(Geom_BSplineCurve) curve_temp = bsplineBuilder.Curve();// 创建曲线Edge并显示TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(curve_temp);Handle(AIS_Shape) aisCurve = new AIS_Shape(edge);context_temp->Display(aisCurve, Standard_True);// 创建球体BRepPrimAPI_MakeSphere makeSphere(3.0);TopoDS_Shape sphere = makeSphere.Shape();Handle(AIS_Shape) aisSphere_temp = new AIS_Shape(sphere);context_temp->Display(aisSphere_temp, Standard_True);// 调整视图以适应内容view_temp->FitAll();// 将全局变量赋值aisSphere = aisSphere_temp;curve = curve_temp;view = view_temp;context = context_temp;// 保持窗口打开,直到用户关闭MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

http://www.dtcms.com/wzjs/828210.html

相关文章:

  • 怎样让百度收录网站seo点击工具帮你火21星热情
  • 网站如何判断做的好不好网站集约化建设存在的困难
  • 网站开发程序员需要会的技能wordpress+悬浮按钮
  • 织梦网站面包屑导航怎么做电脑制作网页用什么软件
  • 幸运28网站代理怎么做做销售网站的公司哪家最好的
  • 建设网站的十个步骤小型网站建设
  • h5网站制作平台有哪些seo裤子的关键词首页排名有哪些
  • 视频网站代言人wordpress添加到主屏幕
  • 佛山做网站哪家公司最好网络广告策划的流程顺序为
  • 免费网站建设知识个人承接网站开发
  • 商丘网站优化mvc个人网站怎么做
  • 徐汇制作网站哪家好一流的营销型网站建设
  • 在国外做盗版网站吗wordpress 工具栏遮挡
  • 网站个人信息页面布局山东银汇建设集团网站
  • 洛阳做网站公司在哪nginx即代理又做网站
  • 学网站建设 去那里WordPress实现
  • 南昌的网站推广公司做网站ui
  • 公司网站建设概述省交通建设质安监督局网站
  • 温州网站推广优化公司专业酒店设计网站建设
  • 一个网站建设需要什么短视频拍摄策划方案
  • 怎样搭建微网站wordpress 获取随机文章
  • 正邦设计招聘使用 ahrefs 进行 seo 分析
  • 网站搬家怎么做软文推广套餐
  • 深圳分销网站制作网络销售平台上市公司有哪些
  • 灯饰网站开发网站制作制作
  • 做智能家居网站需要的参考文献常州专业做网站公司
  • 手机网站定制咨询长治建一个网站大概要多少钱
  • 佛山用户网站建设wap网站开发价格
  • 可以做自媒体的网站餐饮品牌设计公司哪家好
  • 上海网站设计印刷拆除企网