occ点云显示

发布时间 2023-06-21 14:40:06作者: jswf
    // 创建点云数据
    float sacle =1;
    const long num_points = 1000000;
    std::vector<gp_Pnt> points;
    for(int i=0;i<100;i++){
        for(int j=0;j<100;j++){
            for(int k=0;k<100;k++){
                points.push_back(gp_Pnt(i*sacle, j*sacle, k*sacle));
            }
        }
    }
    // 创建Graphic3d_ArrayOfPoints对象
    Handle(Graphic3d_ArrayOfPoints) array_of_points = new Graphic3d_ArrayOfPoints(num_points);
    for (long i = 0; i < num_points; i++) {
        const gp_Pnt& p = points[i];
        array_of_points->AddVertex(p.X(), p.Y(), p.Z());
    }
    Handle(AIS_PointCloud) ais_pointcloud = new AIS_PointCloud();
    ais_pointcloud->SetDisplayMode(Aspect_TOM_POINT);
    ais_pointcloud->SetColor(Quantity_Color(255/255,1/255,1/255,Quantity_TypeOfColor::Quantity_TOC_RGB));
    ais_pointcloud->SetPoints(array_of_points);

    Graphic3d_MaterialAspect material(Graphic3d_NOM_GOLD);
    ais_pointcloud->SetMaterial(material);

    myContext->Display(ais_pointcloud, true);
    updateView();

    QTimer* timer=new QTimer(this);
    connect(timer,&QTimer::timeout, this, [=](){
        gp_Trsf aTrsf_Translation;
        //aTrsf_Translation.SetTranslation(gp_XYZ({-0.5,0,0}));
        aTrsf_Translation.SetRotation(gp_Ax1({0,0,0},{0,0,1}),0.01);
        BRepBuilderAPI_Transform trans(bShape->Shape(),aTrsf_Translation,false);
        bShape->SetShape(trans.Shape());
  //    aShape->SetShape(cut_thread->cshape);
  //    myContext->Redisplay(aShape,true);
        myContext->Redisplay(bShape,true);
        updateView();
    });
    timer->start(10);