API - Angular Runtime Dimension - Fehler 424

Hallo ihr alle

Ich versuche, über die APIs eine Winkelausführungsdimension auf einem MEP zu erstellen. Ich wähle meine Entitäten aus, aber wenn ich zur Zeile AddAngularRunningDim komme, erhalte ich den Fehler 424. Das Besorgniserregendste ist, dass das von Dassault genannte Beispiel auch diesen Fehler enthält. Ich habe die Verweise in Visual Basic hinzugefügt.

Woher kann dieser Fehler kommen?

 

Danke für Ihre Hilfe.

Mickael

Sie haben wahrscheinlich vergessen, ein Objekt zuzuweisen, können wir Ihren Code sehen?

1 „Gefällt mir“

Es ist ein Kodex im Aufbau, danke für Ihre Nachsicht. ^^

Ich habe mir nur ein Beispiel genommen, indem ich es an mein Modell angepasst habe,

Das Beispiel finden Sie hier:

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

 

 

Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim swmodel als SldWorks.ModelDocExtension
Sun selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim boolstatus als boolescher Wert
Dim errstatus So lange

Option Explizit

Sub main()

    Legen Sie swApp = Application.SldWorks fest
    Set Part = swApp.ActiveDoc
    Set swmodel = Part.Extension
    
    boolstatus = Part.ActivateView("Layoutansicht1")
    boolstatus = SWMODEL. SelectByID2("Line5@Esquisse3D4@Fonds-GRC-Zeichnung 3@Vue 1", "EXTSKETCHSEGMENT", 0.567145629669376, 0.556256162693586, 0, Wahr, 0, Nichts, 0)
    boolstatus = SWMODEL. SelectByID2("Line5@Esquisse3D5@Fonds-GRC-Drawing 3@Vue", "EXTSKETCHSEGMENT", 0.159796832575413, 0.661760850386628, 0, True, 0, Nichts, 0)
   
    

    Legen Sie dispdim = swmodel fest. AddAngularRunningDim(True, False, True, 0.56, 0.64, 0, errstatus)
    Teil.Erweiterung.ReJogRunningDimension
    Part.Extension.AlignRunningDimension
    

    Part.SetPickMode

Ende Sub

 

In Ihrem Fall hier sucht SolidWorks nach dem Skizzenstück Line5@Esquisse3D4@Fonds-GRC-3@Vue der Zeichnung1 Nun, von einer Zeichnung oder sogar von einer Ansicht in eine andere, ist es nicht fair.

Wenn Sie sicher sind, dass es das Richtige ist, sagen Sie es mir noch einmal.

 

Ps: In welcher Zeile haben Sie den Fehler?

1 „Gefällt mir“

Ich habe den Fehler in der Zeile: Set dispdim = swmodel. AddAngularRunningDim(True, False, True, 0.56, 0.64, 0, errstatus)

Ich bin mir nicht sicher, ob ich das richtige Element genommen habe, aber mein Ziel ist es, das Ende dieser Linie zu bekommen, um es zum Mittelpunkt meiner Winkelbemaßung zu machen, dann wähle ich die nächste Linie aus und starte die Bemaßung mit dieser Auswahl. 

Es ist die Auflistung, die es vermasselt, also sage ich mir, dass die geborgenen Elemente ihre Rolle nicht gut erfüllen.

Was ich mich eigentlich frage, ist, ob die Position der Auswahlen (in X, Y und Z) und die Bewertung (LocX, LocY und LocZ) korrekt sind, aber a priori gibt die Wiederholung von AddAngularRunningDim einen Wert von 0 zurück, es ist so, dass es die Quoten nicht erstellen kann. 

Muss ich in diesem Fall die Koordinaten jeder Zeile abrufen, die ich erneut in SelectByID2 auswählen möchte ?

Was die LocX, Y und Z betrifft, so sehe ich nicht wirklich, was sie entsprechen, ist es die Position des "Klicks" oder die Position des Wertes 0°?

Ich werde das Thema ansprechen, hat jemand eine Lösung?

Hallo

Versuchen Sie, die Einstellungen der Funktion (Wahr und Falsch) zu ändern, um zu sehen, was passiert.

Herzliche Grüße.

Hallo

Hier ist der Code des Beispiels modifiziert und funktionsfähig (aber in C#, zu übersetzen):

ModellDoc2 Teil = Standard(ModelDoc2);
bool boolstatus = falsch;
int int-Status;
Objekt obj;

Teil = ((ModelDoc2)(Programm.swapp. ActiveDoc));

boolstatus = Teil.Erweiterung. SelectByID2("", "EDGE", 0.163726736787323, 0.199115091463415, 0.00479999999999993197, true, 0, null, 0);
boolstatus = Teil.Erweiterung. SelectByID2("", "EDGE", 0.220795425811714, 0.179644597560976, 0.00479999999999881, true, 0, null, 0);

obj = Teil.Erweiterung. AddAngularRunningDim(false, true, true, 0.154288188900673, 0.0794194886913027, 0, out intstatus);

Part.Extension. ReJogRunningDimension();
Part.Extension. AusrichtenLaufende Dimension();

Teil.SetPickMode();

 

Versuchen Sie in Ihrem Fall, die Variable "dispdim" als "Objekt" und nicht als "DisplayDimension" zu setzen.

Herzliche Grüße

Ich habe versucht, true und false (alle möglichen Kombinationen) der AddAngularRunningDim-Funktion zu ändern, es funktioniert in der Vorlage, aber der Fehler 424 wird immer noch in dieser Zeile angezeigt. Diese Eigenschaften verwalten nur die Art der Bemaßung (Linie bis Mitte, Bogendiagramm des Winkels usw.)

 

Ich habe auch versucht, die dispdim-Deklaration in Object zu ersetzen. Es funktioniert auch nicht.

 

Irgendwelche anderen Ideen? 

Hallo

Ich habe Ihren Code letzte Nacht ausprobiert und habe auch den gleichen Fehler.

Ich habe auch versucht, ein Makro aufzuzeichnen, das diese Art von Küste hinzufügt, und hier verwendet sw diese Funktion nicht, sondern AddDimension2().

Probieren Sie es an einem Prototypmodell aus und Sie sollten Ihren Code haben.

Wenn Sie in der Funktion SelectByID2() den Namen der ersten Variablen eingeben, müssen Sie X, Y und Z nicht eingeben. Er findet das Wesen ohne seine Position.

Herzliche Grüße.

Danke für das SelectbyID2-Ding, Sie müssen überall 0 setzen, um die gewünschte Entität auszuschneiden. Es funktioniert perfekt.

Auf der anderen Seite hatte ich den Rekorder auch getestet und endete mit dem gleichen Code mit der AddDimension2, leider gibt es mir durch die Auswahl von 2 Zeilen eine Dimension, aber es bleibt eine einfache Winkeldimension ohne das 0°, was für mich in unserem Job als Kesselmacher unerlässlich ist, daher das Interesse (seit der Version 2014) an den Winkelausführungsmaßen. 

Ich kann verstehen, wie dieser Code funktioniert (Deklaration der Basisentität, dann die sekundären Entitäten, dann Anzeige der 0°-Dimension an der LocX-, LocY- und LocZ-Position  und schließlich die folgenden), aber dieser Fehler 424 ist ein echtes Rätsel.

Gibt es keinen Fehler in den API-Referenzen? (Man weiß ja nie und da ihr Beispiel auch diesen Fehler enthält ...)

Hallo

Bei Verwendung eines C#-Programms ist es völlig klar, dass es ein Umwandlungsproblem zwischen dem Objekt des Typs 'System.Object[]' und dem Objekt des Typs 'SolidWorks.Interop.sldworks.DisplayDimension' gibt. Sobald die Änderung an diesem Problem vorgenommen wurde, funktioniert alles normal.

Ich weiß nicht genug über VBA, um Ihnen zu sagen, dass das Problem das gleiche ist, aber ich kann davon ausgehen, dass ich VBA-Spezialisten Ihnen in diesem Punkt antworten lassen werde.

Herzliche Grüße


capture.png

Es gibt tatsächlich ein Problem mit der API. Ich habe ein Ticket mit Solidworks geöffnet, das das gleiche Problem erkannt hat 

Für den Rest melde ich mich bei Ihnen, eine Korrektur kann beim nächsten Service Pack vorgenommen werden.

Vielen Dank

Hier ist die Korrektur, die Dassault angewendet hat. Nun funktioniert dieses Beispiel perfekt mit dem Modell des Adv. Tutorials (Küchenmaschine)

'----------------------------------------------------------------------------
(') Voraussetzungen:
' 1. Öffnen Sie public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Öffnen Sie ein Direktfenster.
'
' Postbedingungen:
' 1. Das angegebene Winkellaufmaß wird in die Zeichnung eingefügt.
' 2. Überprüfen Sie das Direktfenster.
'
' HINWEIS: Da das Modell an anderer Stelle verwendet wird, speichern Sie die Änderungen daran nicht.
' ---------------------------------------------------------------------------
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim PartExt als SldWorks.ModelDocExtension
Sun selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim As SldWorks.DisplayDimension
Dim vdim als Variante
Dim boolstatus als boolescher Wert
Dim errstatus So lange
Sonne i So lang

Option Explizit

Sub main()

    Legen Sie swApp = Application.SldWorks fest
    Set Part = swApp.ActiveDoc
    Festlegen von PartExt = Part.Extension
    

    boolstatus = Part.ActivateView("Zeichnungsansicht1")
    boolstatus = Part.Extension.SelectByID2("", "VERTEX", 0.17648799570697, 0.195948476524618, 4.79999999998881E-03, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.799999999993197E-03, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.999999998999592E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.000000000019918E-04, True, 0, Nichts, 0)
    
    vdim = PartExt.AddAngularRunningDim(Wahr, Wahr, Wahr, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Part.SetPickMode
    
    Für i = 0 Bis UBound(vdim)
        Setze dispdim = vdim(i)
        Teil.Erweiterung.ReJogRunningDimension
        Part.Extension.AlignRunningDimension
        
        Debug.Print "Verkettete Winkelbemaßungen anzeigen? " & dispdim. AnzeigeAsChain
        Debug.Print "Die Winkelbemaßungen bidirektional ausführen? " & dispdim. Bidirektional laufen
        Debug.Print "Hilfslinien von der Mitte des Winkelverlaufs verlängern? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Sind Hilfslinien gerüttelt? " & dispdim. Gerüttelt
        Debug.Print "Hilfslinienstil gleich wie Führungslinienstil? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Die Hilfslinie verwendet die Dokumenteinstellungen? " & dispdim. ExtensionLineUseDocumentDisplay
        

    Nächster

Ende Sub

 

Wenn ich es richtig verstanden habe, ergab sich das Problem aus der Tatsache, dass die Funktion jedes Mal eine Schleife für dasselbe Element durchführte, daher der Vorschlag, eine Variable und eine Schleife für die Elemente zu deklarieren. 

 

Habe ich recht?

 

Hallo

Was hat sich geändert:

'----------------------------------------------------------------------------
(') Voraussetzungen:
' 1. Öffnen Sie public_documents\tutorial\advdrawings\foodprocessor.slddrw.
' 2. Öffnen Sie ein Direktfenster.
'
' Postbedingungen:
' 1. Das angegebene Winkellaufmaß wird in die Zeichnung eingefügt.
' 2. Überprüfen Sie das Direktfenster.
'
' HINWEIS: Da das Modell an anderer Stelle verwendet wird, speichern Sie die Änderungen daran nicht.
' ---------------------------------------------------------------------------
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim PartExt als SldWorks.ModelDocExtension
Sun selmgr As SldWorks.SelectionMgr
Dim dispdim As SldWorks.DisplayDimension
Dim swDispDim As SldWorks.DisplayDimension
Dim vdim als Variante
Dim boolstatus als boolescher Wert
Dim errstatus So lange
Sonne i So lang

Option Explizit

Sub main()

    Legen Sie swApp = Application.SldWorks fest
    Set Part = swApp.ActiveDoc
    Festlegen von PartExt = Part.Extension
    

    boolstatus = Part.ActivateView("Zeichnungsansicht1")
    boolstatus = Part.Extension.SelectByID2("", "VERTEX", 0.17648799570697, 0.195948476524618, 4.79999999998881E-03, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.270641278567064, 0.202920893989561, 4.799999999993197E-03, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.238383279638647, 0.257816085148446, -3.999999998999592E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.154059738580153, 0.26234352359454, 6.00000000247292E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.104823845478885, 0.213673560299033, 6.000000000019918E-04, True, 0, Nichts, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.152361949162868, 0.163871737392003, 6.000000000019918E-04, True, 0, Nichts, 0)
    
    vdim = PartExt.AddAngularRunningDim(Wahr, Wahr, Wahr, 0.154288188900673, 7.94194886913027E-02, 0, errstatus)
    Part.SetPickMode
    
    Für i = 0 Bis UBound(vdim)
        Setze dispdim = vdim(i)
        Teil.Erweiterung.ReJogRunningDimension
        Part.Extension.AlignRunningDimension
        
        Debug.Print "Verkettete Winkelbemaßungen anzeigen? " & dispdim. AnzeigeAsChain
        Debug.Print "Die Winkelbemaßungen bidirektional ausführen? " & dispdim. Bidirektional laufen
        Debug.Print "Hilfslinien von der Mitte des Winkelverlaufs verlängern? " & dispdim. ExtensionLineExtendsFromCenterOfSet
        Debug.Print "Sind Hilfslinien gerüttelt? " & dispdim. Gerüttelt
        Debug.Print "Hilfslinienstil gleich wie Führungslinienstil? " & dispdim. ExtensionLineSameAsLeaderStyle
        Debug.Print "Die Hilfslinie verwendet die Dokumenteinstellungen? " & dispdim. ExtensionLineUseDocumentDisplay

        

    Nächster

Ende Sub

Fett gedruckt:

Es gab ein Umwandlungsproblem im Rückgabewert  der Funktionen AddAngularRunningDim() und swDispDim.

Übrigens gibt AddAngularRunningDim() ein Array(of DisplayDimension) zurück, das vba nicht in Object umwandeln konnte.

In Kursivschrift handelt es sich nur um eine Schleife, um die Eigenschaften der erstellten Dimensionen anzuzeigen.

Herzliche Grüße.

1 „Gefällt mir“

Hallo

Gut zu wissen, ein generisches "Objekt" in C# ist also ein "Variant" in VBA.

Herzliche Grüße

Guten Abend

Ich denke schon. Es ist verdächtig, aber ja ...

Herzliche Grüße