Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Rückgabewert von Set Current layer

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   API: Rückgabewert von Set Current layer (433 mal gelesen)
Olls Lai Lolli
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Olls Lai Lolli an!   Senden Sie eine Private Message an Olls Lai Lolli  Schreiben Sie einen Gästebucheintrag für Olls Lai Lolli

Beiträge: 262
Registriert: 07.05.2009

MS Windows 10 Prof.
Intel Xeon E5-1630 v 3 3.7 GHz
32 GB Ram
Nvidia Quadro M4000
SWX 2019 x64 SP 5
PDM Enterprise 2019 SP 3

erstellt am: 01. Apr. 2020 20:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich versuche die Corona-Zwangspause sinnvoll zu nutzen und befasse mich etwas mit der Erstellung von Makros.

In einem ersten kleinen Makro will ich prüfen ob der Layer "Red" in einer Zeichnung vorhanden ist, oder nicht.
Um überhaupt mal einen Einstieg in das Thema zu bekommen habe ich mir dieses Beispiel von der API Hilfe runter geladen:

Meine Idee war es zu versuchen den Layer Red zu aktivieren. Falls es klappt sollte der Rückgabewert 1 zurück gegeben werden, falls es nicht klappt, weil es den Layer nicht gibt, sollte der Rückgabewert von 0 erscheinen. So zumindest habe ich die Beschreibung von Set Current layer verstanden.

Mit meinem angepassten Code bekomme ich aber immer den Rückgabewert 1

Code:

Option Explicit

Sub main()

Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swLayerMgr                  As SldWorks.LayerMgr
Dim vLayerArr                   As Variant
Dim vLayer                      As Variant
Dim swLayer                     As SldWorks.Layer


Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swLayerMgr = swModel.GetLayerManager

Debug.Print "File = " & swModel.GetPathName
Debug.Print "  Current Layer = " & swLayerMgr.GetCurrentLayer
'     Debug.Print ""

Dim retVal As Integer
retVal = swLayerMgr.SetCurrentLayer("Red")
Debug.Print retVal

If retVal = 1 Then Debug.Print "Layer vorhanden und aktiviert"
If retVal = 0 Then Debug.Print "Fehler beim aktivieren"


Debug.Print "  Current Layer = " & swLayerMgr.GetCurrentLayer
Debug.Print ""

End Sub


Wo liegt mein Denk- bzw. Programmierfehler ?

Gruß OLL

[Diese Nachricht wurde von Olls Lai Lolli am 01. Apr. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RBE
Mitglied
TechSupport; DPS Software GmbH


Sehen Sie sich das Profil von RBE an!   Senden Sie eine Private Message an RBE  Schreiben Sie einen Gästebucheintrag für RBE

Beiträge: 241
Registriert: 11.02.2002

HP ZBook 17 G5
Core i9 2.9GHz
32GB RAM
Quadro P4200
Win10 x64
SolidWorks2020 SP2

erstellt am: 02. Apr. 2020 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Moin OLL,

wie wäre es, wenn Du Dir vorher einfach die Liste der vorhandenen Layer holst und dort erstmal schaust, ob es den gibt, den Du setzen möchtest -> LayerMgr::GetLayerList

EDIT: Das mit dem Rückgabewert kann ich bestätigen. In dem Fall dann vorher Liste prüfen und im Nachhinein schauen, ob tatsächlich der gewünschte Layer aktiv ist.

------------------
Grüße, RBE
----------

[Diese Nachricht wurde von RBE am 02. Apr. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2381
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 02. Apr. 2020 08:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Hallo OLL,

mach doch in der Schleife des Beispielmacros einen Namensabgleich "swLayer.Name = Red"

Code:

Option Explicit

Sub main()

    Dim swApp                      As SldWorks.SldWorks
    Dim swModel                    As SldWorks.ModelDoc2
    Dim swLayerMgr                  As SldWorks.LayerMgr
    Dim vLayerArr                  As Variant
    Dim vLayer                      As Variant
    Dim swLayer                    As SldWorks.Layer
    Dim boolstatus                  As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swLayerMgr = swModel.GetLayerManager

    vLayerArr = swLayerMgr.GetLayerList
   
    For Each vLayer In vLayerArr
        Set swLayer = swLayerMgr.GetLayer(vLayer)
        If swLayer.Name = "Red" Then
            swLayerMgr.SetCurrentLayer ("Red")
            boolstatus = True
            Exit For
        End If
    Next
   
    If boolstatus Then
        Debug.Print "Layer vorhanden und aktiviert"
    Else
        Debug.Print "Fehler beim aktivieren"
    End If

End Sub


Warum aber SetCurrentLayer trotzt nicht vorhanden sein des Layer "1" (oder in meinem Fall True) ausgibt ist mir auch ein Rätsel.

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Olls Lai Lolli
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Olls Lai Lolli an!   Senden Sie eine Private Message an Olls Lai Lolli  Schreiben Sie einen Gästebucheintrag für Olls Lai Lolli

Beiträge: 262
Registriert: 07.05.2009

MS Windows 10 Prof.
Intel Xeon E5-1630 v 3 3.7 GHz
32 GB Ram
Nvidia Quadro M4000
SWX 2019 x64 SP 5
PDM Enterprise 2019 SP 3

erstellt am: 02. Apr. 2020 09:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo RBE und bk.sc,

vielen Dank für Eure Unterstützung. Ich werde die Überprüfung dann so umsetzen wie ihr das vorgeschlagen habt.

Ich hoffe mal dass ich nicht noch öfters über solche "Fehler" stolpere, macht es für einen Anfänger wie mich, der noch nicht so richtig weiß was er tut, nicht gerade einfach den Einstieg ins programmieren zu finden.
Wenn das doch passiert, werde ich in nächster Zeit hier im Forum zum Alleinunterhalter :-)

Lohnt es sich diesen Fehler zu melden?

Gruß OLL


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2462
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 02. Apr. 2020 10:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Olls Lai Lolli:
... Ich hoffe mal dass ich nicht noch öfters über solche "Fehler" stolpere, ...

Hallo,

nach Murphy's Gesetz wirst du schon noch ein paar solcher Fehler finden ...
hab mal versucht einen Wert zu setzen per api - das ging einfach nicht, weil man den Funktionsaufruf zwar definiert hatte, aber vergessen hat den entsprechenden Programmcode da reinzuschreiben.

trotzdem viel Spaß und Erfolg!

Gruß, Christian

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Olls Lai Lolli
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Olls Lai Lolli an!   Senden Sie eine Private Message an Olls Lai Lolli  Schreiben Sie einen Gästebucheintrag für Olls Lai Lolli

Beiträge: 262
Registriert: 07.05.2009

MS Windows 10 Prof.
Intel Xeon E5-1630 v 3 3.7 GHz
32 GB Ram
Nvidia Quadro M4000
SWX 2019 x64 SP 5
PDM Enterprise 2019 SP 3

erstellt am: 02. Apr. 2020 11:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
nach Murphy's Gesetz wirst du schon noch ein paar solcher Fehler finden ...

Oh Oh! das kann ja noch lustig werden, muss mich dann wohl öfters hilfesuchend ans Forum wenden....:D

Zitat:
hab mal versucht einen Wert zu setzen per api - das ging einfach nicht, weil man den Funktionsaufruf zwar definiert hatte, aber vergessen hat den entsprechenden Programmcode da reinzuschreiben.
--> ich versteh nur Bahnhof.....  


Gruß OLL

[Diese Nachricht wurde von Olls Lai Lolli am 02. Apr. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

TMS-TB
Mitglied
Konstrukteur


Sehen Sie sich das Profil von TMS-TB an!   Senden Sie eine Private Message an TMS-TB  Schreiben Sie einen Gästebucheintrag für TMS-TB

Beiträge: 32
Registriert: 30.07.2012

Intel 8700K
16GB Ram
NVIDIA Quadro 4000
Solidworks 64Bit 2019 SP2.0
Win 10 64Bit

erstellt am: 02. Apr. 2020 14:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Ich hoffe bin jetzt nicht hier falsch, aber gehört zum Thema.
Ich setzte mit setcurrentlayer die Farbe auf "Blau" und füge danach eine Stückliste ein und diese wird nicht in dem Layer "Blau" eingefügt sondern bleibt auf dem Standardlayer von dem Blatt. Füge ich danach einfach eine neue Stückliste per Hand ein ist diese im Layer "Blau". Warum? Hier der Codeschnipsel

        boolstatus = swDrawing.ActivateView("Zeichenansicht1")
        swDrawing.SetCurrentLayer ("Blau")
        Set swView = swDrawing.ActiveDrawingView
   
     
        Set swBOMAnnotation = swView.InsertBomTable4(True, 0, 0, 3, 2, "Standard", sStuecklistePfad, False, swNumberingType_Detailed, False)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2462
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 02. Apr. 2020 16:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Zitat:

--> ich versteh nur Bahnhof.....   

ungefähr so:

Code:
function setzeSchrifttyp() as boolean
    rem hier müsste eigentlich noch Programmtext rein
    rem am besten bevor das Programm ausgeliefert wird
end function

Da hatte SolidWorks eine Funktion definiert, die etwas tun sollte (und auch in der API-Hilfe beschrieben), aber vergessen den eigentlichen Programmtext da reinzuschreiben.
ich hab die function aufgerufen, es gab auch keinen Fehler, aber es ist auch nix passiert ...

ich meine es war eine Schrifttype in den Dokumenteigenschaften, die ich setzen wollte. musste dann halt anders gelöst werden 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 2462
Registriert: 04.04.2001

SWX2016sp5 WIN10
(SWX2019 testweise)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19) CSWP 12/2015

erstellt am: 02. Apr. 2020 16:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von TMS-TB:
Ich hoffe bin jetzt nicht hier falsch, aber gehört zum Thema.
Ich setzte mit setcurrentlayer die Farbe auf "Blau" und füge danach eine Stückliste ein und diese wird nicht in dem Layer "Blau" eingefügt sondern bleibt auf dem Standardlayer von dem Blatt. Füge ich danach einfach eine neue Stückliste per Hand ein ist diese im Layer "Blau". Warum? Hier der Codeschnipsel

        boolstatus = swDrawing.ActivateView("Zeichenansicht1")
        swDrawing.SetCurrentLayer ("Blau")
        Set swView = swDrawing.ActiveDrawingView
    
      
        Set swBOMAnnotation = swView.InsertBomTable4(True, 0, 0, 3, 2, "Standard", sStuecklistePfad, False, swNumberingType_Detailed, False)


habe das mit der Stückliste nicht probiert, aber von Hand kann es einem ja auch passieren, dass man erstmal von etwas selektiertem den Layer ändert und dann erst für neue Objekte umstellt.
aber du schreibst ja, dass es danach per Hand geht ... 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Olls Lai Lolli
Mitglied
Konstrukteur


Sehen Sie sich das Profil von Olls Lai Lolli an!   Senden Sie eine Private Message an Olls Lai Lolli  Schreiben Sie einen Gästebucheintrag für Olls Lai Lolli

Beiträge: 262
Registriert: 07.05.2009

MS Windows 10 Prof.
Intel Xeon E5-1630 v 3 3.7 GHz
32 GB Ram
Nvidia Quadro M4000
SWX 2019 x64 SP 5
PDM Enterprise 2019 SP 3

erstellt am: 02. Apr. 2020 17:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von TMS-TB:

swDrawing.SetCurrentLayer ("Blau")

kann es sein, dass du einen anderen Befehl benützt wie ich?

Zitat:
swLayerMgr.SetCurrentLayer("Red")

SetCurrentLayer Method (ILayerMgr) Sets the current (or active) layer in this drawing document.

SetCurrentLayer Method (IDrawingDoc) Sets the current layer used by this document.

Gruß OLL


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

TMS-TB
Mitglied
Konstrukteur


Sehen Sie sich das Profil von TMS-TB an!   Senden Sie eine Private Message an TMS-TB  Schreiben Sie einen Gästebucheintrag für TMS-TB

Beiträge: 32
Registriert: 30.07.2012

Intel 8700K
16GB Ram
NVIDIA Quadro 4000
Solidworks 64Bit 2019 SP2.0
Win 10 64Bit

erstellt am: 03. Apr. 2020 06:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Ist der gleiche Befehl, rufe den nur etwas anders auf, Layer wird ja gesetzt, aber halt nicht auf die Stückliste angewendet.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2381
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 06. Apr. 2020 14:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Hallo TMS-TB,

wenn du direkt nach dem erstellen der Stückliste swBOMTable.GetAnnotation.Layer = "Layername" aufrufst sollte das ändern des Layers klappen.
Aber nicht wunder das ist in der API-Hilfe nicht direkt zu finden dass das so geht.

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

TMS-TB
Mitglied
Konstrukteur


Sehen Sie sich das Profil von TMS-TB an!   Senden Sie eine Private Message an TMS-TB  Schreiben Sie einen Gästebucheintrag für TMS-TB

Beiträge: 32
Registriert: 30.07.2012

Intel 8700K
16GB Ram
NVIDIA Quadro 4000
Solidworks 64Bit 2019 SP2.0
Win 10 64Bit

erstellt am: 06. Apr. 2020 14:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Olls Lai Lolli 10 Unities + Antwort hilfreich

Danke bk.sc, das klappt einwandfrei.
Hier noch der korrigierte Code für alle:
       

        Dim swBOMAnnotation        As SldWorks.BomTableAnnotation
             
        boolstatus = swDrawing.ActivateView("Zeichenansicht1")
        Set swView = swDrawing.ActiveDrawingView
   
        'Hier kommt die Stückliste
        Set swBOMAnnotation = swView.InsertBomTable4(True, 0, 0, 3, 2, "Standard", sStuecklistePfad, False, swNumberingType_Detailed, False)

        'Hier wird Farbe von der Stückliste geändert
        swBOMAnnotation.GetAnnotation.Layer = "Blau"
     

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz