| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Hannover Messe |
Autor
|
Thema: benutzerdefinierte Eigenschaften in Konfigurationsspezifische Eicgenschaften kopieren (6384 mal gelesen)
|
OlafvD Mitglied Konstrukteur
Beiträge: 33 Registriert: 07.04.2007 Dell Precision M4700 Intel Core i7-3480QM @ 2,8 GHz 16GB RAM NVIDIA Quadro K2000M 3D Connexion Space Explorer Pro<P>Windows 7 Professional 64-bit Solidworks 2013 Premium SP3.0 Solidworks PDM Enterprise 2013 SP4.0
|
erstellt am: 10. Sep. 2012 07:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wir haben letzte Woche das Enterprise PDM bei uns eingeführt. Leider sind bisher alle Eigenschaften in den benutzerdefinierten Eigenschaften angegeben worden. Ich bräuchte ein Makro, welches die Eigenschaften in die Standardkonfiguration kopiert und zudem die Eigenschaft Dicke mit dem Wert "Dicke@@Standard@<Dateiname>.SLDPRT" anlegt. Das würde ich dann gerne via Task über unsere Solidworksteile laufen lassen. Von unserem Reseller habe ich ein Tool bekommen, dass auf der Dateikarte per Button die Eigenschaften kopiert. Das ist mir aber zu unsicher. Da ich mich mit der VBA Programmierung überhaupt nicht auskenne, hoffe ich, dass ihr mir helfen könnt. Ich habe bereits bei Makromania ein Makro von Stefan Berlitz gefunden, welches edn umgekehrten Weg geht. http://solidworks.cad.de/mm_32.htm Habe auch schon eine Anfrage an ihn bzgl. Anpassung gestellt. Falls sich das hier überschneidet, möchte ich schon mal um Entschuldigung bitten. Vielen Dank für Eure Hilfe. VG Olaf 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: 10. Sep. 2012 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hallo Olaf, Zitat: Original erstellt von OlafvD: Ich bräuchte ein Makro, welches die Eigenschaften in die Standardkonfiguration kopiert und zudem die Eigenschaft Dicke mit dem Wert "Dicke@@Standard@<Dateiname>.SLDPRT" anlegt.Von unserem Reseller habe ich ein Tool bekommen, dass auf der Dateikarte per Button die Eigenschaften kopiert. Das ist mir aber zu unsicher.
Was hälst du daran für unsicher? Das einer der Anwender vergessen könnte vor dem Einchecken auf da Knöpfchen zu drücken? Das sollte das PDM-System aber abfangen, wenn da benötigte Werte fehlen. Aber im prinzip egal, darum geht es ja nicht. Zitat: Original erstellt von OlafvD: Ich habe bereits bei Makromania ein Makro von Stefan Berlitz gefunden, welches edn umgekehrten Weg geht. http://solidworks.cad.de/mm_32.htm
Ja, da ist eigentlich alles drin, was du brauchst. In http://solidworks.cad.de/mm_35.htm ist dann noch ein schneller Weg drin, wie du Dateieigenschaften an alle Konfigurationen schreiben kannst. Zitat: Original erstellt von OlafvD: Da ich mich mit der VBA Programmierung überhaupt nicht auskenne, hoffe ich, dass ihr mir helfen könnt. Habe auch schon eine Anfrage an ihn bzgl. Anpassung gestellt. Falls sich das hier überschneidet, möchte ich schon mal um Entschuldigung bitten.
Entschuldigung ist nicht nötig, so schöne Wochenende verbringe ich nur gelegentlich mit anderen Aktivitäten Aber es hört sich für mich so an, als brauchst du keine Hilfestellung, sondern du möchtest lieber ein fertiges Makro haben. So was nennt sich dann Auftragsprogrammierung, da kann ich mich dann gerne noch mal auf die Mail hin melden, aber dein Reseller kann dir das bestimmt auch machen. Gelegentlich lass ich mich auch auf andere Motivationshilfen ein, auch wenn es hier im Brett eher um Hilfe zur Selbsthilfe geht Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OlafvD Mitglied Konstrukteur
Beiträge: 33 Registriert: 07.04.2007 Dell Precision M4700 Intel Core i7-3480QM @ 2,8 GHz 16GB RAM NVIDIA Quadro K2000M 3D Connexion Space Explorer Pro<P>Windows 7 Professional 64-bit Solidworks 2013 Premium SP3.0 Solidworks PDM Enterprise 2013 SP4.0
|
erstellt am: 10. Sep. 2012 08:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, vielen Dank für Deine Antwort. Also die Programmierung von Makros interessiert mich sehr, da mir noch einige Anwendungsfälle bei uns einfallen. Ich verstehe auch halbwegs wie der Ablauf in den geschriebenen Makros funktioniert. Ich kann nur nicht nachvollziehen, welche Werte aus Solidworks ausgelesen werden können und welche Parameter dafür notwendig sind. Wenn Du mir da ein paar Tips geben könntest wo ich mir da am Besten Wissen aneignen kann, würde ich versuchen mir ein Makro für meine Wünsche zu schreiben. Das wäre auch definitiv der bessere Weg, da ich mir und vielleicht dann später auch mal anderen hier helfen kann. VG Olaf PS: Das mit den anderen Aktivitäten kann ich gut nachvollziehen.
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: 10. Sep. 2012 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hallo Olaf, Zitat: Original erstellt von OlafvD: Ich kann nur nicht nachvollziehen, welche Werte aus Solidworks ausgelesen werden können und welche Parameter dafür notwendig sind.
In Bezug auf die Dateieigenschaften gibt es mittlerweile den CustomPropertyManager, der bietet dir alle Methoden, die du brauchst, um die Dateieigenschaften per API anzusprechen. An einen CustomPropertyManager kommst du z.B. über ModelDocExtension::CustomPropertyManager heran, dem du mitgibst, zu welcher Konfiguration du eine Verbindung aufbauen willst, dabei gilt ein Leerstring bei der Übergabe als Dateieigenschaft auf Dokumentebene, für die konfigurationsspezifischen Dateieigenschaften gibst du den Namen der Konfiguration mit. Die zu nutzenden Methoden zum Auslesen, Löschen oder neu setzen sind in der API Hilfe beschrieben. Ich weiß, dass die gerade am Anfang etwas "sperrig" ist, aber sie ist dein bester Freund, wenn du Makro progammieren lernen möchtest, und manchmal dein einziger. Du kannst auch die alten Call wie ModelDoc2::AddCustomInfo3 zum erzeugen oder ModelDoc2::CustomInfo2 zum Auslesen/Setzen einer vorhandene Dateieigenschaft nehmen, auch hier übergibst du den Namen der Konfiguration (oder eben ein ""), die du bearbeiten möchtest. Vielleicht versuchst du es langsam anzugehen. Bau in deinem Makro erst mal den Teil, der den Wert einer bestimmten Dateieigenschaft ausliest. Dann erweiterst du es so, dass es alle Dateieigenschaften als Wert ausliest. Dann ergänzt du es um den Typ der Dateieigenschaft. Dann mal eine Schleife über alle Konfigurationen, um deren Namen herauszufinden. Dann das mit den Dateieigenschaften, aber auf Konfigurationsebene. Dann mal eine neue Eigenschaft mit dem Namen Dicke erzeugen. Dann mal über alle Konfigurationen klappern und dort die Dicke-Eigenschaft erzeugen. Und zum Schluss alles miteinander verbinden Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OlafvD Mitglied Konstrukteur
Beiträge: 33 Registriert: 07.04.2007 Dell Precision M4700 Intel Core i7-3480QM @ 2,8 GHz 16GB RAM NVIDIA Quadro K2000M 3D Connexion Space Explorer Pro<P>Windows 7 Professional 64-bit Solidworks 2013 Premium SP3.0 Solidworks PDM Enterprise 2013 SP4.0
|
erstellt am: 10. Sep. 2012 14:41 <-- editieren / zitieren --> Unities abgeben:
Ok. Vielen Dank. Habe mich jetzt mal etwas eingelesen und festgestellt, dass ichdass vor meinem Urlaub am Montag wohl nicht mehr hinbekomme. Also auf später verschoben. Sobald ich Ergebnisse habe, meld ich mich wieder. Olaf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Apollo212 Mitglied
Beiträge: 2 Registriert: 27.04.2015
|
erstellt am: 28. Apr. 2015 07:45 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hallo und Guten Morgen Ich muss leider mal diesen doch schon älteren Beitrag nach oben holen. Ich hoffe ich werde nicht gleich am Fahnenmast aufgeknüpft Ich habe ein kleines Problem mit einem Makro. Auch ich möchte bei vielen Dateien die "benutzerdefinierten Eigenschaften" ändern. Genauer muss ein ein zusätzliches Feld hinzugefügt werden. Das habe ich auch schon hinbekommen. Habe aus dem Schriftfeld Makro von Stefan die entsprechenden Teile rausgemobbst. Das ganze funktioniert auch soweit, dass wenn in SW ein Teil offen ist und ich das Makro anwende, der Teil eingefügt wird. Nun wollte ich der Einfacheit halber, und weil meine VB Kenntnisse eher rudimentärer Natur sind, das Programm PAC4SWX verwenden, um das Makro auf viele Dateien anzuwenden. Aber das funktioniert nicht. Das Makro wird aufgerufen, auch die Datei mit SW geöffnet und geschlossen - nur geändert wird nix. Mache ich was falsch oder habe ich einen Denkfehler? Vielleicht hät jemand kurz Zeit und kann mir einen Tipp geben? Hier der Code: ############### ' Definitionen sind konsistent mit dem Typennamen ' wie in \SldWorks\samples\appComm\swconst.bas definiert ' ' Definitions of typenames are consistent as in swconst.bas ' Option Explicit Const swDocPART = 1 Const swDocASSEMBLY = 2 Const swDocDRAWING = 3 Sub Main() ' Diese Funktion schreibt die aktuellen Werte, die in den Edit-Feldern ' eingetragen sind, in die benutzerdefinerten Dateieigenschaften zurück. ' Durch die Verknüpfung von den Schriftfeldtexten mit diesen Eigenschaften ' werden diese Änderungen dann im Schriftfeld angezeigt. ' In einem vernünftigen Programm sollten natürlich die Werte auf ihre ' Zulässigkeit überprüft werden (am besten schon bei der Eingabe) ' ' This function writes the actual values from the edit-widgets to the ' custom file properties. For the annotations on the drawing-template are ' linked to these properties this results in changing the drawing header. ' In a serious program you have to check these values, best on input. ' Dim swApp As Object Dim Model As Object Set swApp = CreateObject("SldWorks.Application") swApp.Visible = True Set Model = swApp.ActiveDoc If Model Is Nothing Then Call MsgBox("Keine Datei geöffnet", vbOKOnly, "Information") Exit Sub End If ' ' in dieser Funktion werden die Werte geschrieben, also andersrum wie oben ' wenn Attribute erzeugt werden sollen wird die zweite Methode verwendet, ' wenn nur mit bestehende Attributen gearbeitet werden soll die erste. ' ' this function writes the values, therefor the other way round ' if attributes should be generate the second way is used (delete, add), if ' you only want to work with existing attributes the first method is used. ' Dim dummy 'erst die alten Infos löschen ' first delete the old properties dummy = Model.DeleteCustomInfo("Benennung") ' ' dann die benötigten Infos als Dateieigenschaft eintragen dummy = Model.AddCustomInfo("Teilenummer", "Text", "$$$$$$$$$") ' und damit die Werte auch direkt im Schriftfeld angezeigt werden müssen ' wir ein Rebuild auf das Modell machen. Kann natürlich bei großen Dateien ' schonmal seine Zeit brauchen ;-) ' ' we would like to see the changes at once to appear on the drawing, so ' we have to give a model-rebuild command. This is very quick on small ' documents and may take a little longer on bigger ones ;-) ' End Sub ########################### LG Apollo212 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 28. Apr. 2015 08:12 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hi Apollo212, nach einem kurzen Blick auf dein Makro fehlt mir hier das Speichern deines Dokuments. Ich kenne jetzt das PAC4SWX nicht so genau (sorry Stefan ), weiß also nicht, ob das Speichern von PAC4SWX übernommen wird. Wenn nicht, musst du das mit deinem Makro machen, sonst sind alle Aktionen nur temporär. ------------------ Klaus www.al-ko.com | mein Gästebuch [Diese Nachricht wurde von KMassler am 28. Apr. 2015 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: 28. Apr. 2015 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hallo Apollo212, und herzlich willkommen im SolidWorks Brett auf CAD.de Zitat: Original erstellt von Apollo212: Nun wollte ich der Einfacheit halber, und weil meine VB Kenntnisse eher rudimentärer Natur sind, das Programm PAC4SWX verwenden, um das Makro auf viele Dateien anzuwenden. Aber das funktioniert nicht. Das Makro wird aufgerufen, auch die Datei mit SW geöffnet und geschlossen - nur geändert wird nix.Mache ich was falsch oder habe ich einen Denkfehler?
Ich hab jetzt das Makro nur überflogen, das scheint mir das zu tun, was es soll. Der Denkfehler ist folgender: du gehst davon aus, das PAC4SWX das Speichern übernimmt, aber das tut es nicht. Nie und nimmer. Njet. Nada. Das habe ich ganz bewusst so geschrieben, damit mir niemand an die Karre fahren kann und behauptet, durch das PAC4SWX wären seine Daten zerstört worden - kann nicht passieren, da PAC4SWX nichts mit den Originaldaten macht. Es läuft also so ab: PAC4SWX öffnet nacheinander alle Dokumente aus der Liste, lässt dann jeweils dein Makro laufen und schließt das Dokument ohne zu Speichern. Was dir also fehlt ist ein Speichern des aktiven Dokumentes am Ende deines Makros, sowas wie
Code:
Debug.Print Model.Save2(True)
Dann sollten die Änderungen durch das Makro auch von diesem gespeichert werden. Ciao, Stefan
------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Apollo212 Mitglied
Beiträge: 2 Registriert: 27.04.2015
|
erstellt am: 28. Apr. 2015 08:24 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
Hallo Klaus, da hast du tatsächlich Recht. Ich hatte vorher ein anderes Makro probiert, bzw. entfremdet, und da war auch ein "Datei speichern" programmteil dabei, wenn ich mich recht erinnere. Ich mach mich mal auf die Suche nach dem Speichern, vielleicht hilft das schon? Andere Meinungen dazu höre ich natürlich gern - bin auch lernwillig LG Marcus PS: Notiz an mich selbst VBA lernen. PPS: Danke Stefan! Super Sache das...ich werde mich gleich ranmachen. Deine Begründung leuchtet mir auch ein.
[Diese Nachricht wurde von Apollo212 am 28. Apr. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 29. Apr. 2015 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für OlafvD
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|