3D Design

3D Design

Topics related to Ansys Discovery and Ansys SpaceClaim.

Python API: Setting object visibility from selection

    • Sterling Butters
      Subscriber
      Greetings,
       
      I am trying to "check the box" for a number of parts in the structure tree. Using the recording feature of the API, I get the ViewHelper.SetObjectVisibility class/method. Trying to apply this to my existing selection yields nothing though - code below. How can I toggle the parts based on my existing selection?
       
      select_bodies = []
      for i_body in GetRootPart()GetComponents():
       
          if i_body.GetName().Equals(""):
              select_bodies.append(i_body)
       
      # Change Object Visibility
      selection = Selection.Create(select_bodies)
      visibility = VisibilityType.Show
      inSelectedView = False
      faceLevel = False
      ViewHelper.SetObjectVisibility(selection, visibility, inSelectedView, faceLevel)
      # EndBlock
       
      # Change Object Visibility
      selection = Selection.Create(select_bodies)
      ViewHelper.HideOthers(selection)
      # EndBlock
    • Aniket
      Forum Moderator
          if i_body.GetName().Equals(""):
              select_bodies.append(i_body)  
       
      Are you checking bodies with blank name?
    • mjmiddle
      Ansys Employee

      There are several problems in that first section:

      1. You forgot a dot (".") between GetRootPart() and GetComponents()
      2. A body is not a component. Maybe this was just a naming convention you were using in your script, because you can turn on/off visibility of components the same way as bodies. But you could have just as well named your variable i_component instead of i_body to be more clear, but it's just a variable name. However, if you intended to get bodies, you can get all bodies this with GetRootPart().GetAllBodies(). Or to get a body within a component (1st component in this case), go through the "Content" object: GetRootPart().Components[0].Content.Bodies. To get a component by name: comp = GetRootPart().GetComponents(comp_name)[0].
      3. An Aniket mentioned, bodies in SpaceClaim cannot exist without a name, so searching for bodies with blank names is not a sensible strategy.
    • Sterling Butters
      Subscriber

      @Aniket

      Sorry, I did not clarify that I did not provide the body name (since it is variable/changing). 

      I was able to get it working with:

      selection = Selection.Create([body for body in GetRootPart().GetAllBodies() if body.Parent.GetName() == ComponentName])
          visibility = VisibilityType.Show
          inSelectedView = False
          faceLevel = False
          ViewHelper.SetObjectVisibility(selection, visibility, inSelectedView, faceLevel)

      Which I think implements the logic suggested by @mjmiddle

      Thanks!

Viewing 3 reply threads
  • The topic ‘Python API: Setting object visibility from selection’ is closed to new replies.