| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | |  | InnovateNext 26. in Weisendorf, eine Veranstaltung am 11.11.2025
|
|
Autor
|
Thema: Punkte in einer Skizze per Makro verschieben (1504 mal gelesen)
|
Weißwurschtmampfer Mitglied
 Beiträge: 2 Registriert: 17.12.2008
|
erstellt am: 17. Dez. 2008 13:07 <-- editieren / zitieren --> Unities abgeben:         
Tag, vor einiger Zeit habe ich ein Modell konstruiert, für das eine Punktwolke eingelesen wurde, die anschliessend mit Bezier-Kurven verbunden wurde. Nun würde ich gerne die Positionen einiger der Punkte per Makro ändern. Da ich davon wenig Ahnung habe dachte ich es wäre am einfachsten, das einfach für einen Punkt mal aufzunehmen und dann die entsprechenden Teile in Schleifen zu packen. Jetzt ist es so, dass der Marko-Rekorder nur die Selektion des Punktes aufzeichnet, nicht aber dessen Verschiebung. Also habe ich versucht das Makro entsprechend zu erweitern. Code:
Dim swApp As Object Dim Part As Object Dim SelMgr As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim Feature As Object Dim Test As ObjectDim swSketchPt As SldWorks.SketchPoint Sub main()
Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager swApp.ActiveDoc.ActiveView.FrameState = 1 ' Sketch auswählen boolstatus = Part.Extension.SelectByID2("Skizze4", "SKETCH", 0, 0, 0, False, 0, Nothing, 0) Part.EditSketch Part.ClearSelection2 True ' Punkt auswählen boolstatus = Part.Extension.SelectByID2("Point249", "SKETCHPOINT", 0.09936977044404, 0.07057302506552, 0, False, 0, Nothing, 0) Set swSketchPt = SelMgr.GetSelectedObject6(1, -1) ' Punkt verschieben boolstatus = swSketchPt.SetCoords(0.0992, 0.071, 0) Part.ClearSelection2 True End Sub
In der Zeile "boolstatus = swSketchPt.SetCoords(0.0992, 0.071, 0)" steigt das Makro allerdings mit der Fehlermeldung "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt" aus. Daraus werde ich nicht ganz schlau, denn die entsprechenden Objekte sind ja eigentlich alle definiert. Weiß jemand Rat? Danke, Der Weißwurschtmampfer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau

 Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 17. Dez. 2008 13:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Weißwurschtmampfer
Prüf mal, ob swSketchPt vielleicht nothing ist. So nimmst Du nur irgendwas aus der Selektion, ohne zu prüfen, was da ausgewählt ist. Leuchtet der Punkt, wenn das Makro stehenbleibt? ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? 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: 17. Dez. 2008 13:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Weißwurschtmampfer
Hallo Weißwurschtmampfer (was für ein Name) SelMgr.GetSelectedObject6(1, -1) liefert die bei einem Skizzensegment, wie deinem Punkt zunächst nur eine Instanz auf die SldWorks.SketchSegment Klasse. Von dieser kannst du die SketchPoint Instanz ableiten. Das müsste so funktionieren
Code:
Dim oSwSketchSegment As SldWorks.SketchSegment Set oSwSketchSegment = SelMgr.GetSelectedObject6(1, -1) Set swSketchPt = oSwSketchSegment 'Prüfen der Variablen If swSketchPt Is Nothing Then Debug.Assert False
------------------ Mfg Daniel www.MySldWorks.de - SolidWorks Api Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Weißwurschtmampfer Mitglied
 Beiträge: 2 Registriert: 17.12.2008
|
erstellt am: 17. Dez. 2008 14:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo, erstmal Danke für die Hilfe. Die Puntke wurden tatsächlich nicht ausgewählt, obwohl dieser Teil des Makros ja aus dem Makrorekorder stammte. Die Lösung war dann die Koordinaten des Punktes aus der Zeile Code:
boolstatus = Part.Extension.SelectByID2("Point249", "SKETCHPOINT", 0.09936977044404, 0.07057302506552, 0, False, 0, Nothing, 0)
zu löschen und stattdessen nur Code:
boolstatus = Part.Extension.SelectByID2("Point249", "SKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)
zu schreiben. Dann wurde der Punkt korrekt ausgewählt. Der von Daniel vorgeschlagene Weg über SldWorks.SketchSegment hat nicht funktioniert, der Punkt mußte direkt über Code:
Set swSketchPt = SelMgr.GetSelectedObject6(1, -1)
referenziert werden. Danke nochmal, Der Typ der jetzt erstmal ne Wurscht mampft  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: 17. Dez. 2008 14:20 <-- editieren / zitieren --> Unities abgeben:          Nur für Weißwurschtmampfer
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |