不用智能指针的话
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 ;