Python API

Scripting interface for Sim4Life

115 Topics 321 Posts
  • Change EMLF boundary condition with Python

    2
    0 Votes
    2 Posts
    148 Views

    Easiest way is to right click on your simulation and click on 'To Python..'

    Run this to make sure it works. It should create a new simulation with the exact same parameters. You can then change whichever parameter you like and run it again

    Note: If I remember correctly, if you use 'To Python', a lot of the default settings won't show up in the code. if they don't show up (like the boundary condition),change them to some non-default value in your simulation before using 'To Python'.

  • How to suppress Voxelling info in console

    1
    0 Votes
    1 Posts
    119 Views
    No one has replied
  • 0 Votes
    3 Posts
    473 Views

    @sylvain Thank you for the advice Sylvain! I have tried doing as you suggested and using the StartNotebook.bat does start a Jupyter Server. Unfortunately, if I start a new Notebook and try to import a Sim4Life module, I again get a pop-up called FlexNet License Finder wanting the location of either the license or the license server.
    a490c780-3a1d-41ad-a116-8b2c43ada34b-image.png
    Just to be sure I have tried doing so on different computers to try and rule out a faulty installation, however the issue persists.
    I can confirm that there are no problems with using Sim4Life’s GUI or using the integrated scripter/console. I did take a closer look at the Sim4Life console though and noticed that upon start up the following message is displayed:
    8493be54-bcd1-4c7e-ad7d-5abb95b186e3-image.png
    So perhaps this is a license issue after all?

  • 0 Votes
    1 Posts
    153 Views
    No one has replied
  • 1 Votes
    1 Posts
    167 Views
    No one has replied
  • Importing file as a Label Field

    10
    0 Votes
    10 Posts
    713 Views

    this is extremely useful! thanks a lot.

  • Blend faces function

    1
    0 Votes
    1 Posts
    119 Views
    No one has replied
  • 0 Votes
    3 Posts
    493 Views

    Hi Haza,

    yes, i managed to get the corresponding material with :
    tissue_X_entity.MaterialName
    Each entity of the anatomical model has this attribute which is visible also through the GUI.
    thanks

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    54 Views
    No one has replied
  • Clone As Static in API

    4
    0 Votes
    4 Posts
    306 Views

    Hi Matthew, thanks for the additional information. If I understand correctly, there are mainly 3 steps at play here, each of which repeated a certain number of times:

    Posing the anatomical model to the desired posture Moving the model to the desired position inside the coil Running the simulation

    What I would do for a workflow like this is:

    a) Pose the model to the desired posture [in the GUI]
    b) "Clone As Static" the desired posture [in the GUI]
    c) Export the posed model to a .sab file [using a script in the GUI, but clicking buttons could also do] a) Starting from scratch, load the coil and load the posed model [using a script]
    b) Move the model to the desired position [using a script]
    c) Setup the simulation [using a script] Run the simulation [using a script]
    (4). Postprocess the simulation [using a script]

    So to answer your initial question: I still don't know how to Clone As Static from a script, but since I also don't know how to use the POSER from a script I would anyway still have to use the GUI to create each posture (and then the "Clone as static" is only one click away...).
    Let me know if I misunderstood your workflow, or if you find a better way to achieve it than what I suggested.

  • draw hemisphere

    3
    0 Votes
    3 Posts
    226 Views

    thank you! It works 🙂
    I finally had to separate the two hemispheres because I wanted to impose a boundary condition on one sphere and a different boundary condition on the other, but if they were too close it didn't work.

    69ed604f-852c-43d3-b4df-4b4c43b5a472-image.png

  • "Scripter" troubles

    2
    0 Votes
    2 Posts
    245 Views

    When starting and initializing Sim4Life, I do also get the error mentioned before in another thread "Error: too many positional options have been specified on the command line"

  • Plot Ellipsoid

    4
    0 Votes
    4 Posts
    391 Views

    Thanks for the answer, it works!
    I hadn't seen the feature Stretch.

  • how to use python API

    1
    0 Votes
    1 Posts
    241 Views
    No one has replied
  • 0 Votes
    2 Posts
    255 Views

    yes you can.
    Use the function CreatePolyLine from the module XCoreModeling
    This function takes a list of points as input. Points need to be Vec3 objects

    smth like:
    import XCoreModeling
    from s4l_v1.model import Vec3
    #points is your array of 100 points with spatial coordinates
    points = [Vec3(p) for p in points]
    XCoreModeling.CreatePolyline(points)

  • Python code does not work with S4L v.6.0

    2
    0 Votes
    2 Posts
    211 Views

    It might be that they changed the sim4life python module between the two versions. You could check the functions you call from the sim4life module in the API browser. If that doesn't work, I would suggest posting the code (or a minimal working example) here so people can look more specifically.

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    2 Views
    No one has replied
  • 0 Votes
    2 Posts
    468 Views

    This is common. Once you import a script, it becomes cached so even if you make changes to it and save it, python won't see the changes. You need to reload it as you said if you make changes to the imported script after running your main script.

  • Applying smoothing to a mesh with the API

    1
    0 Votes
    1 Posts
    165 Views
    No one has replied
  • 0 Votes
    2 Posts
    737 Views

    This looks quite good, thank you for providing your scripts.
    Note that, for the second method, you could create your cylinder directly at the desired position:

    cylinder2 = model.CreateSolidCylinder(Vec3(0,1,-15),Vec3(0,1,-15),0.5)

    There is also the XCoredModeling.CoverWires() function that allows you to make a surface (i.e. face) out of a circle entity.

    Last, but not least, note that the line model_to_grid_filter.MaximumEdgeLength is ultimately what determines the tradeoff between accuracy and computational cost of the interpolation (since it defines the resolution of the triangulated mesh on which the interpolation is done).