]> Creatis software - bbtk.git/blobdiff - packages/std/src/bbstdVectorFilterDouble.cxx
#3526 Select segments
[bbtk.git] / packages / std / src / bbstdVectorFilterDouble.cxx
index 2258e8190a78bad6cd17b7cf3ab849e0f80a5dcd..c132e918a19f4bdf67b98d34977c885849eeb50b 100644 (file)
@@ -381,9 +381,9 @@ void VectorFilterDouble::Process()
     if (bbGetInputType()==12)   // Nearest point in vector
     {
         int i;
-        int    sizeLstX    =    In0.size();   // lstX
-        int    sizeLstY    =    In1.size();   // lstY
-        int    sizeLstZ    =    In2.size();   // lstZ
+        int sizeLstX    =    In0.size();   // lstX
+        int sizeLstY    =    In1.size();   // lstY
+        int sizeLstZ    =    In2.size();   // lstZ
         std::vector<double> spc = bbGetInputk1();
         if (spc.size()>=1)
         {
@@ -432,6 +432,42 @@ void VectorFilterDouble::Process()
             Out0.push_back( sqrt( x*x +y*y +z*z ) );
         }
      } // Type 13
+    if (bbGetInputType()==14)   // Select segments
+    {
+        if ( (In0.size()==In1.size()) && (In0.size()==In2.size() ) )
+        {
+            if (bbGetInputk1().size()==0)  // not filter , just passing all segmentes
+            {
+                Out0 = In0;
+                Out1 = In1;
+                Out2 = In2;
+                Out3 = In3;
+            } else {
+                std::vector<double> k1 =bbGetInputk1();
+                int iSeg, sizeLstIndex = In3.size();
+                int iGeneral=0;
+                int i, size;
+                for (iSeg = 0; iSeg<sizeLstIndex; iSeg++)
+                {
+                    size = In3[iSeg];
+                    if (std::find(k1.begin(), k1.end(),iSeg)!=k1.end() )  // checking if element exist inside
+                    {
+                        Out3.push_back(size);
+                        for (i=0; i<size; i++)
+                        {
+                            Out0.push_back( In0[iGeneral] );
+                            Out1.push_back( In1[iGeneral] );
+                            Out2.push_back( In2[iGeneral] );
+                            iGeneral++;
+                        } // for i
+                    } else {
+                        iGeneral=iGeneral+size;
+                    }
+                } // for iSeg
+            } // if k1 not empty
+        }
+     } // Type 14
+
        bbSetOutputOut0( Out0 );
        bbSetOutputOut1( Out1 );
        bbSetOutputOut2( Out2 );