Problem makro sw 2018 i 2020

Witam

 

W 2018 roku stworzyłem proste makro, które działa bardzo dobrze, aw nowej wersji 2020 już nie działa.

Funkcja nic nie zwraca i  rine nie występuje

 

dziękuję za pomoc

 

Tworzenie skali
Przyciemnij myModelView jako obiekt
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Zaimportowana-powierzchnia1", "ODRZUĆ powierzchnię", 0, 0, 0, Prawda, 0, Nic, 0)
Dim fonction_echelle As Object
Ustaw fonction_echelle = Part.FeatureManager.InsertScale(0, Prawda, 1.5, 1.5, 1.5)
 

Witam

Deklarując zmienne, zamiast pozostawiać je w typie obiektu (fonction_echelle jak na przykład SldWorks.Feature), myślę, że pójdzie lepiej.

Po tym, jak domyślam się, brakuje nam części kodu, więc musielibyśmy przejść przez niego krok po kroku, aby zobaczyć, gdzie się zacina (może to pochodzić na przykład z wyboru encji, który jest pusty).

Następnie powinniśmy sprawdzić odwołania do makr, jeśli na liście znajduje się SW2020.

3 polubienia

Ta sama opinia i

Dim myModelView As SldWorks.View
1 polubienie

Witam

Podążając za twoimi odpowiedziami, to nadal nie działa.

Czy masz jakieś inne tropy?

Dziękuję

 

 

 

Witam

Zgodnie z dokumentacją, funkcja InsertScale działa tylko w przypadku obiektów bryłowych lub powierzchniowych. Ale "REFSURFACE" wskazuje na funkcję, która stworzyła ciało, a nie na samo ciało. Fakt, że korpus powierzchni ma taką samą nazwę jak funkcja, może wyjaśniać , dlaczego nadal działał w 2016 roku.

To działa dla mnie w 2020 roku:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim boolstatus As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
boolstatus = swModel.Extension.SelectByID2("Surface-Importée1", "SURFACEBODY", 0, 0, 0, False, 0, Nothing, 0)
Set swFeat = swModel.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, 1.5, 0, 0)
End Sub

Uwaga: dwa ostatnie wyrazy funkcji InsertScale nie są brane pod uwagę, gdy drugi składnik ma wartość "True" (skala jednolita)

3 polubienia

Witam

Nie, nadal nie działa w 2020 roku

 

Czy możesz załączyć plik lub plik testowy?

Witam

Potwierdzam, że kod JeromeP działa na SW2019, więc powinien działać na SW2020.

1 polubienie

Witam, oto mój kod, a moja część, którą otwieram, to zaimportowana powierzchnia.

Format XT

 

Sub main()

Ustaw swApp = Application.SldWorks

Ustaw ModelDoc = swApp.ActiveDoc

Ustaw część = swApp.ActiveDoc


linia 100:
'--------------------------------------------------------------------------------------------------------------------
Dim choix_matiere As String
Dim coef_echelle Ace Double
choix_matiere = InputBox("Jaki jest materiał? 1-APET  2-PS  3-PP")
Jeśli choix_matiere = "1", to coef_echelle = 1,004
Jeśli choix_matiere = "2", to coef_echelle = 1,006
Jeśli choix_matiere = "3", to coef_echelle = 1,015
Jeśli choix_matiere <> "1" i choix_matiere <> "2" i choix_matiere <> "3", to
    MsgBox ("Wprowadź tylko 1, 2 lub 3")
    Idź do linii 100
Zakończ jeżeli:

Tworzenie skali
Przyciemnij myModelView jako obiekt

boolstatus = Part.Extension.SelectByID2("Powierzchnia-zaimportowana1", "SURFACEBODY", 0, 0, 0, Fałsz, 0, Nic, 0)
Sun fonction_echelle jako SldWorks.Feature
Ustaw fonction_echelle = Part.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, coef_echelle, coef_echelle, coef_echelle)

Używanie twojego kodu w takiej postaci, w jakiej jest, działa dla mnie bardzo dobrze.

Można sprawdzić, czy powierzchnia jest prawidłowo dobrana za pomocą:

MsgBox "Sélection: " & boolstatus

 

1 polubienie

Dobry wieczór

Więc co przetestowałem i znalazłem, jeśli zaimportowana powierzchnia jest powierzchnią złożoną (tj. prawie zamknięta), makro nie działa (Ustaw fonction_echelle  zwraca Nic).

Nagrywając makro i wykonując manipulację, oszczędza mi równoważny kod, ale już nie działa i zwraca również Nic.

Edycja: działa na powierzchni odsuniętej od modelu objętościowego, nie działa na powierzchniach importowanych. Prawdopodobnie regresja, jeśli działała wcześniej.