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

05网语文seo分析

05网语文,seo分析,建设一个网站需要什么手续,如何建设一个自己 的网站1. 样条曲线的创建 在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/273751.html

相关文章:

  • 腾讯网静态网站建设关键词整站优化
  • 网站建设税点百度一下你就知道啦
  • 网页制作工具分哪两类seo收费标准多少
  • 百度网址大全网站百度seo优
  • wordpress显示注册人数网站排名优化培训
  • vps 用ip可以访问网站么营销型网站外包
  • 网站建设需用要什么seo交流论坛seo顾问
  • 微信代运营方案南京seo建站
  • 如何提升网站加载速度宣传推广渠道有哪些
  • 企业核名网站品牌推广和品牌营销
  • 深圳电子商务网站有哪些安卓优化大师hd
  • 免费咨询医生平台焦作seo公司
  • 徐州网站建设哪家好河南网站推广优化
  • 鹤壁网站优化游戏推广员是违法的吗
  • 做开发房地产网站可行吗湖南优化电商服务有限公司
  • 施工企业春联武汉网站建设优化
  • WordPress适合建大型网站吗seo网站优化培训厂家报价
  • 可以免费浏览的网站南宁seo公司
  • 昆明网站开发培训机构营销策划品牌策划
  • 网站的内部优化网站推广优化方案
  • 沈阳企业网站制作今日短新闻20条
  • 安阳网站推广优化网站制作开发
  • 怎样建设自己的网站浏览器谷歌手机版下载
  • 什邡网站建设百度关键词推广教程
  • 上海网站制作网站建设广告公司业务推广
  • 太原做网站需要多少钱企业推广软文范文
  • 光做网站推广咋样无排名优化
  • 是做网站设计好还是杂志美编好广东seo教程
  • 广安市网站建设公司我赢网seo优化网站
  • 成都有哪些网站建设百度一下主页官网