SetUserMatrix vs using vtkTransformPolyDataFilter

For now I am trying to do the same only in world space with the filter, not using UserMatrix.

Look I also tried this approach , same results, wrong coordinates after calculating rotation for 2 circle blue points :

    vtkMatrix4x4*  transformMatrix = loadWorkVolumeTransform(transformFilePath);



    vtkNew<vtkConeSource> vtkConeSource;
    vtkConeSource->SetRadius(0.6);
    vtkConeSource->SetCenter(0, 0, 0);
    vtkConeSource->Update();


    double originalBounds[6] = { 0 };
    vtkConeSource->GetOutput()->GetBounds(originalBounds);



    vtkNew<vtkTransform> transform3D;
    transform3D->SetMatrix(transformMatrix);
    transform3D->Update();


    vtkNew <vtkTransformPolyDataFilter> transformFilter3D;
    transformFilter3D->SetInputData(vtkConeSource->GetOutput());
    transformFilter3D->SetTransform(transform3D);
    transformFilter3D->Update();

    appender_result->AddInputConnection(transformFilter3D->GetOutputPort());
    appender_result->Update();


    double originalMin[3] = { originalBounds[0],originalBounds[2],originalBounds[4]};
    double originalMax[3] = { originalBounds[1],originalBounds[3],originalBounds[5]};

    double center[3] = { originalMin[0]+(originalMax[0] - originalMin[0]) / 2,originalMin[1]+(originalMax[1] - originalMin[1])/2,originalMin[2]+(originalMax[2] - originalMin[2])/2 };


    vtkSmartPointer<vtkPoints> boundsPoints = vtkSmartPointer<vtkPoints>::New();
    vtkSmartPointer<vtkPolyData> boundsPolydata = vtkSmartPointer<vtkPolyData>::New();
    boundsPoints->InsertNextPoint(originalMin);
    boundsPoints->InsertNextPoint(originalMax);
    boundsPolydata->SetPoints(boundsPoints);

    vtkNew<vtkTransform> transform;
    transform->SetMatrix(transformMatrix);
    transform->Update();



    vtkTransformPolyDataFilter* transformFilter = vtkTransformPolyDataFilter::New();
    transformFilter->SetInputData(boundsPolydata);
    transformFilter->SetTransform(transform);
    transformFilter->Update();

    double transformedMin[3];
    transformFilter->GetOutput()->GetPoint(0, transformedMin);

    double transformedMax[3];
    transformFilter->GetOutput()->GetPoint(1, transformedMax);



    drawCircle1(transformedMin, color_blue);
    drawCircle1(transformedMax, color_blue);

    vtkSmartPointer<vtkPolyDataMapper> polyDataMapper_result = vtkSmartPointer<vtkPolyDataMapper>::New();
    vtkSmartPointer<vtkActor> actor_result = vtkSmartPointer<vtkActor>::New();
    actor_result->SetMapper(polyDataMapper_result);

    polyDataMapper_result->SetInputData(appender_result->GetOutput());

    drawBoundingBox(actor_result->GetBounds());
    vtkRendered->AddActor(actor_result);