Submitted by JSegers on Thu, 08/21/2014 - 12:17
Forums:
I need to delete a named groud on a specific sheet
I manage to delete a named object:
ufs.Obj.CycleByName(theName, aTag)
But like this I delete all objects with that name on all the sheets.
I need to limit this to a specific sheet.
Who can help me with this?
re: delete group on sheet
What version of NX?
What if the members of a given group are located on different sheets? Do you want to delete only the members on the given sheet?
Thanks for the quick response
Thanks for the quick response!
Sloppy:(
It is in VB for NX7.5 and up!
All the members of the group are on the same sheet.
re: delete group on sheet
Once you find the group by name, test one of the members to see what sheet it is on. If it is on the sheet of interest, delete the group (including members).
The code below is taken from the GTAC solution site, and it written by Amy Webster. The code will return the drawing sheet that a given object resides on.
' This function will work for:
' an object which "Resides on drawing" or is "View Dependent In" a DraftingView
' a DraftingView
' a DrawingSheet.View
' Returns Nothing for all other (ie. model mode) objects
Function AskDrawingSheet(ByVal theObject As TaggedObject) As Drawings.DrawingSheet
Dim theView As View = TryCast(theObject, View)
If Not theView Is Nothing Then
Dim sheetTag As Tag = Nothing
Try
theUFSession.Draw.AskDrawingOfView(theView.Tag, sheetTag)
Return NXObjectManager.Get(sheetTag) ' the drawing it is on
Catch ex As NXException
Return Nothing ' it is a model view
End Try
End If
Dim viewName As String = Nothing
Dim status As Integer = Nothing
Try
theUFSession.View.AskViewDependentStatus(theObject.Tag, status, viewName)
Catch ex As NXException
Return Nothing
End Try
If status = 0 Then Return Nothing ' it is a model mode object
Dim viewTag As Tag = Nothing
theUFSession.View.AskTagOfViewName(viewName, viewTag)
Dim viewType As Integer = Nothing
Dim viewSubtype As Integer = Nothing
theUFSession.View.AskType(viewTag, viewType, viewSubtype)
If viewType = 0 Then Return Nothing ' it is view dependent in a modeling view
Dim drawingTag As Tag = Nothing
theUFSession.Draw.AskDrawingOfView(viewTag, drawingTag)
Return NXObjectManager.Get(drawingTag) ' the drawing it is on!
End Function
How to get member of group
I'm trying to test some member of group to see what sheet is it on (using previously posted function which works on me). But I don't know how to get that member of group (actually drawing group). I thought of trying something like members=myGroup.Members.Get, but even if that would work, I don't know what class whould be the variable members, because Drafting Group consists of various types.
Thanks for help.
'NXJournaling.com
'tested with NX 7.5
'May 31, 2012
'When run, the journal will highlight all dimensions in the part that have manually entered text.
'The listing window will report the dimension text, view, and sheet for each dimension
'with manually entered text.
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpenUI
Imports System.Collections.Generic
Module dimensions_to_standard
Dim theSession As Session = Session.GetSession()
Dim ufs As UFSession = UFSession.GetUFSession()
Dim theUfSession As UFSession = UFSession.GetUFSession
Sub Main()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
Dim lw As ListingWindow = theSession.ListingWindow
Dim markId1 As NXOpen.Session.UndoMarkId = Nothing
markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
'Dim smazani Groups
Dim tmpGrp As NXOpen.Tag = NXOpen.Tag.Null
Dim myGroup As Group
Dim groupsToDelete As New List(Of Group)
'CURRENT SHEET
Dim currentSheet As Drawings.DrawingSheet = theSession.Parts.Work.DrawingSheets.CurrentDrawingSheet
'nacteni drafting standards
Dim loadDraftingStandardBuilder1 As NXOpen.Preferences.LoadDraftingStandardBuilder = Nothing
loadDraftingStandardBuilder1 = workPart.Preferences.DraftingPreference.CreateLoadDraftingStandardBuilder()
loadDraftingStandardBuilder1.WelcomeMode = False
loadDraftingStandardBuilder1.Level = NXOpen.Preferences.LoadDraftingStandardBuilder.LoadLevel.Site
loadDraftingStandardBuilder1.Name = "ISO_NX11_LDM"
Dim nXObject1 As NXOpen.NXObject = Nothing
nXObject1 = loadDraftingStandardBuilder1.Commit()
loadDraftingStandardBuilder1.Destroy()
'smazani GROUPS
Do
theUfSession.Obj.CycleObjsInPart(workPart.Tag, UFConstants.UF_group_type, tmpGrp)
'skip the initial null tag
If tmpGrp = NXOpen.Tag.Null Then
Continue Do
End If
myGroup = Utilities.NXObjectManager.Get(tmpGrp)
If (myGroup.Name="A4_LDM") or (myGroup.Name="A3_LDM") or (myGroup.Name="A2_LDM") or (myGroup.Name="A1_LDM") or (myGroup.Name="A0_LDM") or (myGroup.Name="RAZITKO_LDM") Then
Dim symbolSheet As Drawings.DrawingSheet = AskDrawingSheet(myGroup)
lw.WriteLine("" & symbolSheet.Tag)
'If currentSheet.Tag=symbolSheet.Tag Then
' groupsToDelete.Add(myGroup)
'End If
End If
Loop Until tmpGrp = NXOpen.Tag.Null
Dim nErrs1 As Integer
nErrs1 = theSession.UpdateManager.AddToDeleteList(groupsToDelete.ToArray)
Dim nErrs2 As Integer
nErrs2 = theSession.UpdateManager.DoUpdate(markId1)
End Sub
' This function will work for:
' an object which "Resides on drawing" or is "View Dependent In" a DraftingView
' a DraftingView
' a DrawingSheet.View
' Returns Nothing for all other (ie. model mode) objects
'code by Amy Webster of GTAC,
'GTAC document: nx_api4936 or nx_api4937
Function AskDrawingSheet(ByVal theObject As TaggedObject) As Drawings.DrawingSheet
Dim theView As View = TryCast(theObject, View)
If Not theView Is Nothing Then
Dim sheetTag As Tag = Nothing
Try
theUFSession.Draw.AskDrawingOfView(theView.Tag, sheetTag)
Return Utilities.NXObjectManager.Get(sheetTag) ' the drawing it is on
Catch ex As NXException
Return Nothing ' it is a model view
End Try
End If
Dim viewName As String = Nothing
Dim status As Integer = Nothing
Try
theUFSession.View.AskViewDependentStatus(theObject.Tag, status, viewName)
Catch ex As NXException
Return Nothing
End Try
If status = 0 Then Return Nothing ' it is a model mode object
Dim viewTag As Tag = Nothing
theUFSession.View.AskTagOfViewName(viewName, viewTag)
Dim viewType As Integer = Nothing
Dim viewSubtype As Integer = Nothing
theUFSession.View.AskType(viewTag, viewType, viewSubtype)
If viewType = 0 Then Return Nothing ' it is view dependent in a modeling view
Dim drawingTag As Tag = Nothing
theUFSession.Draw.AskDrawingOfView(viewTag, drawingTag)
Return Utilities.NXObjectManager.Get(drawingTag) ' the drawing it is on!
End Function
End Module
I test the sheet it belongs to it like this, but it doesn't work for sole groups...
Dim symbolSheet As Drawings.DrawingSheet = AskDrawingSheet(partObject)
If currentSheet.Tag=symbolSheet.Tag Then
Dim objects1(0) As NXOpen.DisplayableObject
objects1(0)=partObject
Dim editSettingsBuilder1 As NXOpen.Annotations.EditSettingsBuilder = Nothing
editSettingsBuilder1 = workPart.SettingsManager.CreateAnnotationEditSettingsBuilder(objects1)
editSettingsBuilder1.InheritSettingsFromPreferences()
Dim nXObject2 As NXOpen.NXObject = Nothing
nXObject2 = editSettingsBuilder1.Commit()
editSettingsBuilder1.Destroy()
End If
Next
re: group members
I have some code that reports all the groups in the work part and how many members are in each group. The .AskGroupData method returns an array of tags that represent the group members. You can use the NXObject manager to get the objects as an NXObject or TaggedObject; from there you can query the underlying object type with .GetType and cast it to a more specific object type if needed.
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Module Module1
Sub Main()
Dim theSession As Session = Session.GetSession()
Dim theUfSession As UFSession = UFSession.GetUFSession
Dim workPart As Part = theSession.Parts.Work
Dim lw As ListingWindow = theSession.ListingWindow
lw.Open()
Dim tmpGrp As NXOpen.Tag = NXOpen.Tag.Null
Dim myGroup As Group
Dim numMembers As Integer
Dim memberTags() As Tag
Dim numOwningGroups As Integer
Dim owningGroups() As Tag
Do
theUfSession.Obj.CycleObjsInPart(workPart.Tag, UFConstants.UF_group_type, tmpGrp)
'skip the initial null tag
If tmpGrp = NXOpen.Tag.Null Then
Continue Do
End If
myGroup = Utilities.NXObjectManager.Get(tmpGrp)
lw.WriteLine("group name: " & myGroup.Name)
theUfSession.Group.AskGroupData(myGroup.Tag, memberTags, numMembers)
lw.WriteLine(" group contains: " & numMembers.ToString & " members")
theUfSession.Group.AskAllOwningGroups(myGroup.Tag, numOwningGroups, owningGroups)
If numOwningGroups > 0 Then
lw.WriteLine(" owned by: " & numOwningGroups.ToString & " other group(s)")
End If
lw.WriteLine("")
Loop Until tmpGrp = NXOpen.Tag.Null
End Sub
Public Function GetUnloadOption(ByVal dummy As String) As Integer
'Unloads the image immediately after execution within NX
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
End Function
End Module
Thanks for your help
I worked with your advice and finished the code with .AskGroupData method and made it work.
Cheers.