Ich möchte ein sehr einfaches Makro mit einer Zeile mit der Bewertung erstellen:
Ich mache die Aufnahme, und wenn ich das Makro starte, stoppt es bei der Dimension, in der das schwebende Fenster mich auffordert, einen Wert einzugeben. Ich hätte mir gewünscht, dass sich die Bewertung von 50 von selbst setzt. Aber selbst wenn ich einen Wert eingebe, geht das Programm in das Debuggen, weil es darauf wartet, die bereits eingestellte Dimension von 50 setzen zu können.
Weiß jemand, wie man vorgeht, um eine Skizze automatisch zu bemaßen?
1 „Gefällt mir“
Hallo
Sie müssen die Option Bemaßung eingeben deaktivieren
1 „Gefällt mir“
Im Code müssen Sie am Anfang hinzufügen: boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False) dann am Ende des Codes boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
1 „Gefällt mir“
@Cyril.f
Ich versuche es, aber ich erhalte eine Fehlermeldung:
Wir müssten zwei oder drei Überprüfungen durchführen, auf der einen Seite ist swapp als Sldworks.Sldworks deklariert (es kann das Problem lösen, anstatt als Objekt deklariert zu werden).
Fehlen dann nicht Referenzen in den Referenzen?
1 „Gefällt mir“
Ja, swapp wird als SldWorks.sldworks deklariert.
Ich trockne, könnten Sie den gesamten Code einfügen, indem Sie ihn einfügen, mit der Option, Code aus dem Forum einzufügen, damit ich ihn wieder sehen kann.
Andernfalls checken Sie zumindest die Referenzen (Extras> Referenzen) ein, wenn die folgenden Referenzen aktiviert sind:
Solidworks 201X Erweiterbarkeits-Typenbibliothek
Sldworks 201X-Typbibliothek
Solidworks 201X Bibliothek mit konstanten Typen
Solidworks 201X Typbibliothek für Befehle
Ich für meinen Teil bin auf 2016 und keine Probleme.
Entschuldigung, hier ist der ursprüngliche Code:
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
SkSegment als Objekt dimmen
MyDisplayAls Objekt dimmen
MyDimension als Objekt dimmen
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Part.SketchManager.InsertSketch True
boolstatus = Part.Extension.SelectByID2("Flächenplan", "PLANE", -6.71223122593068E-02, 0.049524099883856, 0, Falsch, 0, Nichts, 0)
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
Part.ClearSelection2 Wahr
boolstatus = Part.Extension.SelectByID2("Zeile1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Falsch, 0, Nichts, 0)
Set myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Part.ClearSelection2 Wahr
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.ClearSelection2 Wahr
Part.SketchManager.InsertSketch True
Ende Sub
Es ist in SolidWorks 2016 verfügbar
Hier sind die Referenzen:
Hier ist der zweite bearbeitete Code:
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
SkSegment als Objekt dimmen
MyDisplayAls Objekt dimmen
MyDimension als Objekt dimmen
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, Falsch)
Part.SketchManager.InsertSketch True
boolstatus = Part.Extension.SelectByID2("Flächenplan", "PLANE", -6.71223122593068E-02, 0.049524099883856, 0, Falsch, 0, Nichts, 0)
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Zeile1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Falsch, 0, Nichts, 0)
Set myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
Ende Sub
Hallo
Ersetzen Sie "Dim swApp As SldWorks.SldWorks" durch "Dim swApp As Object", dies sollte funktionieren.
Herzliche Grüße
1 „Gefällt mir“
Und seien Sie auch vorsichtig, wenn Sie die SW-Parameter berühren, ist es vorzuziehen, den Wert des Parameters zu lesen und, wenn Sie ihn für eine Behandlung ändern müssen, ihn am Ende der Behandlung in seinen ursprünglichen Zustand zurückzuversetzen:
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)
Herzliche Grüße
3 „Gefällt mir“
In der Tat, d.roger, ich habe es nicht spezifiziert, da sein sw so eingestellt war, dass er in die Quoten einging.
In jedem Fall funktioniert ein Setzen auf False und dann True auch dann, wenn die Option bereits aktiviert oder deaktiviert ist (ich habe es bewusst vereinfacht).
Für die swApp als Objekt habe ich es mit beiden (sldworks.sldworks und object) auf 2016 versucht, es funktioniert bei mir. Der Vorteil der zweiten besteht darin, eine Autovervollständigung bei der Eingabe des Codes zu haben und einen Überblick darüber zu haben, was von jedem Funktionsaufruf erwartet wird, ohne die Hilfe ständig offen halten zu müssen ;)
Bearbeiten: Endlich funktioniert es mit Object, mit SldWorks.SldWorks generiert es einen Kompilierungsfehler, ich glaube, gestern hatte es den Objekttyp im Speicher behalten.
1 „Gefällt mir“
Es gibt keine Möglichkeit, den Dimensionseintrag nicht zu machen, nur durch ein Argument der Funktion, anstatt die allgemeinen Parameter rückgängig zu machen und dann wieder einzusetzen...??
Hinweis: Wenn die Datei bereits eine Skizze enthält, ist die vom Makro erstellte Skizze nicht "sketch1", sondern mit einer anderen Nummer... (??)
1 „Gefällt mir“
@ Olivier42 : Hallo, es ist nicht möglich, ein Argument zu verwenden, da es sich um einen allgemeinen Parameter handelt. Meines Wissens gibt es in den APIs nichts, was es Ihnen ermöglicht, diese Parameter über ein Argument zu überschreiben.
Dies wird durch die SW-API-Hilfe bestätigt: Bevor Sie diese Methode aufrufen , sollten Sie ISldWorks::SetUserPreferenceToggle mit swUserPreferenceToggle_e.swInputDimValOnCreate aufrufen, um das Dialogfeld zu unterdrücken, in das der Benutzer den Dimensionswert eingeben kann.
1 „Gefällt mir“
Hallo
Die allgemeine Idee ist, komplette Skizzen zu erstellen, die durch Programmierung bemaßt wurden, und dann natürlich Volumenfunktionen darauf zu setzen. Aber es ist wichtig, dass es Seiten in der Skizze gibt. Daher der Test mit einer einzigen Linie und ihren Gewinnchancen.
Ich werde die Modifikationen in Kürze ausprobieren.
Danke für Ihre Hilfe!
Immer noch nicht.
Hier ist der neue Code
Dimmen swApp als Objekt
Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dimmwert: Als boolescher Wert
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Wert = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
Wenn Wert = Wahr, dann
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, falsch)
Ende, wenn
boolstatus = Part.Extension.SelectByID2("Flächenebene", "PLANE", 0, 0, 0, Falsch, 0, Nichts, 0)
Part.SketchManager.InsertSketch True
SkSegment als Objekt dimmen
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Linie1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, Falsch, 0, Nichts, 0)
MyDisplayAls Objekt dimmen
Set myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
MyDimension als Objekt dimmen
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, Wert)
Ende Sub
Es bleibt an der gleichen Stelle hängen
Hier ist die Fehlermeldung: