Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Probleme mit Option Strict On

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
Autor Thema:   Probleme mit Option Strict On (924 mal gelesen)
CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 28. Dez. 2017 11:20    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 IV Gemeinde

Ich habe ein Problem mit Option Strict on

Nach dem was ich so über vb.Net gelesen habe soll man Option Strict On benutzen "Option Strict beschränkt implizite Datentypumwandlungen nur bei erweiternder Konvertierung"
Jetzt habe ich bei meinen Code aber zwei Fehler die ich nicht verstehe und bekomme sie auch nicht weg. Kann mir einer von euich sagen was ich tun muß um die Fehler zu beheben.

Die Fehlermeldung "Option Strict lässt keine späte Bindung zu"

Meine Code

Private Sub Speichern_Click(sender As Object, e As EventArgs) Handles Speichern.Click

        Dim oPropSets As PropertySets
        oPropSets = oDoc.PropertySets
        Dim oProp As [Property]
        Dim oPropSet As PropertySet
        For Each oPropSet In oDoc.PropertySets
            For Each oProp In oPropSet
                If oProp.DisplayName = "Description" Then
                    oProp.Value = ""
                Else
                    If oProp.DisplayName = "DESCRIPTION" Then
                        oProp.Value = ""
                    Else
                        If oProp.DisplayName = "Zulieferer" Then
                            oProp.Value = Me.Hersteller.Text
                        Else
                            If oProp.DisplayName = "Bestandsnummer" Then
                                oProp.Value = ""
                            Else
                                If oProp.DisplayName = "BESTELLANGABEN" Then
                                    oProp.Value = ""
                                End If
                            End If
                        End If
                    End If
                End If
            Next
        Next


        '**************************************************************
        'Artikelnummer Hersteller
        '**************************************************************
        Dim temp As String
        Dim Temp1 As String
        temp = Me.ArtikelNr_Hersteller.Text
        Temp1 = Mid(temp, 1, 50)
        Me.ArtikelNr_Hersteller.Text = Temp1
        'MsgBox("ArtikelNr Hersteller" & vbCrLf & (Temp1))

        '***************************************************************
        'Firmenkürzel plus Punkt
        '***************************************************************
        Dim x, x1, x2, x3 As String

        x = Me.Hersteller.Text
        x1 = Microsoft.VisualBasic.Left(x, 3)
        x2 = UCase(x1)
        x3 = ""
        x3 = x2 & "." & Me.ArtikelNr_Hersteller.Text
        'MsgBox("Woll ArtikelNummer" & vbCrLf & x3)

        '***************************************************************
        'Dateiname, Länge ermitteln u. die 4 letzten Stellen abschneiden
        '***************************************************************
        Dim StrD1 As String
        Dim StrD2 As String


        StrD1 = oInventorApp.ActiveDocument.DisplayName
        StrD2 = CType(Len(StrD1), String)
        StrD2 = CType(CInt(StrD2) - 4, String)

        StrD1 = Microsoft.VisualBasic.Left(StrD1, CInt(StrD2))
        Me.Woll_Dateiname.Text = StrD1
        'MsgBox(StrD1)

        '****************************************************************
        'Bestellangaben aus Hersteller Typenbezeichnung
        '****************************************************************
        If Me.Woll_Bestellangaben.Text = "" Then
            Me.Woll_Bestellangaben.Text = Me.Type_Bezeichnung.Text
        End If

        '*****************************************************************
        'Artikelnummer setzen
        '*****************************************************************
        If Me.ArtikelNr_Hersteller.Text <> "" Then
            Me.Woll_ArtikelNr.Text = x3
        End If


        '*****************************************************************
        'Dateiname generieren
        '*****************************************************************
        Dim DN As String = ""
        If ArtikelNr_Hersteller.Text <> "" And Type_Bezeichnung.Text <> "" And ArtikelNr_Hersteller.Text <> Type_Bezeichnung.Text Then
            DN = Hersteller.Text & ", " & ArtikelNr_Hersteller.Text & " " & Type_Bezeichnung.Text & " " & Bezeichnung.Text
        ElseIf ArtikelNr_Hersteller.Text <> "" And Type_Bezeichnung.Text <> "" And ArtikelNr_Hersteller.Text = Type_Bezeichnung.Text Then
            DN = Hersteller.Text & ", " & ArtikelNr_Hersteller.Text & " " & Bezeichnung.Text
        ElseIf ArtikelNr_Hersteller.Text = "" And Type_Bezeichnung.Text <> "" Then
            DN = Hersteller.Text & ", " & Type_Bezeichnung.Text & " " & Bezeichnung.Text
        ElseIf ArtikelNr_Hersteller.Text <> "" And Type_Bezeichnung.Text = "" Then
            DN = Hersteller.Text & ", " & ArtikelNr_Hersteller.Text & " " & Bezeichnung.Text
        ElseIf ArtikelNr_Hersteller.Text = "" And Type_Bezeichnung.Text = "" Then
            MsgBox("Info!" & vbCrLf &
                                    vbCrLf & "***********************************************" _
                                    & vbCrLf & "Bitte mindestens die Artikelnummer ausfüllen!")
            Exit Sub
        End If

        If Me.Woll_Dateiname.Text <> DN Then
            Me.Woll_Dateiname.Text = DN
            ' MsgBox(Me.Woll_Dateiname.Text & vbCrLf & Me.Woll_ArtikelNr.Text & vbCrLf & Woll_Bestellangaben.Text)
        End If

        ' ****************************************************************
        ' ** Formularwerte in Bauteil speichern **
        ' ****************************************************************

        For Each oPropSet In oDoc.PropertySets
            For Each oProp In oPropSet
                If oProp.DisplayName = "Description" Then
                    oProp.Value = Me.Bezeichnung.Text
                Else
                    If oProp.DisplayName = "DESCRIPTION" Then
                        oProp.Value = Me.DESCRIPTION.Text
                    Else
                        If oProp.DisplayName = "Zulieferer" Then
                            oProp.Value = Me.Hersteller.Text
                        Else
                            If oProp.DisplayName = "Bestandsnummer" Then
                                oProp.Value = x3
                            Else
                                If oProp.DisplayName = "BESTELLANGABEN" Then
                                    oProp.Value = Me.Type_Bezeichnung.Text
                                End If
                            End If
                        End If
                    End If
                End If
            Next
        Next


        If oInventorApp.ActiveDocumentType = DocumentTypeEnum.kPartDocumentObject Then
            Dim newPath As String
            newPath = p1 & "\ " & DN & ".ipt"
            Call oInventorApp.ActiveDocument.SaveAs(newPath, False)
        End If

        If oInventorApp.ActiveDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
            Dim newPath As String
            newPath = p1 & "\ " & DN & ".iam"
            Call oInventorApp.ActiveDocument.SaveAs(newPath, True)


            Dim oRefDocs As DocumentsEnumerator
            oRefDocs = oInventorApp.ActiveDocument.AllReferencedDocuments

            Dim oc As ComponentOccurrence
            Dim asmDoc1 As AssemblyDocument
            asmDoc1 = CType(oInventorApp.ActiveDocument, AssemblyDocument)

            Dim oRefDoc As Document
            Dim i As Integer
            i = 1
            Dim oocc As ComponentOccurrence
            Dim InvDoc As AssemblyDocument
            InvDoc = CType(oInventorApp.ActiveDocument, AssemblyDocument)

            '************************************************************************
            '**Referenzierte Bauteile suchen und ersetzen
            '************************************************************************
            Dim a, c, D, zt, pp As String

            For Each oocc In InvDoc.ComponentDefinition.Occurrences
                a = CType(Len(Bezeichnung.Text), String)                            'Länge Bezeichnung
                c = CType(Len(DN), String)                                          'Temp String
                D = CType(CInt(c) - CInt(a), String)                                'Temp String minus Länge der Bezeichnung
                zt = VB.Left(DN, CInt(D) - 1)                                      'Name für Bauteilkomponenten
                pp = p1 & "\ " & zt & " T0" & i & " " & Bezeichnung.Text & ".ipt"

                Call oocc.Definition.Document.SaveAs(pp, True) Fehler
                On Error Resume Next
                Call oocc.Replace(pp, False)

                i = i + 1
            Next
        End If

        If oInventorApp.ActiveDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
            Dim newPath As String
            newPath = p1 & "\ " & DN & ".iam"
            Call oInventorApp.ActiveDocument.SaveAs(newPath, False)
        End If

        If Me.ChkBoxFixieren.Checked = True Then
            fixieren()
        Else
        End If

        oDoc.Close(True)
        Dim s As New String(CType("Aufgabe ist erledigt!" & vbCrLf & "Ihr Kaufteil liegt im Ordner  " & p1 & vbCrLf & "unter der Bezeichnnung :" & DN, Char()))

        MsgBox(s)

        oInventorApp.SilentOperation = False

        Me.Close()

    End Sub

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

Private Sub fixieren()
        Dim InvDoc As AssemblyDocument
        InvDoc = CType(oInventorApp.ActiveDocument, AssemblyDocument)


        Dim oocc As ComponentOccurrence
        Dim oocc2 As ComponentOccurrence
        Dim subassy As AssemblyDocument

        For Each oocc In InvDoc.ComponentDefinition.Occurrences

            If oocc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
                subassy = oInventorApp.Documents.Open(oocc.fullFilename, True)hier ist d. Fehler
                For Each oocc2 In subassy.ComponentDefinition.Occurrences
                    oocc.Grounded = True
                Next

            ElseIf oocc.DefinitionDocumentType = DocumentTypeEnum.kPartDocumentObject Then
                oocc.Grounded = True
            End If
        Next

    End Sub

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 28. Dez. 2017 17:02    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 CAD Kalle 10 Unities + Antwort hilfreich

Mir fallen einige Dinge auf, diese mal vorab:

Zunächst mal beginnt dein Code mit

Code:
        Dim oPropSets As PropertySets
        oPropSets = oDoc.PropertySets
ohne das "oDoc" vorher deklariert wurde. Eventuell hast du aber auch nur vergessen die entsprechenden Codezeilen mit zu kopieren.

Zum zweiten nutzt du sehr oft "Me", obwohl dies überhaupt nicht notwendig ist, da du die Objekte und dergleichen auch ohne "Me" direkt ansprechen kannst.

Als nächstes, da du ja nun bereits rausgefunden hast, dass "Option Strict" eine gute Sache ist, was auch absolut richtig ist, könnte man zusätzlich noch den Import des Namespace "Microsoft.VisualBasic" deaktivieren.
Denn Visual Basic ist nun einmal nicht vb.net und somit mischen sich zwei Sprachen. Wobei man auf die vorangegangene/veraltete Sprache Visual Basic gänzlich verzichten könnte. Zudem sind die Funktionen die einem vb.net dazu bietet bedeutend mächtiger.
Würde allerdings auch dazu führen, dass du mit Fehlermeldungen überschüttet werden würdest, da du sehr viel auf die Werkzeuge von Visual Basic zurückgegriffen hast.

Auch verwendest du sehr oft "CType"... Für kleinere Konvertierungen von String zu Integer oder von Integer zu Boolean empfehle ich

Code:
    Dim a As String = "1"
    Dim b As Integer = CInt(a)
    Dim c As Boolean = CBool(b)


Wenn du Dinge zu einem String konvertieren möchtest, stellt vb.net eine sehr mächtige Funktion bereit, nämlich die ".ToString" Funktion, welche eigentlich für so ziemlich alles in vb.net zur Verfügung steht.
Code:
    Dim a As String = "1"
    Dim b As Integer = CInt(a)
    Dim c As Boolean = CBool(b)
    Dim d As String = c.ToString

Für das Konvertieren von komplexeren Dingen empfehle ich dir statt "CType" besser "DirectCast", da dieses deutlich performanter ist.

Code:
    Dim oDoc As Document
    Dim oAssDoc As AssemblyDocument = DirectCast(oDoc, AssemblyDocument)

Nun zu deinem eigentlichen Problem...
Du versuchst in beiden Fällen deinem Objekt Methoden, bzw. Eigenschaften aufzuzwingen, über die es gar nicht verfügt.

Im letzten Fall zum Beispiel:[CODE][subassy = oInventorApp.Documents.Open(oocc.fullFilename, True)/CODE] Eine ComponentOccurrence verfügt über kein Property mit dem Namen "FullFileName". Deswegen kannst du dies auch abrufen...

gleiches gilt für deinen ersten Fehler

------------------
Mit Besten Grüßen

Marcel

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

CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 28. Dez. 2017 18:30    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 Marcel

erst einmal danke für Deine schnelle Antwort.
Ich bin noch ein Anfänger in Vb.Net deshalb auch die vielen Rückgriffe auf Vb. Werde mir das ganze jetzt noch einmal ansehen und versuch es mit den Vb.Net Funktionen zu lösen.

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 28. Dez. 2017 18: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 CAD Kalle 10 Unities + Antwort hilfreich


ComponentOccurrenceObject.pdf

 
Kein Problem, jeder hat mal angefangen... Auch ich habe lange gebraucht um mich an "Option Strict" und den Verzicht auf "Microsoft.VisualBasic" zu gewöhnen.
Es hilft einem in der Tat besser zu verstehen wie OOP (Objekt Orientierte Programmierung) funktioniert, da einem die korrekte Verwendung der Sprache und der typsichere Umgang mit Datentypen aufgezwungen wird.

Was beim programmieren von AddIns und dergleichen für Inventor auch sehr hilft ist der Objektkatalog im VisualStudio (kann über die Taste "F2" aufgerufen werden), aber auch sehr gut die InventorAPI-Hilfe.
Bei beiden sind die Verfügbaren Methoden, Properties und mehr angezeigt.

Anbei mal der Auszug aus der Inventor-API Hilfe zum "ComponentOccurrence Object"

So würdest du zum Beispiel für deinen Fall feststellen, dass das "ComponentOccurrence Objekt" nicht über das Property "FullFileName" verfügt, dass "Document Object" aber genau das besagte Property hat.

Bedeutet, dass du zu deiner "ComponentOccurrence" zunächst das zugehörige "Document" ansprechen musst, um dann von diesem das Property "FullFileName" abzufragen.

Hier noch ein Link zum Thema "Option Strict" und "Microsoft.VisualBasic"

------------------
Mit Besten Grüßen

Marcel

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

CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 29. Dez. 2017 14:11    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 Marcel

habe jetzt alle Me's entfernt und auch alle  CType Konvertierungen soweit möglich.Was mir jetzt aber noch nicht ganz klar ist.
Ist der Zugriff auf das Dokument. Kannst Du mir da mal ein Beispiel aufzeigen ich steh gerade voll auf dem Schlauch.

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 29. Dez. 2017 16:15    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 CAD Kalle 10 Unities + Antwort hilfreich

Code:
    'Möglichkeit 1 -> ComponentOccurrence in ein AssemblyDocument casten
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim oDoc = DirectCast(InventorApplication.ActiveEditDocument, AssemblyDocument)
        Dim oSubAssDoc As AssemblyDocument

        For Each oOcc As ComponentOccurrence In oDoc.ComponentDefinition.Occurrences
            If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
                oSubAssDoc = DirectCast(oOcc.ReferencedDocumentDescriptor.ReferencedDocument, AssemblyDocument)
                InventorApplication.Documents.Open(oSubAssDoc.FullFileName)
            End If
        Next
    End Sub

    'Möglichkeit 2 -> Document direkt aus der Occurrence öffnen
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim oDoc = DirectCast(InventorApplication.ActiveEditDocument, AssemblyDocument)

        For Each oOcc As ComponentOccurrence In oDoc.ComponentDefinition.Occurrences
            If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
                InventorApplication.Documents.Open(oOcc.ReferencedDocumentDescriptor.FullDocumentName)
            End If
        Next
    End Sub


Um aus der ComponentOccurrence heraus das zugehörige Document zu öffnen fallen mir spontan diese beiden Wege ein.

Beim ersten Weg "casten" wir das zur Occurrence zugehörige Document in ein "AssemblyDocument"... Dies hat den Vorteil, das ich danach im Code alles anstellen kann, was das "AssemblyDocument Object" hergibt, sofern ich es denn benötige.

Beim zweiten Weg sparen wir uns das und öffnen das zugehörige Document direkt aus der Occurrence heraus. Dies ist zwar deutlich kürzer und einfacher, allerdings habe ich dann kein Object zur Verfügung, welches das soeben geöffnete Document wiederspiegelt.

Mal ganz davon ab, wenn ich dein Vorhaben richtig verstehe, dann möchtest du alles in deiner Baugruppe fixieren, inklusive aller Unterbaugruppen und der darin enthaltenen Bauteile.

Dies geht viel einfacher und vor allem viel effizienter und das sogar ohne die Unterbaugruppen öffnen zu müssen.

Code:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim oDoc = DirectCast(InventorApplication.ActiveEditDocument, AssemblyDocument)

        For Each oOcc As ComponentOccurrence In oDoc.ComponentDefinition.Occurrences
            Call Grounded(oOcc)
        Next
    End Sub

    Private Sub Grounded(ByVal oOcc As ComponentOccurrence)
        If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
            Dim oDoc = DirectCast(oOcc.ReferencedDocumentDescriptor.ReferencedDocument, AssemblyDocument)
            For Each oOccSub As ComponentOccurrence In oDoc.ComponentDefinition.Occurrences
                Grounded(oOccSub)
            Next
            If Not oOcc.Grounded Then
                oOcc.Grounded = True
            End If
        ElseIf Not oOcc.Grounded Then
            oOcc.Grounded = True
        End If
    End Sub


Das Zauberwort hierzu ist übrigens "Rekursiver Aufruf"...
Dies bedeutet nichts anderes, als dass sich etwas selbst aufruft, so wie in diesem Fall sie Prozedur "Grounded", welche sich selbst nochmals aufruft, wenn es sich bei der Occurrence um eine Baugruppe handelt.

Schau dir das ganze einmal an und wenn du Fragen dazu hast, dann immer raus damit.

------------------
Mit Besten Grüßen

Marcel

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

CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 29. Dez. 2017 16: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

Halo Marcel

Danke für die Beispiele.
Da ist einiges drin das ich so noch nicht kannte.
Es wird noch einige Zeit dauern bis ich das mit Vb.net richtig verstanden habe und anwenden kann.
Aber trotzdem danke für Deine Hilfe und 10 unit.

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

CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 31. Dez. 2017 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

Hallo Marcel

habe jetzt noch ein Problem mit dem speichern der Parts von der Assembly

oocc.definition.Document.SaveAs geht in Vb
für vb.Net habe ich nihts gefunden muß ich da auch zuerst auf das übergeordnete Objekt zugreifen?

For Each oocc In InvDoc.ComponentDefinition.Occurrences
                a = Bezeichnung.Text.Length.ToString                                'Länge Bezeichnung ermitteln
                c = DN.Length.ToString                                              'Länge des Dateinamens ermitteln
                D = CType(CType(c, Double) - CDbl(a), String)                        'Länge des Dateinamens minus Länge der Bezeichnung
                zt = DN.Substring(0, CInt(D))                                        'Teilname für Bauteilkomponenten

                'MessageBox.Show(zt)

                pp = p1 & "\ " & zt & " T0" & i & " " & Bezeichnung.Text & ".ipt"  'Name der Bauteilkomponente mit Zähler u. Bezeichnung
                'MessageBox.Show(pp)


                oocc.Definition.Document.SaveAs(pp, True) hier ist der Fehler
                On Error Resume Next
                oocc.Replace(pp, False)

                i = i + 1
            Next
        End If

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 31. Dez. 2017 13: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 CAD Kalle 10 Unities + Antwort hilfreich

Moin CAD Kalle,

Wie du die Bezeichnung und den Pfad zurechtschnippelst ist mir etwas unklar...

Hier aber der Code, um jede Occurrence neu abzuspeichen und zu ersetzten:

Code:
        Dim oDoc = DirectCast(InventorApplication.ActiveEditDocument, AssemblyDocument)
        Dim oSubDoc As Document
        Dim strPath, strName, strExtension As String


        For Each oOcc As ComponentOccurrence In oDoc.ComponentDefinition.Occurrences
            oSubDoc = DirectCast(oOcc.ReferencedDocumentDescriptor.ReferencedDocument, Document)

            Select Case oSubDoc.DocumentType
                Case DocumentTypeEnum.kAssemblyDocumentObject
                    strExtension = ".iam"
                Case DocumentTypeEnum.kPartDocumentObject
                    strExtension = ".ipt"
                Case Else
                    Continue For
            End Select

            strPath = "Hier der gewünschte Dateipfad"
            strName = "Hier der gewünschte Dateiname"

            oSubDoc.SaveAs(strPath & strName & strExtension, False)

            oOcc.Replace(oSubDoc.FullFileName, False)
        Next


Kurze Erklärung dazu...
- Zunächst casten wir jede Occurrence in ein Document Object
- Dann prüfen wir um was für ein Dokumententype es sich handelt und legen dementsprechend die Dateiendung fest
- Handelt es sich weder um ein Bauteil, noch um eine Baugruppe, dann wird die Occurrence ausgelassen und mit der Nächsten fortgesetzt
- Dann können wir den Speicherpfad und Speicherdateinamen festlegen (Wie auch immer der aussehen soll)
- Dann speichern wir eine Copy der Occurrence ab
- Dann ersetzten wir die Occurrence durch unser neu gespeichertes Dokument

Hab den Code jetzt nicht getestet, sollte aber so funktionieren...
gegebenenfalls musst du ihn noch etwas an deine Bedürfnisse anpassen.

------------------
Mit Besten Grüßen

Marcel

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

CAD Kalle
Mitglied
Maschinenbauingenieur


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

Beiträge: 53
Registriert: 29.07.2017

Intel Core I5, AMD Radeon HD 6800 32GB Ram, Windows 10 64 bit, Inventor 2017

erstellt am: 31. Dez. 2017 17: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

Hallo Marcel

konnte Deinen Code als Referenz nehmen und auf meine Anwendung anpassen

Danke 10 Unit's

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