OCC复制Shape

复制代码
void occQt::makeBox()
{
    
    // 新建BOX
    TopoDS_Shape aTopoBoxA = BRepPrimAPI_MakeBox(3.0, 4.0, 5.0).Shape();
    
    //复制shape
    BRepBuilderAPI_Copy aShapeCopy;
    aShapeCopy.Perform(aTopoBoxA);
    TopoDS_Shape aTopoBoxB = aShapeCopy.Shape();
    
    //平移,防止2个BOX重叠
    gp_Trsf aTrsf;
    aTrsf.SetTranslation(gp_Vec(4.0, 0.0, 0.0));
    aTopoBoxB.Move(TopLoc_Location(aTrsf));
    
    //显示BOX
    Handle(AIS_Shape) anAisBoxA = new AIS_Shape(aTopoBoxA);
    anAisBoxA->SetColor(Quantity_NOC_AZURE);
    
    Handle(AIS_Shape) anAisBoxB = new AIS_Shape(aTopoBoxB);
    anAisBoxB->SetColor(Quantity_NOC_AZURE);
    
    myOccView->getContext()->Display(anAisBoxA, Standard_True);
    myOccView->getContext()->Display(anAisBoxB, Standard_True);
    
    //删除所有shape
    //myOccView->getContext()->RemoveAll(Standard_True);
    
}
复制代码

如果是 pcurve,需要手动处理

详见:https://dev.opencascade.org/content/how-properly-copy-topodsshape

复制代码
int CopyEdgeAndPCurve(const TopoDS_Edge& srcEdge, TopoDS_Edge& newEdge)
{
    int count = 0;
    BRepBuilderAPI_Copy copier(srcEdge);
    newEdge = TopoDS::Edge(copier.Shape());
    
    BRep_ListOfCurveRepresentation& srcCurList = (*((Handle(BRep_TEdge)*)&srcEdge.TShape()))->ChangeCurves();
    BRep_ListIteratorOfListOfCurveRepresentation srcIter(srcCurList);
    BRep_ListOfCurveRepresentation& newCurList = (*((Handle(BRep_TEdge)*)&newEdge.TShape()))->ChangeCurves();
    
    while (srcIter.More())
    {
        const Handle(BRep_CurveRepresentation)& cr = srcIter.Value();
        try
        {
            cr->PCurve();
            newCurList.Append(cr);
            ++count;
        }
        catch(...)
        {
        }
        srcIter.Next();
    }
    return count;
}
复制代码
posted @   david123102  阅读(344)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示