Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Benutzerdefinierte Eigenschaften von konfigurationsspezifischen unterscheiden

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 2024
Autor Thema:  API: Benutzerdefinierte Eigenschaften von konfigurationsspezifischen unterscheiden (2039 mal gelesen)
Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 02. Jan. 2006 13:21    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 hab ein Makro geschrieben, mit dem bei uns Teiledaten (Werkstoff, Name, Teilenummer usw.) als benutzerdefinierte Eigenschaften ans Teil, bzw. die Baugruppe gehängt werden.

Jetzt möchte ich überprüfen, ob es in dem Teil Konfigurationen gibt, welche in der Tabelle diese Eigenschaften vielleicht schon festlegen. Dann kann ich einen Warnhinweis geben, dass diese Daten in der Konfigurationstabelle geändert werden müssen und das Eingabefeld sperren.

Wie krieg ich raus, ob eine Dateieigenschaft benutzerdefiniert oder konfigurationsspezifisch ist?

ModelDoc2.GetCustomInfoNames2() gibt alle Dateieigenschaften raus, egal woher.

Ich hab schon versucht, mit ModelDoc2.GetCustomInfoNames2("Standard") die benutzerdefinierten Eigenschaften auszufiltern, aber das hat nicht funktioniert.

Hat jemand eine Idee?

Piet

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 02. Jan. 2006 14:13    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 Piet 10 Unities + Antwort hilfreich

Hi,

die Funktion CustomInfo2 gibt unterschiedliche Werte zurück abhängig davon ob
du eine Konfiguration angibst oder einen leeren String.

Str1=swModel.CustomInfo2(vConfigName, vCustInfoName)
Str2=swModel.CustomInfo2("", vCustInfoName)

Wenn Str2 leer ist, ist es eine konfigurationsspezifisch Eigenschaft.

Gruß Oliver Knepper

------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

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

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.

erstellt am: 02. Jan. 2006 15:01    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 Piet 10 Unities + Antwort hilfreich

Hi,

ich mach dat imma so ...

Public Function GetConfigProps()

Dim mDoc As ModelDoc2
Dim cfgNames As Variant
Dim cfgCounter As Long
Dim cNames, cVals, cType
Dim cfg As Configuration
Dim i As Long
Dim swApp As SldWorks.SldWorks

Set swApp = Application.SldWorks
Set mDoc = swApp.ActiveDoc
    cfgNames = mDoc.GetConfigurationNames
    For cfgCounter = 0 To UBound(cfgNames)
        Set cfg = mDoc.GetConfigurationByName(cfgNames(cfgCounter))
          Call cfg.GetCustomProperties(cNames, cVals, cType)
          If IsArray(cNames) Then
            For i = 0 To UBound(cNames)
                Debug.Print "config:=" & cfg.Name & " | " & "Name:=" & cNames(i) & " Wert:=" & cVals(i)
            Next i
          End If
    Next cfgCounter
End Function

Gruß
Micha

------------------

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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

Lutz Federbusch
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau



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

Beiträge: 3094
Registriert: 03.12.2001

alle SW seit 97+
AutoCAD2016-2022
ERP ProAlpha + CA-Link
Intel Core i7-7820K 32GB
Win10x64 Quadro K5000
SpacePilot

erstellt am: 02. Jan. 2006 16:22    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 Piet 10 Unities + Antwort hilfreich

Nochmal zu Jens_Oliver: Mißverständlich!
Wenn der String2 leer ist, ist der Wert für die benannte benutzerdefinierte Eigenschaft leer, das heißt allerdings noch nicht, daß es dieselbe Eigenschaft konfigurationsspezifisch gibt...

------------------
Lutz Federbusch
Mein Gästebuch

[Diese Nachricht wurde von Lutz Federbusch am 02. Jan. 2006 editiert.]

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

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 02. Jan. 2006 17: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

Vielen Dank schon mal für die Hinweise, das hat mir weitergeholfen und ich arbeite dran...

Mit etwas Glück hoffe ich bald hier ein Ergebnis präsentieren zu können.

Piet

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 03. Jan. 2006 00:38    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 Piet 10 Unities + Antwort hilfreich

Hallo,

ich hab noch mal getestet,  bei mir (SW2006) funktioniert das mit Konfigurationsspezifische mit GetCustomInfoNames2(vConfigName) und für Benutzerspezifische mit GetCustomInfoNames2(„“ ).

Achtung bei dem Beispiel in der Hilfe.
ReDim Preserve vConfigNameArr(UBound(vConfigNameArr) + 1)
Die Zeile fügt einen leeren Konfigurationsnamen in die Liste ein. Somit erhält man auch alle Benutzerdefinierten.

Sub main()

    Dim swApp                           As SldWorks.SldWorks
    Dim swModel                         As SldWorks.ModelDoc2
    Dim vConfigNameArr                  As Variant
    Dim vConfigName                     As Variant
    Dim vCustInfoNameArr                As Variant
    Dim vCustInfoName                   As Variant
    Dim stri As String
    Dim ret As Integer
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc

    vConfigNameArr = swModel.GetConfigurationNames
   
'   Konfigurationsspezifische
    For Each vConfigName In vConfigNameArr
        vCustInfoNameArr = swModel.GetCustomInfoNames2(vConfigName)
        If Not IsEmpty(vCustInfoNameArr) Then
            For Each vCustInfoName In vCustInfoNameArr
                stri = "  Name=" + vCustInfoName + " Wert=" + swModel.GetCustomInfoValue(vConfigName, vCustInfoName)
               ret = MsgBox("ConfigName=" + vConfigName + "   " + stri, vbInformation, "Konfiguration")
              
            Next
        End If
    Next

'    Benutzer
    vCustInfoNameArr = swModel.GetCustomInfoNames2("")
    If Not IsEmpty(vCustInfoNameArr) Then
        For Each vCustInfoName In vCustInfoNameArr
            stri = "  Name=" + vCustInfoName + " Wert=" + swModel.GetCustomInfoValue("", vCustInfoName)
            ret = MsgBox(stri, vbInformation, "Benutzer")
           
        Next
    End If
   
End Sub

Gruß Oliver Knepper

@Lutz Federbusch

Kann ein Wert für eine benutzerdefinierte Eigenschaft leer sein? Ich schaff das nicht in SW2006.


------------------
Software nach Maß für Ihr CAD-System
www.ib-knepper.de

[Diese Nachricht wurde von jens_oliver am 03. Jan. 2006 editiert.]

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

VBSpawn
Mitglied
Programmierer


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

Beiträge: 514
Registriert: 23.08.2005

Sorgfältige Planung ersetzt niemals pures Glück.

erstellt am: 03. Jan. 2006 10:23    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 Piet 10 Unities + Antwort hilfreich

Zitat:

Kann ein Wert für eine benutzerdefinierte Eigenschaft leer sein? Ich schaff das nicht in SW2006.

<grinz>
also dat klappt bei mir .... 
Call mDoc.AddCustomInfo3(cfg.Name, "LEER", swDmCustomInfoText, "")
von Hand geht es nicht ...

Gruß
Micha

------------------

Zitat:
Interpunktion und Orthographie des Postings sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.

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

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 03. Jan. 2006 15:47    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

So, bei mir läuft's  jetzt auch. Vielen Dank für die Tipps, das hat den Durchbruch gebracht.

Meinen Code häng ich mal an. Manches kann man bestimmt eleganter lösen, aber ich bin als Programmierer immer noch ein einbeiniger Humpler mit Nagelbettentzündung. Verbesserungsvorschläge sind immer willkommen.

Piet

Sub GetKonfigs()
    Dim Konfig As Object
    Dim Farbe() As Variant
    Dim AnzKonfigs As Long
    Dim vConfigName As Variant
    Dim vConfigNameArr As Variant
    Dim vCustInfoName As Variant
    Dim vCustInfoNameArr As Variant
    Dim Felder() As String
    Dim StdEigenschaft() As Integer
    Dim KfgEigenschaft() As Integer
    Dim Zugang() As Boolean
   
    ReDim Felder(8)
    ReDim Farbe(UBound(Felder))
    ReDim StdEigenschaft(UBound(Felder))    ' Name, Name2, Teilenummer, Werkstoff, Oberfläche, LayerHinten, Lieferant, KaufBezeichnung, Kaufnummer
    ReDim KfgEigenschaft(UBound(Felder))    '  0    1        2        3          4          5          6            7              8
    ReDim Zugang(UBound(Felder))
    For i = 0 To UBound(Felder)
        StdEigenschaft(i) = 0
        KfgEigenschaft(i) = 0
        Farbe(i) = vbWhite
        Zugang(i) = True
    Next i
    Felder(0) = "Name"
    Felder(1) = "Name2"
    Felder(2) = "Teilenummer"
    Felder(3) = "Werkstoff"
    Felder(4) = "Oberfläche"
    Felder(5) = "LayerHinten"
    Felder(6) = "Lieferant"
    Felder(7) = "Bezeichnung Kaufteil"
    Felder(8) = "Bestellnummer"
   
    If RefModel Is Nothing Then
        MsgBox ("Kein Referenziertes Modell erkannt")
        Exit Sub
    End If
   
    AnzKonfigs = RefModel.GetConfigurationCount    ' holt Anzahl der Konfigurationen
    If AnzKonfigs > 1 Then                          ' wenn es mehrere Konfigs gibt...
        vConfigNameArr = RefModel.GetConfigurationNames    ' holt die Konfig-Namen
       
        ' Liest die benutzerdefinierten Dateieigenschaften aus
        For i = 0 To UBound(Felder)
            If RefModel.CustomInfo2("", Felder(i)) <> "" And RefModel.CustomInfo2("", Felder(i)) <> " " Then
                StdEigenschaft(i) = 1
            End If
        Next i
       
        ' Liest die Konfigurationseigenschaften aus
        For Each vConfigName In vConfigNameArr
            Set Konfig = RefModel.GetConfigurationByName(vConfigName)
            vCustInfoNameArr = RefModel.GetCustomInfoNames2(vConfigName)
            For i = 0 To UBound(Felder)
'                If Not IsEmpty(vCustInfoName) Then
                    If RefModel.CustomInfo2(vConfigName, Felder(i)) <> "" And RefModel.CustomInfo2(vConfigName, Felder(i)) <> " " Then
                        KfgEigenschaft(i) = KfgEigenschaft(i) + 1
                    End If
'                End If
            Next i
        Next
       
        ' Vergleicht die benutzer- mit den konfigurationsspezifischen Eigenschaften
        For i = 0 To UBound(Felder)
            If StdEigenschaft(i) = 1 Then
                If KfgEigenschaft(i) > 0 Then  ' widersprüchlich!
                    Farbe(i) = vbRed
                    frmMaterial.cmdRot.Visible = True
                Else
                    Farbe(i) = vbWhite
                End If
            ElseIf StdEigenschaft(i) = 0 Then  ' Eigenschaft wird in Tabelle festgelegt, Eingabefeld sperren
                If KfgEigenschaft(i) > 0 Then
                    Farbe(i) = vbYellow
                    Zugang(i) = False
                    frmMaterial.cmdGelb.Visible = True
                Else
                    Farbe(i) = vbWhite
                End If
            End If
        Next i
        frmMaterial.txtName.BackColor = Farbe(0)
        frmMaterial.txtName2.BackColor = Farbe(1)
        frmMaterial.txtTeilenummer.BackColor = Farbe(2)
        frmMaterial.cmbMaterial.BackColor = Farbe(3)
        frmMaterial.cmbFinish.BackColor = Farbe(4)
        frmMaterial.cmbLayerHinten.BackColor = Farbe(5)
        frmMaterial.txtKaufLieferant.BackColor = Farbe(6)
        frmMaterial.txtKaufBezeichnung.BackColor = Farbe(7)
        frmMaterial.txtKaufNummer.BackColor = Farbe(8)
        frmMaterial.txtName.Enabled = Zugang(0)
        frmMaterial.txtName2.Enabled = Zugang(1)
        frmMaterial.txtTeilenummer.Enabled = Zugang(2)
        frmMaterial.cmbMaterial.Enabled = Zugang(3)
        frmMaterial.cmbFinish.Enabled = Zugang(4)
        frmMaterial.cmbLayerHinten.Enabled = Zugang(5)
        frmMaterial.txtKaufLieferant.Enabled = Zugang(6)
        frmMaterial.txtKaufBezeichnung.Enabled = Zugang(7)
        frmMaterial.txtKaufNummer.Enabled = Zugang(8)
    End If
End Sub

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