| |
| 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
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 15. Okt. 2007 15:37 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für weinel
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
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 16. Okt. 2007 08:42 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für weinel
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 VARIANTiIndex(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
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 16. Okt. 2007 09:39 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für weinel
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
Beiträge: 464 Registriert: 04.09.2002
|
erstellt am: 18. Okt. 2007 10:29 <-- editieren / zitieren --> Unities abgeben:
|