Arrow for forces

Hi,

I have a writer for a moving rod (a vtkPolyData then a vtkTubeFilter followed by a vtkPolyDataMapper and vtkPolyDataWriter).
I now have detected collision in my software and I am applying a contact force when there is a collision in my rod.
So, is there a simple way to pass a vector and its origin so that I can visualize my forces acting on the rod ? So far, it seems that vtkGlyph3D could do it but I find this very complicated …

Thanks in advance for your help!

This did the job. In case somebody will need it someday…
It creates a second file with the arrows as intended. Then I open it with Paraview to see the sequence…

  // Points
    vtkNew<vtkPoints> contactPoints;

    // Reaction force
    vtkNew<vtkDoubleArray> pointNormalsArray;
    pointNormalsArray->SetNumberOfComponents(3); // 3d normals (ie x,y,z)
    pointNormalsArray->SetNumberOfTuples(contactSet.size());

    int i=0;
    if(contactSet.size()!=0)
    {
      for(contact = contactSet.begin(); contact!=contactSet.end(); ++contact)
      {
        contact = contactSet.begin();
        double normLocalForce = repulsive(contact->_squaredDistance);
        Vec3x localForce = normLocalForce * contact->_normal;
        double s = contact->_s;
        double t = contact->_t;
        double x,y,z;
        strandsim::Vec3x contactPoint = contact->_contact *0.01;
        x = contactPoint[0]; y = contactPoint[1]; z = contactPoint[2];
        contactPoints->InsertNextPoint(x,y,z);
        double normal[3] ={ localForce[0], localForce[1], localForce[2]};
        pointNormalsArray->SetTuple(i,normal);
        i++;
      }
      vtkNew<vtkPolyData> contactPolydata;
      contactPolydata->SetPoints(contactPoints);
      contactPolydata->GetPointData()->SetNormals(pointNormalsArray);

      // Create anything you want here, we will use a cube for the demo.
      vtkNew<vtkArrowSource> arrowSource;
      arrowSource->SetTipResolution(16);
      arrowSource->SetTipLength(0.3);
      arrowSource->SetTipRadius(0.1);
      arrowSource->Update();

      vtkNew<vtkGlyph3D> glyph3D;
      glyph3D->SetSourceConnection(arrowSource->GetOutputPort());
      glyph3D->SetInputData(contactPolydata);
      glyph3D->SetVectorModeToUseNormal();
      glyph3D->SetScaleFactor(0.0001);
      glyph3D->SetColorModeToColorByVector();
      glyph3D->SetScaleModeToScaleByVector();
      glyph3D->OrientOn();
      glyph3D->Update();

      // Writer
      vtkNew<vtkPolyDataWriter> writer;
      fileName = fileName + std::to_string(numberOfFrame) + ".vtk";
      const char * fName = fileName.c_str();
      writer->SetFileName(fName);
      // writer->SetInputConnection(tube->GetOutputPort());
      writer->SetInputConnection(glyph3D->GetOutputPort());
      writer->SetFileTypeToBinary();
      writer->Write();