visual studio codes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

538 lines
23 KiB

Imports System
Imports NXOpen
Imports NXOpenUI
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports System.Threading
Imports System.Threading.Tasks
Imports NXOpen.Assemblies
Imports Excel = Microsoft.Office.Interop.Excel
Module featureIdentification
Public ufs As UFSession = UFSession.GetUFSession
Public thesession As Session = Session.GetSession
Public lw As ListingWindow = thesession.ListingWindow
Public workpart As Part = thesession.Parts.Work
Public wp = workpart
Public theUI As UI = UI.GetUI
Public basePart1 As NXOpen.BasePart = Nothing
Public partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
Public partstouse1(0) As NXOpen.BasePart
Public partstouse2(0) As NXOpen.BasePart
'################# LOAD TOOLS ##############################
Public philips(0) As NXOpen.BasePart
Public allenm5(0) As NXOpen.BasePart
Public allenm6(0) As NXOpen.BasePart
Public allenm8(0) As NXOpen.BasePart
Public allenm10(0) As NXOpen.BasePart
Public allenm12(0) As NXOpen.BasePart
Public allenm14(0) As NXOpen.BasePart
Public hex8(0) As NXOpen.BasePart
Public hex10(0) As NXOpen.BasePart
Public hex12(0) As NXOpen.BasePart
Public hex14(0) As NXOpen.BasePart
Public hex17(0) As NXOpen.BasePart
Public hex19(0) As NXOpen.BasePart
Public hex24(0) As NXOpen.BasePart
'################# LOAD TOOLS ##############################
Const xlDown As Long = -4121
Const xlRight As Long = -4161
Public app As New Excel.Application()
Public workBooks As Excel.Workbooks = app.Workbooks
Public workBook As Excel.Workbook = app.Workbooks.Add()
Public sheet As Excel.Worksheet = workBook.ActiveSheet
Public cells As Excel.Range = sheet.Cells
Public cell_index = 2
Sub Main()
'Dim thevectorselection As vectorselection = Nothing
Dim dispPart As Part = thesession.Parts.Display
Dim markId1 As NXOpen.Session.UndoMarkId = Nothing
markId1 = thesession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
Try
lw.Open()
lw.WriteLine("working")
Dim green As Integer = 101
Dim blue As Integer = 175
Dim pink As Integer = 150
Dim grey As Integer = 170
Dim brown As Integer = 190
Dim red As Integer = 186
Dim yellow As Integer = 6
partstouse1(0) = load_tool("D:\toll_access\tool1.prt")
partstouse2(0) = load_tool("D:\toll_access\tool2.prt")
philips(0) = load_tool("D:\toll_access\Phillips\Phillips.prt")
allenm5(0) = load_tool("D:\toll_access\Allen bit\Allen_4.prt")
allenm6(0) = load_tool("D:\toll_access\Allen bit\Allen_5.prt")
allenm8(0) = load_tool("D:\toll_access\Allen bit\Allen_6.prt")
allenm10(0) = load_tool("D:\toll_access\Allen bit\Allen_8.prt")
allenm12(0) = load_tool("D:\toll_access\Allen bit\Allen_10.prt")
allenm14(0) = load_tool("D:\toll_access\Allen bit\Allen_12.prt")
hex8(0) = load_tool("D:\toll_access\Hex Socket\HEX_8.prt")
hex10(0) = load_tool("D:\toll_access\Hex Socket\HEX_10.prt")
hex12(0) = load_tool("D:\toll_access\Hex Socket\HEX_12.prt")
hex14(0) = load_tool("D:\toll_access\Hex Socket\HEX_14.prt")
hex17(0) = load_tool("D:\toll_access\Hex Socket\HEX_17.prt")
hex19(0) = load_tool("D:\toll_access\Hex Socket\HEX_19.prt")
hex24(0) = load_tool("D:\toll_access\Hex Socket\HEX_24.prt")
partLoadStatus1.Dispose()
ufs.Ui.SetStatus("Tools loaded from library")
Dim c As ComponentAssembly = dispPart.ComponentAssembly
'to process the work part rather than the display part, comment the previous line and uncomment the following line
'Dim c As ComponentAssembly = workPart.ComponentAssembly
ufs.Ui.SetStatus("creating tool access paths")
If Not IsNothing(c.RootComponent) Then
lw.WriteLine("Assembly: " & c.RootComponent.DisplayName)
'lw.WriteLine(" + Active Arrangement: " & c.ActiveArrangement.Name)
cycle_through_components(c.RootComponent, 0)
Else
lw.WriteLine("Part has no components")
End If
cells(1, 1).columnwidth = 15
cells(1, 1).value() = "PART NO"
cells(1, 2).columnwidth = 40
cells(1, 2).value() = "DESCRIPTION"
cells(1, 3).columnwidth = 30
cells(1, 3).value() = "BELONGING ASSEMBLY"
cells(1, 4).columnwidth = 65
cells(1, 4).value() = "COORDINATES"
cells(1, 5).columnwidth = 17
cells(1, 5).value() = "STANDARD(Y/N?)"
cells(1, 6).columnwidth = 10
cells(1, 6).value() = "THREAD"
cells(1, 7).columnwidth = 16
cells(1, 7).value() = "BOLT/NUT TYPE"
cells(1, 8).columnwidth = 17
cells(1, 8).value() = "TOOL ADDED?"
workBook.SaveAs("D:\tool_access.xlsx")
workBook.Save()
workBook.Close()
app.Quit()
ufs.Ui.SetStatus("end")
thesession.SetUndoMarkName(markId1, " ")
Catch ex As Exception
lw.WriteLine("error" & ex.ToString)
End Try
End Sub
Function load_tool(t_path As String) As NXOpen.Part
thesession.PdmSession.SetNativeMode(True, False)
basePart1 = thesession.Parts.OpenBase(t_path, partLoadStatus1)
thesession.PdmSession.SetNativeMode(False, False)
Dim part1 As NXOpen.Part = CType(basePart1, NXOpen.Part)
Return part1
End Function
Function add_tool(point6 As Point3d, orientation1 As NXOpen.Matrix3x3, c As String, part_add() As NXOpen.BasePart)
'################## COMPONENT BUILDER
Dim addComponentBuilder1 As NXOpen.Assemblies.AddComponentBuilder = Nothing
addComponentBuilder1 = workpart.AssemblyManager.CreateAddComponentBuilder()
'################## COMPONENT POSITIONER
Dim componentPositioner1 As NXOpen.Positioning.ComponentPositioner = Nothing
componentPositioner1 = workpart.ComponentAssembly.Positioner
componentPositioner1.ClearNetwork()
Dim arrangement1 As NXOpen.Assemblies.Arrangement = CType(workpart.ComponentAssembly.Arrangements.FindObject("Arrangement 1"), NXOpen.Assemblies.Arrangement)
componentPositioner1.PrimaryArrangement = arrangement1
componentPositioner1.BeginAssemblyConstraints()
Dim allowInterpartPositioning1 As Boolean = Nothing
allowInterpartPositioning1 = thesession.Preferences.Assemblies.InterpartPositioning
'Dim nullNXOpen_Unit As NXOpen.Unit = Nothing
'################## UNIT DEFINATION
Dim unit1 As NXOpen.Unit = CType(workpart.UnitCollection.FindObject("MilliMeter"), NXOpen.Unit)
Dim unit2 As NXOpen.Unit = CType(workpart.UnitCollection.FindObject("Degrees"), NXOpen.Unit)
'################## COMPONENT NETWOK
Dim network1 As NXOpen.Positioning.Network = Nothing
network1 = componentPositioner1.EstablishNetwork()
Dim componentNetwork1 As NXOpen.Positioning.ComponentNetwork = CType(network1, NXOpen.Positioning.ComponentNetwork)
componentNetwork1.MoveObjectsState = True
Dim nullNXOpen_Assemblies_Component As NXOpen.Assemblies.Component = Nothing
componentNetwork1.DisplayComponent = nullNXOpen_Assemblies_Component
componentNetwork1.MoveObjectsState = True
Dim markId2 As NXOpen.Session.UndoMarkId = Nothing
markId2 = thesession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Assembly Constraints Update")
Dim nullNXOpen_Assemblies_ProductInterface_InterfaceObject As NXOpen.Assemblies.ProductInterface.InterfaceObject = Nothing
'#####################################################################################################################################################
addComponentBuilder1.ReferenceSet = "Use Model"
addComponentBuilder1.Layer = -1
addComponentBuilder1.SetPartsToAdd(part_add)
'#####################################################################################################################################################
Dim markId3 As NXOpen.Session.UndoMarkId = Nothing
markId3 = thesession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Start")
thesession.SetUndoMarkName(markId3, "Point")
workpart.MeasureManager.SetPartTransientModification()
workpart.MeasureManager.ClearPartTransientModification()
thesession.DeleteUndoMark(markId3, Nothing)
'#####################################################################################################################################################
'#####################################################################################################################################################
addComponentBuilder1.SetInitialLocationAndOrientation(point6, orientation1)
'#####################################################################################################################################################
componentNetwork1.Solve()
componentPositioner1.ClearNetwork()
Dim nErrs1 As Integer = Nothing
nErrs1 = thesession.UpdateManager.AddToDeleteList(componentNetwork1)
Dim nErrs2 As Integer = Nothing
nErrs2 = thesession.UpdateManager.DoUpdate(markId2)
componentPositioner1.EndAssemblyConstraints()
Dim logicalobjects1() As NXOpen.PDM.LogicalObject
addComponentBuilder1.GetLogicalObjectsHavingUnassignedRequiredAttributes(logicalobjects1)
Dim t = "TOOL1" + c
lw.WriteLine(t)
addComponentBuilder1.ComponentName = t
Dim nXObject1 As NXOpen.NXObject = Nothing
nXObject1 = addComponentBuilder1.Commit()
Dim errorList1 As NXOpen.ErrorList = Nothing
errorList1 = addComponentBuilder1.GetOperationFailures()
errorList1.Dispose()
'
addComponentBuilder1.Destroy()
Dim nullNXOpen_Assemblies_Arrangement As NXOpen.Assemblies.Arrangement = Nothing
componentPositioner1.PrimaryArrangement = nullNXOpen_Assemblies_Arrangement
thesession.DeleteUndoMark(markId2, Nothing)
thesession.CleanUpFacetedFacesAndEdges()
End Function
Function cycle_through_components(ByVal comp As Component, ByVal indent As Integer)
Dim c As String
Dim y1 As String = Nothing
Dim thread As String = Nothing
Dim btype As String = Nothing
Dim tools As String = Nothing
Dim aflat As String = Nothing
Dim flag3 As Boolean = False
For Each child As Component In comp.GetChildren()
c = child.DisplayName.ToString
If Not child.ReferenceSet.ToString = "Empty" Then
lw.WriteLine(New String(" ", indent * 2) & child.DisplayName())
Try
If child.GetUserAttribute("CATEGORY", NXObject.AttributeType.String, -1).StringValue = "HW (Hardware includes nuts,washers)" Then
lw.WriteLine("hardware")
If Not child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("WASHER") And Not child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("DOWEL") And Not child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("CLAMP") And Not child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("CIRCLIP") And Not child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("PIN") And child.Parent.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("INSTALL") Then
lw.WriteLine(child.Parent.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue)
lw.WriteLine("added")
Dim ref1 As NXOpen.Point3d = New NXOpen.Point3d(0, 0, 0)
Dim ref2 As NXOpen.Matrix3x3 = Nothing
child.GetPosition(ref1, ref2)
lw.WriteLine(ref1.ToString)
lw.WriteLine(ref2.ToString)
If child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("NUT") Then
btype = "FLANGED_NUT"
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("BUTTON") Or child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("SOCKET") Then
btype = "ALEN"
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("BOLT") Then
btype = "HEX_BOLT"
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("SCREW") Then
btype = "SCREW"
add_tool(ref1, ref2, c, philips)
Else
btype = "NA"
add_tool(ref1, ref2, c, partstouse1)
End If
Dim z As String = child.DisplayName.ToString
If z(0) = "K" Then
y1 = "Y"
thread = "{}{}".Format(z(4) + z(5))
tools = btype + thread.ToString
If btype = "HEX_BOLT" Or btype = "FLANGED_NUT" Then
If z.Contains("KAE") Or z.Contains("KC") Then
aflat = thread + 4
Else
aflat = thread + 2
End If
If aflat = 8 Or aflat = 7 Then
add_tool(ref1, ref2, c, hex8)
ElseIf aflat = 10 Then
add_tool(ref1, ref2, c, hex10)
ElseIf aflat = 12 Then
add_tool(ref1, ref2, c, hex12)
ElseIf aflat = 14 Then
add_tool(ref1, ref2, c, hex14)
ElseIf aflat = 16 Then
add_tool(ref1, ref2, c, hex17)
ElseIf aflat = 18 Then
add_tool(ref1, ref2, c, hex19)
ElseIf aflat > 18 Then
add_tool(ref1, ref2, c, hex24)
Else
add_tool(ref1, ref2, c, partstouse1)
End If
End If
If btype = "ALEN" Then
If thread = 5 Then
add_tool(ref1, ref2, c, allenm5)
ElseIf thread = 6 Then
add_tool(ref1, ref2, c, allenm6)
ElseIf thread = 8 Then
add_tool(ref1, ref2, c, allenm8)
ElseIf thread = 10 Then
add_tool(ref1, ref2, c, allenm10)
ElseIf thread = 12 Then
add_tool(ref1, ref2, c, allenm12)
ElseIf thread > 12 Then
add_tool(ref1, ref2, c, allenm14)
Else
add_tool(ref1, ref2, c, partstouse1)
End If
End If
Else
y1 = "N"
If child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M5") Then
thread = 5
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M6") Then
thread = 6
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M8") Then
thread = 8
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M10") Then
thread = 10
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M12") Then
thread = 12
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M14") Then
thread = 14
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M16") Then
thread = 16
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M18") Then
thread = 18
tools = btype + thread.ToString
ElseIf child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue.Contains("M24") Then
thread = 24
tools = btype + thread.ToString
Else
thread = 0
tools = "NA" + thread.ToString
End If
If btype = "HEX_BOLT" Or btype = "FLANGED_NUT" Then
flag3 = True
aflat = thread + 4
If aflat > 6 And aflat < 9 Then
add_tool(ref1, ref2, c, hex8)
ElseIf aflat = 10 Then
add_tool(ref1, ref2, c, hex10)
ElseIf aflat = 12 Then
add_tool(ref1, ref2, c, hex12)
ElseIf aflat = 14 Then
add_tool(ref1, ref2, c, hex14)
ElseIf aflat = 16 Then
add_tool(ref1, ref2, c, hex17)
ElseIf aflat = 18 Then
add_tool(ref1, ref2, c, hex19)
ElseIf aflat > 18 Then
add_tool(ref1, ref2, c, hex24)
Else
add_tool(ref1, ref2, c, partstouse1)
End If
End If
If btype = "ALEN" Then
If thread = 5 Then
add_tool(ref1, ref2, c, allenm5)
ElseIf thread = 6 Then
add_tool(ref1, ref2, c, allenm6)
ElseIf thread = 8 Then
add_tool(ref1, ref2, c, allenm8)
ElseIf thread = 10 Then
add_tool(ref1, ref2, c, allenm10)
ElseIf thread = 12 Then
add_tool(ref1, ref2, c, allenm12)
ElseIf thread > 12 Then
add_tool(ref1, ref2, c, allenm14)
Else
add_tool(ref1, ref2, c, partstouse1)
End If
End If
End If
cells(cell_index, 1).value() = child.DisplayName.ToString
cells(cell_index, 2).value() = child.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue
cells(cell_index, 3).value() = child.Parent.GetUserAttribute("DB_PART_NAME", NXObject.AttributeType.String, -1).StringValue
cells(cell_index, 4).value() = ref1.ToString
cells(cell_index, 5).value() = y1
cells(cell_index, 6).value() = thread
cells(cell_index, 7).value() = btype
If flag3 Then
cells(cell_index, 8).value() = "Tool Added, User to confirm A/F"
flag3 = False
Else
cells(cell_index, 8).value() = "Tool Added"
End If
cell_index += 1
End If
End If
Catch
lw.WriteLine("ddddddd")
GoTo NextIteration
End Try
NextIteration:
End If
cycle_through_components(child, indent + 1)
Next
End Function
Public Function GetUnloadOption(ByVal dummy As String) As Integer
Return CType(NXOpen.Session.LibraryUnloadOption.Immediately, Integer)
End Function
End Module