| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| AMB |
Autor
|
Thema: Benutzerdefinierte Eigenschaften per Makro aus Zeichnung lesen (446 / mal gelesen)
|
Rotanimret Mitglied
Beiträge: 31 Registriert: 10.12.2021
|
erstellt am: 23. Nov. 2023 08:33 <-- editieren / zitieren --> Unities abgeben:
Ich versuche gerade ein kleines Makro zu basteln, und möchte eine benutzerdefinierte Eigenschaft aus der zeichnung, von der aus auch das Makro gestartet wird, auslesen. Fürs Model geht es über propertyValue = swModel.GetCustomInfoValue("", Version) aber wie lese ich die Eigenschaften der aktuellen Zeichnung aus?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christoph Weise Mitglied Technischer Produktdesigner / Konstruktion / CAD-Admin
Beiträge: 204 Registriert: 22.03.2015 Dell 3650 Intel I7 11700k 32 GB RAM Nvidia RTX A4000 16GB Win 10 22H2 64-bit SolidWorks 2022SP5 QuickPress 6.3.3 PortaX 2.27 SAP ERP 6.0
|
erstellt am: 23. Nov. 2023 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für Rotanimret
Hallo Rotanimret, Ohne jetzt groß nachzuschauen, ist die Funktion die gleiche. Du musst nur statt "swModel" als Teil zu definieren, die Zeichnung zuweisen (oder eine eigene Variable verwenden) Die Eigenschaften sind wie im Modell zu behandeln. bei Konfigurationsspezifischen brauchst du den Namen der Konfig, bei den benutzerdefinierten Eigenschaften bleibt die Bezeichnung leer ( "" ). Da es in der Zeichnung nur benutzerdefinierte Eigenschaften gibt, bleibt auch die die Angabe leer. Gruß Christoph ------------------ Wer einen Fehler findet darf ihn behalten, wer zwei findet kann beide behalten, ab fünf Fehler gibs Rabatt :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rotanimret Mitglied
Beiträge: 31 Registriert: 10.12.2021
|
erstellt am: 23. Nov. 2023 12:12 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Christoph Weise:
Du musst nur statt "swModel" als Teil zu definieren, die Zeichnung zuweisen (oder eine eigene Variable verwenden)
Danke Dir, nur wie weise ich die Zeichnung zu? ich habe jetzt
Code: Dim swDraw As SldWorks.DrawingDoc Dim propertyValue As String Dim Version As String propertyValue = swDraw.GetCustomInfoValue("", Version)
Das gibt mir zwar keinen Fehler, aber eben auch nicht den Wert aus "Version" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003 SolidWorks 2023 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 23. Nov. 2023 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für Rotanimret
|
Christoph Weise Mitglied Technischer Produktdesigner / Konstruktion / CAD-Admin
Beiträge: 204 Registriert: 22.03.2015 Dell 3650 Intel I7 11700k 32 GB RAM Nvidia RTX A4000 16GB Win 10 22H2 64-bit SolidWorks 2022SP5 QuickPress 6.3.3 PortaX 2.27 SAP ERP 6.0
|
erstellt am: 23. Nov. 2023 14:17 <-- editieren / zitieren --> Unities abgeben: Nur für Rotanimret
In etwa so: Code:
Dim swApp As SldWorks.SldWorks Dim Zeichnung As SldWorks.ModelDoc2 Dim Merker_Rev As Integer Set swApp = Application.SldWorks Set Zeichnung = swApp.ActiveDoc
' Prüfen ob es eine Zeichnung ist If Zeichnung Is Nothing Then MsgBox "Keine Zeichung geöffnet!" Exit Sub End If If Zeichnung.GetType <> swDocDRAWING Then MsgBox "Keine Zeichung geöffnet!" Exit Sub End If Merker_Rev = Zeichnung.CustomInfo2("", "KOPF_V")
Ich hab nur im Code gerade gesehen das ich die Funktion "CustomInfo2" verwende... ------------------ Wer einen Fehler findet darf ihn behalten, wer zwei findet kann beide behalten, ab fünf Fehler gibs Rabatt :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rotanimret Mitglied
Beiträge: 31 Registriert: 10.12.2021
|
erstellt am: 23. Nov. 2023 14:34 <-- editieren / zitieren --> Unities abgeben:
Danke euch, das seh ich mir in Ruhe (morgen) an. Ich möchte eine BDE aus der Zeichnung in das zugehörige Teil kopieren. Im Moment wird zwar die BDE im Teil angelegt, bleibt aber leer. Aktuell sieht der code so aus: Code: Option Explicit Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swView As SldWorks.View Dim swDrawModel As SldWorks.ModelDoc2 Dim swDraw As SldWorks.DrawingDoc Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swDraw = swModel ' Start performance enhancers StartNoScreenUpdate swModel StartLockFMT swModel ' First view on the sheet (sheet format) Set swView = swDraw.GetFirstView ' first actual view Set swView = swView.GetNextView ' set swdrawmodel to be model that is referenced on the first sheet on the first available view Set swDrawModel = swView.ReferencedDocument ' Exit if drawing has no referenced documents If swDrawModel Is Nothing Then MsgBox ("Diese Zeichnung enthält kein Model!") Exit Sub End If'define what should be changed Dim propertyName As String Dim propertyValue As String Dim Version As String propertyName = "Version-Model" propertyValue = swDraw.GetCustomInfoValue("", Version) 'read out all title block items from drawing AddProperty swDrawModel, propertyName, propertyValue ' End performance enhancers EndNoScreenUpdate swModel EndLockFMT swModel End Sub ' adds a property with the name "propertyname" and the value "propertyvalue" to the general tab of the custom properties Sub AddProperty(swModel As SldWorks.ModelDoc2, propertyName As String, propertyValue As String) Dim swModelDocExt As ModelDocExtension Dim swCustProp As CustomPropertyManager Dim newprop As Boolean Set swModelDocExt = swModel.Extension Set swCustProp = swModelDocExt.CustomPropertyManager("") newprop = swCustProp.Add3(propertyName, swCustomInfoText, propertyValue, swCustomPropertyReplaceValue) End Sub '------------------------------------------------------------------------------------------------------------------- '------------------------------------------------------------------------------------------------------------------- ' Speed up the macro! Sub StartNoScreenUpdate(swModel As SldWorks.ModelDoc2) Dim modView As ModelView Set modView = swModel.ActiveView modView.EnableGraphicsUpdate = False End Sub Sub EndNoScreenUpdate(swModel As SldWorks.ModelDoc2) Dim modView As ModelView Set modView = swModel.ActiveView modView.EnableGraphicsUpdate = True End Sub
Sub StartLockFMT(swModel As SldWorks.ModelDoc2) swModel.FeatureManager.EnableFeatureTree = False End Sub
Sub EndLockFMT(swModel As SldWorks.ModelDoc2) swModel.FeatureManager.EnableFeatureTree = True End Sub
Das hab ich mir natürlich so nicht ausgedacht, sondern auch größtenteils kopiert... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 24. Nov. 2023 07:40 <-- editieren / zitieren --> Unities abgeben: Nur für Rotanimret
Zitat: Original erstellt von Rotanimret: Danke euch, das seh ich mir in Ruhe (morgen) an.Ich möchte eine BDE aus der Zeichnung in das zugehörige Teil kopieren. Im Moment wird zwar die BDE im Teil angelegt, bleibt aber leer. Aktuell sieht der code so aus: [code]Option Explicit 'define what should be changed Dim propertyName As String Dim propertyValue As String Dim Version As String propertyName = "Version-Model" propertyValue = swDraw.GetCustomInfoValue("", Version) 'read out all title block items from drawing AddProperty swDrawModel, propertyName, propertyValue '
Magst Du bitte erklären, was genau Dein Vorhaben ist? Bislang liest Dein Makro die Eigenschaft "Version" aus und schreibt diesen Wert als Version-Model wieder zurück. Lt. Api-Hilfe ist GetCustomInfoValue veraltet und es soll der CustomPropertyManager genommen werden, so wie in der Methode AddProperty. Mit der Ermittlung des Modells wird offensichtlich nichts gemacht, kann also weg gelassen werden. Ich vermute, Du möchtest Eigenschafts-Werte aus dem Modell in die Zeichnung tragen. Wenn es aber nur darum geht, Eigenschaften aus dem Modell auf die Zeichnung zu bringen, so ist keine Programmierung nötig. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rotanimret Mitglied
Beiträge: 31 Registriert: 10.12.2021
|
erstellt am: 24. Nov. 2023 10:03 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von riesi:
Magst Du bitte erklären, was genau Dein Vorhaben ist? Bislang liest Dein Makro die Eigenschaft "Version" aus und schreibt diesen Wert als Version-Model wieder zurück. Lt. Api-Hilfe ist GetCustomInfoValue veraltet und es soll der CustomPropertyManager genommen werden, so wie in der Methode AddProperty.Mit der Ermittlung des Modells wird offensichtlich nichts gemacht, kann also weg gelassen werden. Ich vermute, Du möchtest Eigenschafts-Werte aus dem Modell in die Zeichnung tragen. Wenn es aber nur darum geht, Eigenschaften aus dem Modell auf die Zeichnung zu bringen, so ist keine Programmierung nötig.
Anders herum, ich möchte den Wert aus Version in der Zeichnung ins Modell in Version-Model schreiben. Der Eintrag Version-Model wird auch angelegt, bleibt aber leer.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 24. Nov. 2023 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für Rotanimret
|
Rotanimret Mitglied
Beiträge: 31 Registriert: 10.12.2021
|
erstellt am: 24. Nov. 2023 15:24 <-- editieren / zitieren --> Unities abgeben:
wenn ich Code: propertyValue = swDraw.GetCustomInfoValue("", Version)
ändere in Code: propertyValue = swDraw.CustomInfo2("", "Version")
dann funktioniert es. Vielen Dank schon mal dafür. Wie müsste ich das ganze jetzt ändern, damit ich ohne obsolete Methoden auskomme? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |