API - Angular Runtime Dimension - Błąd 424

Cze wszystkim

Próbuję utworzyć wymiar wykonania kątowego na MEP za pośrednictwem interfejsów API. Wybieram jednostki, ale gdy przechodzę do wiersza AddAngularRunningDim, pojawia się błąd 424. Najbardziej niepokojące jest to, że przykład podany przez Dassault również zawiera ten błąd. Dodałem odwołania w Visual Basic.

Skąd może pochodzić ten błąd?

 

Dziękuję za pomoc.

Mickael

Prawdopodobnie zapomniałeś przypisać obiekt, czy możemy zobaczyć Twój kod?

1 polubienie

To kod w budowie, dzięki za wyrozumiałość. ^^

Wziąłem tylko przykład, dostosowując go do mojego modelu,

Przykład jest dostępny tutaj:

http://help.solidworks.com/2016/English/api/sldworksapi/Set_Properties_of_Angular_Running_Dimension_Example_VB.htm

 

 

Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim swmodel As SldWorks.ModelDocExtension
Sun selmgr jako SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim boolstatus As Boolean
Dim errstatus tak długo

Opcja jawna

Sub main()

    Ustaw swApp = Application.SldWorks
    Ustaw część = swApp.ActiveDoc
    Ustaw swmodel = Part.Extension
    
    boolstatus = Part.ActivateView("Widok układu1")
    boolstatus = swmodel. SelectByID2("Line5@Esquisse3D4@Fonds-GRC-Drawing 3@Vue 1", "EXTSKETCHSEGMENT", 0.567145629669376, 0.556256162693586, 0, Prawda, 0, Nic, 0)
    boolstatus = swmodel. SelectByID2("Line5@Esquisse3D5@Fonds-GRC-Drawing 3@Vue", "EXTSKETCHSEGMENT", 0.159796832575413, 0.661760850386628, 0, Prawda, 0, Nic, 0)
   
    

    Ustaw dispdim = swmodel. AddAngularRunningDim(Prawda, Fałsz, Prawda, 0,56, 0,64, 0, stan błędu)
    Part.Extension.ReJogRunningDimension
    Part.Extension.AlignRunningDimension
    

    Part.SetPickMode

Koniec subwoofera

 

W naszym przypadku SolidWorks będzie szukał elementu szkicu Line5@Esquisse3D4@Fonds-GRC-3@Vue rysunku1 Teraz, z jednego rysunku, a nawet z jednego widoku do drugiego, nie będzie to sprawiedliwe.

Jeśli jesteś pewien, że to właściwa rzecz, powiedz mi to jeszcze raz.

 

Ps: Na której linii masz błąd?

1 polubienie

Mam błąd w linii: Set dispdim = swmodel. AddAngularRunningDim(Prawda, Fałsz, Prawda, 0,56, 0,64, 0, stan błędu)

Nie jestem pewien, czy wybrałem właściwy element, ale moim celem jest uzyskanie końca tej linii, aby stał się środkiem mojego wymiaru kątowego, następnie wybieram następną linię i uruchamiam wymiar z tymi wyborami. 

To na listingu to się psuje, więc wmawiam sobie, że odzyskane elementy nie spełniają dobrze swojej roli.

Zastanawiam się, czy pozycja selekcji (w X, Y i Z) oraz ocena (LocX, LocY i LocZ) są poprawne, ale a priori retval AddAngularRunningDim zwraca wartość 0, to znaczy, że nie może stworzyć szans. 

Czy w takim przypadku muszę pobrać współrzędne każdego wiersza , aby ponownie je zaznaczyć w polu SelectByID2?

Jeśli chodzi o LocX, Y i Z, to tak naprawdę nie widzę, czemu one odpowiadają, czy to pozycja "kliknięcia" czy pozycja wartości 0°?

Poruszę ten temat, czy ktoś ma rozwiązanie?

Witam

Spróbuj zmienić ustawienia funkcji (Prawda i Fałsz), aby zobaczyć, co się stanie.

Pozdrowienia.

Witam

Oto kod przykładu zmodyfikowany i funkcjonalny (ale w C#, do przetłumaczenia):

Dokument ModelDoc2 (Dokument Modelu) 2 Część = domyślnie(ModelDoc2);
bool boolstatus = false;
int int intstatus;
obiekt obj;

Część = ((ModelDoc2)(Program.swapp. ActiveDoc));

boolstatus = Rozszerzenie.Części. SelectByID2("", "EDGE", 0.163726736787323, 0.199115091463415, 0.004799999999999993197, true, 0, null, 0);
boolstatus = Rozszerzenie.Części. SelectByID2("", "EDGE", 0.220795425811714, 0.179644597560976, 0.0047999999999881, true, 0, null, 0);

obj = Część.Rozszerzenie. AddAngularRunningDim(false, true, true, 0.154288188900673, 0.0794194886913027, 0, out intstatus);

Rozszerzenie części. ReJogRunningDimension();
Rozszerzenie części. AlignRunningDimension();

Part.SetPickMode();

 

W Twoim przypadku spróbuj umieścić zmienną "dispdim" jako "obiekt", a nie jako "DisplayDimension".

Pozdrowienia

Próbowałem zmienić true i false (wszystkie możliwe kombinacje) funkcji AddAngularRunningDim, działa w szablonie, ale błąd 424 nadal pojawia się w tym wierszu. Te właściwości zarządzają tylko typem wymiaru (od linii do środka, wykres łuku kąta itp.)

 

Próbowałem również podmienić deklarację dispdim w Object. To też nie działa.

 

Jakieś inne pomysły? 

Witam

Wczoraj wieczorem wypróbowałem twój kod i również mam ten sam błąd.

Próbowałem też nagrać makro dodawania tego typu wybrzeża i tutaj sw nie używa tej funkcji tylko AddDimension2().

Wypróbuj go na prototypowym modelu i powinieneś mieć swój kod.

Jeśli w funkcji SelectByID2() zostanie wpisana nazwa pierwszej zmiennej, nie trzeba wypełniać pól X, Y i Z. Znajduje istotę bez jej pozycji.

Pozdrowienia.

Dzięki za rzecz SelectbyID2, musisz umieścić 0 wszędzie, aby wyciąć żądaną jednostkę. Działa doskonale.

Z drugiej strony, przetestowałem również rejestrator i skończyłem z tym samym kodem z AddDimension2, niestety wybierając 2 linie, daje mi to wymiar, ale pozostaje prostym wymiarem kątowym bez 0°, który jest dla mnie niezbędny w naszej pracy jako kotlarza, stąd zainteresowanie (od wersji 2014) wymiarami wykonania kątowego. 

Rozumiem, jak działa ten kod (deklaracja jednostki bazowej, następnie encje drugorzędne, następnie wyświetlanie wymiaru 0° w pozycji LocX, LocY i LocZ  i na końcu następne), ale ten błąd 424 jest prawdziwą tajemnicą.

Czy nie ma błędu w odwołaniach do interfejsu API? (Nigdy nic nie wiadomo i jak na ich przykładzie również zawiera ten błąd...)

Witam

Korzystając z programu w języku C#, jest całkowicie jasne, że istnieje problem z rzutowaniem między obiektem typu "System.Object[]" a obiektem typu "SolidWorks.Interop.sldworks.DisplayDimension". Jak tylko modyfikacja zostanie wprowadzona do tego problemu, wszystko działa normalnie.

Nie wiem wystarczająco dużo o VBA, aby powiedzieć, że problem jest taki sam, ale mogę założyć, że tak, pozwolę specjalistom VBA odpowiedzieć na to pytanie.

Pozdrowienia


capture.png

Rzeczywiście, jest problem z API. Otworzyłem zgłoszenie w Solidworks, które wykryło ten sam problem

Odezwę się do Ciebie po resztę, poprawkę można wprowadzić na następnym Service Packu.

Dziękuję

Oto poprawka zastosowana przez Dassault. Teraz ten przykład doskonale współgra z modelem adv. tutorial (foodprocessor)

'----------------------------------------------------------------------------
' Warunki wstępne:
' 1. Otwórz plik public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Otwórz okno bezpośrednie.
'
' Warunki końcowe:
' 1. Określony kątowy wymiar biegnący zostanie wstawiony do rysunku.
' 2. Sprawdź okno bezpośrednie.
'
UWAGA: Ponieważ model jest używany w innym miejscu, nie zapisuj w nim zmian.
' ---------------------------------------------------------------------------
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim PartExt jako SldWorks.ModelDocExtension
Sun selmgr jako SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim As SldWorks.DisplayDimension
Dim vdim As Variant
Dim boolstatus As Boolean
Dim errstatus tak długo
Słońce i tak długo

Opcja jawna

Sub main()

    Ustaw swApp = Application.SldWorks
    Ustaw część = swApp.ActiveDoc
    Ustaw PartExt = Rozszerzenie części
    

    boolstatus = Part.ActivateView("Widok rysunku1")
    boolstatus = Part.Extension.SelectByID2("", "WIERZCHOŁEK", 0.17648799570697, 0.195948476524618, 4.7999999999881E-03, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.799999999993197E-03, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.99999999999592E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.0000000000019918E-04, Prawda, 0, Nic, 0)
    
    vdim = PartExt.AddAngularRunningDim(Prawda, Prawda, Prawda, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Part.SetPickMode
    
    Dla i = 0 Do UBound(vdim)
        Ustaw dispdim = vdim(i)
        Part.Extension.ReJogRunningDimension
        Part.Extension.AlignRunningDimension
        
        Debug.Print "Wyświetlić łańcuchowe wymiary kątowe? " & dispdim. DisplayAsChain
        Debug.Print "Uruchomić wymiary kątowe dwukierunkowo? " & dispdim. Bieganie w dwóch kierunkach
        Debug.Print "Przedłużyć pomocnicze linie wymiaru od środka kątowego wymiaru roboczego? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Czy linie pomocnicze są utwardzone? " & dispdim. Ucięty
        Debug.Print "Styl linii pomocniczej taki sam jak styl linii odniesienia? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Linia wewnętrzna korzysta z ustawień dokumentu? " & dispdim. ExtensionLineUseDocumentDisplay
        

    Następny

Koniec subwoofera

 

O ile dobrze zrozumiałem, problem wynikał z tego, że funkcja zapętlała się za każdym razem na tym samym elemencie, stąd propozycja zadeklarowania zmiennej i pętli na elementach. 

 

Czy mam rację?

 

Witam

Co się zmieniło:

'----------------------------------------------------------------------------
' Warunki wstępne:
' 1. Otwórz plik public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Otwórz okno bezpośrednie.
'
' Warunki końcowe:
' 1. Określony kątowy wymiar biegnący zostanie wstawiony do rysunku.
' 2. Sprawdź okno bezpośrednie.
'
UWAGA: Ponieważ model jest używany w innym miejscu, nie zapisuj w nim zmian.
' ---------------------------------------------------------------------------
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim PartExt jako SldWorks.ModelDocExtension
Sun selmgr jako SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim As SldWorks.DisplayDimension
Dim vdim As Variant
Dim boolstatus As Boolean
Dim errstatus tak długo
Słońce i tak długo

Opcja jawna

Sub main()

    Ustaw swApp = Application.SldWorks
    Ustaw część = swApp.ActiveDoc
    Ustaw PartExt = Rozszerzenie części
    

    boolstatus = Part.ActivateView("Widok rysunku1")
    boolstatus = Part.Extension.SelectByID2("", "WIERZCHOŁEK", 0.17648799570697, 0.195948476524618, 4.7999999999881E-03, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.799999999993197E-03, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.99999999999592E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, Prawda, 0, Nic, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.0000000000019918E-04, Prawda, 0, Nic, 0)
    
    vdim = PartExt.AddAngularRunningDim(Prawda, Prawda, Prawda, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Part.SetPickMode
    
    Dla i = 0 Do UBound(vdim)
        Ustaw dispdim = vdim(i)
        Part.Extension.ReJogRunningDimension
        Part.Extension.AlignRunningDimension
        
        Debug.Print "Wyświetlić łańcuchowe wymiary kątowe? " & dispdim. DisplayAsChain
        Debug.Print "Uruchomić wymiary kątowe dwukierunkowo? " & dispdim. Bieganie w dwóch kierunkach
        Debug.Print "Przedłużyć pomocnicze linie wymiaru od środka kątowego wymiaru roboczego? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Czy linie pomocnicze są utwardzone? " & dispdim. Ucięty
        Debug.Print "Styl linii pomocniczej taki sam jak styl linii odniesienia? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Linia wewnętrzna korzysta z ustawień dokumentu? " & dispdim. ExtensionLineUseDocumentDisplay

        

    Następny

Koniec subwoofera

Pogrubioną czcionką:

Wystąpił problem z rzutowaniem wartości zwracanej  przez funkcję AddAngularRunningDim() i swDispDim .

Nawiasem mówiąc, funkcja AddAngularRunningDim() zwraca wartość Array(of DisplayDimension), której vba nie mogła rzutować na obiekt.

Kursywą jest to tylko pętla do wyświetlania właściwości utworzonych wymiarów.

Pozdrowienia.

1 polubienie

Witam

Warto wiedzieć, że ogólny "obiekt" w języku C# jest zatem "wariantem" w języku VBA.

Pozdrowienia

Dobry wieczór

Chyba tak. To podejrzane, ale tak ...

Pozdrowienia