{"id":23524201,"url":"https://github.com/alxbilger/pluginfinder","last_synced_at":"2025-05-14T06:15:48.556Z","repository":{"id":48174989,"uuid":"480746651","full_name":"alxbilger/PluginFinder","owner":"alxbilger","description":"PluginFinder is a program loading SOFA simulations in order to find the required SOFA plugins, i.e. the plugins containing all the components of the simulation","archived":false,"fork":false,"pushed_at":"2024-10-21T09:19:44.000Z","size":16,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-25T18:14:54.145Z","etag":null,"topics":["sofa-framework"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alxbilger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-12T09:47:22.000Z","updated_at":"2024-10-21T09:19:48.000Z","dependencies_parsed_at":"2024-10-22T10:40:34.266Z","dependency_job_id":null,"html_url":"https://github.com/alxbilger/PluginFinder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FPluginFinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FPluginFinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FPluginFinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxbilger%2FPluginFinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alxbilger","download_url":"https://codeload.github.com/alxbilger/PluginFinder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239217102,"owners_count":19601593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sofa-framework"],"created_at":"2024-12-25T18:14:57.700Z","updated_at":"2025-02-17T00:51:25.040Z","avatar_url":"https://github.com/alxbilger.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PluginFinder\n\nPluginFinder is a program loading SOFA simulations in order to find the required SOFA plugins, i.e. the plugins containing all the components of the simulation.\n\n- SOFA: [https://www.sofa-framework.org/](https://www.sofa-framework.org/)\n\n## How it works\n\nIt first loads all the SOFA plugins from the list contained in the file `plugin_list.conf` or `plugin_list.conf.default`.\nIt is a similar mechanism in `runSofa`.\nIn order to find the required plugins, all the plugins must be loaded.\n:warning: A plugin cannot be found if it is not loaded.\n\nIt loads one or several simulations sequentially.\nFor each simulation:\n- The simulation is loaded\n- All the components (derived from `sofa::core::objectmodel::BaseObject`) are retrieved from the root node\n- For each component, it finds the corresponding plugin. The component must be found in the `sofa::core::ObjectFactory`, i.e. the corresponding plugin must be loaded.\n- Replace the `\u003cRequiredPlugin/\u003e` list by the new one.\n- The simulation is unloaded\n\n## Limitations\n\n- A plugin cannot be found if it is not loaded\n- Limited to XML files\n- At least one `\u003cRequiredPlugin/\u003e` must be present in the scene\n\n## Demo\n\n```\nPluginFinder examples\\Components\\mass\\DiagonalMass.scn\n```\n\nThe following scene\n\n```xml\n\u003c?xml version=\"1.0\" ?\u003e\n\u003cNode name=\"root\" dt=\"0.005\"\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.Mass\"/\u003e\n\n    \u003cDefaultPipeline verbose=\"0\" name=\"CollisionPipeline\" /\u003e\n    \u003cBruteForceBroadPhase/\u003e\n    \u003cBVHNarrowPhase/\u003e\n    \u003cDefaultContactManager response=\"PenalityContactForceField\" name=\"collision response\" /\u003e\n    \u003cDiscreteIntersection /\u003e\n\n    \u003cMeshGmshLoader name=\"loader\" filename=\"mesh/liver.msh\" /\u003e\n    \u003cMeshOBJLoader name=\"meshLoader_0\" filename=\"mesh/liver-smooth.obj\" handleSeams=\"1\" /\u003e\n\n    \u003cNode name=\"Liver\" depend=\"topo dofs\"\u003e\n        \u003cEulerImplicitSolver name=\"integration scheme\" /\u003e\n        \u003cCGLinearSolver name=\"linear solver\" iterations=\"1000\" tolerance=\"1e-9\" threshold=\"1e-9\"/\u003e\n        \u003cMechanicalObject name=\"dofs\" src=\"@../loader\" /\u003e\n        \u003c!-- Container for the tetrahedra--\u003e\n        \u003cTetrahedronSetTopologyContainer name=\"TetraTopo\" src=\"@../loader\" /\u003e\n        \u003cTetrahedronSetGeometryAlgorithms name=\"GeomAlgo\" /\u003e\n        \u003cDiagonalMass totalMass=\"60\" name=\"diagonalMass\" /\u003e\n        \u003cTetrahedralCorotationalFEMForceField template=\"Vec3d\" name=\"FEM\" method=\"large\" poissonRatio=\"0.45\" youngModulus=\"5000\" /\u003e\n        \u003cFixedConstraint name=\"FixedConstraint\" indices=\"3 39 64\" /\u003e\n        \n        \u003cNode name=\"Visu\"\u003e\n            \u003cOglModel name=\"VisualModel\" src=\"@../../meshLoader_0\" color=\"red\" /\u003e\n            \u003cBarycentricMapping name=\"VisualMapping\" input=\"@../dofs\" output=\"@VisualModel\" /\u003e\n        \u003c/Node\u003e\n        \u003cNode name=\"Surf\"\u003e\n    \t    \u003cSphereLoader filename=\"mesh/liver.sph\" /\u003e\n            \u003cMechanicalObject name=\"spheres\" position=\"@[-1].position\" /\u003e\n            \u003cSphereCollisionModel name=\"CollisionModel\" listRadius=\"@[-2].listRadius\" /\u003e\n            \u003cBarycentricMapping name=\"CollisionMapping\" input=\"@../dofs\" output=\"@spheres\" /\u003e\n        \u003c/Node\u003e\n    \u003c/Node\u003e\n\u003c/Node\u003e\n```\n\nis transformed to:\n\n```xml\n\u003c?xml version=\"1.0\" ?\u003e\n\u003cNode name=\"root\" dt=\"0.005\"\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.Constraint.Projective\"/\u003e \u003c!-- Needed to use components [FixedConstraint] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.LinearSolver.Iterative\"/\u003e \u003c!-- Needed to use components [CGLinearSolver] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.Mapping.Linear\"/\u003e \u003c!-- Needed to use components [BarycentricMapping] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.Mass\"/\u003e \u003c!-- Needed to use components [DiagonalMass] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.ODESolver.Backward\"/\u003e \u003c!-- Needed to use components [EulerImplicitSolver] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.SolidMechanics.FEM.Elastic\"/\u003e \u003c!-- Needed to use components [TetrahedralCorotationalFEMForceField] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.Component.StateContainer\"/\u003e \u003c!-- Needed to use components [MechanicalObject] --\u003e\n    \u003cRequiredPlugin name=\"Sofa.GL.Component.Rendering3D\"/\u003e \u003c!-- Needed to use components [OglModel] --\u003e\n\n    \u003cDefaultPipeline verbose=\"0\" name=\"CollisionPipeline\" /\u003e\n    \u003cBruteForceBroadPhase/\u003e\n    \u003cBVHNarrowPhase/\u003e\n    \u003cDefaultContactManager response=\"PenalityContactForceField\" name=\"collision response\" /\u003e\n    \u003cDiscreteIntersection /\u003e\n\n    \u003cMeshGmshLoader name=\"loader\" filename=\"mesh/liver.msh\" /\u003e\n    \u003cMeshOBJLoader name=\"meshLoader_0\" filename=\"mesh/liver-smooth.obj\" handleSeams=\"1\" /\u003e\n\n    \u003cNode name=\"Liver\" depend=\"topo dofs\"\u003e\n        \u003cEulerImplicitSolver name=\"integration scheme\" /\u003e\n        \u003cCGLinearSolver name=\"linear solver\" iterations=\"1000\" tolerance=\"1e-9\" threshold=\"1e-9\"/\u003e\n        \u003cMechanicalObject name=\"dofs\" src=\"@../loader\" /\u003e\n        \u003c!-- Container for the tetrahedra--\u003e\n        \u003cTetrahedronSetTopologyContainer name=\"TetraTopo\" src=\"@../loader\" /\u003e\n        \u003cTetrahedronSetGeometryAlgorithms name=\"GeomAlgo\" /\u003e\n        \u003cDiagonalMass totalMass=\"60\" name=\"diagonalMass\" /\u003e\n        \u003cTetrahedralCorotationalFEMForceField template=\"Vec3d\" name=\"FEM\" method=\"large\" poissonRatio=\"0.45\" youngModulus=\"5000\" /\u003e\n        \u003cFixedConstraint name=\"FixedConstraint\" indices=\"3 39 64\" /\u003e\n        \n        \u003cNode name=\"Visu\"\u003e\n            \u003cOglModel name=\"VisualModel\" src=\"@../../meshLoader_0\" color=\"red\" /\u003e\n            \u003cBarycentricMapping name=\"VisualMapping\" input=\"@../dofs\" output=\"@VisualModel\" /\u003e\n        \u003c/Node\u003e\n        \u003cNode name=\"Surf\"\u003e\n    \t    \u003cSphereLoader filename=\"mesh/liver.sph\" /\u003e\n            \u003cMechanicalObject name=\"spheres\" position=\"@[-1].position\" /\u003e\n            \u003cSphereCollisionModel name=\"CollisionModel\" listRadius=\"@[-2].listRadius\" /\u003e\n            \u003cBarycentricMapping name=\"CollisionMapping\" input=\"@../dofs\" output=\"@spheres\" /\u003e\n        \u003c/Node\u003e\n    \u003c/Node\u003e\n\u003c/Node\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxbilger%2Fpluginfinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falxbilger%2Fpluginfinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxbilger%2Fpluginfinder/lists"}