Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Benutzerdefinierte Eigenschaften per Makro aus Zeichnung lesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von Rotanimret an!   Senden Sie eine Private Message an Rotanimret  Schreiben Sie einen Gästebucheintrag für Rotanimret

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 23. Nov. 2023 08:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Christoph Weise an!   Senden Sie eine Private Message an Christoph Weise  Schreiben Sie einen Gästebucheintrag für Christoph Weise

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rotanimret 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Rotanimret an!   Senden Sie eine Private Message an Rotanimret  Schreiben Sie einen Gästebucheintrag für Rotanimret

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 23. Nov. 2023 12:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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))


Sehen Sie sich das Profil von ad_man an!   Senden Sie eine Private Message an ad_man  Schreiben Sie einen Gästebucheintrag für ad_man

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rotanimret 10 Unities + Antwort hilfreich

Hallo,

schau dir mal dieses Beispiel aus der SWX-API an. Dort erkennst du,
wie du vorgehen musst 

https://help.solidworks.com/2022/english/api/sldworksapi/Get_Custom_Properties_of_Referenced_Part_Example_VB.htm

By the way: Die GetCustomInfoValue-Methode ist als obsolet markiert.
Von daher jetzt der "neue" Weg übder den CustomPropertyManager.

------------------
==========
Gruß
Andreas
==========

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Christoph Weise
Mitglied
Technischer Produktdesigner / Konstruktion / CAD-Admin


Sehen Sie sich das Profil von Christoph Weise an!   Senden Sie eine Private Message an Christoph Weise  Schreiben Sie einen Gästebucheintrag für Christoph Weise

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rotanimret 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Rotanimret an!   Senden Sie eine Private Message an Rotanimret  Schreiben Sie einen Gästebucheintrag für Rotanimret

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 23. Nov. 2023 14:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von riesi an!   Senden Sie eine Private Message an riesi  Schreiben Sie einen Gästebucheintrag für riesi

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 24. Nov. 2023 07:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rotanimret 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Rotanimret an!   Senden Sie eine Private Message an Rotanimret  Schreiben Sie einen Gästebucheintrag für Rotanimret

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 24. Nov. 2023 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von riesi an!   Senden Sie eine Private Message an riesi  Schreiben Sie einen Gästebucheintrag für riesi

Beiträge: 1073
Registriert: 06.05.2002

SWX Premium 2020-Sp5

erstellt am: 24. Nov. 2023 11:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rotanimret 10 Unities + Antwort hilfreich

Ich arbeite immer mit

Code:
swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd

Vielleicht ist das die Lösung.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Rotanimret
Mitglied



Sehen Sie sich das Profil von Rotanimret an!   Senden Sie eine Private Message an Rotanimret  Schreiben Sie einen Gästebucheintrag für Rotanimret

Beiträge: 31
Registriert: 10.12.2021

erstellt am: 24. Nov. 2023 15:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz