gpt4 book ai didi

c++ - 使用 OPEN CASCADE 的表面交叉点

转载 作者:行者123 更新时间:2023-11-28 05:18:26 24 4
gpt4 key购买 nike

我对两个表面之间的交点有疑问。第一个已修剪,第二个未修剪。

我使用 BRepAlgoAPI_Section 将两个表面相交并获得相交边(在我的例子中只有一个):

这是我的代码,在这里我做了交集:

TopoDS_Face trimface, face;

BRepAlgoAPI_Section ffsect( trimface, face, Standard_True);
ffsect.Approximation(Standard_True);
ffsect.Build();

在这里,我在部分边缘之间进行迭代。我为每条边创建了一个 TopoDS_Edge 以显示在屏幕上。

Standard_Real pFirst, pLast;    

TopTools_ListOfShape edges = ffsect.SectionEdges();

TopTools_ListIteratorOfListOfShape eIter(edges);
while ( eIter.More() ) {

// For each edge I create a TopoDS_Edge object and I put it on screen
TopoDS_Edge edge = TopoDS::Edge(eIter.Value());
Handle(AIS_Shape) anAisEdge;
anAisEdge = new AIS_Shape(edge);
anAisEdge->SetColor(Quantity_NOC_RED);
anAisEdge->SetWidth(2.0);
// get my Ais_InteractiveContext
myOccView->getContext()->Display(anAisEdge);

// Create a Geom_BSplineCurve from edge
Handle(Geom_BSplineCurve) myCurve = Handle(Geom_BSplineCurve)::DownCast(BRep_Tool::Curve(edge, pFirst, pLast));

// Now create a TopoDS_Edge from my curve
TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(myCurve);
Handle(AIS_Shape) anAisEdge2;
anAisEdge2 = new AIS_Shape(edge2);
anAisEdge2->SetColor(Quantity_NOC_RED);
anAisEdge2->SetWidth(2.0);
myOccView->getContext()->Display(anAisEdge2);

eIter.Next();
}

如果我分别检查 anAisEdgeanAisEdge2 在屏幕上的显示,我会得到两个不同的结果。我不明白为什么。在上面的两个图像中,第一个显示而第二个显示在下方。

enter image description here

最佳答案

BRepBuilderAPI_MakeEdge 的 OCC 文档中类声明“如果曲线是修剪曲线,则使用基础曲线”。在这种情况下,我认为您应该直接在 BRepBuilderAPI_MakeEdge 构造函数中指定曲线所需的参数值。

关于c++ - 使用 OPEN CASCADE 的表面交叉点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com