Cancel
Showing results for 
Search instead for 
Did you mean: 

User groups access in the postview

Valued Contributor
Valued Contributor

Hello,

 

I'm writing code to display results for certain user groups only in the postview. Unfortunately the only way I manage to access the groups in the postview is through theSession.Post.PostviewApplyUserGroupVisibility().

The disadvantage is that only the non-empty groups are present in the postview and these have been relabeled from 0.

I have writtten the following code to display only a group which the user specifies by name. Unfortunately this code does not work if an empty groups exists with a label lower than the requested group.

    Public Sub ShowGroup(ByVal GroupName As String)

        Dim theSession As Session = Session.GetSession()
        Dim SimPart As CAE.SimPart = CType(theSession.Parts.BaseWork, CAE.SimPart)
        Dim displaySimPart As CAE.SimPart = CType(theSession.Parts.BaseDisplay, CAE.SimPart)
        Dim theLW As NXOpen.ListingWindow = theSession.ListingWindow()
        theLW.Open()
        ' The following line obtains the PostViewIds. In using the PostViewId later on, the first Id in the array is used.
        ' When working with multiple postviews at once, this could cause issues. At best only the first postview has the desired behaviour
        Dim PostViewIds() As Integer = theSession.Post.GetPostviewIds

        Dim SimGroups() As CAE.CaeGroup = SimPart.CaeGroups.ToArray
        Dim RequestedGroup As CAE.CaeGroup = Nothing
        Dim RequestedGroupLabel As Integer = -1
        Dim RequestedGroupEntry As Integer = 1

        'the postgroups are RENUMBERED from 1 to the number of groups, without empty entries. Therefore need to keep track of the group entry next to the group label. 

        For Each Group As CAE.CaeGroup In SimGroups
            If Group.Name.ToLower.Equals(GroupName.ToLower) Then
                RequestedGroup = Group
                RequestedGroupLabel = Group.Label
                Exit For
            End If
            RequestedGroupEntry = RequestedGroupEntry + 1
        Next

        theLW.WriteFullline("Requested name: " & RequestedGroup.Name)
        theLW.WriteFullline("Requested label: " & RequestedGroupLabel.ToString)
        theLW.WriteFullline("Requested entry: " & RequestedGroupEntry.ToString)

        If RequestedGroupLabel = -1 Then
            theLW.WriteFullline("Group: " & GroupName & " not found")
        End If

        Dim GroupIds(0) As Integer
        GroupIds(0) = RequestedGroupEntry
        theSession.Post.PostviewApplyUserGroupVisibility(PostViewIds(0), GroupIds, NXOpen.CAE.Post.GroupVisibility.ShowOnly)

    End Sub

Does anyone know a better way to manipulate the user group vilibility in the postview in CAE?

 

Thank you

Frederik

4 REPLIES

Re: User groups access in the postview

Phenom
Phenom

Frederik

 

never noticed that empty groups are not listed in the postivew (kind of make sense) 

 

Can you use  a Try loop wiht a find object since you know the group name

 

 

Try
Dim theCAEGrouptouse As CAE.CaeGroup = CType(theSimPart.CaeGroups.FindObject(sgroupname), CAE.CaeGroup)

'display
Dim aiGroupIds(0) As Integer
aiGroupIds(0) = theCAEGrouptouse.Label
theSession.Post.PostviewApplyUserGroupVisibility(PostViewIds(0), aiGroupIds, NXOpen.CAE.Post.GroupVisibility.ShowOnly) Catch 'group not found End Try

 

Have you alooked at the keyword: caePart.CaeGroups.QueryGroupList()? It will return all groups in the .sim as well as all groups in the assembly fem hirearchy. This will match the list of groups that you see in the Simulation Navigator.

 

Production: NX9.0.3.4, NX10.0.2.6
Development: VB.NET (amateur level !)

Re: User groups access in the postview

Valued Contributor
Valued Contributor

Hello,

 

The postview user groups are a subset of the CAE.CaeGroups. Only the groups which contain nodes and/or elements are part of the postview user groups. Postview user group labels start from 1 and are sequential.

 

The only way I have found to access the Postview user groups is through the NXOpen.session.Post.PostviewApplyUserGroupVisibility, using the userGroupIds().

 

As an example:

Suppose I have a .sim file with the following groups and contents:

Group1: 25 elements and 10 nodes and 3 polygon bodies

Group2: 1000 nodes and 5 polygon edges

Group3: 5 polygon bodies and 9 polygon edges

Group4: 33 nodes

 

in the postview I will then see the following user groups:

Group1

Group2

Group4

 

the userGroupIds to use in NXOpen.session.Post.PostviewApplyUserGroupVisibility to display the groups are:

userGroupIds(0)=1 for Group1

userGroupIds(0)=2 for Group2

userGroupIds(0)=3 for Group4

 

So if there are CaeGroups which do not contain nodes or elements, there is no longer a 1 on 1 relation between the CaeGroups and the Postview Usergroups.

 

If I were able to search for the GroupName in the Postview usergroups then my problem would be solved.

 

Regards,

Frederik

 

Re: User groups access in the postview

Phenom
Phenom

as far as I know there is no way of knowing which group has been used to create the post view.

 

Maybe you need to have the "Postview" step as part of your process

Production: NX9.0.3.4, NX10.0.2.6
Development: VB.NET (amateur level !)

Re: User groups access in the postview

Experimenter
Experimenter
Hello,

We found that from NX11 this problem can be solved as follows

Public Function ShowGroup(ByVal GroupName As String) As Integer

Dim PostViewIds() As Integer = theSession.Post.GetPostviewIds
Dim SimGroups() As CAE.CaeGroup = Simpart1.CaeGroups.ToArray
Dim NumberOfGroups As Integer = SimGroups.Length
Dim Counter As Integer = 1
Dim RequestedGroup As CAE.CaeGroup = Nothing
Dim MyUserGroupNumber() As Integer = Nothing
Dim FindGroup(0) As String
FindGroup(0) = GroupName

Try
theSession.Post.PostviewGetUserGroupGids(PostViewIds(0), FindGroup, MyUserGroupNumber)
Catch ex As Exception
theLW.WriteFullline("Group: " & GroupName & " not found")
Return 0
End Try

theSession.Post.PostviewApplyUserGroupVisibility(PostViewIds(0), MyUserGroupNumber, CAE.Post.GroupVisibility.ShowOnly)

Return MyUserGroupNumber(0)

....
....