Będę potrzebował pomocy, pracuję nad tym od dłuższego czasu, ale nie udaje mi się ruszyć do przodu.
Chciałbym utworzyć makro, które automatycznie wypełniałoby właściwości listy spawanych części pewnymi określonymi właściwościami. Oto algorytm, który chciałbym, aby makro wykonało.
- Wykryj na liście spawanych części, które są arkuszami
- Jeśli jest to blacha, odzyskaj grubość blachy i materiału.
- Utwórz dwie właściwości "CODE" i "DETAIL", których wartości będą się różnić w zależności od grubości blachy i materiału (np. dla blachy 2mm ze stali S235: CODE = 02156 i DETAIL=blacha o grubości 2mm - dla blachy 5mm ze stali nierdzewnej: CODE = 02582 i DETAIL=Blacha ze stali nierdzewnej o grubości 5mm.
Dziś mogę zrobić makro, które tworzy te właściwości tylko w pierwszym artykule, ale bez przypisywania wartości zmiennej (niewiele mogę zrobić w skrócie).
Wiem, że dużo pytam, ale zaoszczędziłoby mi to dużo czasu.
Z góry dzięki,
Moe
Dla twojej informacji, nadal korzystam z SolidWorks 2012
Dobry wieczór, bez makro trudno będzie to poprawić! Czy możesz opublikować to w pliku tekstowym?
Myślę jednak, że rozsądniej byłoby rozłożyć swoje problemy na czynniki pierwsze, aby zadać kilka pytań: będzie to jaśniejsze dla wszystkich i będziesz miał o wiele więcej odpowiedzi, zamiast prosić o kompletne gotowe makro!
Pierwsze pytanie brzmi: jak sprawdzić, czy część jest wykonana z blachy za pomocą sterowników PLC?
Wsparcie Mycad właśnie mi powiedziało, że nie ma możliwości filtrowania według tego, czy jest to blacha, czy element spawany mechanicznie. Myślę jednak, że musi być możliwe filtrowanie według innej właściwości (przykład: gdy tworzysz arkusz, SW tworzy właściwość "Folds", której nie tworzy w innych przypadkach).
W rzeczywistości posiadamy arkusze wykonane ze stali nierdzewnej 304L, SUROWEJ STALI NIERDZEWNEJ 304L, stali nierdzewnej 316L i stali nierdzewnej 316L RAW o grubości 1, 1,5, 2, 3 i 5 mm z określonym KODEM dla każdego arkusza.
Chciałbym mieć możliwość uruchomienia makra, które automatycznie dodaje właściwość "CODE" do korpusu "Arkusza" na podstawie wybranej grubości i materiału.
Uwaga: Mam skonfigurowany SolidWorks w języku angielskim, więc konieczne będzie zastąpienie "Grubość blachy" i "Materiał" grubościami i właściwościami materiału części .
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim custPrpMgr As SldWorks.CustomPropertyManager
Dim myThickness As String
Dim myMaterial As String
Dim myCode As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
Set swFeat = swModel.FirstFeature
While Not swFeat Is Nothing
If swFeat.GetTypeName2 = "CutListFolder" Then
Set custPrpMgr = swFeat.CustomPropertyManager
custPrpMgr.Get2 "Sheet Metal Thickness", "", myThickness
Debug.Print "Epaisseur: " & myThickness
custPrpMgr.Get2 "Material", "", myMaterial
Debug.Print "Materiel: " & myMaterial
Select Case myMaterial
Case "INOX 304L"
Select Case myThickness
Case "1"
myCode = "0001"
Case "1.5"
myCode = "0002"
Case "2"
myCode = "0003"
Case "3"
myCode = "0004"
Case "5"
myCode = "0005"
End Select
Case "INOX 304L BRUT"
Select Case myThickness
Case "1"
myCode = "0011"
Case "1.5"
myCode = "0012"
Case "2"
myCode = "0013"
Case "3"
myCode = "0014"
Case "5"
myCode = "0015"
End Select
Case "INOX 316L"
Select Case myThickness
Case "1"
myCode = "0021"
Case "1.5"
myCode = "0022"
Case "2"
myCode = "0023"
Case "3"
myCode = "0024"
Case "5"
myCode = "0025"
End Select
Case "INOX 316L BRUT"
Select Case myThickness
Case "1"
myCode = "0031"
Case "1.5"
myCode = "0032"
Case "2"
myCode = "0033"
Case "3"
myCode = "0034"
Case "5"
myCode = "0035"
End Select
End Select
Debug.Print "Code: " & myCode
Debug.Print
custPrpMgr.Delete "CODE"
custPrpMgr.Add2 "CODE", swCustomInfoType_e.swCustomInfoText, myCode
End If
Set swFeat = swFeat.GetNextFeature
Wend
End Sub