⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cylinder.cxx

📁 VTK入门样例(种类齐全)
💻 CXX
📖 第 1 页 / 共 2 页
字号:
  double dt = vtkMath::DoublePi() / 20.0;
  double t = 0.0;
  double x = 0.0;
  int nPoints = 120;
  double dx = 0.8 / nPoints;

  vtkPoints* points  = vtkPoints::New(VTK_DOUBLE);
  vtkCellArray* line = vtkCellArray::New();
  line->InsertNextCell( nPoints + 80 );

  int i = 0;
  do
    {
    points->InsertPoint( i, 0.1*cos(t), x, 0.1*sin(t) );
    line->InsertCellPoint( i );
    t += dt;
    }while( ++i < 40 );

  do
    {
    points->InsertPoint( i, 0.1*cos(t), x, 0.1*sin(t) );
    line->InsertCellPoint(i);
    t += dt;
    x += dx;
    }while( ++i < nPoints + 40 );

  do
    {
    points->InsertPoint( i, 0.1*cos(t), x, 0.1*sin(t) );
    line->InsertCellPoint( i );
    t += dt;
    }while( ++i < nPoints + 80 );

  vtkPolyData* wiggle =  vtkPolyData::New();
  wiggle->SetPoints( points );
  wiggle->SetLines( line );

  vtkTubeFilter* tube = vtkTubeFilter::New();
  tube->SetInput( wiggle );
  tube->SetGenerateTCoordsToOff();
  tube->CappingOff();
  tube->SetVaryRadiusToVaryRadiusOff();
  tube->SetRadius( 0.02 );
  tube->SetNumberOfSides( 5 );

  // part 2 is generated from vtkAnnotatedCubeActor to test
  // vtkAxesActor SetUserDefinedTip
  //
  vtkAnnotatedCubeActor* cube = vtkAnnotatedCubeActor::New();
  cube->SetXPlusFaceText ( "V" );
  cube->SetXMinusFaceText( "K" );
  cube->SetYPlusFaceText ( "T" );
  cube->SetZPlusFaceText ( "" );
  cube->SetZMinusFaceText( "" );
  cube->SetYMinusFaceText( "" );
  cube->SetFaceTextScale( 0.666667 );

  vtkPropCollection* props = vtkPropCollection::New();
  cube->GetActors( props );

  vtkAppendPolyData* append = vtkAppendPolyData::New();

  vtkTransformPolyDataFilter* transformFilter = vtkTransformPolyDataFilter::New();
  vtkTransform* transform = vtkTransform::New();
  transformFilter->SetTransform( transform );

  vtkCollectionSimpleIterator sit;
  props->InitTraversal( sit );
  int nprops = props->GetNumberOfItems();

  for ( i = 0; i < nprops; i++ )
    {
    vtkActor *node = vtkActor::SafeDownCast( props->GetNextProp( sit ) );

    // the first prop in the collection will be the cube outline, the last
    // will be the text outlines
    //
    if ( node && i == 0 || i == (nprops - 1) )
      {
      vtkPolyData* poly = vtkPolyData::SafeDownCast(node->GetMapper()->GetInput());
      if ( poly )
        {
        transformFilter->SetInput( poly );
        transform->Identity();
        transform->SetMatrix( node->GetMatrix() );
        transform->Scale( 2.0, 2.0, 2.0 );
        transformFilter->Update();

        vtkPolyData* newpoly = vtkPolyData::New();
        newpoly->DeepCopy( transformFilter->GetOutput() );
        append->AddInput( newpoly );
        newpoly->Delete();
        }
      }
    }

  // the final actor the widget will follow
  //
  vtkAxesActor* axes = vtkAxesActor::New();

  axes->SetTotalLength( 1.2, 1.2 , 1.2 );
  axes->SetUserDefinedTip( append->GetOutput() );
  axes->SetTipTypeToUserDefined();
  axes->SetNormalizedShaftLength( 0.85, 0.85, 0.85 );
  axes->SetNormalizedTipLength( 0.15, 0.15, 0.15 );
  axes->AxisLabelsOff();
  axes->SetUserDefinedShaft( tube->GetOutput() );
  axes->SetShaftTypeToUserDefined();

  vtkProperty* property = axes->GetXAxisTipProperty();
  property->SetRepresentationToWireframe();
  property->SetDiffuse(0);
  property->SetAmbient(1);
  property->SetColor( 1, 0, 1 );

  property = axes->GetYAxisTipProperty();
  property->SetRepresentationToWireframe();
  property->SetDiffuse(0);
  property->SetAmbient(1);
  property->SetColor( 1, 1, 0 );

  property = axes->GetZAxisTipProperty();
  property->SetRepresentationToWireframe();
  property->SetDiffuse(0);
  property->SetAmbient(1);
  property->SetColor( 0, 1, 1 );

  // set up the renderer, window, and interactor
  //
  vtkRenderer* renderer = vtkRenderer::New();
  renderer->SetBackground( 0.0980, 0.0980, 0.4392 );

  vtkRenderWindow* renWin = vtkRenderWindow::New();
  renWin->AddRenderer( renderer );
  renWin->SetSize( 400, 400 );

  vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
  iren->SetRenderWindow( renWin );

  renderer->AddViewProp( axes );

  // set up an interesting view
  //
  vtkCamera* camera = renderer->GetActiveCamera();
  camera->SetViewUp( 0, 0, 1 );
  camera->SetFocalPoint( 0, 0, 0 );
  camera->SetPosition( 4.5, 4.5, 2.5 );
  renderer->ResetCameraClippingRange();

  // the orientation marker passed to the widget will be composed of two
  // actors: vtkAxesActor and a vtkAnnotatedCubeActor
  //
  cube->SetFaceTextScale( 0.65 );
  property = cube->GetCubeProperty();
  property->SetColor( 0.5, 1, 1 );

  property = cube->GetTextEdgesProperty();
  property->SetLineWidth( 1 );
  property->SetDiffuse( 0 );
  property->SetAmbient( 1 );
  property->SetColor( 0.1800, 0.2800, 0.2300 );

  // this static function improves the appearance of the text edges
  // since they are overlaid on a surface rendering of the cube's faces
  //
  vtkMapper::SetResolveCoincidentTopologyToPolygonOffset();

  // just for coverage
  //
  cube->TextEdgesOff();
  cube->TextEdgesOn();
  cube->CubeOff();
  cube->CubeOn();
  cube->FaceTextOff();
  cube->FaceTextOn();

  // anatomic labelling
  //
  cube->SetXPlusFaceText ( "A" );
  cube->SetXMinusFaceText( "P" );
  cube->SetYPlusFaceText ( "L" );
  cube->SetYMinusFaceText( "R" );
  cube->SetZPlusFaceText ( "S" );
  cube->SetZMinusFaceText( "I" );

  // change the vector text colors
  //
  property = cube->GetXPlusFaceProperty();
  property->SetColor(0, 0, 1);
  property->SetInterpolationToFlat();
  property = cube->GetXMinusFaceProperty();
  property->SetColor(0, 0, 1);
  property->SetInterpolationToFlat();
  property = cube->GetYPlusFaceProperty();
  property->SetColor(0, 1, 0);
  property->SetInterpolationToFlat();
  property = cube->GetYMinusFaceProperty();
  property->SetColor(0, 1, 0);
  property->SetInterpolationToFlat();
  property = cube->GetZPlusFaceProperty();
  property->SetColor(1, 0, 0);
  property->SetInterpolationToFlat();
  property = cube->GetZMinusFaceProperty();
  property->SetColor(1, 0, 0);
  property->SetInterpolationToFlat();

  vtkAxesActor* axes2 = vtkAxesActor::New();

  // simulate a left-handed coordinate system
  //
  transform->Identity();
  transform->RotateY(90);
  axes2->SetShaftTypeToCylinder();
  axes2->SetUserTransform( transform );
  axes2->SetXAxisLabelText( "w" );
  axes2->SetYAxisLabelText( "v" );
  axes2->SetZAxisLabelText( "u" );

  axes2->SetTotalLength( 1.5, 1.5, 1.5 );
  axes2->SetCylinderRadius( 0.500 * axes2->GetCylinderRadius() );
  axes2->SetConeRadius    ( 1.025 * axes2->GetConeRadius() );
  axes2->SetSphereRadius  ( 1.500 * axes2->GetSphereRadius() );

  vtkTextProperty* tprop = axes2->GetXAxisCaptionActor2D()->
    GetCaptionTextProperty();
  tprop->ItalicOn();
  tprop->ShadowOn();
  tprop->SetFontFamilyToTimes();

  axes2->GetYAxisCaptionActor2D()->GetCaptionTextProperty()->ShallowCopy( tprop );
  axes2->GetZAxisCaptionActor2D()->GetCaptionTextProperty()->ShallowCopy( tprop );

  // combine orientation markers into one with an assembly
  //
  vtkPropAssembly* assembly = vtkPropAssembly::New();
  assembly->AddPart( axes2 );
  assembly->AddPart( cube );

  // set up the widget
  //
  vtkOrientationMarkerWidget* widget = vtkOrientationMarkerWidget::New();
  widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 );
  widget->SetOrientationMarker( assembly );
  widget->SetInteractor( iren );
  widget->SetViewport( 0.0, 0.0, 0.4, 0.4 );
  widget->SetEnabled( 1 );
  widget->InteractiveOff();
  widget->InteractiveOn();

  // recorder to play back previously events
  //
  vtkInteractorEventRecorder *recorder = vtkInteractorEventRecorder::New();
  recorder->SetInteractor(iren);
//  recorder->SetFileName("record.log");
//  recorder->SetKeyPressActivationValue('b');

  recorder->ReadFromInputStringOn();
  recorder->SetInputString(TestOMWidgetEventLog);

  iren->Initialize();
  renWin->Render();
  recorder->Play();

  // Remove the observers so we can go interactive. Without this the "-I"
  // testing option fails.
  recorder->Off();

  int retVal = vtkRegressionTestImage( renWin );
  if ( retVal == vtkRegressionTester::DO_INTERACTOR)
    {
    iren->Start();
    }

  // clean up
  //
  recorder->Off();
  recorder->Delete();
  renderer->Delete();
  renWin->Delete();
  iren->Delete();
  props->Delete();
  transformFilter->Delete();
  transform->Delete();
  points->Delete();
  line->Delete();
  wiggle->Delete();
  tube->Delete();
  append->Delete();
  axes->Delete();
  cube->Delete();
  axes2->Delete();
  assembly->Delete();
  widget->Delete();

  return !retVal;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -