Ansys Assistant will be unavailable on the Learning Forum starting January 30. An upgraded version is coming soon. We apologize for any inconvenience and appreciate your patience. Stay tuned for updates.
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 Chavan
      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.
[bingo_chatbox]