Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Selection abwählen über API

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
  
Wie Hersteller von Industrieanlagen Konstruktions- und Entwicklungsherausforderungen mit SOLIDWORKS meistern
Autor Thema:  Selection abwählen über API (1133 mal gelesen)
weinel
Mitglied



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

Beiträge: 464
Registriert: 04.09.2002

erstellt am: 15. Okt. 2007 15:37    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 habe eine Frage zur API an erfahrene Programmierer:

Gibt es eine Möglichkeit ein manuell selektiertes Objekt gleich welcher Art in einem Makro wieder aus der Selectionsliste zu entfernen.

Ich habe mich jetzt eine Zeitlang mit Funktionen wie

ret = swSelMgr.DeSelect2(i, -1)
ret = swModel.DeSelectByID(test, "", 0, 0, 0)

versucht aber ohne jeden Erfolg.

Also was möchte ich tun:

Ein Anwender wählt manuell beliebige Objekte aus einer Zeichnung aus.
Per Makro werden dann bestimmte Typen von Objekten selectiert und die anderen deselektiert.

------------------
Gruß weinel

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

tbd
Mitglied
Teamleiter


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

Beiträge: 825
Registriert: 26.01.2006

Dell Percision T5400
Intel(R) Xeon(R) CPU
X5460 @ 3.16GHz
3,25 GB RAM
Nvidia Quadro FX 4600
-----
Win XP Prof SP 3
SW 2008 SP 5.0
PARTsolutions 8.1.08
Cideon SAP PLM 5.103.5.17
Visual Studio 2008

erstellt am: 15. Okt. 2007 16:09    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 weinel 10 Unities + Antwort hilfreich

Hallo weinel,

ich benutze meist swSelMgr.DeSelect2(i, -1), das funktioniert ganz prima.
wahrscheinlich sind es deine Parameter die nicht passen.

Bei AtIndex muss es sich vom Typ um ein Variant Array handeln, auch wenn du nur ein Element deselektieren möchtest.
Also zum Beispiel:

Code:
Dim vIndex(0 to 0) as VARIANT
vIndex(0) = 1
swSelMgr.DeSelect2(vIndex, -1)

------------------
Mfg Daniel

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

weinel
Mitglied



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

Beiträge: 464
Registriert: 04.09.2002

erstellt am: 16. Okt. 2007 08:42    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 Daniel,

hier mal mein Makro:

Option Explicit

Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swSelMgr        As SldWorks.SelectionMgr
Dim retval          As Boolean

Sub main()
    Dim ixes(0 To 0) As Variant
    Dim i            As Integer
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swSelMgr = swDraw.SelectionManager
      For i = 1 To swSelMgr.GetSelectedObjectCount
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelSUBSKETCHINST Then
          Dim swBlockInst  As SldWorks.SketchBlockInstance
          Set swBlockInst = swSelMgr.GetSelectedObject5(i)
        Else
          ixes(0) = i
          retval = swSelMgr.DeSelect2(ixes, -1)
        End If
      Next i
End Sub

Stehe ich irgendwie auf der Leitung? Wenn ich jetzt Elemente wie Bemaßungen, Texte Ansichten in der Zeichnung selectiere werden sie nicht abgewählt mit DeSelect2. retval ist immer falsch!
Hat irgendjemand eine Erklärung dafür?

------------------
Gruß weinel

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

tbd
Mitglied
Teamleiter


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

Beiträge: 825
Registriert: 26.01.2006

Dell Percision T5400
Intel(R) Xeon(R) CPU
X5460 @ 3.16GHz
3,25 GB RAM
Nvidia Quadro FX 4600
-----
Win XP Prof SP 3
SW 2008 SP 5.0
PARTsolutions 8.1.08
Cideon SAP PLM 5.103.5.17
Visual Studio 2008

erstellt am: 16. Okt. 2007 09:06    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 weinel 10 Unities + Antwort hilfreich

Guten Morgen,

mein Fehler!
Die Variant Variable darf natürlich kein Array sein, sondern nur eins beinhalten!
Also

Code:

dim iIndex(0 to 0) as Integer
Dim vIndex as VARIANT

iIndex(0) = 1
vIndex = iIndex
swSelMgr.DeSelect2(vIndex, -1)


Kann mich nur entschuldigen! Tss tss tss

------------------
Mfg Daniel

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

weinel
Mitglied



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

Beiträge: 464
Registriert: 04.09.2002

erstellt am: 16. Okt. 2007 09:39    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 Daniel,

ich habe das Makro nochmal angepasst, aber auch das arbeitet nicht wie gewünscht!
Keine Idee mehr?

Option Explicit

Dim swApp          As SldWorks.SldWorks
Dim swModel        As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim swSelMgr        As SldWorks.SelectionMgr
Dim retval          As Boolean

Sub main()
   
    Dim i              As Integer
    Dim iIndex(0 To 0)  As Integer
    Dim vIndex          As Variant
       
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swSelMgr = swDraw.SelectionManager
      For i = 1 To swSelMgr.GetSelectedObjectCount
        retval = swSelMgr.SetSelectedObjectMark(i, 10#, swSelectionMarkSet)
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelSUBSKETCHINST Then
          Dim swBlockInst  As SldWorks.SketchBlockInstance
          Set swBlockInst = swSelMgr.GetSelectedObject5(i)
        Else
          iIndex(0) = i
          vIndex = iIndex
          retval = swSelMgr.DeSelect2(vIndex, 10#)
        End If
      Next i
End Sub

------------------
Gruß weinel

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

tbd
Mitglied
Teamleiter


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

Beiträge: 825
Registriert: 26.01.2006

Dell Percision T5400
Intel(R) Xeon(R) CPU
X5460 @ 3.16GHz
3,25 GB RAM
Nvidia Quadro FX 4600
-----
Win XP Prof SP 3
SW 2008 SP 5.0
PARTsolutions 8.1.08
Cideon SAP PLM 5.103.5.17
Visual Studio 2008

erstellt am: 16. Okt. 2007 09: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 weinel 10 Unities + Antwort hilfreich

Markwert 10# ???
Hole dir diese Info doch aus der SolidWorks API:

Code:
dim lMark as long
dim bRetval as boolean

'Markwert belegen
lMark = SelectionMgr.GetSelectedObjectMark(i)
...
bRetval = swSelMgr.DeSelect2(vIndex, lMark)


------------------
Mfg Daniel

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

weinel
Mitglied



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

Beiträge: 464
Registriert: 04.09.2002

erstellt am: 18. Okt. 2007 10:29    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

Die Lösung war:

Die Funktion

retval = swSelMgr.DeSelect2(vIndex, -1)

darf nicht in der "for" schleife liegen!

------------------
Gruß weinel

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