| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Der größte Rechenreiniger der Welt bei MUHR (SOLIDWORKS, SOLIDWORKS Simulation), ein Anwenderbericht
|
Autor
|
Thema: Objektnamen für Linien in Solidworks ??? (1627 mal gelesen)
|
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 15. Okt. 2009 18:33 <-- editieren / zitieren --> Unities abgeben:
guten Tag, ich habe ein Makro geschrieben, welches aus einer excel-datei koordinaten ausliest und in einer solidworksskizze Splines erzeugt es werden insgesamt 52 Splines in einer 3D-Skizze erzeugt nun zu meinem Problem: ich möchte nun eine ausgeformte Oberfläche erzeugen, wobei 2 der zuvor erzeugten Splines Profile sind und die anderen 50 Splines Leitkurven darstellen. wenn ich dies mit dem Rekorder aufzeichne erhalte ich folgenden code 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 Sub main()Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set SelMgr = Part.SelectionManager Dim pwPhotoWorks As PhotoWorks.PhotoWorks Set pwPhotoWorks = swApp.GetAddInObject("PhotoWorks.PhotoWorks") Dim pwOpt As PhotoWorks.PwOptions Set pwOpt = pwPhotoWorks.PwOptions boolstatus = Part.Extension.SelectByID2("3D-Skizze1","SKETCHCONTOUR", 290.7187994872, 74.04444277316, 58.599998, True, 0,Nothing, 0) . . . Part.InsertLoftRefSurface2 False, True, False, 1, 0, 0, False
die Punkte sollen aber später verschoben werden, wodurch "290.7187994872, 74.04444277316, 58.599998" etc. nicht mehr richtig ist. wie kann ich also eine Linie anhand ihres Namens (z.B. Line1) auswählen oder ihr bei der Erzeugung einen Objektnamen zuweisen? vilen dank schonmal für kommende Antworten Marco
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3743 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 15. Okt. 2009 18:37 <-- editieren / zitieren --> Unities abgeben: Nur für derMarco
Hallo Marco, passiert das beides in demselben Macro? Also das Erstellen der Linien und das spätere Auswählen? Gruß, Torsten [Diese Nachricht wurde von Torsten Niemeier am 15. Okt. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 15. Okt. 2009 19:59 <-- editieren / zitieren --> Unities abgeben:
|
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3743 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 15. Okt. 2009 20:24 <-- editieren / zitieren --> Unities abgeben: Nur für derMarco
Ok, ich weis jetzt nicht, wie Du die Splines erzeugst, aber wenn Du es z.B. mit sowas: Dim swSketchSeg1 As SldWorks.SketchSegment ... Set swSketchSeg1 = swModel.CreateSpline(vPtData) machst, könntest Du später ja beim Auswählen auf die Variable swSketchSeg1 zurückgreifen: swSketchSeg1.select4 Gruß, Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 16. Okt. 2009 14:18 <-- editieren / zitieren --> Unities abgeben:
hallo, die Splines werden mit der funktion: Part.SketchSpline intptnr1, Val(points(x)), Val(points(y)), Val(points(z)) eingefügt und befinden sich danach alle in der selben skizze. kann ich beim Einfügen der Splines festlegen, dass sie evtl als feature eingefügt werden oder ihnen dann einen Objektnamen geben? und wie sähe dann der Sourcecode aus danke schonmal Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas5 Mitglied Konstrukteur, SWX-Admin
Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 16. Okt. 2009 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für derMarco
Hallo Marco, der Torsten hat ja geschrieben, daß Du das Objekt haben mußt, um es selektieren zu können. Genau so mußt Du das Objekt haben, um seinen Namen rauszubekommen. Weil Linien, Punkte keine so tollen Namen haben setzt SWX diese aus der ID-Nr. zusammen, z.B. für eine Linie: "Line" & Format(ID1(1), "#") Code: 'swSketchSegment ist ein Linien-Objekt ID1 = swSketchSegment.GetID boolstatus = part.Extension.SelectByID2("Line" & Format(ID1(1), "#"), "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
So kannst Du´s selektieren, ohne den Punkt zu haben. Aber Du mußt halt vorher schon mal das Objekt gehabt haben, damit Du an die ID kommst. Ich denke, unmittelbar nach deiner Linienerzeugung ist diese selektiert. Da mußt Du mit .getSelectedObject dir das Objekt holen. Und entweder Du "merkst" Dir dann gleich das Objekt, oder eben die ID. Kommt mitunter auf´s gleiche raus. Frohes Schaffen wünsche Ich! ThomasEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 21. Okt. 2009 16:08 <-- editieren / zitieren --> Unities abgeben:
hallo, danke für die hilfe soweit. ich bekomms aber leider immer noch nicht hin. ich habe jetzt die Zeile :
Code: variable = swApp.ActiveDoc.SelectionManager.GetSelectedObject
unmittelbar nach der erzeugung einer Spline eingefügt und bekomme die fehlermeldung, dass das Argument nicht optional sei. weiterhin habe ich mal folgende zeile an der selben stelle eingefügt :
Code: variable = swApp.ActiveDoc.SelectionManager.GetSelectedObjectCount
der inhalt der variablen ist "0" daraus schließe ich, dass die splines nach ihrer erzeugung nicht selektiert sind. wie kann ich das ändern? wie kann ich die objekte bzw. deren ids speichern?
[Diese Nachricht wurde von derMarco am 21. Okt. 2009 editiert.] [Diese Nachricht wurde von derMarco am 21. Okt. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas5 Mitglied Konstrukteur, SWX-Admin
Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 21. Okt. 2009 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für derMarco
Hallo Marco, Du hast recht: Dein Spline ist nach dem Einfügen nicht selektiert. Also kommst Du da auch so nicht ran. Mit sketch.GetSplineCount und sketch.GetSplines kannst Du ja vor dem Splineeinfügen die vorhanden Splines und deren Namen holen. Nach dem Einfügen ist dann der, dessen Name Du noch nicht hattes also Dein neuer Spline. Wenn Du noch gar keinen Spline hattest, sind dann alle mit sketch.GetSplines geholten Splines Deine hinzugefügten. Sollte so funktionieren. Viele Grüße! Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 23. Okt. 2009 12:09 <-- editieren / zitieren --> Unities abgeben:
hallo, wie rufe ich die funktion sketch.getsplines auf ? habs jetzt stundenlang versucht und bekomme andauernd die fehlermeldung: argument ist nicht otional. wäre sehr dankbar für ein beispiel. gruß Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas5 Mitglied Konstrukteur, SWX-Admin
Beiträge: 420 Registriert: 14.07.2003 SWX2013
|
erstellt am: 23. Okt. 2009 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für derMarco
Hallo Marco, versuch´s mal so: Code: Option ExplicitSub main() Dim swApp As Object Dim part As Object Dim swSelMgr As Object Dim theSketch As Object Dim MeinSpline As Object Dim Segmente As Variant Dim ID As Variant Dim retv As Boolean Dim SplineName As String Dim i As Long Set swApp = CreateObject("SldWorks.Application") Set part = swApp.ActiveDoc Set swSelMgr = part.SelectionManager Set theSketch = part.GetActiveSketch2 If theSketch Is Nothing Then Exit Sub Segmente = theSketch.GetSketchSegments For i = 0 To UBound(Segmente) If Segmente(i).GetType = swSketchSPLINE Then Set MeinSpline = Segmente(i) ID = MeinSpline.GetID SplineName = "Spline" & Format(ID(1), "#") retv = part.Extension.SelectByID2(SplineName, "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing, 0) 'MeinSpline.Select4 True, Nothing End If Next End Sub
Bei mir werden alle Spines in der offenen Skizze grün. Übrigens: Anstelle mit "part.Extension.SelectByID2" erreichst Du mit "MeinSpline.Select4" das gleiche. Brauchst halt da den Namen nicht. Die Sache mit .getsplines ist dann doch nicht das gewesen, was Du brauchst. Viele Grüße! ThomasEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
derMarco Mitglied
Beiträge: 20 Registriert: 15.10.2009
|
erstellt am: 28. Okt. 2009 16:01 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|