| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SOLIDWORKS Webinar-Serie 2020 / 21: Aufzeichnungen zum Nachhören |
Autor
|
Thema: Mit dem Makro auf Ursprung zugreiffen (2003 mal gelesen)
|
krassdi Mitglied Konstrukteur
Beiträge: 17 Registriert: 03.12.2019 SolidWorks 2022 SP5.0
|
erstellt am: 20. Dez. 2019 10:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen Ich suche den Befehl wie ich im Makro auf den Ursprung zugreiffen kann. Die Ausgangslage ist das ich in der Baugruppe ein Teil bearbeite und in diesem aktiven Teil eine Skizze einfügen will. In dieser Skizze dann eine Linie einfüge und diesen auf den Urspung des Teils dekungsgleich setzen will. Habe versucht mit Makro aufzeichen, ob es hier ein Hinweis gibt, hier ist jedoch das Problem das die "Namen" ausgefühlt sind, diese jedoch nicht den Wert vom aktiven Teil laden, somit geht es nur wenn alle "Namen" gleich sind. Jetzt ist die Frage wie ich den Teil mit 021107.084.126_Wärmeschutzplatte-AS.i01-1@Baugruppe1 im Satz vom aktiven Teil abhänig machen kann. boolstatus = Part.Extension.SelectByID2("Point1@Ursprung@021107.084.126_Wärmeschutzplatte-AS.i01-1@Baugruppe1", "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0) Gruss Krassdi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ckoring Mitglied Ingenieur
Beiträge: 229 Registriert: 09.06.2009 Fujitsu CELSIUS M740 Intel Xeon E5-1620v4 32 GB RAM Nvidia Quadro P4000 Windows 10 Pro SolidWorks 2017 SP4.1 DBWorks R16 SP1.7
|
erstellt am: 08. Jan. 2020 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 08. Jan. 2020 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
Hallo, die Variante von Christian hat das Problem das der Ursprung der Baugruppe gefangen wird, was zu externen Referenzen führt. Du musst "Point1@Ursprung@021107.084.126_Wärmeschutzplatte-AS.i01-1@Baugruppe1" in seine Einzelteile zerlegen und durch Variablen ersetzen. Also ermittel den Namen der Baugruppe, dann den Namen der Komponenten und pack sie jeweils in eine Variable und setze diese direkt ein, könnte dann so aussehen "Point1@Ursprung@" & Komponentenname & "@" & Baugruppenname du kannst das zusammensetzen natürlich auch in einer separaten Variablen machen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
krassdi Mitglied Konstrukteur
Beiträge: 17 Registriert: 03.12.2019 SolidWorks 2022 SP5.0
|
erstellt am: 08. Jan. 2020 14:59 <-- editieren / zitieren --> Unities abgeben:
|
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 08. Jan. 2020 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
Hallo Krassdi, vielleicht kannst du mit folgendem schnell zusammengeschustertem Makro weiterarbeiten: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim swEditModel As SldWorks.ModelDoc2 Dim Punkt, Zus, Teil As String Dim retVal As Boolean Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel Set swEditModel = swAssy.GetEditTarget Punkt = "Point1@Ursprung@" Teil = Right(swEditModel.GetPathName, Len(swEditModel.GetPathName) - InStrRev(swEditModel.GetPathName, "\")) Teil = Left(Teil, Len(Teil) - 7) + "-1@" Zus = Right(swModel.GetPathName, Len(swModel.GetPathName) - InStrRev(swModel.GetPathName, "\")) Zus = Left(Zus, Len(Zus) - 7) Zus = Punkt + Teil + Zus retVal = swModel.Extension.SelectByID2(Zus, "EXTSKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0) End Sub Gruss Winni
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
krassdi Mitglied Konstrukteur
Beiträge: 17 Registriert: 03.12.2019 SolidWorks 2022 SP5.0
|
erstellt am: 09. Jan. 2020 07:06 <-- editieren / zitieren --> Unities abgeben:
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 09. Jan. 2020 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
Hallo, bei dem Macro musst du beachten das nicht mehrere Instanzen des Teiles das du editierst vorhanden sind (also das Teil mehrfach verbaut ist), weil ich glaub SWX fände es evtl. nicht so gut wenn du Instanz 5 editierst aber du den Ursprung von Instanz 1 selektierst oder es Instanz 1 gar nicht mehr gibt. "Teil = Left(Teil, Len(Teil) - 7) + "-1@"" in diesem Teil wird nämlich immer auf Instanz 1 verwiesen. Evtl. würdest du mit GetEditTargetComponent und Component.Name2 besser fahren für das ermitteln des Komponentennamens. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
krassdi Mitglied Konstrukteur
Beiträge: 17 Registriert: 03.12.2019 SolidWorks 2022 SP5.0
|
erstellt am: 09. Jan. 2020 16:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd Du hast vollkommen recht, wenn mehrere gleiche Teile verbaut sind klappt es nicht. Doch SWX nummeriert die gleichen Teile hinten mit <XYZ> (XYZ steht als Platzhalter) somit müsste es möglich sein diesen Wert abzugreifen und nicht wie im Makro ( Teil = Left(Teil, Len(Teil) - 7) + "-1@")die -1 statisch, sondern dynamisch vom SWX abhängig zu machen. Somit müsste auf Point1@Ursprung@021107.084.126_Wärmeschutzplatte-AS.i01-XYZ@Baugruppe1 zugegriffen werden. Bei den Versuchen ist noch ein zweiter Punkt aufgefallen. Wir haben nicht nur eine Baugruppe, sondern eine unterschiedliche Anzahl Ebenen, ist es denn möglich hier etwas dirkter drauf zuzugreifen?
Im Anhang ein Bild mit beiden Punkten, der Nummerirung und der Struktur.
Gruss Krassdi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 09. Jan. 2020 17:15 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
Zitat: Original erstellt von krassdi: … diesen Wert abzugreifen …
Hallo krassdi, bei component.name müsste der Teil XYZ schon mitgeliefert werden. bräuchtest statt "swEditModel" ein Objekt "swEditComponent" … trau dich ! und der Dateipfad ist dann gar nicht mehr dabei, dafür aber die evtl vorhandenen unterbaugruppen. von den anderen Zeilen kannst du dann einige löschen. Gruß, Christian_W Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Winni-two Mitglied Ing. Maschb.
Beiträge: 154 Registriert: 12.03.2010 SW 2021 SP5 Intel Xenon W2135 @3.7GHz Win 10 64 bit Graka: Nvidia Quadro P4000 32 GB Ram
|
erstellt am: 10. Jan. 2020 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für krassdi
Hallo Krassdi, versuch mal folgendes: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim selTarget As SldWorks.Component2 Dim Punkt, Zus, Teil As String Dim retVal As Boolean Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel Set selTarget = swAssy.GetEditTargetComponent Punkt = "Point1@Ursprung@" Teil = selTarget.GetSelectByIDString Zus = Punkt + Teil retVal = swModel.Extension.SelectByID2(Zus, "EXTSKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0) End Sub Gruss Winni
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
krassdi Mitglied Konstrukteur
Beiträge: 17 Registriert: 03.12.2019 SolidWorks 2022 SP5.0
|
erstellt am: 10. Jan. 2020 09:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen Mit dem vom Winni-two aufgezeigtem Weg klappt es jetzt. Original erstellt von Winni-two: Set selTarget = swAssy.GetEditTargetComponent Auch das Thema wo Bernd angesprochen hat mit den mehreren Teilen ist so kein Problem Besten Dank für euere Unterstützung Gruss Krassdi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |