Hallo an alle Freaks in VBA bzw. des API von Solidworks:
Ich verzweifle gerade an einem Versuch, den k-Faktor einer "skizzierten Biegung" eines Sheet-metal Teiles über VBA zu verändern.
Der Code stammt größtenteils aus den Beispielen Solidworks 2005
Hier der Code:
_____________________________________________________________________
'--------------------------------------------
'
' Preconditions:
' (1) Model document is open.
' (2) Sketched bend is selected.
'
' Postconditions: Size of bend radius of the selected sketched bend
' is increased by 1.5 times.
'---------------------------------------------
Option Explicit
Public Enum swFlangePositionTypes_e
swFlangePositionTypeMaterialInside = 1
swFlangePositionTypeMaterialOutside = 2
swFlangePositionTypeBendOutside = 3
swFlangePositionTypeBendCenterLine = 4
swFlangePositionTypeBendSharp = 5
End Enum
Public Enum swBendAllowanceTypes_e
swBendAllowanceBendTable = 1
swBendAllowanceKFactor = 2
swBendAllowanceDirect = 3
swBendAllowanceDeduction = 4
End Enum
Sub DumpCustomBendAllowanceInfo( _
sPadStr As String, _
swCustBendAllow As SldWorks.CustomBendAllowance)
Debug.Print sPadStr & "Type = " & swCustBendAllow.Type
Print #1, sPadStr & "Type = " & swCustBendAllow.Type
Debug.Print sPadStr & "BendAllowance = " & swCustBendAllow.BendAllowance * 1000# & " mm"
Print #1, sPadStr & "BendAllowance = " & swCustBendAllow.BendAllowance * 1000# & " mm"
Debug.Print sPadStr & "BendDeduction = " & swCustBendAllow.BendDeduction * 1000# & " mm"
Print #1, sPadStr & "BendDeduction = " & swCustBendAllow.BendDeduction * 1000# & " mm"
Debug.Print sPadStr & "BendTableFile = " & swCustBendAllow.BendTableFile
Print #1, sPadStr & "BendTableFile = " & swCustBendAllow.BendTableFile
Debug.Print sPadStr & "KFactor = " & swCustBendAllow.KFactor
Print #1, sPadStr & "KFactor = " & swCustBendAllow.KFactor
End Sub
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelData As SldWorks.SelectData
Dim swFeat As SldWorks.feature
Dim swSketchBend As SldWorks.SketchedBendFeatureData
Dim swBendFeat As SldWorks.BendsFeatureData
Dim swCustBendAllow As SldWorks.CustomBendAllowance
Dim swFace As SldWorks.face2
Dim swEnt As SldWorks.Entity
Dim nFace_X As Double
Dim nFace_Y As Double
Dim nFace_Z As Double
Dim i As Long
Dim bRet As Boolean
Dim Destpath As String
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swSelData = swSelMgr.CreateSelectData
Set swFeat = swSelMgr.GetSelectedObject5(1)
Set swSketchBend = swFeat.GetDefinition
Set swCustBendAllow = swSketchBend.GetCustomBendAllowance
Debug.Print "File = " & swModel.GetPathName
Dim PSTR As Integer
PSTR = Len(swModel.GetPathName)
Destpath = Left(swModel.GetPathName, PSTR - 7) & ".txt"
Open Destpath For Output As #1
Debug.Print " " & swFeat.Name
Print #1, " " & swFeat.Name
Debug.Print " BendAngle = " & swSketchBend.BendAngle * 57.2957795130823 & " deg"
Print #1, " BendAngle = " & swSketchBend.BendAngle * 57.2957795130823 & "; deg; "
Debug.Print " BendRadius = " & swSketchBend.BendRadius * 1000# & " mm"
Print #1, " BendRadius = " & swSketchBend.BendRadius * 1000# & " mm"
Debug.Print " PositionType = " & swSketchBend.PositionType
Print #1, " PositionType = " & swSketchBend.PositionType
Debug.Print " ReverseDirection = " & swSketchBend.ReverseDirection
Print #1, " ReverseDirection = " & swSketchBend.ReverseDirection
Debug.Print " UseDefaultBendAllowance = " & swSketchBend.UseDefaultBendAllowance
Print #1, " UseDefaultBendAllowance = " & swSketchBend.UseDefaultBendAllowance
Debug.Print " UseDefaultBendRadius = " & swSketchBend.UseDefaultBendRadius
Print #1, " UseDefaultBendRadius = " & swSketchBend.UseDefaultBendRadius
' Roll back to get to fixed face
bRet = swSketchBend.AccessSelections(swModel, Nothing): Debug.Assert bRet
Set swFace = swSketchBend.GetFixedFace(nFace_X, nFace_Y, nFace_Z)
Set swEnt = swFace
Debug.Print " Fixed Face = (" & nFace_X * 1000# & ", " & nFace_Y * 1000# & ", " & nFace_Z * 1000# & ") mm"
Debug.Print " Custom Bend Allowance:"
Print #1, " Custom Bend Allowance = " & swCustBendAllow.Type & " (Biegetabelle = 1; K-Faktor = 2; Direct = 3; Deduction = 4) "
DumpCustomBendAllowanceInfo " ", swCustBendAllow
bRet = swEnt.Select4(True, swSelData): Debug.Assert bRet
bRet = swEnt.Select4(True, swSelData): Print #1, bRet
' Make some changes
swSketchBend.UseDefaultBendRadius = False
swSketchBend.BendRadius = swSketchBend.BendRadius * 1.5
MsgBox swCustBendAllow.KFactor
swCustBendAllow.KFactor = 0.52
' Apply changes
swSketchBend.SetCustomBendAllowance (swCustBendAllow)
bRet = swFeat.ModifyDefinition(swSketchBend, swModel, Nothing): Print #1, bRet
Close #1
End Sub
_______________________________________________
Kann mir irgend jemand weiterhelfen, wie die Zeile:
swSketchBend.SetCustomBendAllowance (swCustBendAllow)
richtig heissen müsste, damit der k-Faktor auch richtig an das Feature übergeben wird ????
Ich weiss, ich erwarte damit allerhand, doch würde sich die Mühe bestimmt lohnen, da das Thema Biegezugabe, gestreckte Länge bei Blechteilen immer wieder eine große Rolle spielt und mir nun ein kleines Tool vorschwebt, das sehr hilfreich sein könnte.
mfg
Konrad
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP