Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SW2008 Virtualle Komponenten per API abfragen

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
Autor Thema:  SW2008 Virtualle Komponenten per API abfragen (1214 mal gelesen)
oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 17. Nov. 2010 14: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

Hallo zusammen,

ich steh grad ein wenig auf dem Schlauch... Ich möchte in einer Baugruppe, die externen Teilen auch Virtuelle, intern gespeicherte Teile enthält, diese virtuellen Teile per Makro umbenennen.
Irgendwie bekomm ich aber noch nicht mal eine Abfrage hin, ob ein gewähltes Teil ein virtuelles Teil ist hin... Dazu wollte ich eigentlich alle Komponenten einer Baugruppe der Reihe nach Abfragen:

ub Main()

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2
   
Dim swAssy As SldWorks.AssemblyDoc
   
Dim swComp As SldWorks.Component2

Dim virtstat As Boolean


Set swApp = Application.SldWorks
   
Set swModel = swApp.GetFirstDocument


Do While Not swModel Is Nothing

        Set swAssy = swModel
               
        Set swComp = swAssy.GetComponents(True)
               
        virtstat = swComp.IsVirtual
       
        If virtstat Then
       
        MsgBox ("JA")
       
        Else
       
        MsgBox ("Nein")
       
        End If
   
        Set swModel = swModel.GetNext

Loop
   
   
End Sub

Was mach ich falsch? ich mein es wird schon gemeckert, dass swAssy und swModel nicht verträglich sind... wie gesagt ich steh etwas auf dem Schlauch und hab jetz auch nicht soooo den Einblick und die Erfahrung in sachen SW API

Gruß

Alex

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 17. Nov. 2010 15:36    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo Alex

also so wie ich das sehe bekommst Du mit "Set swComp = swAssy.GetComponents" nur eine Liste der Komponenten
und mit "virtstat = swComp.IsVirtual" würdest Du eigentlich prüfen ob die Liste virtuell ist,
was natürlich unsinnig ist.

Die müsstest die Liste durchlaufen und für jeden Eintrag der Liste prüfen ob
das Teil virtuel ist oder nicht.
so in der Art von

For Each x In SwComp
  virtstat = x.IsVirtual
next

wie gesagt, ist nur eine Vermutung von mir, ich hab das nciht getestet

------------------
Grüße
Heinz

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 18. Nov. 2010 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

hmm... aber mit

swModel = swApp.GetFirstdocument und der anschließenden Do-While Schleife frag ich doch schon Dokument für dokument ab...

Die isVirtual funktion benötig für eine Abfrage ein component2 objekt... wie kann ich aus dem swModel - doc eine component2 herauslesen?

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 18. Nov. 2010 10:19    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo

ich bin mal davon ausgegangen, dass die Dokumente die Du durchlaufen willst alle Baugruppen sind,
da "GetComponents" eine Methode von "AssemblyDoc" ist.
(zwar nicht nur, aber in diesem Fall wohl die einzig vernünftige Anwendung)

Die Komponenten hast Du ja in der Liste gespeichert die
swAssy.GetComponents(True) zurückgibt.

Diese Liste musst Du nochmals wie oben geschrieben durchlaufen.

Mit "GetFirstDocument" bekommst Du nur das erste in SWXSolidWorks geöffnete Dokument
das hat nichts mit den Komponenten in der Baugruppe zu tun.
siehe dazu auch die Online-Hilfe in SWXSolidWorks
Gets the document opened first in this SolidWorks session.

So wie Du das zur Zeit hast, werden alle in SWXSolidWorks geöffneten Dokumente
durchsucht (egal ob Baugruppe, Bauteil, Zeichnung,...).
Meiner Meinung solltest Du noch eine Prüfung einbauen ob das
aktuelle Dokument das Du gerade durchsuchst auch eine Baugruppe ist
und wenn nicht gleich zum nächsten Dokument springen.


Ich hab mich mit virtuellen Komponenten noch nicht wirklich befasst,
nehme aber an, dass Dein Programm auch nur Sinn macht wenn Du
Baugruppen-Dateien nach virtuell Komponeten durchforstest.

PS
Die API-Hilfe von SWXSolidWorks enthält sehr viele Beispiele und ich nehm immer
wieder Code-Schnipsel von den Beispielen für meine Spinnereien.
Das solltest Du Dir mal genauer ansehen.

------------------
Grüße
Heinz

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 30. Nov. 2010 07:58    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,

hab nun das ganze endlich mal modifizieren können, bin aber nicht wirklich schlauer...:


    Dim swApp As SldWorks.SldWorks

    Dim swModel As SldWorks.ModelDoc2
   
    Dim swAssy As SldWorks.AssemblyDoc
   
    Dim swComp As SldWorks.Component2
   
    Dim swCompArr As Variant
       
    Dim virtstat As Boolean
   
    Set swApp = Application.SldWorks
   
    Set swModel = swApp.GetFirstDocument

If swModel.GetType() = swDocAssemly Then
               
  Set swCompArr = swAssy.GetComponents(True)
                   
  For Each swComp In swCompArr
                                           
     virtstat = swComp.IsVirtual
                       
     If virtstat Then
                           
        MsgBox ("JA")
                               
     Else
                               
        MsgBox ("Nein")
                               
  End If
  Next
End If

Nun wird mir bei "Set swCompArr = swAssy.GetComponents(True)" der Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt." ausgegeben. Hat wer eine idee? Ich steh immer noch auf dem Schlauch  

Verschneite Grüße!

Alex

[Diese Nachricht wurde von oeNkraD am 30. Nov. 2010 editiert.]

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 30. Nov. 2010 09:58    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo Alex

ist doch klar, weil swAssy ja noch nicht zugewiesen wurde
nach
"If swModel.GetType() = swDocAssemly Then"
müsstest Du "swAssy" noch mit
"set swAssy = swModel"
swAssy einen Wert zuweisen

------------------
Grüße
Heinz

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 30. Nov. 2010 10:27    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 nochmal 

das ist wiedermal die Geschichte mit dem Wald und den Bäumen *g*


Nun hab ich allerdings das problem, dass die Typen unverträglich sind... was ich nun mal so gar nicht verstehe...

"Set swCompArr = swAssy.GetComponents(True)"

swCompArr ist doch ein Variant, und GetComponents soll doch ein Variant liefern, warum mögen die sich dann nicht? 

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

nahe
Ehrenmitglied



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

Beiträge: 1764
Registriert: 18.01.2001

arbeite mit:
Dell Precision 7750
i7 2,6 GHz 6 Kerne
32GB RAM
512GB SSD
NVIDIA Quadro RTX 4000
------------------------
SWX-2020 SP5.0
EPDM
----------------
Windows 10
----------------
VB.net
VB
VBA
ein wenig Swift am Mac

erstellt am: 30. Nov. 2010 11:44    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 oeNkraD 10 Unities + Antwort hilfreich

Hallo nochmals

wird wahrscheinlich Zeit, dass Du Dir mal die API Hilfe ansiehst 

dort steht
"vComponents = swAssem.GetComponents(True)"
und nicht
"Set vComponents = swAssem.GetComponents(True)"

------------------
Grüße
Heinz

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 30. Nov. 2010 12:08    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 wiederum,

also nun hab ichs hinbekommen, allerdings lags dran, dass die For Each Schleife nicht so richtig funktioniert... ich mach nun einen vorhergehenden GetcomponentsCount und anschließend eine Do While Schleife.

Vielen Dank für die Hilfe, und die API Hilfe kenn ich schon... nur ist das seeeeehr Umfangreich für nen Quereinsteiger und Autodidakten - kommt Zeit kommt Rat 

Gruß


Alex

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