Thank you for reply.
I hope you had a good weekend.
I am sorry for my immature use of the community, and thank you for your explanation
I’m trying to put the objects I’m going to draw in a vector called “_modelDataBindInfoVector” and draw them all at once.
// Main
AddLine(_renderData, 0, 0, -50, 20, 0, -50, 255, 0, 0);
AddTarget(_renderData, 20 ,0, -50,5, 20, 20);
// AddLine
void AddLine(std::shared_ptr<RenderData> renderData, double startX, double startY, double startZ, double vectorX, double vectorY, double vectorZ, int r, int g, int b)
{
double origin[3] = { startX, startY, startZ };
double p0[3] = { vectorX, vectorY, vectorZ };
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(origin);
points->InsertNextPoint(p0);
vtkSmartPointer<vtkPolyLine> polyLine = vtkSmartPointer<vtkPolyLine>::New();
polyLine->GetPointIds()->SetNumberOfIds(2);
for (unsigned int i = 0; i < 2; i++)
polyLine->GetPointIds()->SetId(i, i);
vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();
cells->InsertNextCell(polyLine);
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
polyData->SetPoints(points);
polyData->SetLines(cells);
vtkSmartPointer<vtkPolyDataMapper> polyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
polyDataMapper->SetInputData(polyData);
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(polyDataMapper);
actor->GetProperty()->SetColor(r, g, b);
actor->GetProperty()->SetLineWidth(2);
actor->SetPosition(0, 0, 0);
SetStippledLineTexture(actor, 0xAAAA, 1);
actor->GetProperty()->SetLineStipplePattern(0xf0f0);
_modelRenderer->AddActor(actor);
renderData->AddLine(startX, startY, startZ, vectorX, vectorY, vectorZ);
_modelDataBindInfoVector.emplace_back(std::pair<std::weak_ptr<RenderData::ObjectData>, vtkSmartPointer<vtkActor>>(renderData->GetLine(startX, startY, startZ, vectorX, vectorY, vectorZ), actor));
}
// AddTarget
void RenderBox::AddTarget(std::shared_ptr<RenderData> renderData, double centerX, double centerY, double centerZ, double radius, int phi, int theta)
{
// Target Sphere
vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetCenter(0, 0, 0);
sphereSource->SetRadius(radius);
sphereSource->SetPhiResolution(phi);
sphereSource->SetThetaResolution(theta);
// Mapper
vtkSmartPointer<vtkPolyDataMapper> polyDataMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
polyDataMapper->SetInputConnection(sphereSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(polyDataMapper);
actor->SetPosition(centerX, centerY, centerZ);
actor->GetProperty()->SetOpacity(0.3);
actor->GetProperty()->SetColor(1.0, 0, 0);
actor->GetProperty()->BackfaceCullingOn();
_modelRenderer->AddActor(actor);
// Target Sphere End
// Inner Sphere
vtkSmartPointer<vtkSphereSource> sphereSource2 = vtkSmartPointer<vtkSphereSource>::New();
sphereSource2->SetCenter(0, 0, 0);
sphereSource2->SetRadius(radius * 1.3);
sphereSource2->SetPhiResolution(phi);
sphereSource2->SetThetaResolution(theta);
// Mapper
vtkSmartPointer<vtkPolyDataMapper> polyDataMapper2 = vtkSmartPointer<vtkPolyDataMapper>::New();
polyDataMapper2->SetInputConnection(sphereSource2->GetOutputPort());
vtkSmartPointer<vtkActor> actor2 = vtkSmartPointer<vtkActor>::New();
actor2->SetMapper(polyDataMapper2);
actor2->SetPosition(centerX, centerY, centerZ);
actor2->GetProperty()->SetOpacity(0.2);
actor2->GetProperty()->BackfaceCullingOn();
_modelRenderer->AddActor(actor2);
// Inner Sphere End
// Outter Sphere
vtkSmartPointer<vtkSphereSource> sphereSource3 = vtkSmartPointer<vtkSphereSource>::New();
sphereSource3->SetCenter(0, 0, 0);
sphereSource3->SetRadius(radius * 2.0);
sphereSource3->SetPhiResolution(phi);
sphereSource3->SetThetaResolution(theta);
vtkSmartPointer<vtkPolyDataMapper> polyDataMapper3 = vtkSmartPointer<vtkPolyDataMapper>::New();
polyDataMapper3->SetInputConnection(sphereSource3->GetOutputPort());
vtkSmartPointer<vtkActor> actor3 = vtkSmartPointer<vtkActor>::New();
// actor3->SetForceOpaque(false);
actor3->SetPosition(centerX, centerY, centerZ);
actor3->SetMapper(polyDataMapper3);
actor3->GetProperty()->SetOpacity(0.1);
actor3->GetProperty()->BackfaceCullingOn();
_modelRenderer->AddActor(actor3);
// Outter Sphere End
std::array<double, 3> pos = { centerX ,centerY,centerZ };
renderData->AddTargetSphere(pos,radius);
_modelDataBindInfoVector.emplace_back(std::pair<std::weak_ptr<RenderData::ObjectData>, vtkSmartPointer<vtkActor>>(renderData->GetTargetSphere(pos)[0], actor));
_modelDataBindInfoVector.emplace_back(std::pair<std::weak_ptr<RenderData::ObjectData>, vtkSmartPointer<vtkActor>>(renderData->GetTargetSphere(pos)[1], actor2));
_modelDataBindInfoVector.emplace_back(std::pair<std::weak_ptr<RenderData::ObjectData>, vtkSmartPointer<vtkActor>>(renderData->GetTargetSphere(pos)[2], actor3));
}