[vtkusers] Changing Cell Color After picking

John Biddiscombe biddisco at cscs.ch
Mon Jan 8 04:55:33 EST 2007


               
m_pvtkDataSet->GetPointData()->GetScalars()->SetTuple1(pId,1);
after doing this you need to call m_pvtkDataSet->Modified() otherwise 
nothing will update. The Modified is not called by default for 
performance reasons.

JB

> You define how the scalars are mapped (or even enabled or not) in a
> vtkMapper. There is also a scalar range you have to set to correspond to
> your data and/or what you want to see. See the numerous examples about a
> vtkMapper.
> --DS
>
> Ricardo Seco VTK wrote:
>   
>> Could you please be more specific?
>>
>> Thanks
>> Ricardo Seco
>> Dominik Szczerba escreveu:
>>     
>>> enable coloring the dataset with a scalar, set the right one
>>> --ds
>>>
>>> Ricardo Seco VTK wrote:
>>>  
>>>       
>>>> Still no results :(
>>>>
>>>> Ricardo Seco
>>>>
>>>> class vtkMyCallback : public vtkCommand
>>>> {
>>>> public:
>>>>        vtkMyCallback::vtkMyCallback() { m_pvtkActorSelection = NULL; };
>>>>        static vtkMyCallback *New() { return new vtkMyCallback; }
>>>>        void SetSelectionActor(vtkActor* pvtkActorSelection) {
>>>> m_pvtkActorSelection = pvtkActorSelection; };
>>>>        void SetSelectionList(vtkIdList* pvtkIdDeletion) {
>>>> m_pvtkIdDeletion = pvtkIdDeletion; };
>>>>        void SetSelectionDataSet(vtkPolyData* pvtkDataSet) {
>>>> m_pvtkDataSet = pvtkDataSet; };
>>>>        void SetIren(vtkRenderWindowInteractor* pvtkIren) { m_pvtkIren =
>>>> pvtkIren; };
>>>>        void SetSelectionMapper(vtkPolyDataMapper* pvtkDataMapper) {
>>>> m_pvtkDataMapper = pvtkDataMapper; };
>>>>        virtual void Execute(vtkObject *caller, unsigned long, void*)
>>>>        {
>>>>                double coords[3];
>>>>                int pId;
>>>>                float ptr;
>>>>                vtkCellPicker *picker = (vtkCellPicker
>>>> *)m_pvtkIren->GetPicker();
>>>>                picker->GetPickPosition(coords);
>>>>                // Obter o Id da cell que acabamos de fazer pickin
>>>>                pId = picker->GetCellId();
>>>>              
>>>> m_pvtkDataSet->GetPointData()->GetScalars()->SetTuple1(pId,0);
>>>> ------------------------------------------------------------
>>>>              
>>>> m_pvtkDataSet->Update();------------------------------------------------------------------------------------------------------
>>>>
>>>>
>>>>              
>>>> m_pvtkDataMapper->SetInput(m_pvtkDataSet);--------------------------------------------------------------------------------
>>>>
>>>>
>>>>                              printf("Cell ID a remover: %d \n",pId);
>>>>                // Inserção da cell na vtkIdList
>>>>                m_pvtkIdDeletion->InsertNextId(pId);
>>>>                // Caso a cell já esteja na vtkIdList ou seja NULL(-1)
>>>>                for(int k=0; k<m_pvtkIdDeletion->GetNumberOfIds(); k++)
>>>>                {
>>>>                    if ((pId) == (m_pvtkIdDeletion->GetId(k)) && (k!=0))
>>>>                    {
>>>>                        m_pvtkIdDeletion->DeleteId(pId);
>>>>                        m_pvtkIdDeletion->InsertNextId(pId);
>>>>                    }
>>>>                    if ((pId) == -1)
>>>>                        m_pvtkIdDeletion->DeleteId(pId);
>>>>                }
>>>>              
>>>> printf("-------------------------------------------------------------------------\n");
>>>>
>>>>
>>>>                printf("Numero de Cells para
>>>> remocao:%d\n",m_pvtkIdDeletion->GetNumberOfIds());
>>>>                printf("Lista de Cells para remocao:\n");
>>>>                for(int k=0; k<m_pvtkIdDeletion->GetNumberOfIds(); k++)
>>>>                    printf("Pos:%d
>>>> CellId:%d\n",k,m_pvtkIdDeletion->GetId(k));
>>>>                // Renderizar a nossa esfera de picking para a cell
>>>> seleccionada
>>>>                if (picker->GetCellId() != -1)
>>>>                {
>>>>                      if (m_pvtkActorSelection)        
>>>>                          m_pvtkActorSelection->SetPosition(coords);
>>>>                }
>>>>                m_pvtkIren->Render();
>>>>              
>>>> //m_pvtkDataSet->GetPointData()->GetScalars()->SetTuple1(pId,1);
>>>>        }
>>>> private:
>>>>        vtkActor* m_pvtkActorSelection;
>>>>        vtkIdList* m_pvtkIdDeletion;
>>>>        vtkPolyData* m_pvtkDataSet;
>>>>        vtkRenderWindowInteractor* m_pvtkIren;
>>>>        vtkPolyDataMapper* m_pvtkDataMapper;
>>>> };
>>>>
>>>>
>>>>
>>>> Dominik Szczerba escreveu:
>>>>    
>>>>         
>>>>> you may need to set/update the range in the mapper
>>>>> --ds
>>>>>
>>>>> Ricardo Seco VTK wrote:
>>>>>  
>>>>>      
>>>>>           
>>>>>> well i did after setting the tuple the update of my polydata object
>>>>>> and
>>>>>> nothing....
>>>>>> any more sugestions?
>>>>>>
>>>>>> Ricardo Seco
>>>>>>
>>>>>> Dominik Szczerba escreveu:
>>>>>>           
>>>>>>             
>>>>>>> well you have to Update() something
>>>>>>> --DS
>>>>>>>
>>>>>>> Ricardo Seco VTK wrote:
>>>>>>>  
>>>>>>>               
>>>>>>>               
>>>>>>>> Hello. I am trying to change the color of the cell after picking but
>>>>>>>> nothing happens...
>>>>>>>> Could someone help me?
>>>>>>>>
>>>>>>>> Best Regards
>>>>>>>> Ricardo Seco
>>>>>>>>
>>>>>>>> class vtkMyCallback : public vtkCommand
>>>>>>>> {
>>>>>>>> public:
>>>>>>>>        vtkMyCallback::vtkMyCallback() { m_pvtkActorSelection =
>>>>>>>> NULL; };
>>>>>>>>        static vtkMyCallback *New() { return new vtkMyCallback; }
>>>>>>>>        void SetSelectionActor(vtkActor* pvtkActorSelection) {
>>>>>>>> m_pvtkActorSelection = pvtkActorSelection; };
>>>>>>>>        void SetSelectionList(vtkIdList* pvtkIdDeletion) {
>>>>>>>> m_pvtkIdDeletion = pvtkIdDeletion; };
>>>>>>>>        void SetSelectionDataSet(vtkPolyData* pvtkDataSet) {
>>>>>>>> m_pvtkDataSet = pvtkDataSet; };
>>>>>>>>        void SetIren(vtkRenderWindowInteractor* pvtkIren) {
>>>>>>>> m_pvtkIren =
>>>>>>>> pvtkIren; };
>>>>>>>>        virtual void Execute(vtkObject *caller, unsigned long, void*)
>>>>>>>>        {
>>>>>>>>                double coords[3];
>>>>>>>>                int pId;
>>>>>>>>                float ptr;
>>>>>>>>                vtkCellPicker *picker = (vtkCellPicker
>>>>>>>> *)m_pvtkIren->GetPicker();
>>>>>>>>                picker->GetPickPosition(coords);
>>>>>>>>                // Obter o Id da cell que acabamos de fazer pickin
>>>>>>>>                pId = picker->GetCellId();
>>>>>>>>            
>>>>>>>> m_pvtkDataSet->GetPointData()->GetScalars()->SetTuple1(pId,0);--------------------------------------------------
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> HERE
>>>>>>>>                              printf("Cell ID a remover: %d \n",pId);
>>>>>>>>                // Inserção da cell na vtkIdList
>>>>>>>>                m_pvtkIdDeletion->InsertNextId(pId);
>>>>>>>>                // Caso a cell já esteja na vtkIdList ou seja
>>>>>>>> NULL(-1)
>>>>>>>>                for(int k=0; k<m_pvtkIdDeletion->GetNumberOfIds();
>>>>>>>> k++)
>>>>>>>>                {
>>>>>>>>                    if ((pId) == (m_pvtkIdDeletion->GetId(k)) &&
>>>>>>>> (k!=0))
>>>>>>>>                    {
>>>>>>>>                        m_pvtkIdDeletion->DeleteId(pId);
>>>>>>>>                        m_pvtkIdDeletion->InsertNextId(pId);
>>>>>>>>                    }
>>>>>>>>                    if ((pId) == -1)
>>>>>>>>                        m_pvtkIdDeletion->DeleteId(pId);
>>>>>>>>                }
>>>>>>>>            
>>>>>>>> printf("-------------------------------------------------------------------------\n");
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>                printf("Numero de Cells para
>>>>>>>> remocao:%d\n",m_pvtkIdDeletion->GetNumberOfIds());
>>>>>>>>                printf("Lista de Cells para remocao:\n");
>>>>>>>>                for(int k=0; k<m_pvtkIdDeletion->GetNumberOfIds();
>>>>>>>> k++)
>>>>>>>>                    printf("Pos:%d
>>>>>>>> CellId:%d\n",k,m_pvtkIdDeletion->GetId(k));
>>>>>>>>                // Renderizar a nossa esfera de picking para a cell
>>>>>>>> seleccionada
>>>>>>>>                if (picker->GetCellId() != -1)
>>>>>>>>                {
>>>>>>>>                      if (m_pvtkActorSelection)      
>>>>>>>>                          m_pvtkActorSelection->SetPosition(coords);
>>>>>>>>                }
>>>>>>>>                m_pvtkIren->Render();
>>>>>>>>            
>>>>>>>> m_pvtkDataSet->GetPointData()->GetScalars()->SetTuple1(pId,1);
>>>>>>>>        }
>>>>>>>> private:
>>>>>>>>        vtkActor* m_pvtkActorSelection;
>>>>>>>>        vtkIdList* m_pvtkIdDeletion;
>>>>>>>>        vtkPolyData* m_pvtkDataSet;
>>>>>>>>        vtkRenderWindowInteractor* m_pvtkIren;
>>>>>>>> };
>>>>>>>> _______________________________________________
>>>>>>>> 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
>>>>>>>>                         
>>>>>>>>                 
>>>>>>>                   
>>>>>>>               
>>>>>> _______________________________________________
>>>>>> 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
>>>>>>             
>>>>>>             
>>>>>         
>>>>>           
>>>> _______________________________________________
>>>> 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
>>>>     
>>>>         
>>>   
>>>       
>> _______________________________________________
>> 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
>>     
> _______________________________________________
> 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
>   


-- 
John Biddiscombe,                            email:biddisco @ cscs.ch
http://www.cscs.ch/about/BJohn.php
CSCS, Swiss National Supercomputing Centre  | Tel:  +41 (91) 610.82.07
Via Cantonale, 6928 Manno, Switzerland      | Fax:  +41 (91) 610.82.82





More information about the vtkusers mailing list