Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  c# Inventor Material auslesen und ändern

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 Autodesk Produkte
Autor Thema:  c# Inventor Material auslesen und ändern (3954 mal gelesen)
dero2k
Mitglied
Technicher Zeichner ma bau


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

Beiträge: 53
Registriert: 24.04.2009

Inventor 2008 (hauptsächlich)
win xp

erstellt am: 07. Mrz. 2013 08: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

Hi

Ich habe mir in vs ein kleines tool erstellt was beim aufrufen verschiedene properties des gerade geöffneten parts ausliest und beim klick auf ok wieder in das part schreibt.

zur perfektion fehlt mir nun nurnoch das material.

würde dafür gerne eine combobox erstellen was beim öffnen des tools das eingestellte material ausliest und mir in der combobox auch die möglichkeit gibt die verfügbaren materialien auszuwählen und beim klick auf ok zu setzen. im prinzip genau so wie es auch in den iproperties ist.

wenn da jemand ein  code beispiel hat wäre ich sehr dankbar 

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 07. Mrz. 2013 08:41    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 dero2k 10 Unities + Antwort hilfreich

Moin

Vielleicht ist da was dabei --> Link

EDIT: Downloadlink auf der Seite beachten

------------------
MfG
Ralf

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

dero2k
Mitglied
Technicher Zeichner ma bau


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

Beiträge: 53
Registriert: 24.04.2009

Inventor 2008 (hauptsächlich)
win xp

erstellt am: 07. Mrz. 2013 08:59    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

hi

danke für die schnelle antwort.

allerdings scheint dies nicht das zu sein was ich suche. oder ich komme nicht mit klar.

so wie ich das sehe werden mit dem macro nur gewisse eigenschaften des materials ausgelesen.

das macro was ich erstelle ist übrigens für iv 2011

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 07. Mrz. 2013 10: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 dero2k 10 Unities + Antwort hilfreich

Hallo

In dem Beispielcode wird gezeigt wie ein neues Material erstellt wird und wie man die vorhandenen Materialien im Bauteil ausliest. Du mußt ja für deine ComboBox nur den Namen auslesen. Den Rest läßt du einfach weg.
Das Setzen eines Materials wird durch Schreiben des Materialnamens in das iProperty "Material" im PropertySet "Design Tracking Properties" gemacht. Gut, dafür war jetzt kein Beispiel mit drin.

Mit den ausgelesenen Materialien füllst du deine Box und setzt die Zeile für das aktuelle Material (müßte die Eigenschaft "InUse=True" haben) als vorselektiert. Ändert der User die Selektion kann man direkt darauf reagieren, das Material zuweisen und irgendwelche Infofelder in der Form aktualisieren oder man setzt es halt erst beim Schließen der Form, sprich OK drücken.

------------------
MfG
Ralf

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

dero2k
Mitglied
Technicher Zeichner ma bau


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

Beiträge: 53
Registriert: 24.04.2009

Inventor 2008 (hauptsächlich)
win xp

erstellt am: 07. Mrz. 2013 14:00    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

ok soweit das das aktuelle material in der combobox angezeigt wird bin ich jetzt

aber wie bekomme ich jetzt die liste der verfügbaren materialien in die combobox ?

€€€€

habe jetzt versucht das material durch einfaches ändern des textes in der combobox zu setzen. aber leider funktioniert dies nicht wirklich. in inventor ist immernoch das alte material gesetzt und auch die farbe des bauteils ändert sich nicht.

wenn ich allerdings mein macro nochmal starte zeigt er mir das material an was ich vorher eingetragen habe also nicht das was mir inventor anzeigt

[Diese Nachricht wurde von dero2k am 07. Mrz. 2013 editiert.]

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 07. Mrz. 2013 15:36    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 dero2k 10 Unities + Antwort hilfreich

Hallo

Zitat:
aber wie bekomme ich jetzt die liste der verfügbaren materialien in die combobox ?

Steht im Beispiel drin. Mit einer For-Each-Schleife durch alle Materialien in PartDocument.Materials laufen, jeweils den Namen auslesen und in die ComboBox schreiben.

Zitat:
habe jetzt versucht das material durch einfaches ändern des textes in der combobox zu setzen. aber leider funktioniert dies nicht wirklich.

Die ComboBox zeigt nur den ausgelesenen String aus dem iProperty. Die Beschriftung in der ComboBox ändern bewirkt im Bauteil gar nichts. Wie ich vorhin schon sagte, das Material ändert man, indem man das entsprechende iProperty überschreibt. Ein Beispiel in VB, C# hat nur andere Syntax:

Code:

Sub ChangeProperty()
   
    ' Set a reference to the active document
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
   
    ' Get the "Design Tracking" property set
    Dim oPropSet As PropertySet
    Set oPropSet = oDoc.PropertySets("{32853F0F-3444-11D1-9E93-0060B03C1CA6}")
   
    ' Get the "Material" property   
    Dim oProp As Property
    Set oProp = oPropSet.ItemByPropID(20)
   
Dim sMaterial as string
sMaterial = "Hier kommt der String aus deiner ComboBox rein"

    ' Set the value of the material property
    oProp.Value = sMaterial

End Sub


EDIT: Code-Tags ergänzt

------------------
MfG
Ralf

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

m74
Mitglied


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

Beiträge: 3
Registriert: 29.03.2013

erstellt am: 29. Mrz. 2013 08:59    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 dero2k 10 Unities + Antwort hilfreich

Hallo zusammen, wir sind genau am selben Thema dran.
- die Materialien lesen wir in eine combobox aus
- bei der Auswahl wird das Material dem design tracking property material zugewiesen
- die Einstellung wird mit dem Bauteil persistent gespeichert.

- Geht man allerdings über die iproperties nachschauen (reiter physikalisch), dann ist dort immer noch das alte Material ersichtlich.
- Ändert man die Einstellung jedoch hier, ändert sich auch die Farbe des Bauteils und das design tracking property material wird überschrieben

Iich gehe davon aus, dass das design tracking property material nicht das richtige ist. Aber welches property ist es dann?

Vielen dank für eure geschätzten Hilfe.
Gruss, manfred

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 29. Mrz. 2013 09: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 dero2k 10 Unities + Antwort hilfreich

Moin

Das Property ist das richtige, aber ich war damals auf dem Holzweg. Man kann zwar so das Property überschreiben aber nicht das Material ändern.

Code:
Sub ChangeMaterial()
 
    Dim oDoc As PartDocument
    Set oDoc = ThisApplication.ActiveDocument
   
    Dim oMat As Material
    For Each oMat In oDoc.Materials
        If oMat.Name = "Aluminium - 6061" Then
            oDoc.ComponentDefinition.Material = oMat
            Exit For
        End If
    Next
   
End Sub


------------------
MfG
Ralf

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

m74
Mitglied


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

Beiträge: 3
Registriert: 29.03.2013

erstellt am: 29. Mrz. 2013 09: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 Nur für dero2k 10 Unities + Antwort hilfreich

hallo, du bist aber schnell!
ich werde dies am dienstag gleich ausprobieren.
danke. gruss, manfred

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 29. Mrz. 2013 09:35    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 dero2k 10 Unities + Antwort hilfreich

Immer wenn ich merke das ich Mist gebaut hab. 

------------------
MfG
Ralf

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

m74
Mitglied


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

Beiträge: 3
Registriert: 29.03.2013

erstellt am: 04. Apr. 2013 21:59    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 dero2k 10 Unities + Antwort hilfreich

Hallo,
hier noch die Rückmeldung meiner Tests vom Dienstag.
Die beschriebene Lösung hat perfekt funktioniert!
Nochmals vielen Dank für die Unterstützung.
Gruss, Manfred.

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

dero2k
Mitglied
Technicher Zeichner ma bau


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

Beiträge: 53
Registriert: 24.04.2009

Inventor 2008 (hauptsächlich)
win xp

erstellt am: 16. Apr. 2013 11:16    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

Hi

leider blicke ich nicht ganz wie ich das ganze mit c# anstelle.
zurzeit setze ich das material so was aber ja wie bekannt ist noch nicht alles ändert.

Code:

Updatematerial(doc, "Material", comboBox5.Text);

    // material ändern

    private void Updatematerial(Inventor.Document Doc,
    String PropertyName,
      Object PropertyValue)
      {
            // Get the custom property set.
            // Watch out for the wrapped line.
      Inventor.PropertySet customPropSet;
          customPropSet = Doc.PropertySets["Design Tracking Properties"];

            // Get the existing property, if it exists.
        Inventor.Property prop = null;
      Boolean propExists = true;
        try
        {
              prop = customPropSet[PropertyName];
          }
            catch (Exception ex)
        {
              propExists = false;
          }

            //Check to see if the property was successfully obtained.
          if (!propExists)
          {
                // Failed to get the existing property so create a new one.

          string strMeldung = "Property eintrag " + PropertyName + " existiert nicht soll er erstellt werden ?";
          DialogResult result = MessageBox.Show(strMeldung,
                                Application.ProductName,
                                  MessageBoxButtons.OKCancel,
                                  MessageBoxIcon.Question,
                                MessageBoxDefaultButton.Button2);

              if (result == DialogResult.OK)
                prop = customPropSet.Add(PropertyValue, PropertyName, null);
             

               
         
          }
      else
            {


                // Change the value of the existing property.
              prop.Value = PropertyValue;
                       
          }
    }


wäre echt supper wenn mir jemand den code anpassen könnte  *liebguck*

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 16. Apr. 2013 19:50    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 dero2k 10 Unities + Antwort hilfreich

Hallo

Hab ich doch oben geschrieben. Den ganzen Teil mit Property kannste wegnehmen. Die Schleife aus meinem Beispiel kannst du anpassen, das jedes Material mit dem Namen aus deiner ComboBox (statt "Aluminium 6061") verglichen wird. In C# kann ich dir das aus'n Kopf nicht schreiben.

Deine Prüfung dürfte, da es sich um ein Standard-iProp von Inventor handelt immer true sein oder?

------------------
MfG
Ralf

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 17. Apr. 2013 09:07    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 dero2k 10 Unities + Antwort hilfreich

Hi, hier mal auf die Schnelle ein Beispiel in C#. Inventor Objekte sind komisch gestaltet, so liefern die meisten ToString Methoden den ObjektTyp. Also erst mal einen kleinen Wrapper bauen, um das Material Objekt besser handhaben zu können (innerhalb des Namespaces und außerhalb anderen Klassen platzieren – ich habe alles public gehalten um nicht noch mehr Verwirrung zu stiften):
Code:

    public class MaterialItem
    {
        public Inventor.Material Value { get; set; }

        public MaterialItem(Inventor.Material value)
        {
            Value = value;
        }

        public override string ToString()
        {
            return Value.Name;
        }
    }


Damit können wir die Material Objekte direkt an ComboBox Items übergeben, und die werden auch richtig angezeigt. Hier eine Funktion zum einlesen von Materialliste (als Argumente werden das Bauteil selbst, und die zu füllende ComboBox benötigt):

Code:

        private void GetMaterials(Inventor.PartDocument ActivePart, ComboBox MaterialsList)
        {
            // Die Liste leeren
            MaterialsList.Items.Clear();

            // Hier das Bauteil als Tag ablegen, um es spatter besser handhaben zu können
            MaterialsList.Tag = ActivePart;

            // Neue Instanz unsere Wrapper Klasse in die ComboBox laden
            MaterialsList.Items.Add(new MaterialItem(ActivePart.ComponentDefinition.Material));

            foreach (Inventor.Material oMat in ActivePart.Materials)
            {
                if(oMat.Name != ActivePart.ComponentDefinition.Material.Name)
                    // Weitere Materialien einlesen
                    MaterialsList.Items.Add(new MaterialItem(oMat));
            }

            if (MaterialsList.Items.Count > 0)
                // Index auf aktuelles Material setzen (falls die Liste nicht leer ist)
                MaterialsList.SelectedIndex = 0;
        }


Und letztendlich das SelectedIndexChanged Event für die ComboBox implementieren um das selektierte Material zu setzen (im Designer die ComboBox selektieren, in Eigeschaften auf „Events“, und SelectedIndexChanged doppelklicken):

Code:

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Sich das aktuelle Bauteil aus dem Tag holen
            Inventor.PartDocument myPart = (comboBox1.Tag as Inventor.PartDocument);

            // Das selektierte Material setzen
            myPart.ComponentDefinition.Material = (comboBox1.SelectedItem as MaterialItem).Value;

            // Das Bauteil updaten
            myPart.Update();
        }




------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools
FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor

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)2023 CAD.de | Impressum | Datenschutz