vtk内存管理猜测

4 篇文章 0 订阅

不用智能指针的话

 

new出来的管线内容需要手动->Detele()掉 比如下面这几句代码的最后几个Delete()是可以生效的,猜测管线内部执行了深拷贝,

但是传进入被执行深拷贝的指针仍需要自己释放内存。

render中正在渲染的actor->Delete无效 可能采取方式不一样,还需要自己探索。

小白个人见解,错了的话好心人评论或私信提醒下

vtkPoints* points_cen = vtkPoints::New();
    vtkLineSource* lineSource_cen = vtkLineSource::New();
    vtkPolyDataMapper *mapper_cen = vtkPolyDataMapper::New();

    QList<CenLinePoint> cenline_points;
    double m_spacing[3];

    if (index == 0)
    {
        cenline_points = DataCenter::GetDataSource()->GetSingleData1()->GetVessel2DData()->CenterLine;
        double *mm_spacing = DataCenter::GetDataSource()->GetVTKDataVector().at(DataCenter::GetDataSource()->GetSingleData1()->m_imageid)->GetSpacing();
        m_spacing[0] = *mm_spacing;
        m_spacing[1] = *(mm_spacing + 1);
        m_spacing[2] = *(mm_spacing + 2);
    }
    else if(index == 1)
    {
        cenline_points = DataCenter::GetDataSource()->GetSingleData2()->GetVessel2DData()->CenterLine;
        double *mm_spacing = DataCenter::GetDataSource()->GetVTKDataVector().at(DataCenter::GetDataSource()->GetSingleData2()->m_imageid)->GetSpacing();
        m_spacing[0] = *mm_spacing;
        m_spacing[1] = *(mm_spacing + 1);
        m_spacing[2] = *(mm_spacing + 2);
    }

    double temp_point_left[3];
    //左轮廓
    for (int i = 0; i < cenline_points.size(); i++)
    {
        temp_point_left[0] = cenline_points.at(i).centerpoint.x *(m_spacing[0]);
        temp_point_left[1] = cenline_points.at(i).centerpoint.y *(m_spacing[1]);
        temp_point_left[2] = current_slice *(m_spacing[2]);
        points_cen->InsertNextPoint(temp_point_left);
    }
    lineSource_cen->SetPoints(points_cen);
    mapper_cen->SetInputConnection(lineSource_cen->GetOutputPort());

    actor->SetMapper(mapper_cen);
    actor->GetProperty()->SetColor(0.0, 1.0, 0.0);

    ren_window->Render();

    if (points_cen!=NULL)
    {
        points_cen->Delete();
        points_cen = NULL;
    }

    if (lineSource_cen != NULL)
    {
        lineSource_cen->Delete();
        lineSource_cen = NULL;
    }

    if (mapper_cen != NULL)
    {
        mapper_cen->Delete();
        mapper_cen = NULL;
    }
    points_cen->GetClassName();

    return ;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值