Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Kennzeichnung Halbzeugorientierung IDW + DXF

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:  Kennzeichnung Halbzeugorientierung IDW + DXF (1132 mal gelesen)
LutzCAD
Mitglied
Ingenieur / EDV Betreuung + Programmierung


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

Beiträge: 16
Registriert: 04.09.2008

WIN7 X64, Inventor 2012

erstellt am: 14. Mai. 2012 11:10    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

Hallo,

ich kämpfe gerade mit der Aufbereitung von Zeichung und Modell zu Blechteilen mit definierter Orientierung des Halbzeugs (Bleche mit

Muster oder Schliff).

Mein Problem besteht darin, dass die per Export der Abwicklung erzeugte DXF-Datei UND die normale Zeichungsableitung die Informationen

zur Musterrichtung wiedergeben sollen.

Mein Ansatz ist, dass ich auf dem gefalteten Modell eine Extrusion anbringen möchte, da diese problemlos in der Zeichnung sichtbar wird.

Natürlich werden die erzeugten Körperkanten auch im DXF der Abwicklung sichtbar. Die Schwierigkeit besteht nun darin, dass die Linien,

je nach Tiefe der Extrusion auf den Layern für Körperkanten oder Features ausgegeben werden. Diese sind auf der Maschine aber mit

Schnitt- bzw Gravurfunktionen assoziiert.
Die Suche nach Lösungen hierfür zeigte die Möglichkeit auf, einzelne Körperkanten mit spezifischen DXF-Ausgabezielen zu "versorgen":


'Attribut-Gruppe anlegen
Try
  attSet = oEdge.AttributeSets.Item("FlatPatternAttributes")
Catch ex As Exception
  attSet = oEdge.AttributeSets.Add("FlatPatternAttributes")
End Try

'Attributwert für Ziel-Layer setzen
Try
  att = attSet.Item("LayerName")
Catch ex As Exception
  att = attSet.Add("LayerName", Inventor.ValueTypeEnum.kStringType, myLayerName)
End Try


Das funktioniert so weit auch, wenn die Kanten aus normalen Linien + Bögen abgeleitet sind. Dass z.B. Schriftbegrenzungen nicht korrekt

behandelt werden ist zu verschmerzen.

Leider ist es im Modell nicht erkennbar, ob eine Attributzuwesung erfolgreich war. Sicherheit ist also nur zu erreichen, wenn die DXF-

dateien alle noch einmal geöffnet und ggf. korrigiert werden, was vermieden werden soll. Daher ist meine Idee, die

Kennzeichnung/Attributzuweisung indirekt vorzunehmen:

Die Extrusion, die die Musterrichtung kennzeichnen soll benenne ich mit "Musterrichtung". Beim speichrn der Datei oder ggf. bei Aufruf

der Exportfunktion möchte ich nun den Abwicklungskörper auf Kanten durchsuchen, die aus einem Feature "Musterrichtung" hervorgegangen

sind und diese mit den gewünschten Attributen versehen.


Für das gefaltete Modell klappt das. Nur hängen die hier erzeugten Attribute auch an den Kanten des gefalteten Modells und nicht an

denen der Abwicklung weshalb die DXF-datei des Abwicklungsexports unverändert bleibt:

Try
  MsgBox("Anzahl der Blechkörper: " & iPartDoc.ComponentDefinition.SurfaceBodies.Count)
  B = iPartDoc.ComponentDefinition.SurfaceBodies(1)
  MsgBox("Blechkörper besitzt " & B.Faces.Count & " Flächen ...")
  For Each iFace In B.Faces
    Try
      'iFeature = iFace.CreatedByFeature
      'MsgBox("Face found created by: " & iFeature.Name)
      iSourceFace = iFace.GetSourceFace()  'geht
      If iSourceFace Is Nothing Then
        MsgBox("Face found created by: " & iFace.CreatedByFeature.Name.ToString)
        'das klappt!
        'Wenn Schliffmarke gefunden, dann Flächen einfärben + Kanten der Flächen mit Attribut versehen
       
        'lassen sich hier u.U. abhängige Flächen der Abwicklung finden?

      Else()
        MsgBox("Sourceface for derived face found ...")
        MsgBox("Face found created by: " & iSourceFace.CreatedByFeature.Name.ToString)

        'Wenn Schliffmarke gefunden, dann Flächen einfärben + Kanten der Flächen mit Attribut versehen
      End If
     
    Catch ex2 As Exception
      MsgBox("Bestimmung der Flächenherkunft fehlgeschlagen: " & ex2.ToString)
    End Try
  Next
Catch ex As Exception
  MsgBox("Blechkörper nicht gefunden")
End Try

Ersetze ich nun in diesem Code

B = iPartDoc.ComponentDefinition.SurfaceBodies(1)

durch

FP = iPartDoc.ComponentDefinition.Flatpattern

und

B = FP.Body

um den Körper der Abwicklung zu durchsuchen sollte das meiner Meinung nach eigentlich genauso funktionieren. In Praxis tut es das leider

nicht. Ich erhalte zum Aufruf von
  iFace.CreatedByFeature. ...
nie ein verwertbares Ergebnis.

Ich erhalte die Fehlermeldung aus Catch Ex2
Bestimmung der Flächenherkunft fehlgeschlagen: SystemArgumentException: Falscher Parameter.(Ausnahme von HRESULT:0x80070057

(E_INVALIDARG)) bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapper

Types, MessageData& msgData)
bei Inventor.Face.get_CreatedByFeature() ...


Für Tips eurerseits, ob ich hier einen Gedankenfehler mache, das Objektmodell falsch interpretiere oder ob eine Lücke oder ein Fehler in

der API vorliegt wäre ich sehr dankbar.

Alternative Ansätze, um das eigentliche Problem der Musterhinweise in Zeichnung UND DXF-Ableitung der Abwicklung ohne manuelle

Nacharbeit zu lösen, wären auch sehr willkommen.


m.f.G.
Harold

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: 14. Mai. 2012 20:56    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 LutzCAD 10 Unities + Antwort hilfreich

Hi

Schau dir mal "GetFlatPatternEntity" an. Ich glaube danach suchst du.

------------------
MfG
RK

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

LutzCAD
Mitglied
Ingenieur / EDV Betreuung + Programmierung


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

Beiträge: 16
Registriert: 04.09.2008

WIN7 X64, Inventor 2012

erstellt am: 15. Mai. 2012 09:32    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

Hallo RK,

vielen Dank für den äussert hilfreichen Hinweis. Hiermit liess sich das Problem in wenigen Minuten lösen.
Der Code, ohne Anspruch auf vollständige Fehlerbehandlung, sieht nun so aus:

    Private Sub HL_MusterrichtungToKBInfo()

      'MsgBox("Auswertung der Schliffinfo ...")
      Try
        AktInvApp = m_inventorApplication
        If AktInvApp.ActiveDocumentType = DocumentTypeEnum.kPartDocumentObject Then
          Dim iPartDoc As Inventor.PartDocument
          iPartDoc = AktInvApp.ActiveDocument
          If iPartDoc.SubType = InvDocSubtypBlech Then '"{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then ' Prüfen, ob es sich um ein Blechteil handelt
            'MsgBox("Blech geöffnet ...")
            If iPartDoc.ComponentDefinition.HasFlatPattern = True Then
              'MsgBox("Flattpattern gefunden ..")
              Dim FP As Inventor.FlatPattern
              Dim iSourceFace As Inventor.Face
              Dim iFace As Inventor.Face
              Dim Musterrichtung As Inventor.ExtrudeFeature

              FP = iPartDoc.ComponentDefinition.Flatpattern
              Try
                Musterrichtung = iPartDoc.ComponentDefinition.Features("Musterrichtung")
                'MsgBox("Extrude-Feature ""Musterrichtung"" gefunden")
                For Each iSourceFace In Musterrichtung.Faces
                  Try
                    iFace = FP.GetFlatPatternEntity(iSourceFace)
                    'MsgBox("zugeordnete Abwicklungskörper-Fläche gefunden!")

                    Dim oEdge As Inventor.Edge
                    Dim attSet As Inventor.AttributeSet
                    Dim att As Inventor.Attribute
                    Dim myLayerName As String = "KB_Info"

                    For Each oEdge In iFace.Edges
                      'Attribut-Set zur Abwicklungsausgabesteuerung anlegen
                      Try
                        attSet = oEdge.AttributeSets.Item("FlatPatternAttributes")
                      Catch ex3 As Exception
                        attSet = oEdge.AttributeSets.Add("FlatPatternAttributes")
                      End Try

                      ' Attribute zur Festlegung des Ziel-Layers ergänzen.
                      Try
                        att = attSet.Item("LayerName")
                        If att.Value <> myLayerName Then
                          att.Value = myLayerName  'von Vorgabe abweichenden Ziel-Layer überschreiben
                        End If
                      Catch ex3 As Exception
                        att = attSet.Add("LayerName", Inventor.ValueTypeEnum.kStringType, myLayerName)
                      End Try
                    Next

                  Catch ex2 As Exception
                    'MsgBox("zugeordnete Abwicklungskörper-Fläche nicht gefunden! " & ex2.ToString)
                  End Try
                Next
              Catch ex As Exception
                'MsgBox("Kein Extrude-Feature ""Musterrichtung"" gefunden")
              End Try
            End If
          Else
            'MsgBox("Kantenzuweisung zu Layern für DXF-Ausgabe nur für Blechteil-Abwicklungen unterstützt!", vbExclamation)
          End If
        Else
          'MsgBox("Kantenzuweisung zu Layern für DXF-Ausgabe nur für Blechteil-Abwicklungen unterstützt!", vbExclamation)
        End If

      Catch ex As Exception
        MsgBox(ex.ToString)
      End Try

    End Sub

m.f.G.
Harold

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: 15. Mai. 2012 10:49    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 LutzCAD 10 Unities + Antwort hilfreich

Hallo

Bei sehr umfangreichen Bauteilen braucht deine Funktion aber Zeit. Schau dir mal noch den Attributmanager und da vor allem die GetObject-Funktion an. Die liefert eine ObjectCollection zurück. Da man ihr ein Attribut als Suchkriterium mitgeben kann, kommen nur Objekte (Flächen und Kanten) mit diesem Attribut zurück. Das spart die Zeit alle Kanten im Teil abzusuchen. 
Nebenbei kann man die ObjectCollection auch für eine Prüffunktion hernehmen, indem man sie als Basis für ein HighLightSet hernimmt. Ist sehr praktisch mal kurz alle Kanten mit Attribut aufleuchten zu lassen.
Noch ein Hinweis zu Blechteilen. Früher lieferte der Attributmanager alle Kanten mit Attribut zurück. Also auch die in der Abwicklung. Vermutlich ist das Verhalten immer noch so. Also prüfen wo die Kante herkommt!

------------------
MfG
RK

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