Skip to content
  • Search
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

ZMT zurich med tech

  1. Home
  2. Sim4Life
  3. Anatomical Models
  4. Anatomical model extraction and dimension

Anatomical model extraction and dimension

Scheduled Pinned Locked Moved Anatomical Models
7 Posts 3 Posters 916 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    VigneshYork
    wrote on last edited by
    #1

    Hello,

    Is there a way to extract a part of an anatomical model? For example, I would lik e to segment just the thigh out of the model and save it as a separate model?

    Also, is there a way to determine what the skin thickness and the fat thickness is?

    Thanks

    1 Reply Last reply
    1
    • brynB Offline
      brynB Offline
      bryn
      ZMT
      wrote on last edited by bryn
      #2

      You can do a planar cut, or a boolean operation to extract regions or discard others. You can save the result as .sab file or .smash project.

      As described elsewhere, these operations may fail on non-manifold input surfaces. I would recommend running (Mesh Doctor) make manifold on SAT, Muscle an Fat, since those are most likely to cause issues. Then boolean intersection with a brick around the leg should work fine.

      Example where I extract the pelvic region:

          # select the surfaces in the model: if you have aposable model first do "Clone As Static"
          surfaces = XCoreModeling.GetActiveModel().SelectedEntities
          
          # make manifold
          XCoreModeling.MakeTriangleMeshManifold(surfaces)
      
          # create box
          keywords = ["coccyx", "L1", "L2", "L3", "L4", "L5"]
          vertebrae = [e for e in surfaces if any(s in e.Name for s in keywords)]
          q1, q2 = XCoreModeling.GetBoundingBox(vertebrae)
          p1[2] = q1[2]
          p2[2] = q2[2]
          # add padding of 1mm
          dx = XCoreModeling.Vec3(1.0, 1.0, 1.0)
          box = XCoreModeling.CreateSolidBlock(p1 - dx, p2 + dx)
      
          # intersect
          for idx, e in enumerate(surfaces, start=N):
              res = XCoreModeling.Intersect([e, box.Clone()], parametrized=False)
              if isinstance(res, XCoreModeling.TriangleMesh):
                  if res.Empty(): # remove empty meshes, i.e. no overlap
                      res.Delete()
      
      
      brynB 1 Reply Last reply
      1
      • brynB bryn

        You can do a planar cut, or a boolean operation to extract regions or discard others. You can save the result as .sab file or .smash project.

        As described elsewhere, these operations may fail on non-manifold input surfaces. I would recommend running (Mesh Doctor) make manifold on SAT, Muscle an Fat, since those are most likely to cause issues. Then boolean intersection with a brick around the leg should work fine.

        Example where I extract the pelvic region:

            # select the surfaces in the model: if you have aposable model first do "Clone As Static"
            surfaces = XCoreModeling.GetActiveModel().SelectedEntities
            
            # make manifold
            XCoreModeling.MakeTriangleMeshManifold(surfaces)
        
            # create box
            keywords = ["coccyx", "L1", "L2", "L3", "L4", "L5"]
            vertebrae = [e for e in surfaces if any(s in e.Name for s in keywords)]
            q1, q2 = XCoreModeling.GetBoundingBox(vertebrae)
            p1[2] = q1[2]
            p2[2] = q2[2]
            # add padding of 1mm
            dx = XCoreModeling.Vec3(1.0, 1.0, 1.0)
            box = XCoreModeling.CreateSolidBlock(p1 - dx, p2 + dx)
        
            # intersect
            for idx, e in enumerate(surfaces, start=N):
                res = XCoreModeling.Intersect([e, box.Clone()], parametrized=False)
                if isinstance(res, XCoreModeling.TriangleMesh):
                    if res.Empty(): # remove empty meshes, i.e. no overlap
                        res.Delete()
        
        
        brynB Offline
        brynB Offline
        bryn
        ZMT
        wrote on last edited by
        #3

        Youtube Video

        1 Reply Last reply
        0
        • V Offline
          V Offline
          VigneshYork
          wrote on last edited by
          #4

          Hello bryn,

          Thanks a lot. That helps a lot

          Regards,
          Vignesh

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Andrei
            wrote on last edited by
            #5

            Hi, can You help me?There are other problems with the platform that make it impossible to implement calculations. I need the foot of one of the phantoms, but according to video recommendations on the forum, after processing through the block, the necessary part of the body is simply removed. Is this a huge mistake or mine? Also, regional brush models are not rendered after loading.

            1 Reply Last reply
            0
            • brynB Offline
              brynB Offline
              bryn
              ZMT
              wrote on last edited by
              #6

              @Andrei

              • what did you try so far? it is difficult to help you if you don't describe the problem in some detail
              • what are regional brush models?

              If you intersect a model with a block, then you should get the parts of the model that overlap the block. If you subtract the block from the model, you will remove the overlapping region.

              The steps to crop the foot from a model could be:

              • make complex tissue surfaces like SAT & Muscle manifold (select them, go to Mesh Doctor, and press "Make Manifold")
              • draw a block that overlaps with the foot
              • select the block, start the Modeler -> Boolean -> Intersect With tool
              • while this tool is running, select the model (e.g. the group containing the model surfaces)
              • press apply
                -> all tissues not overlapping the block will be removed. The others should be cut/cropped such that only the overlapping part remains.
              1 Reply Last reply
              0
              • A Offline
                A Offline
                Andrei
                wrote on last edited by
                #7

                Thank You, It really works.

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Search