App::DocumentObjectExecReturn *Curvature::execute(void) { Mesh::Feature *pcFeat = dynamic_cast<Mesh::Feature*>(Source.getValue()); if(!pcFeat || pcFeat->isError()) { return new App::DocumentObjectExecReturn("No mesh object attached."); } // get all points const MeshCore::MeshKernel& rMesh = pcFeat->Mesh.getValue().getKernel(); MeshCore::MeshCurvature meshCurv(rMesh); meshCurv.ComputePerVertex(); const std::vector<MeshCore::CurvatureInfo>& curv = meshCurv.GetCurvature(); std::vector<CurvatureInfo> values; values.reserve(curv.size()); for (std::vector<MeshCore::CurvatureInfo>::const_iterator it = curv.begin(); it != curv.end(); ++it) { CurvatureInfo ci; ci.cMaxCurvDir = it->cMaxCurvDir; ci.cMinCurvDir = it->cMinCurvDir; ci.fMaxCurvature = it->fMaxCurvature; ci.fMinCurvature = it->fMinCurvature; values.push_back(ci); } CurvInfo.setValues(values); return App::DocumentObject::StdReturn; }