Korzystanie z kostki wizualizacji w zespole

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ć ModelDoc2AssemblyDoc 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ć?