| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | PLM TechnologieForum Bamberg |
Autor
|
Thema: Referenzebene verschieben VBA (2182 mal gelesen)
|
Bolle Mitglied
Beiträge: 48 Registriert: 12.03.2003
|
erstellt am: 25. Feb. 2014 23:16 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte per VBA Script die Position einer Referenzebene ändern. Die Ebene ist in einer Baugruppe über einen Abstands zur Top plane (Ebene oben) definiert. Der Makro-Rekorder hat mir folgenden Code ausgegeben Sub main() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("EBENE1", "PLANE", 0, 0, 0, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("EBENE1", "PLANE", 0, 0, 0, False, 0, Nothing, 0) Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("Ebene oben", "PLANE", 0, 0, 0, True, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Ebene oben", "PLANE", 0, 0, 0, True, 0, Nothing, 0) Dim myRefPlane As Object Set myRefPlane = Part.FeatureManager.InsertRefPlane(8, 3.000, 0, 0, 0, 0) Part.ClearSelection2 True End Sub Wenn ich den Offset nun von 3.000 auf 2.000 ändere und das Makro starte, ändert sich die Lage der Ebene aber nicht. Ist der ausgegebene Code falsch oder unvollständig? Viele Grüße Bolle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
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: 26. Feb. 2014 07:33 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
Hallo Bolle, Zitat:
Set myRefPlane = Part.FeatureManager.InsertRefPlane(8, 3.000, 0, 0, 0, 0)
dieser Codeteil würde dir eine neue Ebene erstellen und keine vorhandene ändern. Ich habe jetzt leider auch keinen direkten Zugriff auf die Werte gefunden um die Ebene zu ändern, aber du könntest ja evtl. die Bemassung D1@Ebene1 manipulieren. Versuch es mal mit Code: Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Sub main() Set swApp = _ Application.SldWorks Set Part = swApp.ActiveDoc Dim myDimension As Object Set myDimension = Part.Parameter("D1@Ebene1") myDimension.SystemValue = 2# 'neuer Abstand in Meter End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht ---
Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 26. Feb. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 26. Feb. 2014 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
Hallo Bolle, wenn es eine RefPlane ist, die mit SW2010 oder später erstellt wurde müsstest du über RefPlaneFeatureData::AngleOrDistance daran kommen können und damit auch einen neuen Abstand setzen können. Ich habe es alelrdings selbst noch nicht probiert und auch kein Beispiel zur Hand, von daher wäre es schön, wenn du bei Erfolg hier ein kleines Makro posten könntest, was zeigt, wie das geht Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 26. Feb. 2014 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
Hallo nochmal, hab gerade beim Stöbern doch noch ein Beispiel in der API Hilfe dazu gefunden: Modify Plane by Editing Its Definition Example (VBA) Das sollte dir zeigen, was du machen musst, ist nicht ganz so offensichtlich Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bolle Mitglied
Beiträge: 48 Registriert: 12.03.2003
|
erstellt am: 26. Feb. 2014 21:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, hallo Stefan, ich habe eure Vorschläge ausprobiert und konnte mit beiden die Ebene verschieben. An den Code von Bernd habe ich noch ein Update 'rangehängt, dann wars perfekt.
Code: Sub main() Dim swApp As ObjectDim Part As Object Dim boolstatus As Boolean Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Dim myDimension As Object Set myDimension = Part.Parameter("D1@Ebene1") myDimension.SystemValue = 2 'neuer Abstand in Meter boolstatus = Part.EditRebuild3() End Sub
Beim Code von Modify Plane by Editing Its Definition Example (VBA) habe ich die Zeile
Code: Set swPart = swModel
berausnehmen müssen, da es eine Fehlermeldung gab. In den letzten Zeilen habe ich swPart durch swModel ersetzt. So hat es dann auch einwandfrei funktioniert. Ich habe in der Doku nochmal gesucht, welche Werte neben der 'Distance' (swRefPlane.distance = 0.1) noch gesetzt weren können, bin aber nicht so richtig fündig geworden. Ist irgendwie ein generelles Problem, dass ich zu den Methoden nie eine Auflistung der möglichen Argumente/Parameter finde. Gibt es da einen "Kniff" zu beachten ? Vielen Dank für eure Hilfe ! Gruß Bolle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 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: 27. Feb. 2014 01:05 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 27. Feb. 2014 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
Hallo Bolle, Zitat: Original erstellt von Bolle: Ist irgendwie ein generelles Problem, dass ich zu den Methoden nie eine Auflistung der möglichen Argumente/Parameter finde. Gibt es da einen "Kniff" zu beachten ?
Ist ja interessant, im Gegensatz zu dir und Torsten finde ich die API Hilfe sehr übersichtlich, gut und gleichmäßig aufgebaut und es sind viele Beispiel drin. Sicherlich sind ein paar davon überholungsbedürftig oder haben auch mal nicht (mehr) funktionsfähigen Code drin, die Beschreibungen der obsoleten Calls sind leider zusammengestrichen worden und alles ist nur in englisch - aber da hab ich mich zumindest dran gewöhnt. Ich finde in der API Hilfe ist es am einfachsten etwas zu finden, wenn man sein SolidWorks auf Englisch stellt und dann die Feature- und Funktionsnamen dort beim "normalen" Arbeiten sucht. So kam ich dann mit den Stichworten "reference plane distance" über die Suche in der API Hilfe relativ schnell auf "AngleOrDistance Property (IRefPlaneFeaturedata)". Auf den Seiten der einzelnen Calls stehen in meinen Augen die wichtigsten Sache dann ganz unten. Der Bemerkungsabschnitt (Remarks) muss man unbedingt durchlesen, da stehen oft Einschränkungen, Besonderheiten, Alternativen usw. beschrieben. Dort unten finden sich auch Beispiele, in der dieser Call auftaucht und die oft hilfreich sind um zu sehen, wie die angewendet werden. Dann gibt es den Abschnitt "Accessors", also auf welche Art und Weise man an die Objekte rankommen kann, das ist oft eine gute Stelle um weiter zu forschen. Und dann ganz unten hinter "See also" ist typischerweise der Link zu den passenden Übersichten der Eigenschaften und Methoden der Objekte, z.B. in unserem Fall gibt es einen Link zu "IRefPlaneFeatureData Members". Hier findest du dann alle Eigenschaften (Properties) und Methoden (Methods) des jeweiligen Objektes, inklusive Kurzbeschreibung und Link zu der Detailbeschreibung. Immer dran denken: die API Hilfe ist dein Freund, manchmal sogar dein einziger - und wie das bei Freunden so ist, kennt man die Macken, aber nimmt sie hin Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 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: 27. Feb. 2014 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bolle
Zitat: Original erstellt von StefanBerlitz: Ist ja interessant, im Gegensatz zu dir und Torsten finde ich die API Hilfe sehr übersichtlich, gut und gleichmäßig aufgebaut und es sind viele Beispiel drin.
Hallo Stefan. Also ich habe nie gesagt, dass ich die API-Hilfe unübersichtlich, schlecht und ungleichmäßig aufgebaut finde. Die ist schon ok so und im Vergleich zu manch anderer Hilfe sogar ganz toll. Man merkt hier, dass die Entwickler da 'ne Menge Zeit investieren. Ich wollte nur zum Ausdruck bringen, dass die Suche innerhalb der Hilfe schwieriger geworden ist, seit mit dieser i-Geschichte begonnen wurde, IMHO irgendwann zwischen 2008 und 2010. Und dies Beispiel ist gut, um das zu belegen: Eine Suche nach 'RefPlaneFeaturedata' (so wie es im Beispiel ja deklariert ist) fördert nahezu nichts zutage. Das funktionierte IMHO in der Hilfe zu SWX2010 noch besser. Stellt man das i davor, klappts... Das ist so nicht in Ordnung. Die Schlüsselwörter, die in den Beispielen benutzt werden, müssen auffindbar sein. Sonst ist einfach das Beispiel überholt, oder die Suche ist schlecht. Gruß, Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bolle Mitglied
Beiträge: 48 Registriert: 12.03.2003
|
erstellt am: 28. Feb. 2014 00:40 <-- editieren / zitieren --> Unities abgeben:
Na, das bringt mich doch schon wieder ein Stück voran. Danke für die Tipps. Ich denke es ist letzten Endes alles eine Sache der Gewöhnung. Die Beispiele sind wirklich zahl- und hilfreich. Man muss nur aufpassen, dass man bei einer Suche nicht in die falsche Richtung abbiegt. Aber auch das alles eine Frage der Erfahrung, wenn man weiss, wie und wonach man suchen muss. Viele Grüße Bolle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|