[vtkusers] how can I scale a vtkActor2D?

Liang Ma leo at esit.com
Wed Nov 26 09:56:38 EST 2008


Hi Peter,



Thanks. I tried the zoom code following your advice. The result is same as 
before. If I change the value in : 
this->pvtkActor->GetPositionCoordinate()->SetValue(0.5, 0.5);

Then I can move the 2D actor to any where. But Zoom() and position2 do not 
work.



I think position2 should work on a 2D actor. Only some subclass of 2D actor 
will ignore it. So is it because VTK changed the 2D actor to one of it's sub 
class some where automatically? Thanks.



The following is my code on this part for your information.



Regards



Liang Ma




    // remove old actors
    this->pvtkRenderer->RemoveActor(this->pvtkActor);
    this->pvtkRenderer->RemoveActor(this->pvtkActor2D);

    // read new data of 3D model from a STL file
    if (!this->pvtkSTLReader)
      this->pvtkSTLReader = vtkSTLReader::New();
    this->pvtkSTLReader->SetFileName(cFileDialog.GetPathName());

 //Cut the 3D model
    m_VTKPD_data = pvtkSTLReader->GetOutput();
    m_VTKPD_data->Update();
    m_dOrigin1 = m_VTKPD_data->GetCenter();
    this->cplane->SetOrigin(m_dOrigin1[0], m_dOrigin1[1], m_dOrigin1[2]);
    float normal_x = 0;
    float normal_y = 0;
    float normal_z = 1;
    cplane->SetNormal(normal_x, normal_y, normal_z);

    planeCut->SetInput(m_VTKPD_data);
    planeCut->SetCutFunction(cplane);

// Setmapper
 this->pvtkDataSetMapper->SetInput(planeCut->GetOutput());
 this->pvtkActor->SetMapper(this->pvtkDataSetMapper);

// Try to scale the 2D actor
 this->pvtkActor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); this->pvtkActor->GetPositionCoordinate()->SetValue(0.3, 0.5); this->pvtkActor->GetPosition2Coordinate()->SetValue(0.9, 0.9); this->pvtkActor->GetProperty()->SetColor(1, 0, 0);// Add the txt of the file name    this->pvtkTextMapper->SetInput(pvtkSTLReader->GetFileName());    this->pvtkTextMapper->GetTextProperty()->SetFontSize(12);    this->pvtkActor2D->SetMapper(this->pvtkTextMapper);// Set background and add actors to render    this->pvtkRenderer->SetBackground(0.4,0.4,0.4);    this->pvtkRenderer->AddActor(this->pvtkActor);    this->pvtkRenderer->AddActor(this->pvtkActor2D);// try to zoom, then render   this->pvtkRenderer->GetActiveCamera()->Zoom(5);    this->pvtkRenderer->GetRenderWindow()->Render();----- Original Message -----From: "Peter F Bradshaw" <pfb at exadios.com>To: "VTK users" <vtkusers at vtk.org>Sent: Tuesday, November 25, 2008 8:39 PMSubject: Re: [vtkusers] how can I scale a vtkActor2D?> Hi Liang Ma;>> On Tue, 25 Nov 2008, Liang Ma wrote:>>> Dear Peter,>>>> Thank you so much for your reply. I did try  this->pvtkRenderer->Render()>> after     this->pvtkRenderer->AddActor(this->pvtkActor); It does notwork.>> I think that this may be the wrong place to call Render().>> I should have been a little clearer. The way vtkRenderer works is that> you make changes to the components of the scene (actors, camera, etc.)> and then, as the very last thing to do, to implement the change you call> Render(). This is because rendering is an expensive process.>> So, applying this to your zoom code:>> this->pvtkRenderer->GetActiveCamera()->Zoom(5);> this->pvtkRenderer->GetRenderWindow()->Render();>>>>> my pvtkActor is a vtkActor2D:>>>>   vtkActor2D            *pvtkActor2D;>>>> In fact  this->pvtkActor->GetPositionCoordinate()->SetValue(0.5, 0.5);will>> move the actor to the center. But>> this->pvtkActor->GetPosition2Coordinate()->SetValue(0.9, 0.9);  will not>> scale the actor.>>>> I searched in the archive of  vtkuser and could not fond the answer. Iread>> from the help that  vtkActor2D->GetPosition2Coordinate()->SetValuesometims>> will not work "Some 2D actor subclasses ignore the position2 variable ".But>> I do not know why. Will a vtkXYPlotActor be better? I can change the sizeof>> the font in the same program.Whould you please give me some more advices?>> Thanks again.>>>> Best regards>>>> Liang Ma>>>>>>>> ----- Original Message ----->> From: "Peter F Bradshaw" <pfb at exadios.com>>> To: "VTK Users" <vtkusers at vtk.org>>> Sent: Tuesday, November 25, 2008 11:15 AM>> Subject: Re: [vtkusers] how can I scale a vtkActor2D?>>>>>> > Hi Liang Ma;>> >>> > Are you calling this->pvtkRenderer->Render() anywhere?>> >>> > On Mon, 24 Nov 2008, Liang Ma wrote:>> >>> >> Hi all,>> >>>> >> I tried to scale a 2D actor but it doesn't work. I tried>> >> GetPosition2Coordinate() function but it doesn't work.  Also I triedto>> >> zoom the camera. It does not work either.>> >>>> >> Whould you give me some advices? Thanks.>> >>>> >> Regards>> >>>> >> Liang Ma>> >>>> >> Here is the code:>> >>>> >>   vtkActor2D   *pvtkActor;>> >>            ..........................>> >>>> >>this->pvtkActor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();>> >>  this->pvtkActor->GetPositionCoordinate()->SetValue(0.5, 0.5);  //>> >> works, could move the actor to the center>> >>  this->pvtkActor->GetPosition2Coordinate()->SetValue(0.9, 0.9); //does>> >> not work, no effect>> >>  this->pvtkActor->GetProperty()->SetColor(1, 0, 0);>> >>>> >> the code for zoom:>> >>>> >>////////////////////////////////////////////////////////////////////////>> >>         this->pvtkCamera = this->pvtkRenderer->GetActiveCamera ();>> >>         this->pvtkCamera->Zoom(5);    //     zoom doesn't work>> >>         this->pvtkRenderer->SetActiveCamera (this->pvtkCamera) ;>> >>///////////////////////////////////////////////////////////////////////////>> >>>> >>> > Cheers>> >>> Cheers>> --> Peter F Bradshaw: http://www.exadios.com (public keys avaliable there).> Personal site: http://personal.exadios.com> "I love truth, and the way the government still uses it occasionally to> keep us guessing." - Sam Kekovich.> _______________________________________________> This is the private VTK discussion list.> Please keep messages on-topic. Check the FAQ at:http://www.vtk.org/Wiki/VTK_FAQ> Follow this link to subscribe/unsubscribe:> http://www.vtk.org/mailman/listinfo/vtkusers



More information about the vtkusers mailing list