Meshing the cow












13












$begingroup$


As a simple example for applying stl-files I took "cow" out of MMA example data. I'm able to discretize the Graphic without problems



kuh = ExampleData[{"Geometry3D", "Cow"}]
mesh=DiscretizeGraphics[kuh,MeshCellStyle -> {{1, All} -> Red}] (* MeshRegion *)


enter image description here



to get an stl-like triangle surface, which seems to be ok



ConstantRegionQ[mesh]
(*True*)


for further meshing, but my attempt to create a volumemesh fails



Needs["NDSolve`FEM`"]
ToElementMesh[RegionBoundary[mesh]]
(*$Failed*)


What's wrong with my attempt?
Thanks!










share|improve this question











$endgroup$












  • $begingroup$
    Just drop the RegionBoundary and it should work.
    $endgroup$
    – Pinti
    Mar 7 at 11:02










  • $begingroup$
    Unfortunately no: ToElementMesh[mesh] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:11








  • 1




    $begingroup$
    Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:21






  • 1




    $begingroup$
    @ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:23






  • 1




    $begingroup$
    However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:23
















13












$begingroup$


As a simple example for applying stl-files I took "cow" out of MMA example data. I'm able to discretize the Graphic without problems



kuh = ExampleData[{"Geometry3D", "Cow"}]
mesh=DiscretizeGraphics[kuh,MeshCellStyle -> {{1, All} -> Red}] (* MeshRegion *)


enter image description here



to get an stl-like triangle surface, which seems to be ok



ConstantRegionQ[mesh]
(*True*)


for further meshing, but my attempt to create a volumemesh fails



Needs["NDSolve`FEM`"]
ToElementMesh[RegionBoundary[mesh]]
(*$Failed*)


What's wrong with my attempt?
Thanks!










share|improve this question











$endgroup$












  • $begingroup$
    Just drop the RegionBoundary and it should work.
    $endgroup$
    – Pinti
    Mar 7 at 11:02










  • $begingroup$
    Unfortunately no: ToElementMesh[mesh] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:11








  • 1




    $begingroup$
    Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:21






  • 1




    $begingroup$
    @ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:23






  • 1




    $begingroup$
    However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:23














13












13








13


1



$begingroup$


As a simple example for applying stl-files I took "cow" out of MMA example data. I'm able to discretize the Graphic without problems



kuh = ExampleData[{"Geometry3D", "Cow"}]
mesh=DiscretizeGraphics[kuh,MeshCellStyle -> {{1, All} -> Red}] (* MeshRegion *)


enter image description here



to get an stl-like triangle surface, which seems to be ok



ConstantRegionQ[mesh]
(*True*)


for further meshing, but my attempt to create a volumemesh fails



Needs["NDSolve`FEM`"]
ToElementMesh[RegionBoundary[mesh]]
(*$Failed*)


What's wrong with my attempt?
Thanks!










share|improve this question











$endgroup$




As a simple example for applying stl-files I took "cow" out of MMA example data. I'm able to discretize the Graphic without problems



kuh = ExampleData[{"Geometry3D", "Cow"}]
mesh=DiscretizeGraphics[kuh,MeshCellStyle -> {{1, All} -> Red}] (* MeshRegion *)


enter image description here



to get an stl-like triangle surface, which seems to be ok



ConstantRegionQ[mesh]
(*True*)


for further meshing, but my attempt to create a volumemesh fails



Needs["NDSolve`FEM`"]
ToElementMesh[RegionBoundary[mesh]]
(*$Failed*)


What's wrong with my attempt?
Thanks!







finite-element-method mesh






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 8 at 6:05









user21

19.8k45284




19.8k45284










asked Mar 7 at 10:53









Ulrich NeumannUlrich Neumann

9,548617




9,548617












  • $begingroup$
    Just drop the RegionBoundary and it should work.
    $endgroup$
    – Pinti
    Mar 7 at 11:02










  • $begingroup$
    Unfortunately no: ToElementMesh[mesh] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:11








  • 1




    $begingroup$
    Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:21






  • 1




    $begingroup$
    @ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:23






  • 1




    $begingroup$
    However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:23


















  • $begingroup$
    Just drop the RegionBoundary and it should work.
    $endgroup$
    – Pinti
    Mar 7 at 11:02










  • $begingroup$
    Unfortunately no: ToElementMesh[mesh] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:11








  • 1




    $begingroup$
    Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:21






  • 1




    $begingroup$
    @ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:23






  • 1




    $begingroup$
    However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:23
















$begingroup$
Just drop the RegionBoundary and it should work.
$endgroup$
– Pinti
Mar 7 at 11:02




$begingroup$
Just drop the RegionBoundary and it should work.
$endgroup$
– Pinti
Mar 7 at 11:02












$begingroup$
Unfortunately no: ToElementMesh[mesh] (*$Failed*)
$endgroup$
– Ulrich Neumann
Mar 7 at 11:11






$begingroup$
Unfortunately no: ToElementMesh[mesh] (*$Failed*)
$endgroup$
– Ulrich Neumann
Mar 7 at 11:11






1




1




$begingroup$
Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
$endgroup$
– J. M. is slightly pensive
Mar 7 at 11:21




$begingroup$
Did you know that you can just do ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]?
$endgroup$
– J. M. is slightly pensive
Mar 7 at 11:21




1




1




$begingroup$
@ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
$endgroup$
– Ulrich Neumann
Mar 7 at 11:23




$begingroup$
@ Piniti Thanks, it seems to be a problem of MMA version 11.0.1
$endgroup$
– Ulrich Neumann
Mar 7 at 11:23




1




1




$begingroup$
However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
$endgroup$
– J. M. is slightly pensive
Mar 7 at 11:23




$begingroup$
However, FindMeshDefects[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]] shows that a conversion to a volume mesh might not be straightforward.
$endgroup$
– J. M. is slightly pensive
Mar 7 at 11:23










2 Answers
2






active

oldest

votes


















11












$begingroup$

The cow mesh is an example of a "broken" mesh. Try



mesh =  RepairMesh[mesh]


before sending it to ToElementMesh.



Among other nice meshes, you can find a free and "clean" cow mesh also on Keenan Crane's homepage:



https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/



This is the model (without texture):



enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:34








  • 2




    $begingroup$
    @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:37










  • $begingroup$
    Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:39










  • $begingroup$
    Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:41






  • 1




    $begingroup$
    @Ulrich By the way, a good and clean mesh is the "Triceratops".
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:44



















7












$begingroup$

As other's have stated, the issue is self intersecting facets:



mr = RepairMesh[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]];

FindMeshDefects[mr]




If we could determine if a point is 'inside' the cow, we could use a naive variant of the powercrust algorithm. Here 'inside' is not necessarily well defined.



Luckily we can use isInside defined specifically for this model here!



dm = DelaunayMesh[MeshCoordinates[mr]];

powercrust = BoundaryMesh @ MeshRegion[
MeshCoordinates[dm],
Pick[MeshCells[dm, 3], isInside /@ PropertyValue[{dm, 3}, MeshCellCentroid]]
];

Needs["NDSolve`FEM`"]

ToElementMesh[powercrust]



ElementMesh[{{-0.410816, 0.410816}, {-0.133851, 0.133851}, {-0.251619, 0.251619}}, {TetrahedronElement["<" 25368 ">"]}]






share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "387"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f192781%2fmeshing-the-cow%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    11












    $begingroup$

    The cow mesh is an example of a "broken" mesh. Try



    mesh =  RepairMesh[mesh]


    before sending it to ToElementMesh.



    Among other nice meshes, you can find a free and "clean" cow mesh also on Keenan Crane's homepage:



    https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/



    This is the model (without texture):



    enter image description here






    share|improve this answer











    $endgroup$













    • $begingroup$
      Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:34








    • 2




      $begingroup$
      @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
      $endgroup$
      – J. M. is slightly pensive
      Mar 7 at 11:37










    • $begingroup$
      Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:39










    • $begingroup$
      Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:41






    • 1




      $begingroup$
      @Ulrich By the way, a good and clean mesh is the "Triceratops".
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:44
















    11












    $begingroup$

    The cow mesh is an example of a "broken" mesh. Try



    mesh =  RepairMesh[mesh]


    before sending it to ToElementMesh.



    Among other nice meshes, you can find a free and "clean" cow mesh also on Keenan Crane's homepage:



    https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/



    This is the model (without texture):



    enter image description here






    share|improve this answer











    $endgroup$













    • $begingroup$
      Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:34








    • 2




      $begingroup$
      @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
      $endgroup$
      – J. M. is slightly pensive
      Mar 7 at 11:37










    • $begingroup$
      Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:39










    • $begingroup$
      Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:41






    • 1




      $begingroup$
      @Ulrich By the way, a good and clean mesh is the "Triceratops".
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:44














    11












    11








    11





    $begingroup$

    The cow mesh is an example of a "broken" mesh. Try



    mesh =  RepairMesh[mesh]


    before sending it to ToElementMesh.



    Among other nice meshes, you can find a free and "clean" cow mesh also on Keenan Crane's homepage:



    https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/



    This is the model (without texture):



    enter image description here






    share|improve this answer











    $endgroup$



    The cow mesh is an example of a "broken" mesh. Try



    mesh =  RepairMesh[mesh]


    before sending it to ToElementMesh.



    Among other nice meshes, you can find a free and "clean" cow mesh also on Keenan Crane's homepage:



    https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/



    This is the model (without texture):



    enter image description here







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Mar 12 at 20:53

























    answered Mar 7 at 11:23









    Henrik SchumacherHenrik Schumacher

    56.6k577157




    56.6k577157












    • $begingroup$
      Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:34








    • 2




      $begingroup$
      @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
      $endgroup$
      – J. M. is slightly pensive
      Mar 7 at 11:37










    • $begingroup$
      Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:39










    • $begingroup$
      Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:41






    • 1




      $begingroup$
      @Ulrich By the way, a good and clean mesh is the "Triceratops".
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:44


















    • $begingroup$
      Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:34








    • 2




      $begingroup$
      @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
      $endgroup$
      – J. M. is slightly pensive
      Mar 7 at 11:37










    • $begingroup$
      Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:39










    • $begingroup$
      Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
      $endgroup$
      – Ulrich Neumann
      Mar 7 at 11:41






    • 1




      $begingroup$
      @Ulrich By the way, a good and clean mesh is the "Triceratops".
      $endgroup$
      – Henrik Schumacher
      Mar 7 at 11:44
















    $begingroup$
    Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:34






    $begingroup$
    Thanks, but nothing changes: meshR = RepairMesh[mesh ]; ToElementMesh[meshR] (*$Failed*)
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:34






    2




    2




    $begingroup$
    @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:37




    $begingroup$
    @Ulrich, running FindMeshDefects[meshR] should show what may be causing the failure.
    $endgroup$
    – J. M. is slightly pensive
    Mar 7 at 11:37












    $begingroup$
    Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:39




    $begingroup$
    Apparently version 11.3 can cope both with the unrepaired and the repaired mesh. So I don't know what to do. The mesh has self-intersections so tet-meshing it is nontrivial.
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:39












    $begingroup$
    Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:41




    $begingroup$
    Obviously the example isn't as simple as I hoped for. Thank you Henrik and J.M.
    $endgroup$
    – Ulrich Neumann
    Mar 7 at 11:41




    1




    1




    $begingroup$
    @Ulrich By the way, a good and clean mesh is the "Triceratops".
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:44




    $begingroup$
    @Ulrich By the way, a good and clean mesh is the "Triceratops".
    $endgroup$
    – Henrik Schumacher
    Mar 7 at 11:44











    7












    $begingroup$

    As other's have stated, the issue is self intersecting facets:



    mr = RepairMesh[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]];

    FindMeshDefects[mr]




    If we could determine if a point is 'inside' the cow, we could use a naive variant of the powercrust algorithm. Here 'inside' is not necessarily well defined.



    Luckily we can use isInside defined specifically for this model here!



    dm = DelaunayMesh[MeshCoordinates[mr]];

    powercrust = BoundaryMesh @ MeshRegion[
    MeshCoordinates[dm],
    Pick[MeshCells[dm, 3], isInside /@ PropertyValue[{dm, 3}, MeshCellCentroid]]
    ];

    Needs["NDSolve`FEM`"]

    ToElementMesh[powercrust]



    ElementMesh[{{-0.410816, 0.410816}, {-0.133851, 0.133851}, {-0.251619, 0.251619}}, {TetrahedronElement["<" 25368 ">"]}]






    share|improve this answer









    $endgroup$


















      7












      $begingroup$

      As other's have stated, the issue is self intersecting facets:



      mr = RepairMesh[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]];

      FindMeshDefects[mr]




      If we could determine if a point is 'inside' the cow, we could use a naive variant of the powercrust algorithm. Here 'inside' is not necessarily well defined.



      Luckily we can use isInside defined specifically for this model here!



      dm = DelaunayMesh[MeshCoordinates[mr]];

      powercrust = BoundaryMesh @ MeshRegion[
      MeshCoordinates[dm],
      Pick[MeshCells[dm, 3], isInside /@ PropertyValue[{dm, 3}, MeshCellCentroid]]
      ];

      Needs["NDSolve`FEM`"]

      ToElementMesh[powercrust]



      ElementMesh[{{-0.410816, 0.410816}, {-0.133851, 0.133851}, {-0.251619, 0.251619}}, {TetrahedronElement["<" 25368 ">"]}]






      share|improve this answer









      $endgroup$
















        7












        7








        7





        $begingroup$

        As other's have stated, the issue is self intersecting facets:



        mr = RepairMesh[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]];

        FindMeshDefects[mr]




        If we could determine if a point is 'inside' the cow, we could use a naive variant of the powercrust algorithm. Here 'inside' is not necessarily well defined.



        Luckily we can use isInside defined specifically for this model here!



        dm = DelaunayMesh[MeshCoordinates[mr]];

        powercrust = BoundaryMesh @ MeshRegion[
        MeshCoordinates[dm],
        Pick[MeshCells[dm, 3], isInside /@ PropertyValue[{dm, 3}, MeshCellCentroid]]
        ];

        Needs["NDSolve`FEM`"]

        ToElementMesh[powercrust]



        ElementMesh[{{-0.410816, 0.410816}, {-0.133851, 0.133851}, {-0.251619, 0.251619}}, {TetrahedronElement["<" 25368 ">"]}]






        share|improve this answer









        $endgroup$



        As other's have stated, the issue is self intersecting facets:



        mr = RepairMesh[ExampleData[{"Geometry3D", "Cow"}, "MeshRegion"]];

        FindMeshDefects[mr]




        If we could determine if a point is 'inside' the cow, we could use a naive variant of the powercrust algorithm. Here 'inside' is not necessarily well defined.



        Luckily we can use isInside defined specifically for this model here!



        dm = DelaunayMesh[MeshCoordinates[mr]];

        powercrust = BoundaryMesh @ MeshRegion[
        MeshCoordinates[dm],
        Pick[MeshCells[dm, 3], isInside /@ PropertyValue[{dm, 3}, MeshCellCentroid]]
        ];

        Needs["NDSolve`FEM`"]

        ToElementMesh[powercrust]



        ElementMesh[{{-0.410816, 0.410816}, {-0.133851, 0.133851}, {-0.251619, 0.251619}}, {TetrahedronElement["<" 25368 ">"]}]







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 7 at 16:33









        Chip HurstChip Hurst

        22.2k15791




        22.2k15791






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Mathematica Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f192781%2fmeshing-the-cow%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            How to send String Array data to Server using php in android

            Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

            Is anime1.com a legal site for watching anime?