设置vtkActor中心,使其绕Actor中心旋转,并通过鼠标平移

设置vtkActor中心,使其绕Actor中心旋转,并通过鼠标平移_第1张图片

 

主要代码如下:

void vtkAssemblyInteractorStyleActor::OnMouseMove()
{
    if (!m_bLBtnDown) //没有按下鼠标左键
    {
        vtkInteractorStyleTrackballActor::OnMouseMove();
        return;
    }
    
    int X = this->Interactor->GetEventPosition()[0];
    int Y = this->Interactor->GetEventPosition()[1];
    int deltX = X - m_nOldMousePosX;
    int deltY = Y - m_nOldMousePosY;
    if (abs(deltX) > 10 || abs(deltY) > 10)//第一次旋转
    {
        m_nOldMousePosX = X;
        m_nOldMousePosY = Y;
    }

    
    
    if (m_pCircleArrayXYZ[0] == m_pActor && m_pSelectedActor)//如果选择了绕X轴旋转的圆
    {
        double angle = deltY *3.6;
        m_pSelectedActor->RotateX(angle);
    }
    else if (m_pCircleArrayXYZ[1] == m_pActor && m_pSelectedActor)
    {
        double angle = deltX*3.6;
        m_pSelectedActor->RotateX(angle);
    }
    else if (m_pCircleArrayXYZ[2] == m_pActor && m_pSelectedActor)
    {
        double angle = deltX*3.6;
        m_pSelectedActor->RotateZ(angle);
    }
    else if(m_pLineArrayXYZ[0] == m_pActor && m_pSelectedActor)
    {

    }
    else if (m_pLineArrayXYZ[1] == m_pActor && m_pSelectedActor)
    {

    }
    else if (m_pLineArrayXYZ[2] == m_pActor && m_pSelectedActor)
    {

    }

    m_nOldMousePosX = X;
    m_nOldMousePosY = Y;

    this->Interactor->GetRenderWindow()->Render();
//    vtkInteractorStyleTrackballActor::OnMouseMove();
    
}
void vtkAssemblyInteractorStyleActor::OnLeftButtonDown()
{
    m_bLBtnDown = true;
 
    
    this->Interactor->GetPicker()->Pick(this->Interactor->GetEventPosition()[0],
        this->Interactor->GetEventPosition()[1],
        0,
        this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
    this->Interactor->GetPicker()->GetPickPosition(m_pickedPos);
    vtkSmartPointer picker = vtkSmartPointer::New();
    picker->SetTolerance(0.005);
    int pickNum = picker->Pick(this->Interactor->GetEventPosition()[0],
        this->Interactor->GetEventPosition()[1],
        0.0,
        this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
    
    
    if (pickNum != 0)
    {
        vtkProp3D* prop = picker->GetProp3D();
        m_pActor = prop;
        vtkActor* tempActor = vtkActor::SafeDownCast(m_pActor);
        
    }
    else
    {
        m_pActor = nullptr;
        this->Interactor->GetRenderWindow()->Render();
    }

 
    vtkInteractorStyleTrackballActor::OnLeftButtonDown();

}

完整代码恕不能上传。

你可能感兴趣的:(vtk学习)