Witam wszystkich,
Czy w zespole można utworzyć kostkę wizualizacji dla wszystkich części znajdujących się w tym samym złożeniu?
bo mam wrażenie, że żeby powstał sześcian, trzeba edytować każdy element.
Czy istnieje sposób, aby to zrobić lub zautomatyzować za pomocą pętli vba tworzenie kostki wizualizacji dla każdego pomieszczenia.
Z góry dziękuję.
Witam
Aby utworzyć go na częściach, zarówno za pomocą makra, jak i ręcznie, musisz edytować każdą część.
Ale jest to szybsze i prostsze za pomocą makra, ponieważ odbywa się to jednym kliknięciem.
Pozdrowienia
Witam i dziękuję d.roger za interwencję,
Koduję w VBA dla Excela, ale VBA dla Solidworks jest dla mnie problemem.
Próbowałem zmodyfikować kod otwierający wszystkie części zespołu i utworzyć sześcian wizualizacji za każdym razem, gdy otwierałem, ale nie tworzy to dla mnie sześcianu.
I nie widzę, gdzie jest źle.
W przypadku, gdy wstawię makro, jeśli ktoś zobaczy, gdzie jest problem.
remplprop.swp powiedział:
Sześcian tworzy się na zmiennej Part za pomocą tego wiersza "Set BoundingBox = Part. FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)", z wyjątkiem zmiennej "Part", która jest dołączona do zestawu, ponieważ na początku jest to "swApp.ActiveDoc", więc kiedy uruchamiam makro, sześcian jest tworzony w zestawie. Musisz utworzyć swoją kostkę na zmiennej "swModel", która jest częścią, którą otwierasz za pomocą akcji wiersza "Set swModel = swApp.ActivateDoc(Document)", więc pierwszą modyfikacją jest poprawienie przynajmniej linii w następujący sposób:
If Not CmpDoc.GetPathName Like "*\AppData\*" Then
T = CmpDoc.CustomInfo("Type")
If T = "" Then
Set swModel = swApp.ActivateDoc(Document)
swModel.ForceRebuild ' Reconstruction
swModel.ShowNamedView2 "*Isométric", -1 ' Vue Isométrique
swModel.ViewDisplayShaded ' Vue Ombrée
swModel.ViewZoomtofit2 ' Zoom au mieux
Dim BoundingBox As Object
Set BoundingBox = swModel.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
Part.GraphicsRedraw2
'Dim BoundingBox As Object
'Set BoundingBox = Part.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
Part.ClearSelection2 True
To makro staje się wtedy funkcjonalne...
Pozdrowienia
Podobnie jak w drugiej dyskusji:
I przełącz swoje monety w tryb rozwiązany, w przeciwnym razie to nie zadziała...
Pozdrowienia
1 polubienie
Dziękuję za ten pierwszy krok, z drugiej strony mam 7 części w moim zespole i tylko 4 części mają kostkę wizualizacji, których ostatnie 3 nie mają.
Musi być jakiś problem w pętli, że nie uwzględni wszystkich części?
Przepraszam, ale jaki jest rozwiązany tryb, przepraszam za moją ignorancję.
Podczas wczytywania złożenia w Solidworks możliwe jest otwarcie części w trybie rozdzielczym lub lekkim, różnica polega na tym, że albo części są faktycznie otwarte, albo na ekranie wyświetlana jest tylko ich graficzna wizualizacja. Zobacz TUTAJ , aby zapoznać się z korzyściami płynącymi z trybu rozdzielczego i TUTAJ , aby zapoznać się z lekkimi częściami.
Kliknij więc zespół prawym przyciskiem myszy i wybierz "Ustaw lekkie części na rozwiązane" w menu kontekstowym, a następnie spróbuj ponownie użyć makra.
Pozdrowienia
Ok, dziękuję za wyjaśnienia.
A ja byłem dobrze w rozdzielczości i nadal mam tylko 4 z 7 elementów, które mają kostkę wizualizacji.
Kiedy uruchamiam zmodyfikowane makro na większym złożeniu, tworzy ono wszystkie kostki wizualizacji, czy nie masz żadnych części powierzchni? a która wersja SW?
Nie, nie mam żadnych części powierzchniowych, a moja wersja to 2018
Właśnie ponownie przeprowadziłem kilka testów i nadal to samo jest moim montażem, jeśli chcesz zrobić kilka testów
mb_entree.zip
Zrobiłem test na innym zespole z 7 częściami i tam działa, nie wiem dlaczego nie działa z tym.
Może zobaczysz coś po swojej stronie.
Czy możesz mi powiedzieć, czy ten kod działa na częściach symetrycznych, czy z powtórzeniem komponentu.
Zrobię kilka testów z mojej strony, aby to sprawdzić, ale jestem ciekaw Twojej opinii
Otrzymuję kostkę wizualizacji na wszystkich częściach twojego zespołu.
Zmodyfikowałem kod w następujący sposób, aby usunąć całą masę linii, które prawdopodobnie nie służą żadnemu celowi:
Dim swApp As Object
'Dim Part As Object
Dim longstatus As Long, longwarnings As Long
Dim swModel As SldWorks.ModelDoc2
Dim bRet As Boolean
Dim swErrors As Long
Dim swWarnings As Long
Dim i As Long
'Dim j As Long
'Dim cCnt As Long
Dim Assembly As ModelDoc2
Dim myAsy As AssemblyDoc
Dim myCmps
Dim CmpDoc As ModelDoc2
Dim myCmp As Component2
'Dim tCmp As Component2
Sub main()
'Dim myModelView As Object
Set swApp = Application.SldWorks
'Set Part = swApp.ActiveDoc
Set Assembly = swApp.ActiveDoc
Set myAsy = Assembly
myCmps = myAsy.GetComponents(False)
For i = 0 To UBound(myCmps)
Set myCmp = myCmps(i)
If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then
'cCnt = 0
Set CmpDoc = myCmp.GetModelDoc
'Cfg = myCmp.ReferencedConfiguration
'compte le nombre d'occurences des composants
'For j = 0 To UBound(myCmps)
'Set tCmp = myCmps(j)
'If tCmp.GetSuppression <> 0 Then
'If tCmp.GetModelDoc2 Is CmpDoc Then
'If tCmp.ReferencedConfiguration = Cfg Then
'cCnt = cCnt + 1
'End If
'End If
'End If
'Next j
Document = CmpDoc.GetPathName
'remplissage propriété Type
'If Not CmpDoc.GetPathName Like "*\AppData\*" Then
'T = CmpDoc.CustomInfo("Type")
'Debug.Print T
'If T = "" Then
Set swModel = swApp.ActivateDoc(Document)
'swModel.ForceRebuild ' Reconstruction
'swModel.ShowNamedView2 "*Isométric", -1 ' Vue Isométrique
'swModel.ViewDisplayShaded ' Vue Ombrée
'swModel.ViewZoomtofit2 ' Zoom au mieux
Dim BoundingBox As Object
Set BoundingBox = swModel.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
'Part.GraphicsRedraw2
'Dim BoundingBox As Object
'Set BoundingBox = Part.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
'Part.ClearSelection2 True
'Enregistre et ferme le document actif en mode silencieux
bRet = CmpDoc.Save3(swSaveAsOptions_Silent, swErrors, swWarnings)
swApp.CloseDoc (Document)
'Else
'End If
'End If
End If
Next i
MsgBox "Cube créé", vbExclamation
End Sub
3 polubienia
Ok, dziękuję za opinię, więc nie rozumiem dlaczego w domu mam problemy, ale może później będę miał wyjaśnienie.
Dziękuję za uporządkowanie kodu, pracowałem również po swojej stronie, aby usunąć to, co nie jest przydatne, ale porównam z Twoim.
Tymczasem wielkie podziękowania za pomoc.
Jeśli będę miał problem wrócę do wątku, w międzyczasie zweryfikuję Twój ostatni post
Kolejne pytanie, które mnie nurtuje, otwieramy wszystkie elementy, ale w złożeniu możemy edytować bez otwierania i oszczędza to czas.
Czy można zrobić to samo z tym makrem?
PS: Twój kod był o wiele bardziej dopracowany niż mój.
Witam
Tak, jest to możliwe w przypadku funkcji EditPart2 , ale należy uważać, aby nie pomylić ModelDoc2, AssemblyDoc i Component2.
Pozdrowienia
Witam
Czy masz coś, co pozwala mi zrozumieć różnicę między tymi funkcjami?
Ponieważ moje badania są zbyt niejasne, aby się w nich odnaleźć.
Witam
Oto przykład, który powinien zrobić to samo, co makro już dostarczone:
Option Explicit
Dim swApp As Object
Dim longstatus As Long
Dim swModel As SldWorks.ModelDoc2
Dim bRet As Boolean
Dim swErrors As Long
Dim swWarnings As Long
Dim i As Long
Dim Assembly As ModelDoc2
Dim myAssy As AssemblyDoc
Dim myCmps As Variant
Dim myCmp As Component2
Dim nInfo As Long
Sub main()
Set swApp = Application.SldWorks
Set Assembly = swApp.ActiveDoc
Set myAssy = Assembly
myCmps = myAssy.GetComponents(False)
For i = 0 To UBound(myCmps)
Set myCmp = myCmps(i)
If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then
bRet = myCmp.Select2(False, 0)
bRet = myAssy.EditPart2(True, True, nInfo)
Set swModel = myAssy.GetEditTarget
Dim BoundingBox As Object
Set BoundingBox = swModel.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
bRet = swModel.Save3(swSaveAsOptions_Silent, swErrors, swWarnings)
myAssy.EditAssembly
End If
Next i
Assembly.ForceRebuild3 True
MsgBox "Cubes créés", vbExclamation
End Sub
Pozdrowienia
Dobry wieczór
Właśnie wypróbowałem twój kod, ale powoduje to awarię Solidworks 2018.
Nie podając mi żadnych elementów, dlaczego się rozbił.
Czy możesz mnie poprowadzić?