Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Option Strict Off
Imports System
Imports NXOpen
Module NXJournal
Sub Main (ByVal args() As String)
Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Make Work Part")
Dim component1 As Assemblies.Component = CType(workPart.ComponentAssembly.RootComponent.FindObject("Part_Where_the_expression_is"), Assemblies.Component)
Dim partLoadStatus1 As PartLoadStatus
theSession.Parts.SetWorkComponent(component1, partLoadStatus1)
workPart = theSession.Parts.Work
partLoadStatus1.Dispose()
theSession.SetUndoMarkName(markId1, "Make Work Part")
Dim markId2 As Session.UndoMarkId
markId2 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Expression")
Dim expression1 As Expression = CType(workPart.Expressions.FindObject("TYPAUSWAHL"), Expression)
Dim nullUnit As Unit = Nothing
Dim oValue as String =Inputbox("Number")
'workPart.Expressions.EditWithUnits(expression1, nullUnit, "2")
workPart.Expressions.EditWithUnits(expression1, nullUnit, oValue)
Dim markId3 As Session.UndoMarkId
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Update Expression Data")
Dim nErrs1 As Integer
nErrs1 = theSession.UpdateManager.DoUpdate(markId3)
theSession.DeleteUndoMark(markId3, "Update Expression Data")
Dim markId4 As Session.UndoMarkId
markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Update Expression Data")
Dim nErrs2 As Integer
nErrs2 = theSession.UpdateManager.DoUpdate(markId4)
theSession.DeleteUndoMark(markId4, "Update Expression Data")
Dim markId5 As Session.UndoMarkId
markId5 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Make Work Part")
Dim nullAssemblies_Component As Assemblies.Component = Nothing
Dim partLoadStatus2 As PartLoadStatus
theSession.Parts.SetWorkComponent(nullAssemblies_Component, partLoadStatus2)
workPart = theSession.Parts.Work
partLoadStatus2.Dispose()
theSession.SetUndoMarkName(markId5, "Make Work Part")
End Sub
End Module
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Module Module1
Dim theSession As Session = Session.GetSession()
Dim dispPart As Part = theSession.Parts.Display
Dim workPart As Part = theSession.Parts.Work
Dim lw As ListingWindow = theSession.ListingWindow
Sub Main()
If IsNothing(theSession.Parts.Work) Then
'active part required
Return
End If
'lw.SelectDevice(ListingWindow.DeviceType.Window, "")
lw.SelectDevice(ListingWindow.DeviceType.None, "")
lw.Open()
Const undoMarkName As String = "change component expression"
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, undoMarkName)
'*****
'change the following line to the desired component display name
Const compName As String = "WIDGET"
'*****
Dim theComponent As Assemblies.Component = Nothing
Try
' TODO: Add your application code here
theComponent = FindComponent(compName)
If IsNothing(theComponent) Then
lw.WriteLine("component not found")
'ask user to select component
If SelectComponent("Select a component", theComponent) = Selection.Response.Cancel Then
'user pressed cancel, exit journal
Return
End If
Else
lw.WriteLine("component found, tag: " & theComponent.Tag.ToString)
End If
Catch ex As NXException
theSession.UndoToMark(markId1, undoMarkName)
MsgBox(ex.Message)
Finally
End Try
lw.WriteLine("component.DisplayName: " & theComponent.DisplayName)
MakeWorkPart(theComponent)
Dim expToFind As String = "TypeChange"
Try
Dim myExp As Expression
myExp = workPart.Expressions.FindObject(expToFind)
lw.WriteLine(myExp.Name)
lw.WriteLine(myExp.RightHandSide)
myExp.RightHandSide = "1"
Catch ex As NXException
'MsgBox(ex.Message)
If ex.ErrorCode = 3520016 Then
'no object found with this name
'code to handle this error
lw.WriteLine("expression not found with name: " & expToFind)
Else
'code to handle other errors
lw.WriteLine(ex.ErrorCode & ": " & ex.Message)
End If
End Try
lw.Close()
End Sub
Function FindComponent(ByVal theName As String) As Assemblies.Component
Dim tempComp As Assemblies.Component = Nothing
lw.WriteLine("searching: " & dispPart.Leaf)
Try
Dim c As Assemblies.ComponentAssembly = dispPart.ComponentAssembly
If Not IsNothing(c.RootComponent) Then
tempComp = SearchComponentChildren(c.RootComponent, theName)
Else
'no components
Return Nothing
End If
Catch ex As NXException
MsgBox("Error: " & ex.Message)
Return Nothing
End Try
Return tempComp
End Function
Function SearchComponentChildren(ByVal comp As Assemblies.Component, ByVal theName As String) As Assemblies.Component
Dim tempComp As Assemblies.Component
lw.WriteLine("searching through components...")
For Each child As Assemblies.Component In comp.GetChildren()
lw.WriteLine("...processing: " & child.DisplayName)
If child.GetChildren.Length <> 0 Then
'*** this is a subassembly
lw.WriteLine("...this is a subassembly, searching through its components...")
tempComp = SearchComponentChildren(child, theName)
Else
'this component has no children (it is a leaf node)
'add any code specific to bottom level components
If child.DisplayName.ToUpper = theName.ToUpper Then
tempComp = child
lw.WriteLine("component found, returning: " & tempComp.DisplayName)
Return tempComp
End If
End If
Next
'we've run through all the children and didn't find it...
Return Nothing
End Function
Function SelectComponent(ByVal prompt As String, ByRef selObj As TaggedObject) As Selection.Response
Dim theUI As UI = UI.GetUI
Dim title As String = "Select a component"
Dim includeFeatures As Boolean = False
Dim keepHighlighted As Boolean = False
Dim selAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific
Dim cursor As Point3d
Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
Dim selectionMask_array(0) As Selection.MaskTriple
With selectionMask_array(0)
.Type = UFConstants.UF_component_type
.Subtype = UFConstants.UF_component_subtype
End With
Dim resp As Selection.Response = theUI.SelectionManager.SelectTaggedObject(prompt, _
title, scope, selAction, _
includeFeatures, keepHighlighted, selectionMask_array, _
selobj, cursor)
If resp = Selection.Response.ObjectSelected OrElse resp = Selection.Response.ObjectSelectedByName Then
Return Selection.Response.Ok
Else
Return Selection.Response.Cancel
End If
End Function
Sub MakeWorkPart(ByVal theComponent As Assemblies.Component)
Dim partLoadStatus1 As PartLoadStatus
Try
theSession.Parts.SetWorkComponent(theComponent, PartCollection.RefsetOption.Current, PartCollection.WorkComponentOption.Visible, partLoadStatus1)
workPart = theSession.Parts.Work
Catch ex As NXException
MsgBox("Error: " & ex.Message)
Finally
partLoadStatus1.Dispose()
End Try
End Sub
End Module