From 5ac63f4db1368c03629c86d44d4b7a5bbf7a7c57 Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Mon, 27 Dec 2021 11:58:48 +0100 Subject: [PATCH] #3482 Transform box Rotation from Normal --- packages/vtk/src/bbvtkTransform.cxx | 22 ++++++++++++++++++++-- packages/vtk/src/bbvtkTransform.h | 2 ++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/vtk/src/bbvtkTransform.cxx b/packages/vtk/src/bbvtkTransform.cxx index 1c6b335..c935a0d 100644 --- a/packages/vtk/src/bbvtkTransform.cxx +++ b/packages/vtk/src/bbvtkTransform.cxx @@ -27,6 +27,7 @@ #include "bbvtkTransform.h" #include "bbvtkPackage.h" +#include "vtkMath.h" namespace bbvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(vtk,Transform); @@ -58,8 +59,8 @@ namespace bbvtk vecSpacing.push_back(1); //spacing y vecSpacing.push_back(1); //spacing z bbSetInputSpacing(vecSpacing); - - result = NULL; + + result = NULL; } // -------------------------------------------------------------- @@ -107,6 +108,23 @@ namespace bbvtk result->RotateWXYZ(bbGetInputRotateWXYZ()[0],bbGetInputRotateWXYZ()[1], bbGetInputRotateWXYZ()[2], bbGetInputRotateWXYZ()[3]); } // if rotation size >=4 + if (bbGetInputRotateToNormal().size()>=3) + { + double v1[3],v2[3],v3[3]; + v1[0] = 0; + v1[1] = 0; + v1[2] = 1; + v2[0] = bbGetInputRotateToNormal()[0]; + v2[1] = bbGetInputRotateToNormal()[1]; + v2[2] = bbGetInputRotateToNormal()[2]; + vtkMath *vtkmath = vtkMath::New(); + double ang = acos ( vtkmath->Dot(v1,v2) ); + ang = vtkmath->DegreesFromRadians( ang ); + vtkmath->Cross( v1,v2,v3 ); + vtkmath->Delete(); + result->RotateWXYZ( ang , v3[0], v3[1], v3[2] ); + } // if rotation size >=4 + if (bbGetInputInverse()==false) { bbSetOutputOut(result); diff --git a/packages/vtk/src/bbvtkTransform.h b/packages/vtk/src/bbvtkTransform.h index 618b0d3..ebe2e75 100644 --- a/packages/vtk/src/bbvtkTransform.h +++ b/packages/vtk/src/bbvtkTransform.h @@ -47,6 +47,7 @@ namespace bbvtk BBTK_DECLARE_INPUT(RotateWXYZ,std::vector); BBTK_DECLARE_INPUT(Translate,std::vector); BBTK_DECLARE_INPUT(Spacing,std::vector); + BBTK_DECLARE_INPUT(RotateToNormal,std::vector); BBTK_DECLARE_OUTPUT(Out,vtkLinearTransform *); BBTK_PROCESS(Process); void Process(); @@ -71,6 +72,7 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(Transform,bbtk::AtomicBlackBox); BBTK_INPUT(Transform,Translate,"vector with x y z",std::vector,""); BBTK_INPUT(Transform,Spacing,"vector with spacingX spacingY spacingZ",std::vector,""); BBTK_INPUT(Transform,RotateWXYZ,"vector with Angle Vx Vy Vz",std::vector,""); + BBTK_INPUT(Transform,RotateToNormal,"(default is EMPTY) Normal vector [nx,ny,nz]",std::vector,""); BBTK_OUTPUT(Transform,Out,"vtkTransform result",vtkLinearTransform *,""); -- 2.45.1