首页 > 其他分享 >Open CASCADE学习|自定义圆柱螺旋线

Open CASCADE学习|自定义圆柱螺旋线

时间:2024-03-30 23:29:34浏览次数:19  
标签:Real 自定义 double Standard CASCADE Geom include Open TopoDS

由《OpenCASCADE BRep Format》中可知,圆柱面的参数方程为:

通过控制圆柱面的参数空间[u,v]便可以得到任意圆柱螺旋线。

本例先根据参数生成圆柱面上的点,再把点拟合成空间曲线,从而得到螺旋线。

#include <Geom_CylindricalSurface.hxx>
#include <gp_Ax3.hxx>
#include <GeomAPI_Interpolate.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <GCE2d_MakeSegment.hxx>
​
#include <GeomAPI_PointsToBSpline.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include"Viewer.h"
TopoDS_Shape createHelix2(const Standard_Real HelixRadius, const Standard_Real HelixAngle, const Standard_Real HelixLength)
{
    Standard_Real u0 = 0.0;
    Standard_Real u1 = 2 * M_PI;
    Standard_Real v0 = 0.0;
    Standard_Real v1 = HelixLength;
    double uInter = (u1 - u0) / 1000;
    double vInter = (v1 - v0)/1000;
    TColgp_HArray1OfPnt Points(1, 1001);
    Handle(Geom_CylindricalSurface) aCylinder = new Geom_CylindricalSurface(gp::XOY(), HelixRadius);
    double u;
    double v;
    //生成点
    for (int i = 0; i < 1001; i++) {
        u = i * vInter * tan(HelixAngle) / HelixRadius;
        v = i * vInter;
        Points[i + 1] = aCylinder->Value(u,v);
    }
    //曲线拟合
    //GeomAPI_Interpolate Interp(&Points, Standard_False, Precision::Confusion());
    //Interp.Perform();
    //Standard_Boolean isFin = Interp.IsDone();
    //Handle(Geom_BSplineCurve) aBsCurve = Interp.Curve();
    //TopoDS_Edge aHelixEdge = BRepBuilderAPI_MakeEdge(aBsCurve);
​
    GeomAPI_PointsToBSpline Approx(Points);
    Handle_Geom_BSplineCurve K = Approx.Curve();
    TopoDS_Edge aHelixEdge = BRepBuilderAPI_MakeEdge(K);
​
    return aHelixEdge;
}
​
​
int main(int argc, char* argv[])
{
    Handle(Geom_CylindricalSurface) aCylinder = new Geom_CylindricalSurface(gp::XOY(), 6.0);
    TopoDS_Shape cF = BRepBuilderAPI_MakeFace(aCylinder->Cylinder(),0,2*M_PI,0,100);
    TopoDS_Shape aE = createHelix2(6.0,M_PI/4,12* M_PI);
    Viewer vout(50, 50, 500, 500);
    vout << cF;
    vout << aE;
    vout.StartMessageLoop();
    return 0;
}

标签:Real,自定义,double,Standard,CASCADE,Geom,include,Open,TopoDS
From: https://blog.csdn.net/T20151470/article/details/135984007

相关文章

  • ubuntu编译与安装 OpenSSL-1.0.0
    apt-getpurgeopensslrm-rf/etc/ssl#删除配置文件编译与安装OpenSSLprefix是安装目录,openssldir是配置文件目录,另外建议安装两次,shared作用是生成动态连接库。(需要同时指定prefix与openssldir,否则可能会因为找不到文件而报错)wgetftp://ftp.openssl.org/source/op......
  • 使用OpenEuler x86_64 实现Bouncycastle SM4加解密功能
    使用OpenEulerx86_64实现BouncycastleSM4加解密功能一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文......
  • 使用OpenEuler x86_64 实现Bouncycastle SM3哈希功能
    使用OpenEulerx86_64实现BouncycastleSM3哈希功能一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件......
  • 【BlossomRPC】如何自定义一个RPC协议?
    文章目录如何设计一个RPC协议?RPC项目配置中心项目网关项目如何设计一个RPC协议?在上面的需求描述中我们知道,RPC非常重要的一环,就是自己制定符合自己需求的通信协议,这里,我简单的列出了我的协议。publicclassRpcHeaderimplementsSerializable{//publicst......
  • Python之Opencv教程(2):图像边缘检测
    1、什么是边缘检测OpenCV中的边缘检测是一种常见的图像处理技术,用于检测图像中物体边缘的位置。常用的边缘检测算法包括Sobel算子、Scharr算子、Laplacian算子和Canny边缘检测算法等。下面将介绍使用OpenCV实现这些边缘检测算法的方法。2、边缘检测的作用边缘检测是图像......
  • 使用OpenEuler x86_64 实现Bouncycastle SM2加解密
    使用OpenEulerx86_64实现BouncycastleSM2加解密一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件用......
  • Nginx 配置,自定义日志格式 log_format
    文章目录前沿配置Nginx重点解析前沿nginx记录日志,太方便。这里提供一种小技巧。配置Nginxserver{listen8080;server_namelocalhost;location/proxy/server{default_typetext/html;return200"success";}......
  • Linux服务器安装openJdk8
    环境说明linux系统版本:lsb_release-a  不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。 .1.查看服务器是否已经安装JDK。  创建目录mkdiropenJdk8&&mkdirmaven  .2.下载JDK,版本参照自己本地的版本,至少要大于等于1.8.121 ......
  • MogDB/OpenGauss数据库中通过参数控制抓取慢sql
    MogDB/OpenGauss数据库中通过参数控制抓取慢sql本文出处:https://www.modb.pro/db/221556mogdb数据库中可以通过打开相应的参数抓取慢sql,该参数为log_min_duratuion_statement。log_min_duration_statement参数说明:当某条语句的持续时间大于或者等于特定的毫秒数时,log_min......
  • openGauss每日一练(全文检索)
    openGauss每日一练(全文检索)本文出处:https://www.modb.pro/db/224179学习目标学习openGauss全文检索openGauss提供了两种数据类型用于支持全文检索。tsvector类型表示为文本搜索优化的文件格式,tsquery类型表示文本查询课后作业1.用tsvector@@tsquery和tsquery@@......