Chciałbym zrobić bardzo proste makro z linią z jego oceną:

Nagrywam, a następnie, gdy uruchamiam makro, zatrzymuje się ono na wymiarze, w którym ruchome okno prosi mnie o wpisanie wartości; Chciałbym, aby ocena 50 ustaliła się sama. Ale nawet gdy wprowadzam wartość, program przechodzi do debugowania, ponieważ czeka, aż będzie mógł umieścić wymiar 50, który został już ustawiony.

Czy ktoś wie, jak przystąpić do automatycznego wymiarowania szkicu?
1 polubienie
Witam
Musisz dezaktywować opcję wprowadzania wymiaru
1 polubienie
W kodzie należy dodać na początku: boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False), a następnie na końcu kodu boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
1 polubienie
@Cyril.f
Próbuję, ale pojawia się komunikat o błędzie:

Musielibyśmy wykonać dwa lub trzy sprawdzenia, z jednej strony swapp jest zadeklarowany jako Sldworks.Sldworks (może rozwiązać problem, a nie jest zadeklarowany jako obiekt).
W takim razie, czy w referencjach nie brakuje odniesień?
1 polubienie
Tak, swapp jest zadeklarowany jako SldWorks.sldworks
Suszę, czy mógłbyś umieścić cały kod, wstawiając go z opcją wstawienia kodu z forum, abym mógł go odzyskać do zobaczenia.
W przeciwnym razie należy przynajmniej zaewidencjonować odwołania (Narzędzia> odwołania), jeśli włączone są następujące odwołania:
Biblioteka typów rozszerzalności Solidworks 201X
Biblioteka typów Sldworks 201X
Biblioteka typów stałych Solidworks 201X
Biblioteka typów poleceń Solidworks 201X
Ze swojej strony jestem na 2016 roku i nie ma problemów.
Przepraszamy, oto początkowy kod:
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim skSegment As Object
Przyciemnij myDisplayDim Jako obiekt
Przyciemnij myDimension jako obiekt
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
Part.SketchManager.InsertSketch Prawda
boolstatus = Part.Extension.SelectByID2("Plan twarzy", "PŁASZCZYZNA", -6.71223122593068E-02, 0.049524099883856, 0, Fałsz, 0, Nic, 0)
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
Part.ClearSelection2 Prawda
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, False, 0, Nic, 0)
Ustaw myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Part.ClearSelection2 Prawda
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.ClearSelection2 Prawda
Part.SketchManager.InsertSketch Prawda
Koniec subwoofera
Oto drugi edytowany kod:
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim skSegment As Object
Przyciemnij myDisplayDim Jako obiekt
Przyciemnij myDimension jako obiekt
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False)
Part.SketchManager.InsertSketch Prawda
boolstatus = Part.Extension.SelectByID2("Plan twarzy", "PŁASZCZYZNA", -6.71223122593068E-02, 0.049524099883856, 0, Fałsz, 0, Nic, 0)
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, False, 0, Nic, 0)
Ustaw myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch Prawda
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, Prawda)
Koniec subwoofera
Witam
Zamień "Dim swApp As SldWorks.SldWorks" na "Dim swApp As Object", to powinno zadziałać.
Pozdrowienia
1 polubienie
A także, bądź ostrożny, gdy dotkniesz parametrów SW, lepiej jest odczytać wartość parametru i, jeśli musisz go zmodyfikować na potrzeby zabiegu, przywrócić go do stanu początkowego po zakończeniu zabiegu:
Dim value As Boolean
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
###### Là tu mets ton traitement #######
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
Pozdrowienia
3 polubienia
Rzeczywiście, d.roger, nie sprecyzowałem, ponieważ jego sw miał wejść do kursów.
W każdym razie, ustawienie na False, a następnie True działa nawet wtedy, gdy opcja jest już zaznaczona lub odznaczona (celowo uprościłem).
W przypadku swApp jako obiektu, próbowałem z obydwoma (sldworks.sldworks i object) w 2016 roku działa dla mnie. Zaletą drugiego jest to, że ma autouzupełnianie przy wprowadzaniu kodu i przegląd tego, czego oczekuje każde wywołanie funkcji, bez konieczności trzymania pomocy cały czas otwartej ;)
Edycja: Wreszcie działa z Object, z SldWorks.SldWorks generuje błąd kompilacji, wydaje mi się, że wczoraj trzymał typ Object w pamięci.
1 polubienie
Nie ma sposobu, aby nie wprowadzić wymiaru, po prostu za pomocą argumentu funkcji, zamiast cofnąć, a następnie przywrócić ogólne parametry...??
Uwaga: jeśli plik zawiera już szkic, ten utworzony przez makro nie będzie miał charakteru "sketch1", ale będzie miał inny numer... (??)
1 polubienie
@ Olivier42 : Witam, nie można użyć argumentu, ponieważ jest to parametr ogólny. O ile mi wiadomo, w interfejsach API nie ma nic, co pozwalałoby na zastąpienie tych parametrów za pomocą argumentu.
Jest to potwierdzone przez pomoc API oprogramowania: Przed wywołaniem tej metody możesz wywołać ISldWorks::SetUserPreferenceToggle z swUserPreferenceToggle_e.swInputDimValOnCreate , aby pominąć okno dialogowe, które pozwala użytkownikowi na wpisanie wartości wymiaru.
1 polubienie
Witam
Ogólna idea polega na tym, aby wykonać kompletne szkice zwymiarowane za pomocą programowania, a następnie oczywiście umieścić na nich funkcje głośności. Ważne jest jednak, aby na szkicu były boki. Stąd test z pojedynczą linią i jego szanse.
Za jakiś czas wypróbuję modyfikacje.
Dziękuję za pomoc!
Nadal nie.
Oto nowy kod
Dim swApp As Object
Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Wartość przyciemniona Jako wartość logiczna
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
wartość = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
Jeśli wartość = Prawda, to
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
Zakończ jeżeli:
boolstatus = Part.Extension.SelectByID2("Płaszczyzna twarzy", "PŁASZCZYZNA", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.SketchManager.InsertSketch Prawda
Dim skSegment As Object
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, False, 0, Nic, 0)
Przyciemnij myDisplayDim Jako obiekt
Ustaw myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
Przyciemnij myDimension jako obiekt
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch Prawda
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, wartość)
Koniec subwoofera
Utknie w tym samym miejscu
