opencascade 基础

获取图形起点、终点

Standard_Real First=1, Last=2;
Handle(Geom_Curve) curve = BRep_Tool::Curve(TopoDS::Edge(shape), First, Last);
gp_Pnt Milieu = curve->Value(First);
qDebug()<< curve->Value(First).X()<< curve->Value(First).Y();
qDebug()<< curve->Value(Last).X()<< curve->Value(Last).Y();

opencascade 曲线去锯齿

mView->ChangeRenderingParams().IsAntialiasingEnabled = true
mView->ChangeRenderingParams().NbMsaaSamples = 4;

BRepClass_FaceClassifier 点和面的关系

计算线和面的关系
BRepExtrema_DistShapeShape dis = BRepExtrema_DistShapeShape((BRepBuilderAPI_MakeVertex(ResultPoint)).Shape(), occCurve);
if (((aClassifier.State() == TopAbs_State.TopAbs_ON) ||
(aClassifier.State() == TopAbs_State.TopAbs_IN)))
{
//点在面上
}

opencaccade 线面相交 求距离 求三角面片的顶点

GeomConvert

BSpline曲线、曲面拆分,Handle(Geom_Curve)转BSpline曲线

BRepExtrema_DistShapeShape

求两个TopoDS_Shape(TopoDS_Face、TopoDS_Vertex、TopoDS_Edge、TopoDS_Wire…)的最近距离,得到这个距离所对应的点【在TopoDS_Shape1上的和TopoDS_Shape2上的都可以得到】、最近距离的值、最近距离点的个数

GeomAPI_IntCS

求Geom_Curve和Geom_Surface的交点、交点,得到交点的个数和对应的交点、曲线段的条数、对应的曲线(Geom_Curve)

GeomAPI_IntSS

求Geom_Surface和Geom_Surface的交线,得到交线的条数和对应的交线

BRepAlgoAPI_Section

求TopoDS_Shape和TopoDS_Shape、Geom_Surface和TopoDS_Shape、TopoDS_Shape和gp_Pln相交后的数据,得到TopoDS_Shape【包含相交部分的数据,BRepAlgoAPI_Section继承于BRepBuilderAPI_MakeShape】

BRep_Tool

TopoDS_Face转Geom_Surface、TopoDS_Edge转Geom_Curve(转完后可以得到曲线U值范围)、TopoDS_Vertex转gp_Pnt

StlTransfer

TopoDS_Shape转StlMesh_Mesh

StlMesh_MeshExplorer

StlMesh_Mesh的遍历器、获得三角面片的三个顶点的x、y、z值

opencascade 绘制文字有两种方法

方法一 TopoDS_Shape Font_BRepTextBuilder

 //字体类型:路径
    //字体大小:大小
    //字体内容:内容
    Font_BRepFont font( "字体路径 ", size);
    Font_BRepTextBuilder aTextBuilder;
    TopoDS_Shape aTextShape = aTextBuilder.Perform(font, textStr);
    gp_Vec x(gp_Pnt(0,0,0),pnt1);
    gp_Trsf trsf;
    trsf.SetTranslation(x);
    BRepBuilderAPI_Transform transform(trsf);
    transform.Perform(aTextShape);
    TopoDS_Shape shape = transform.Shape();
    return shape;

方法二 AIS_TextLabe

TCollection_ExtendedString tostr;
Standard_CString str= "OpenCasCade 你好啊 1234";
Resource_Unicode::ConvertGBToUnicode(str,tostr);
Handle(AIS_TextLabel) aLabel = new AIS_TextLabel();
aLabel -> SetText(tostr);
aLabel -> SetColor(Quantity_NOC_RED);
aLabel -> SetFont("SimHei")
myAISContext->Display(aLabel,Standard_False);

opencascade 布尔运算

BrepAlgoAPI_Common

可求两个形状相交部分构成的的新形状
结果如图所示
在这里插入图片描述

BrepAlgoAPI_Section

求两个图形相交在一起的相交线
结果如图所示
在这里插入图片描述

BrepAlgoAPI_Cut

减法,可以从一个形状中减去另一种形状

BrepAlgoAPI_Fuse

加法,将两个图形结合成一个图形

Extrema_ExtPE1C::Perform

点到线的距离

在OpenCascade中,计算点到线的距离可以通过几种不同的方法实现。这里我们假设“线”是指三维空间中的一条曲线,例如线段或无限长的直线。

一种方法是使用Extrema_ExtPC类。这个类可以用来计算点到参数化曲线的最短距离。以下是一个使用Extrema_ExtPC计算点到线段距离的示例代码:

// 假设我们有一个点和一个线段
gp_Pnt aPoint(1.0, 2.0, 3.0);
Adaptor3d_Line aLine(gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(1.0, 1.0, 1.0)); // 构造线段

// 创建Extrema_ExtPC对象
Extrema_ExtPC anExtrema(aPoint, aLine);

// 执行计算
anExtrema.Perform();

// 检查计算是否成功,并获取最短距离
if (anExtrema.IsDone() && anExtrema.NbSolution() > 0) {
    Standard_Real distance = anExtrema.SquareDistance(1); // 获取第一个(也是唯一的)解决方案的距离
    std::cout << "The distance from the point to the line segment is: " << std::sqrt(distance) << std::endl;
} else {
    std::cout << "No solutions found." << std::endl;
}

注意

Extrema_ExtPC计算的是点到参数化曲线的距离,因此它适用于线段(有限长的直线段)而不是无限长的直线。对于无限长的直线,你可能需要使用不同的方法,例如通过计算点到直线上最近点的距离。

另一种方法是使用BRepExtrema_DistShapeShape类,它用于计算两个形状之间的最短距离。然而,这种方法通常用于计算点到线段或更复杂形状的距离,而不是点到直线的距离。

请确保你理解了OpenCascade中的曲线和形状表示,以及它们如何与你的具体应用场景相关。

opencascade 求两 物体shape 距离

BRepExtrema_DistShapeShape BRepExtrema_DistShapeShape(line1,line2);
RepExtrema_DistShapeShape.Value();

例子

// TopoDS_Shape line1 =
BRepBuilderAPI_MakeEdge(GC_MakeSegment(gp_Pnt(0,0,0),gp_Pnt(100,0,0)).
Value()) ;
// TopoDS_Shape line2 =
BRepBuilderAPI_MakeEdge(GC_MakeSegment(gp_Pnt(0,50,0),gp_Pnt(50,100,0)
).Value()) ;
// BRepExtrema_DistShapeShape
BRepExtrema_DistShapeShape(line1,line2);
// qDebug()<< BRepExtrema_DistShapeShape.Value();
// qDebug()<< BRepExtrema_DistShapeShape.NbSolution();
// gp_Pnt hhh= BRepExtrema_DistShapeShape.PointOnShape2(2);
// qDebug()<<hhh.X()<<hhh.Y();

其中 BRepExtrema_DistShapeShape.PointOnShape2(2);的(2)为第几个交点,一
个交点只能填 1,2 个填 2.
在这里插入图片描述
浮动边:不属于任何面;
自由边:只属于一个面;
共享边:属于多个面;
缝制的面:彼此共享的边缘;
缝合的边:具有彼此共享的顶点。

opencscade 测量线的长度

方法一

CPnts_AbscissaPoint::Length

方法二

GProp_Gprops pros;
BRepGrop::LinearProperties(edge,pros);
double length = pros.Mass;

创建球体

BRepPrimAPI_MakeSphere makeSphere = new BRepPrimAPI_MakeSphere(neckLocation, radius);

创建长方体、立方体

BRepPrimAPI_MakeBox

创建圆柱体

BRepPrimAPI_MakeCylinder

创建圆锥体

BRepPrimAPI_MakeCone

创建拉伸体

BRepPrimAPI_MakePrism

创建放样

BRepOffsetAPI_ThruSections

创建管状扫略体

BRepOffsetAPI_MakePipeShell

将壳/面加厚为实心

BRepOffsetAPI_MakeThickSolid

偏移平面导线

BRepOffsetAPI_MakeOffsetShap

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCASCADE是一个用于CAD (计算机辅助设计) 和CAE (计算机辅助工程) 的开源软件开发平台。它提供了一套丰富的几何建模工具和算法,被广泛应用于各种工程领域和行业。 关于OpenCASCADE的书籍,以下是一些推荐和简介: 1. 《OpenCASCADE3D建模与分析入门与实战》 这本书是OpenCASCADE入门的好选择,详细介绍了OpenCASCADE的基本工具、数据结构、几何建模和分析技术。通过实例和案例,读者可以逐步掌握OpenCASCADE的使用方法和应用技巧。 2. 《OpenCASCADE技术指南》 这本书从算法实现和原理的角度深入研究了OpenCASCADE的核心技术和结构。读者可以了解到基本几何操作、曲面和体积造型、图形渲染和模拟等方面的详细知识。 3. 《OpenCASCADE编程实战》 这本书适合已经熟悉OpenCASCADE基础知识的读者,通过实际的编程案例,帮助读者更深入地了解OpenCASCADE的编程接口和开发实践。 4. 《OpenCASCADE与CAD/CAE集成开发实践》 这本书主要介绍了如何将OpenCASCADE与其他CAD/CAE软件集成开发,如将OpenCASCADE作为CAD模块加入到自己的软件系统中。它通过案例分析和详细步骤指导,帮助读者实现自定义的CAD集成开发。 总之,OpenCASCADE书籍提供了从入门到实战的学习指南,能够满足不同读者的需求。无论是初学者还是专业开发人员,通过学习这些书籍,可以更好地掌握OpenCASCADE的使用和开发技巧,提高CAD和CAE应用的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值