Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Layer über API ein/ausschalten

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
SOLIDWORKS Grundlagen Schulung, ein Seminar am 14.07.2025
Autor Thema:  Layer über API ein/ausschalten (2162 mal gelesen)
caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 09:41    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,

bin neu in SolidWorks und möchte mich auch ein bisschen in API einarbeiten. Die ersten Versuche haben auch soweit geklappt, doch nun hänge ich etwas fest.
Ich möchte mit einer UserForm über eine Checkbox einen Haken setzen lassen um einen Layer ein bzw. auszuschaltzen. D.h. Haken gesetzt - Layer ein, Haken fehlt - Layer aus.

Hier mal der Code:

Sub LayerSetzen()
    Dim swApp As Object
    Dim Model As Object
    Dim swLayer As SldWorks.Layer
    Dim swLayerMgr As SldWorks.LayerMgr
   
    Set swApp = CreateObject("SldWorks.Application")
    swApp.Visible = True
    Set swModel = swApp.ActiveDoc
    Set swLayerMgr = swModel.GetLayerManager
    Set swLayer = swLayerMgr.GetLayer("Layer1")
   
    'CheckBoxPreliminary
   
    If CheckBoxPreliminary = True Then
        'Layer einschalten
        swLayer.Visible = True
        Debug.Assert True = swLayer.Visible
   
    Else
        'Layer ausschalten
        swLayer.Visible = False
        Debug.Assert False = swLayer.Visible
    End If
   
    GraphicsRedraw

End Sub

Hab ich mit Hilfe der API-Hilfe zusammengebastelt, aber anscheinend stimmt was nicht.

Schon mal jetzt vielen Dank!

SolidWorks 2009, SP3, 32Bit mit Windows XP

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 01. Sep. 2009 10:04    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 caxman 10 Unities + Antwort hilfreich

Hallo caxman,

Zitat:
Original erstellt von caxman:
Hab ich mit Hilfe der API-Hilfe zusammengebastelt, aber anscheinend stimmt was nicht.

Und was stimmt nicht? Fehlermeldung? Erwartetes Verhalten? Gezeigtes Verhalten? Vielleicht ist es möglich das ganze Makro zur Verfügung zu stellen, dass wir das nicht nachbasteln müssen? Da hab ich gerade aktuelle heute zu einen passenden Artikel im Newsletter 

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 10:54    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


UserForm1.jpg

 
Hallo Stefan,

danke schon mal für die schnelle Antwort. Das ist erst mal das ganze Makro. Ich versuch immer Stückweise mcih ranzutasten, d.h. ich möchte jetzt erst mal nur über diese Checkbox einen Layer ein oder ausschalten. Dazu hab ich eine einfache Userform erstellt (siehe Anhang) und dieses kleine Programm. Fehklermeldung kommt gar nichts, es passiert einfach auch nichts.

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

Thomas Liebezeit
Mitglied
Dipl.-Ing. Maschinenbau, CSWP


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

Beiträge: 114
Registriert: 01.07.2005

2007 SP5.0
2008 SP4.0
2009 SP3.0

erstellt am: 01. Sep. 2009 11:33    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 caxman 10 Unities + Antwort hilfreich

Hallo caxman,

um Dir besser helfen zu können, wäre es schön, wenn Du uns das ganze Makro (also nicht als Text sondern als Datei) zur Verfügung stellst, dann kann man das mal durchprobieren.

Viele Grüße,

Thomas

------------------
www.thomasliebezeit.net
SigMa - Ist das Programm jetzt fertig, oder was?

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 11:55    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


Macro2.swp.txt

 
Hallo Thomas,

sorry, hab ich anscheinend Stefan nicht richtig verstanden. Natürlich stelle ich gerne die Datei bereit. Hier ist sie.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 01. Sep. 2009 12:15    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 caxman 10 Unities + Antwort hilfreich

Hallo caxman,

also bei mir klappt das Makro wunderbar. Ich hab mir eine Zeichnung gemacht, darauf ein paar Beschriftungen und 3 Layer namens Layer0, Layer1 und Layer2. Da hab ich dann die Texte auf diese Layer zugewiesen, dass ich sehen kann, was das Makro macht.

Direkt nach dem Aufruf des Makro passiert ... logischerweise nix, warum sollte auch. Also steht die Maske da mit deaktivierter Checkbox. Die kann ich jetzt anklicken, daraufhin ändert sich auf der Zeichnung ... immer noch nix, da ja der Layer1, der vorher sichtbar war, jetzt sichtbar geschaltet wird, kein Wirklich großer Unterschied  

Klicke ich aber noch mal die Checkbox an und entferne den Haken wieder verschwindet auch der Text auf dem Layer1 und ich kann im Layermanager anschließend sehen, dass der Layer1 auch ausgeblendet ist.

Also: es funktioniert alles, so wie es soll. Die Frage ist also: wie sollte es deiner Meinung nach funktionieren und warum glaubst du, dass es nicht richtig arbeitet?

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 12:33    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 Stefan,

manchmal braucht man nur einen Anstoss von jemand oder sitzt einfach auf der Leitung! ;-))

Bei mir funktioniert's auch; mein Fehler war einfach ich hab nur einmal draufgeklickt, also den Haken gesetzt und dann mit Ende bestätigt; logisch der Layer war ja an. Dann als ich es wieder aufgerufen hab war mein Haken weg und der Layer immer noch an. Deshalb dachte ich es funktioniert nicht. Ich muss also jetzt vorher noch den Status des Layer abfragen und den Haken initial schon setzen bzw. wegnehmen.
Kannst Du mir dazu einen Tipp geben?

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

Baumjäger
Mitglied
CAD/PDM Administrator


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

Beiträge: 339
Registriert: 21.06.2006

SW2017 - S5.0
AutoCAD Mechanical 2018
Win10
Intel Xeon E3-1240 V2 3,4GHz
16GB RAM
NVIDIA Quadro 4000

erstellt am: 01. Sep. 2009 13:51    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 caxman 10 Unities + Antwort hilfreich

Mahlzeit,
In der API Hilfe hab ich spontan zwei tolle Beispiele gefunden..:

- Determine if Layer is Visible Example (VB)

- Get Layers Example (VB)


...da kann dir bestimmt nichtmal Stefan besser helfen 

viele Grüße Andy

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 14: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

Hallo Andy,

vielen Dank für den Tipp.

AAber. Die eigentliche Herausforderung (für mich) wie ich jetzt der Checkbox sage Haken rein oder raus wird in diesen Themen (soweit ich das verstehe) leider nicht behandelt.

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

Baumjäger
Mitglied
CAD/PDM Administrator


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

Beiträge: 339
Registriert: 21.06.2006

SW2017 - S5.0
AutoCAD Mechanical 2018
Win10
Intel Xeon E3-1240 V2 3,4GHz
16GB RAM
NVIDIA Quadro 4000

erstellt am: 01. Sep. 2009 14:23    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 caxman 10 Unities + Antwort hilfreich

Das ist nicht schwer eigentlich weisst du es, du weisst nur nicht dass du es weisst...du musst nur das Beispiel minimal umwandeln:

If False = swLayer.Visible Then
checkbox.visible = false
          Else
checkbox.visible = true
End If

swLayer kann bei dir natürlich anders heißen, ich hab jetzt nicht in dein Makro reingekuckt aber prinzipiell sollte das funktionieren.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 01. Sep. 2009 14:28    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 caxman 10 Unities + Antwort hilfreich


18335_userform-initialize.png

 
Ah ja, manchmal sieht man einfach den Wald vor lauter Bäumen nicht 

Wenn du eine definierte Ausgangslage herstellst wird das einfacher. Du musst also beim Aufruf das Ganze so hinstellen, wie du es als Ausgangslage für den Anwender haben willst. Um dabei deine Prozedur auch auszuführen muss du die also einmal ausführen ... und das sollte passieren, wenn die Userform angezeigt wird.

Solche Initialisierungen macht man am Besten in der Prozedur UserForm_Initialize, dort simulierst du dann durch aufrufen deiner Prozedur CheckBoxPreliminary_Click einen Click auf die Checkbox. Wichtig bei der Simulation: der Haken wird durch den Aufruf der Clickprozedur nicht umgestellt, also stellst du vorher den Default der Checkbox so ein, wie du die definierte Ausgangslage haben möchtest. Also Value auf True, wenn der Layer zu Beginn eingeschaltet sein soll, auf FALSE wenn der ausgeschaltet sein soll.

Ich hoffe, das ist so weit halbwegs klar und es macht dann, was du möchtest.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 15:03    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

Ja, das funktioniert soweit super!
Nur ist machmal beim Öffnen der Zeihcnung der Layer ausgeschaltet, manchmal eingeschaltet, je nach Zeihcnung. Und diesen status möchte ich abfragen und der Box zuweisen. Wenn ich initialisiere und ruf mein Makro auf dann verschwindet der Layer weil ich in meinem Makro keinen Haken gesetzt habe; er muss aber bei dieser Zeihcnung sichtbar bleiben. Oder der Layer wird angezeigt weil ich im Makro einen Haken setze, er soll aber ausgeblendet bleiben weil die Zeichnung so abgespeichert wurde.
Wenn ich die Version von andy nehme dann verschwindet nach mehrmaligem Klicken irgendwan meine ganze Checkbox und ich kann gar keinen Haken mehr setzen. Erst beim nächsten Makroaufruf ist sie wieder da.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 01. Sep. 2009 15:20    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 caxman 10 Unities + Antwort hilfreich

Hallo caxman,

dann willst du die Ausgangslage nicht selbst herstellen, sondern schauen wie es steht und deine Checkbox so einstellen. Auch das machst du in der Initialisieruprozedur des Userform, und wie Andy oben geschrieben hat musst du nur den Zustand deines Layer abfragen und die Checkbox auf diesen Wert setzen. Sieht praktisch so aus wie deine vorhandene Prozedur:

Code:
Private Sub UserForm_Initialize()
   
    Dim swApp As Object
    Dim Model As Object
    Dim swLayerMgr As SldWorks.LayerMgr
    Dim swLayer As SldWorks.Layer
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swLayerMgr = swModel.GetLayerManager
    Set swLayer = swLayerMgr.GetLayer("Layer1")
   
    CheckBoxPreliminary.Value = swLayer.Visible

End Sub



Achtung: das setzen der Value Eigenschaft löst das ClickEreignis aus, dass ist ist diesem Fall nicht schlimm, weil der Code darin ja genau den Zustand in SolidWorks herstellt, den du eh schon hast; aber in anderen Fällen kann das zu einem lustigen Ping-Pong führen 

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de
Stefans SolidWorks Blog

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

caxman
Mitglied



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

Beiträge: 270
Registriert: 06.08.2002

4GB RAM<P>Windows 7 32bit
SWX 2008/2010

erstellt am: 01. Sep. 2009 15:32    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

Hey, Bingo!!

Genau das was ich wollte. Hab so was ähnliches auch schon probiert aber hat nicht so ganz funktioniert.

Jetzt wird alles gut!!

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)2024 CAD.de | Impressum | Datenschutz