| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | PLM TechnologieForum Hannover |
Autor
|
Thema: Zuschnittliste Rahmen erzeugen (2199 mal gelesen)
|
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 29. Dez. 2018 00:52 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Forengemeinde, ich bin gerade dabei mich in die Thematik Makro Erstellung einzuarbeiten und konnte auch schon die ersten (wenigen) Erfolge beim Makro aufzeichnen verbuchen. Leider kommt man da aber als momentaner Nullpeiler wie ich es bin, nicht ganz so voran wie ich gerne würde. Ich bin in der Holzkonstruktion tätig und da arbeite ich mit vielen Plattenmaterialien. Als CAD-Dienstleister reicht es mir aus, wenn ich eine Stückliste auf der Zeichnungsableitung habe auf der die Maße vom 3D Rahmen draufstehen. Wir haben viel mit verschiedensten ERP-Systemen zu tun und das Exportieren der Stückliste in Excel mit anschließendem Einlesen in die entsprechenden ERP´s, hat sich bislang ganz gut bewährt. Ich scheitere momentan aber daran, das dieses aufgezeichnete Makro nicht durch alle virtuelle Bauteile durchrattert. Es bearbeitet nur das Bauteil das aufgezeichnet wurde. Ist logisch, weil im Editor ja auch genau dieses benannt drin steht. Wie gebe ich dem Makro jetzt zu verstehen, das er alle virtuellen Bauteile durchlaufen soll oder besser gesagt, wo kann ich Info´s darüber finden wie man sowas aufbaut? Ich habe noch einige Ideen was ich gerne automatisiert haben möchte, allerdings scheitert´s an der Umsetzung. Viele Grüße Torsten
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 29. Dez. 2018 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für Torsten1979
Zitat: Original erstellt von Torsten1979: ...Wie gebe ich dem Makro jetzt zu verstehen, das er alle virtuellen Bauteile durchlaufen soll oder besser gesagt, wo kann ich Info´s darüber finden wie man sowas aufbaut? Ich habe noch einige Ideen was ich gerne automatisiert haben möchte, allerdings scheitert´s an der Umsetzung.
Hallo Torsten, willkommen im Forum. Der Bernd (bk.sc) hat >hier im Beitrag< eine solche Möglichkeit als Beispiel zur Verfügung gestellt. Du musst nur den Code: If swCompModel.CustomInfo2("", "ExcludeFromBOM") = "Yes" Then swChildComp.ExcludeFromBOM = True End If
durch Deinen code ersetzen. Tipps zum eigenen Makro:
- Einen Kurs beim Reseller besuchen (Nein, ich bekomme kein Geld dafür )
- Stefan Berlitz Seite ( http://solidworks.cad.de/ ) die Beispiele in der MakroMania und/oder Tauschbörse anschaun
- Bücher/Youtube/google/Beispiele der SolidWorks-Seiten/Foren
- Mit der englischen SolidWorks Version arbeiten. Dabei lernt man die Suchbegriffe kennen.
- Die API Hilfe zu den Befehlen der aufgezeichneten Makros aufrufen -> Beispiele in der API Hilfe anschaun.
- Hier im Forum suchen.
- Hier im Forum fragen.
- ...
Hoffe das hilft erst mal für den Anfang Viel Spaß Ralf ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 29. Dez. 2018 22:44 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf, erstmal Danke für die Antwort. Habe den Code soweit zusammengemischt, komisch das ich den nicht über die Suche gefunden habe. Allerdings ergibt das einen "Fehler beim Kompilieren-Variable nicht definiert", was eigentlich klar ist, denn die Bauteile haben in dem Makro "SelectByID2". Ich nehme mal an hier müsste eine Variable für das jeweilige Bauteil stehen. So zumindest mein jetziges Verständnis. Viele Grüße Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 29. Dez. 2018 22:52 <-- editieren / zitieren --> Unities abgeben: Nur für Torsten1979
|
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 29. Dez. 2018 23:02 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf, erstmal Danke für die spätabendliche Hilfe. So würde das zusammengemixte aussehen: Code: Dim swApp As Object Option Explicit Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2 Dim bRet As Boolean Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swConf = swModel.GetActiveConfiguration Set swRootComp = swConf.GetRootComponent3(True) TraverseComponent swApp, swModel, swRootComp, 1 MsgBox "Fertisch", vbOKOnly End Sub Sub TraverseComponent(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swComp As SldWorks.Component2, nLevel As Long) Dim vChildComp As Variant Dim swChildComp As SldWorks.Component2 Dim swCompConfig As SldWorks.Configuration Dim swCompModel As SldWorks.ModelDoc2 Dim i As Long vChildComp = swComp.GetChildren For i = 0 To UBound(vChildComp) Set swChildComp = vChildComp(i) Set swCompModel = swChildComp.GetModelDoc2 Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Teil1^Baugruppe1-1@Baugruppe1", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) Part.EditPart Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("PLATTE, 150 x 150 x 500<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0) Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("PLATTE, 150 x 150 x 500<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0) Part.Extension.Create3DBoundingBox Part.EditAssembly TraverseComponent swApp, swModel, swChildComp, nLevel + 1 Next i swModel.ForceRebuild3 (False) End Sub
Was mir aber gerade noch auffällt ist, das dieser Absatz doppelt geführt ist:
Code: Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("PLATTE, 150 x 150 x 500<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
Habe ich mich beim Makro aufnehmen verklickt, oder soll das soppelt ausgeführt werden? Viele Grüße Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ralf Tide Moderator -
Beiträge: 4978 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 30. Dez. 2018 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für Torsten1979
Hallo Torsten, nachdem ich jetzt sehe, wie Du den Code eingefügt hast, gehe ich mal davon aus, dass Du noch nicht viel programiert hast. Ich weiß jetzt gar nicht wo ich mit der Hilfe anfangen soll...
Code: Set Part = swApp.ActiveDoc
brauchst Du zum Beispiel gar nicht, da in der Schleife das "aktive" Dokument schon eine Zeile darüber gewählt ist: Code: Set swCompModel = swChildComp.GetModelDoc2
Deine nächste Zeile müsste dann lauten Code: swCompModel.EditPart
Du willst das Teil bearbeiten. Jetzt müsste eine weitere Schleife im virtuellen Teil die Schweißvolumenkörper finden und den Rahmen hinzufügen. Mit Code: swCompModel.EditAssembly
kommst Du wieder in die Baugruppenebene, in die Schleife zur nächsten Komponente... Ich hab bei der ersten Antwort scheinbar den Text nicht genau genug gelesen . Das Makrogerüst von Bernd reicht für Dein Vorhaben nicht aus. Zwar kannst Du damit alle Teile in der Baugruppe nacheinander bearbeiten, aber Du willst ja 'nur' zu den virtuellen Teilen die Rahmen der Schweißvolumenkörper erzeugen. Dazu musst Du noch die "nicht virtuellen" Teile aussortieren und eine weitere Schleife im virtuellen Teil (das gerade bearbeitet wird) ausführen, die dann nur auf die Schweißvolumen den Rahmen erzeugt. Als Einstieg vielleicht ein bisschen viel... Für Excel-VBA hab ich mal 'ne schöne Webseite gefunden mit mehr als 50 Beispielvideos. Das wäre vielleicht ein guter Einstieg für Dich: https://www.excel-vba-lernen.de/ HTH Ralf
BTW: Der Makrorecorder bietet in den meisten Fällen einen guten Ansatzpunkt. Die doppelte "Aufzeichnung" kannst Du löschen, das kenne ich auch vom aufzeichnen. ------------------
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 30. Dez. 2018 15:14 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf, ja ich habe in der Tat noch nicht viel programmiert. Bislang bin ich immer irgendwie anders, aber dafür umständlicher, ans Ziel gekommen. Allerdings wird der Fokus auf Effizienz jetzt noch bedeutsamer, dadurch das ich bei einem Dienstleister beschäftigt bin. Getreu nach dem Motto: "An zuviel Wissen ist noch keiner gestorben, außer man hat mit der Mafia zu tun", will ich das Thema Programmieren aber angehen. Die Seite ist schonmal sehr hilfreich. Auf jeden Fall bedanke ich mich für die Hilfe. Ich bin sicher ich komme bald mit anderen Sachen um die Ecke Viele Grüße Torsten 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: 03. Jan. 2019 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Torsten1979
Hallo Torsten, da ich das Ausgangsmacro zufällig kenne, kann ich dir evtl. helfen . Dazu ein paar Fragen vorab: Hat deine Baugruppe mehrere Ebenen? Wenn nein kann zumm Beispiel das zweite "TraverseComponent swApp, swModel, swChildComp, nLevel + 1" entfallen. Sollen wirklich nur Virtuelle Komponenten bearbeitet werden? Wenn ja musst du hier eine Abfrage für die Komponente der IsVirtual Property (IComponent2) einbauen. If swChildComp.IsVirtual = True Then Hier deinen Code ausführen End If [EDIT] Sind Komponenten mehrfach verbaut? Um so länger ich mir dein Vorhaben anschau um so komplizierter wird das Macro, aber machbar sollte es sein, kostet eben nur ein bisschen Zeit. Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht ---
Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 03. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 04. Jan. 2019 14:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, die Baugruppe befindet sich nicht auf mehreren Ebenen. Bislang gab es keine Anforderung, das Bauteile aus einer Bauteilbibliothek in der Baugruppe verwendet werden sollen. Ausser Verbindungsmittel wie Schrauben, Dübel usw., die mehrfach vorkommen können, wird alles einzeln als virtuelles Teil konstruiert. Ist beim Datentransfer übersichtlicher, zumindest hat sich bislang keiner beschwert. Die Verbindungsmittel werden natürlich nicht mit Rahmen versehen. Das reicht wenn die mit Anzahl und Dateiname in der Stückliste stehen. Viele Grüße Torsten
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: 07. Jan. 2019 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für Torsten1979
Hallo Torsten, Bibliothek war jetzt noch nicht mal die Frage - die werden vermutlich nicht virtuell sein ... aber wenn "Regal^Zimmer" als virtuelles Teil mehrfach eingesetzt wird, muss es nur einmal gerahmt werden. Ansonsten müsste/könnte man schauen, ob es schon Rahmen hat. scheint nach deiner Antwort aber eher nicht der Fall zu sein Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten1979 Mitglied Konstrukteur
Beiträge: 21 Registriert: 29.12.2018
|
erstellt am: 12. Jan. 2019 23:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, sorry wegen der verspäteten Antwort, war unterwegs. Die Teile in der Bibliothek sind nicht virtuell. Bei uns ist es in den seltensten Fällen so, das virtuelle Teile oder ganze Baugruppen mehrfach eingesetzt werden. Ich hatte bislang immer den Fall, wenn ich Teile mehrfach verbaut habe, das ich genau an einem Teil eine Bearbeitung brauchte,bei der anderen aber nicht. Nachdem mir das mehrmals passiert ist, bau ich die Teile immer einzeln. Hat sich bei mir so etabliert und funktioniert, soweit ich das beurteilen kann, ganz gut. Den Punkt Schweißkonstruktion selbst, habe ich mittlerweile in meiner Part Vorlage drin. Lediglich der Befehl "3D Rahmen erzeugen" mache ich immer per Hand und das versuche ich ins Makro zu fummeln. Bei manchmal über 100 Teilen wird's anstrengend. Viele Grüße Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|