void makeVolume(gmtl::Sphere<DATA_TYPE>& container, list pts) { const unsigned int size = extract<unsigned int>(pts.attr("__len__")()); std::vector< gmtl::Point<DATA_TYPE, 3> > pt_vec(size); for ( unsigned int i = 0; i < size; ++i ) { #if defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ == 2 gmtl::Point<DATA_TYPE, 3> temp = extract< gmtl::Point<DATA_TYPE, 3> >(pts[i]); pt_vec[i] = temp; #else pt_vec[i] = extract< gmtl::Point<DATA_TYPE, 3> >(pts[i]); #endif } gmtl::makeVolume(container, pt_vec); }
vtkDataArray * avtCylindricalRadiusExpression::DeriveVariable(vtkDataSet *in_ds, int currentDomainsIndex) { vtkIdType npts = in_ds->GetNumberOfPoints(); vtkDataArray *rv = CreateArrayFromMesh(in_ds); rv->SetNumberOfComponents(1); rv->SetNumberOfTuples(npts); // The cylindrical radius is: // norm(pt) * sin(acos(dot(pt,axis)/(norm(pt)*norm(axis)))) // avtVector ax_vec(axisVector); ax_vec.normalize(); for (vtkIdType i = 0 ; i < npts ; i++) { double pt[3]; in_ds->GetPoint(i, pt); avtVector pt_vec(pt); double pt_vec_mag = pt_vec.norm(); // dot prod of normalized vecs to get angle double dp = pt_vec * ax_vec; dp = dp / pt_vec_mag ; double ang = acos(dp); // find the orthogonal component avtVector proj = pt_vec * sin(ang); double r = proj.norm(); rv->SetComponent(i, 0, r); } return rv; }