int main() { // Sample Program to explain all Functionalities // First Step: Set paths to all key files generated by script using .obj Mesh std::string pathCoordinates = "D:\\GSOC-Kinect\\Characters\\GirlTest\\LabelFileGeneration\\GirlOne_BrokenMesh.coords"; std::string pathLabels = "D:\\GSOC-Kinect\\Characters\\GirlTest\\LabelFileGeneration\\GirlOne_BrokenMesh.labels"; std::string pathFaces = "D:\\GSOC-Kinect\\Characters\\GirlTest\\LabelFileGeneration\\GirlOne_UnbrokenMesh.faces"; // Set path to the mapping file std::string pathMapping = "C:\\Work\\src\\Labelling\\Dependencies\\Mapping.reduce"; // Create a Mesh from the .obj file Mesh aMesh(pathCoordinates,pathFaces,pathLabels); // Remap Mesh to get labelling of vertices of your choice aMesh.remapMesh(pathMapping); // fix knees to make the labelling cylinderical rather then on the front only aMesh.fixJoint("Left-Knee","Y"); aMesh.fixJoint("Right-Knee","Y"); // adding missing joint this way aMesh.addJoint("Left-Arm-Upper","Left-Arm-Lower",0.1,"Left-Elbow"); aMesh.addJoint("Right-Arm-Upper","Right-Arm-Lower",0.1,"Right-Elbow"); // adding another joint that i need for completing my representation aMesh.addJoint("Left-Arm-Lower","Left-Hand",0.1,"Left-Wrist"); aMesh.addJoint("Right-Arm-Lower","Right-Hand",0.1,"Right-Wrist"); // now referring to the files generated by the mhx file // set paths for these files std::string pathCoordinatesMHX = "D:\\GSOC-Kinect\\Characters\\GirlTest\\Mesh\\GirlOne_MHX_Mesh.coords"; std::string pathFacesMHX = "D:\\GSOC-Kinect\\Characters\\GirlTest\\Mesh\\GirlOne_MHX_Mesh.faces"; // creating an mhx mesh Mesh mhxMesh(pathCoordinatesMHX,pathFacesMHX,""); // obtaining the labels and coordinates for the .obj mesh std::vector< std::vector<float> > externalMeshCoordinates = aMesh.getCoordinates(); std::vector<std::string> externalMeshLabels = aMesh.getLabels(); // obtbaining labelling for the mhx mesh based on the labelling for the obj mesh mhxMesh.loadLabels(externalMeshCoordinates,externalMeshLabels); // execution complete system("PAUSE"); }
int ExtendMesh2Rectangle::compute() { coDoPolygons *inMesh = dynamic_cast<coDoPolygons *>(p_in_geometry_->getCurrentObject()); if (!(inMesh && inMesh->objectOk())) { std::string errorText = "Input object at port '"; errorText += p_in_geometry_->getName(); errorText += "not available or not ok."; Covise::sendError(errorText.c_str()); return STOP_PIPELINE; } xSize_ = para_xSize_->getValue(); ySize_ = para_ySize_->getValue(); radius_ = para_radius_->getValue(); GeometryUtils::Covise2dMeshWrapper aMesh(inMesh); if (featureRadiusEnabled()) GeometryUtils::extendToQuarterCircleOfRadius(radius_, aMesh); GeometryUtils::extendToQuarterRectangle(xSize_, ySize_, aMesh); coDoPolygons *polygons_out = new coDoPolygons( p_out_geometry_->getObjName(), aMesh.x.size(), aMesh.corners.size(), aMesh.elements.size()); if (!(polygons_out and polygons_out->objectOk())) { std::string errorText = "Object for port '"; errorText += p_out_geometry_->getName(); errorText += "' can't be created."; Covise::sendError(errorText.c_str()); return STOP_PIPELINE; } { float *u_out; float *v_out; float *w_out; int *vl; int *pl; polygons_out->getAddresses(&u_out, &v_out, &w_out, &vl, &pl); std::copy(aMesh.x.begin(), aMesh.x.end(), u_out); std::copy(aMesh.y.begin(), aMesh.y.end(), v_out); std::copy(aMesh.z.begin(), aMesh.z.end(), w_out); std::copy(aMesh.corners.begin(), aMesh.corners.end(), vl); std::copy(aMesh.elements.begin(), aMesh.elements.end(), pl); p_out_geometry_->setCurrentObject(polygons_out); } return SUCCESS; }
freeSurface::freeSurface ( dynamicFvMesh& m, const volScalarField& rho, volVectorField& Ub, volScalarField& Pb, const surfaceScalarField& sfPhi ) : IOdictionary ( IOobject ( "freeSurfaceProperties", Ub.mesh().time().constant(), Ub.mesh(), IOobject::MUST_READ, IOobject::NO_WRITE ) ), mesh_(m), rho_(rho), U_(Ub), p_(Pb), phi_(sfPhi), curTimeIndex_(Ub.mesh().time().timeIndex()), twoFluids_ ( this->lookup("twoFluids") ), normalMotionDir_ ( this->lookup("normalMotionDir") ), motionDir_(0, 0, 0), cleanInterface_ ( this->lookup("cleanInterface") ), aPatchID_(-1), bPatchID_(-1), muFluidA_ ( this->lookup("muFluidA") ), muFluidB_ ( this->lookup("muFluidB") ), rhoFluidA_ ( this->lookup("rhoFluidA") ), rhoFluidB_ ( this->lookup("rhoFluidB") ), g_(this->lookup("g")), cleanInterfaceSurfTension_ ( this->lookup("surfaceTension") ), fixedFreeSurfacePatches_ ( this->lookup("fixedFreeSurfacePatches") ), pointNormalsCorrectionPatches_ ( this->lookup("pointNormalsCorrectionPatches") ), nFreeSurfCorr_ ( readInt(this->lookup("nFreeSurfaceCorrectors")) ), smoothing_(false), interpolatorABPtr_(NULL), interpolatorBAPtr_(NULL), controlPointsPtr_(NULL), motionPointsMaskPtr_(NULL), pointsDisplacementDirPtr_(NULL), facesDisplacementDirPtr_(NULL), totalDisplacementPtr_(NULL), aMeshPtr_(NULL), UsPtr_(NULL), phisPtr_(NULL), surfactConcPtr_(NULL), surfaceTensionPtr_(NULL), surfactantPtr_(NULL), fluidIndicatorPtr_(NULL) { //Read motion direction if (!normalMotionDir_) { motionDir_ = vector(this->lookup("motionDir")); motionDir_ /= mag(motionDir_) + SMALL; } // Set point normal correction patches boolList& correction = aMesh().correctPatchPointNormals(); forAll(pointNormalsCorrectionPatches_, patchI) { word patchName = pointNormalsCorrectionPatches_[patchI]; label patchID = aMesh().boundary().findPatchID(patchName); if(patchID == -1) { FatalErrorIn ( "freeSurface::freeSurface(...)" ) << "Patch name for point normals correction does not exist" << abort(FatalError); } correction[patchID] = true; }
int BorderEdges::compute() { coDoPolygons *inMesh = dynamic_cast<coDoPolygons *>(p_in_geometry_->getCurrentObject()); if (!(inMesh && inMesh->objectOk())) { std::string errorText = "Input object at port '"; errorText += p_in_geometry_->getName(); errorText += "not available or not ok."; Covise::sendError(errorText.c_str()); return STOP_PIPELINE; } // determine border GeometryUtils::Covise2dMeshWrapper aMesh(inMesh); vector<int> numberOfVerticesPerElement; // for satisfy the interface aMesh.calculateNumberOfVerticesPerElement(numberOfVerticesPerElement); vector<GeometryUtils::Edge> borderEdgesRelativeToMesh; MagmaUtils::BorderEdges( aMesh.elements, numberOfVerticesPerElement, aMesh.corners, aMesh.x.size(), borderEdgesRelativeToMesh); // compress/reorder the border std::set<int, std::less<int> > vertexNumbersOfBorder; std::for_each( borderEdgesRelativeToMesh.begin(), borderEdgesRelativeToMesh.end(), PutIndizesIntoContainer(vertexNumbersOfBorder)); GeometryUtils::Covise2dMesh lineMesh; lineMesh.x.resize(vertexNumbersOfBorder.size()); lineMesh.y.resize(vertexNumbersOfBorder.size()); lineMesh.z.resize(vertexNumbersOfBorder.size()); std::map<int, int> oldVertexNumber2New; int newNumber = 0; for (std::set<int, std::less<int> >::const_iterator citer = vertexNumbersOfBorder.begin(); citer != vertexNumbersOfBorder.end(); ++citer, ++newNumber) { oldVertexNumber2New[*citer] = newNumber; lineMesh.x[newNumber] = aMesh.x[*citer]; lineMesh.y[newNumber] = aMesh.y[*citer]; lineMesh.z[newNumber] = aMesh.z[*citer]; } lineMesh.elements.resize(borderEdgesRelativeToMesh.size()); lineMesh.corners.resize(2 * borderEdgesRelativeToMesh.size()); for (int i = 0; i != lineMesh.elements.size(); ++i) { lineMesh.elements[i] = 2 * i; lineMesh.corners[2 * i] = oldVertexNumber2New[borderEdgesRelativeToMesh[i].first]; lineMesh.corners[2 * i + 1] = oldVertexNumber2New[borderEdgesRelativeToMesh[i].second]; } coDoLines *lines_out = new coDoLines( p_out_geometry_->getObjName(), lineMesh.x.size(), lineMesh.corners.size(), lineMesh.elements.size()); if (!(lines_out and lines_out->objectOk())) { std::string errorText = "Object for port '"; errorText += p_out_geometry_->getName(); errorText += "' can't be created."; Covise::sendError(errorText.c_str()); return STOP_PIPELINE; } { float *u_out; float *v_out; float *w_out; int *vl; int *pl; lines_out->getAddresses(&u_out, &v_out, &w_out, &vl, &pl); std::copy(lineMesh.x.begin(), lineMesh.x.end(), u_out); std::copy(lineMesh.y.begin(), lineMesh.y.end(), v_out); std::copy(lineMesh.z.begin(), lineMesh.z.end(), w_out); std::copy(lineMesh.corners.begin(), lineMesh.corners.end(), vl); std::copy(lineMesh.elements.begin(), lineMesh.elements.end(), pl); p_out_geometry_->setCurrentObject(lines_out); } return SUCCESS; }