Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Schweißnahtnummern in IDW einfügen

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:  Schweißnahtnummern in IDW einfügen (4505 mal gelesen)
dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 06. Jul. 2012 07:51    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 möchte Schweißnahtnummern in einer idw einfügen. Die Schweißnahtnummern sollen automatisch eingefügt werden.
Per Startdialog soll der Beginn der Nummerierung festgelegt werden. Hintergrund ist, dass in einem Projekt keine Doppelnennung einer Schweißnaht erfolgen soll. Mit "Bordmitteln" habe ich es leider nicht hinbekommen.

Wie kann ich per VB die Schweißnähte auslesen und automatisch in die Zeichnung einfügen?
Anschließend sollen die Schweißnahtnummern in einer Tabelle gelistet werden.

Bezüglich VB muss ich gestehen, bin ich eher Beginner.

Danke,

Gruß Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 06. Jul. 2012 09: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 Nur für dittmarc 10 Unities + Antwort hilfreich

Hallo

Was genau meinst du mit Schweißnahtnummer? Sorry, mit Schweißbaugruppen habe ich sonst nichts zu tun und daher wenig Ahnung davon. Wo genau steht die Nummer? Gibt's die in der Baugruppe und wo dort? Gibt es eine Möglichkeit diese Nummern einzeln in der IDW mit Bordmitteln einzufügen? Welcher Befehl ist das dann?

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

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 06. Jul. 2012 11:53    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,

Jede Schweißnaht die wir im Rohrleitungsbau fertigen muss dokumentiert werden.
Daher werden die Schweißnähte mit einer eindeutigen Nummer versehen und in einer Tabelle gelistet.
Hinter der Nummer wird dann der verantwortliche Schweißer eingetragen.

Erstellt werden die Schweißnähte in der Schweißkonstruktion. Hierzu konvertieren wir die "Normale" Baugruppe zu einer Schweißbaugruppe. In dieser Baugruppe werden die Schweißnähte im Browser angezeigt. i.e. bei Rohrleitung benötige ich Stumpfnähte, welche im Browser als Kelchnähte angezeigt und nummeriert werden.

In der IDW kann ich die Nummern nur manuell einfügen mittels Skizzierten Symbolen. Hier ist aber zu bemerken, dass ich die Schweißnähte nicht auswählen kann...

Die Nummer wird nicht in den iProperties gelistet...

Gruß Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 06. Jul. 2012 13: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 dittmarc 10 Unities + Antwort hilfreich

Hallo

Kannst du mir eine kleine Beispielbaugruppe (vielleicht mit 2 Teilen und einer Naht) und einer IDW erstellen und eben der Nummer? Ich glaub sonst reden wir die nächsten 2 Wochen aneinander vorbei. Schriftfeld und ähnliche Sachen kannst du vorher rauswerfen. Das würde mir sehr helfen.

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

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 10. Jul. 2012 08: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


CAD.de.zip

 
Hallo Ralf,

anbei die gewünschte Baugruppe...

Gruss Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 10. Jul. 2012 22: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 dittmarc 10 Unities + Antwort hilfreich

Hallo

Leider gibt es noch keine API für die Schweißsymbole. Von daher kann man zur Zeit nix machen. Sorry 
Die Schweißinfo, die man in der IAM setzen kann, ist zur Zeit nur (teilweise) lesbar.

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

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 11. Jul. 2012 09:43    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 Ralf,

mein Fehler.
Ich möchte nicht die Schweißsymbole listen, sondern die Schweißnähte selber - wie Bauteile in einer IAM-Stückliste.
Wenn ich in einer IDW die Funktion "automatische Positionsnummer" benutze werden alle Bauteile mit einer Nummer versehen.
Dies möchte ich auch mit den Schweißnähten machen. Ist dies auch von der noch nicht vorhandenen API abhängig?

Danke und Gruß

Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 11. Jul. 2012 23:31    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 dittmarc 10 Unities + Antwort hilfreich

Hallo

Nur eine kurze Zwischeninfo. Ich hab mal versucht das mit überschriebenen Positionsnummern zu realisieren. Das ist bäh, weil Schweißnähte eben keine Komponenten sind. Macht aber nix, das Grundgerüst dürfte mit Schweißkommentaren (EDIT: Quatsch, gibt ja keine API dafür  ) Führungslinientext oder einem eigenen skizzierten Symbol genauso funktionieren. Die anschließend auszulesen und in Tabellenform auf's Blatt zu packen sollte auch machbar sein. Könnte aber bis zum Wochenende dauern.

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

[Diese Nachricht wurde von rkauskh am 11. Jul. 2012 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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 13. Jul. 2012 19:28    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 dittmarc 10 Unities + Antwort hilfreich

Hallo

Kannst du dir mal ansehen, ob das in die richtige Richtung geht? Mit Alt+F11 den VBA-Editor öffnen und den folgenden Code reinkopieren:

Code:
Option Explicit

Public oInv As Inventor.Application
Public oDrawDoc As DrawingDocument
Public oSheet As Sheet
Public oView As DrawingView
Public oWeldName As String
Public iItem As Integer


Public Sub WeldSymbol()

Set oInv = ThisApplication

If Not oInv.ActiveDocument.DocumentType = kDrawingDocumentObject Then
    MsgBox "Keine Zeichnung aktiv - Exit.", vbCritical
    Exit Sub
End If
Set oDrawDoc = oInv.ActiveDocument

If oDrawDoc.ActiveSheet.DrawingViews.Count = 0 Then
    MsgBox "Keine Ansichten auf aktivem Blatt - Exit", vbCritical
    Exit Sub
End If
Set oSheet = oDrawDoc.ActiveSheet
Dim oSelect As New clsSelect
'Dim oView As DrawingView
Set oView = oSelect.Pick(kDrawingViewFilter)

If Not oView.ReferencedDocumentDescriptor.ReferencedDocumentType = kAssemblyDocumentObject Then
    MsgBox "Keine Ansicht einer Baugruppe gewählt - Exit.", vbCritical
    Exit Sub
End If
Dim oAssDoc As AssemblyDocument
Set oAssDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument

If Not TypeOf oAssDoc.ComponentDefinition Is WeldmentComponentDefinition Then
    MsgBox "Keine Schweißbaugruppe - Exit", vbCritical
End If
Dim oWeldCompDef As WeldmentComponentDefinition
Set oWeldCompDef = oAssDoc.ComponentDefinition

If oWeldCompDef.Welds.Count = 0 Then
    MsgBox "Keine Schweißnähte gefunden - Exit.", vbCritical
End If

Dim oWeld As WeldBead
Dim oWeldFace As Face
Dim oEdges As EdgeCollection
Set oEdges = oInv.TransientObjects.CreateEdgeCollection

iItem = 1

'On Error Resume Next
For Each oWeld In oWeldCompDef.Welds
    oWeldName = oWeld.Name
    Set oWeldFace = GetWeldFace(oWeld)
    If Not oWeldFace Is Nothing Then
        iItem = iItem + 1
    End If
Next

End Sub

Private Function GetWeldFace(ByVal oWeld As WeldBead) As Face
    Dim oWeldFace As Face
    Dim oDrawingCurve As DrawingCurve
    For Each oWeldFace In oWeld.BeadFaces
        Set oDrawingCurve = GetDrawingCurve(oWeldFace)
        If Not oDrawingCurve Is Nothing Then
            Set GetWeldFace = oWeldFace
            Exit Function
        End If
    Next
End Function

Private Function GetDrawingCurve(ByVal oWeldFace As Face) As DrawingCurve
    Dim oEdge As Edge
    Dim oDrawCurveEnum As DrawingCurvesEnumerator
    Dim oBalloon As Balloon
   
    For Each oEdge In oWeldFace.Edges
            'On Error Resume Next
            Set oDrawCurveEnum = oView.DrawingCurves(oEdge)
            If Not oDrawCurveEnum Is Nothing Then
                'Balloon an curve hängen
                Set oBalloon = SetBalloon(oDrawCurveEnum)
                If Not oBalloon Is Nothing Then
                    Set GetDrawingCurve = oDrawCurveEnum.Item(1)
                    Exit Function
                End If
            End If
        Next
End Function

Private Function SetBalloon(ByVal oDrawCurveEnum As DrawingCurvesEnumerator) As Balloon

    On Error Resume Next
   
    Dim oDrawingCurve As DrawingCurve
    Set oDrawingCurve = oDrawCurveEnum.Item(1)
   
    Dim oMidPoint As Point2d
    Set oMidPoint = oDrawingCurve.MidPoint

    Dim oTG As TransientGeometry
    Set oTG = ThisApplication.TransientGeometry

    Dim oLeaderPoints As ObjectCollection
    Set oLeaderPoints = ThisApplication.TransientObjects.CreateObjectCollection

    Call oLeaderPoints.Add(oTG.CreatePoint2d(oMidPoint.X + 2, oMidPoint.Y + 2))
    'Call oLeaderPoints.Add(oTG.CreatePoint2d(oMidPoint.X + 10, oMidPoint.Y + 5))

    Dim oGeometryIntent As GeometryIntent
    Set oGeometryIntent = oSheet.CreateGeometryIntent(oDrawingCurve)
    Call oLeaderPoints.Add(oGeometryIntent)

    Dim oBalloon As Balloon
    Set oBalloon = oSheet.Balloons.Add(oLeaderPoints)
   
    If Not oBalloon Is Nothing Then
        oBalloon.BalloonValueSets.Item(1).OverrideValue = iItem & " - " & oWeldName
        Set SetBalloon = oBalloon
    End If
End Function


Jetzt noch rechte Maustaste links auf Anwendungsprojekt und unter Hinzufügen ein Klassenmodul einfügen. In das kopierst du:

Code:
' Declare the event objects
Private WithEvents oInteractEvents As InteractionEvents
Private WithEvents oSelectEvents As SelectEvents

' Declare a flag that's used to determine when selection stops.
Private bStillSelecting As Boolean

Public Function Pick(filter As SelectionFilterEnum) As Object
    ' Initialize flag.
    bStillSelecting = True

    ' Create an InteractionEvents object.
    Set oInteractEvents = ThisApplication.CommandManager.CreateInteractionEvents

    ' Ensure interaction is enabled.
    oInteractEvents.InteractionDisabled = False

    ' Set a reference to the select events.
    Set oSelectEvents = oInteractEvents.SelectEvents

    ' Set the filter using the value passed in.
    oSelectEvents.AddSelectionFilter filter

    ' Start the InteractionEvents object.
    oInteractEvents.Start

    ' Loop until a selection is made.
    Do While bStillSelecting
        ThisApplication.UserInterfaceManager.DoEvents
    Loop

    ' Get the selected item. If more than one thing was selected,
    ' just get the first item and ignore the rest.
    Dim oSelectedEnts As ObjectsEnumerator
    Set oSelectedEnts = oSelectEvents.SelectedEntities
    If oSelectedEnts.Count > 0 Then
        Set Pick = oSelectedEnts.Item(1)
    Else
        Set Pick = Nothing
    End If

    ' Stop the InteractionEvents object.
    oInteractEvents.Stop

    ' Clean up.
    Set oSelectEvents = Nothing
    Set oInteractEvents = Nothing
End Function

Private Sub oInteractEvents_OnTerminate()
    ' Set the flag to indicate we're done.
    bStillSelecting = False
End Sub

Private Sub oSelectEvents_OnSelect(ByVal JustSelectedEntities As ObjectsEnumerator, ByVal SelectionDevice As SelectionDeviceEnum, ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View)
    ' Set the flag to indicate we're done.
    bStillSelecting = False
End Sub



Das Klassenmodul heißt im Standard glaub ich Class1. Das mußt du in clsSelect ändern. Wenn es nicht sichtbar ist, blende dazu das Eigenschaftenfenster mit F4 ein. Bei der Gelegenheit gleich das Modul1 auch in was sinnvolles umbenennen.
Den VBA-Editor kannste jetzt wieder schließen.
Im Inventor eine Zeichnung öffnen und rechte Maustaste auf die Ribbonleiste --> "Benutzerbefehle anpassen". In dem Fenster links oben von "alle Befehle" auf "Makros" umstellen und dein Makro links einfügen. Fertig.

Drückst du jetzt den Button, will das Makro eine Ansicht haben die es "bearbeiten" soll. Den Rest siehste dann.

Ich hoffe das geht halbwegs in die richtige Richtung. Ein paar Einschränkungen muß man hinnehmen. Zum Beispiel, das nicht erkannt werden kann, ob die gleiche Nummer in einer anderen Ansicht bereits vergeben ist.

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

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 15. Jul. 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

Hallo Ralf,

Vielen Dank für deine Unterstützung. Bin seit vier Tagen unterwegs.
Werde aber deinen code heute Abend oder Morgen ausprobieren.
Ich melde mich entsprechend.

Gruss Christian

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 16. Jul. 2012 08:08    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 Ralf,

funktioniert soweit super. Es wird auch angezeigt was es für eine Schweißnaht ist.
Die Einschränkung bezüglich Ansicht und Nummerierung ist OK, da die Schweißnahtnummern i.d.R. nur in einer Ansicht platziert werden.
Zwei Sachen fallen mir auf:
1. Ich kann die Ansicht nicht speichern, d.h. nachdem ich die Zeichnung geschlossen habe und wieder öffne sind die Positionsnummern weg...
Und 2. Ist es Möglich die Sechseckige Form der Positionsnummern für die Schweißnahtnummern zu verwenden?.

Gibt es die  Möglichkeit die Positionsnummern per Regel in eine Tabelle zu packen??

Gruss Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 16. Jul. 2012 20: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 Nur für dittmarc 10 Unities + Antwort hilfreich

Hallo

Na so'n Schrott. Speichern hab ich natürlich nicht probiert. Bin davon ausgegangen, das das funktioniert.  Ich vermute es liegt daran, daß Inventor merkt, daß die Positionsnummern an keinem Teil hängen und bereinigt das mal eben. Positionsnummern lassen sich also dafür nicht mißbrauchen.
Ich habe ein bißchen mit Führungslinientexten herumprobiert, das war aber auch nix tolles.
Mittlerweile bin ich bei einem eigenen skizzierten Symbol. Das sieht ganz brauchbar aus. Ersetze mal bitte den Code mit dem folgenden. Das Klassenmodul clsSelect bleibt unverändert.

Code:
Option Explicit
Option Base 1

Public oInv As Inventor.Application
Public oDrawDoc As DrawingDocument
Public oSheet As Sheet
Public oView As DrawingView
Public oWeldName As String
Public iItem As Integer


Public Sub WeldSymbol()

Set oInv = ThisApplication

If Not oInv.ActiveDocument.DocumentType = kDrawingDocumentObject Then
    MsgBox "Keine Zeichnung aktiv - Exit.", vbCritical
    Exit Sub
End If
Set oDrawDoc = oInv.ActiveDocument

If oDrawDoc.ActiveSheet.DrawingViews.Count = 0 Then
    MsgBox "Keine Ansichten auf aktivem Blatt - Exit", vbCritical
    Exit Sub
End If
Set oSheet = oDrawDoc.ActiveSheet
Dim oSelect As New clsSelect
'Dim oView As DrawingView
Set oView = oSelect.Pick(kDrawingViewFilter)

If oView Is Nothing Then Exit Sub

If Not oView.ReferencedDocumentDescriptor.ReferencedDocumentType = kAssemblyDocumentObject Then
    MsgBox "Keine Ansicht einer Baugruppe gewählt - Exit.", vbCritical
    Exit Sub
End If
Dim oAssDoc As AssemblyDocument
Set oAssDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument

If Not TypeOf oAssDoc.ComponentDefinition Is WeldmentComponentDefinition Then
    MsgBox "Keine Schweißbaugruppe - Exit", vbCritical
End If
Dim oWeldCompdef As WeldmentComponentDefinition
Set oWeldCompdef = oAssDoc.ComponentDefinition

If oWeldCompdef.Welds.Count = 0 Then
    MsgBox "Keine Schweißnähte gefunden - Exit.", vbCritical
End If

CleanUp

Dim oWeld As WeldBead
Dim oWeldFace As Face
Dim oEdges As EdgeCollection
Set oEdges = oInv.TransientObjects.CreateEdgeCollection

iItem = 1
Dim j As Integer
j = 1

ReDim oContents(oWeldCompdef.Welds.Count * 2) As String

'On Error Resume Next
For Each oWeld In oWeldCompdef.Welds
    oWeldName = oWeld.Name
    Set oWeldFace = GetWeldFace(oWeld)
    If Not oWeldFace Is Nothing Then
        oContents(j) = iItem
        j = j + 1
        oContents(j) = oWeldName
        j = j + 1
        iItem = iItem + 1
    End If
Next

Dim oTable As CustomTable
Set oTable = CreateTable(oContents)

End Sub

Private Function GetWeldFace(ByVal oWeld As WeldBead) As Face
    Dim oWeldFace As Face
    Dim oDrawingCurve As DrawingCurve
    For Each oWeldFace In oWeld.BeadFaces
        Set oDrawingCurve = GetDrawingCurve(oWeldFace)
        If Not oDrawingCurve Is Nothing Then
            Set GetWeldFace = oWeldFace
            Exit Function
        End If
    Next
End Function

Private Function GetDrawingCurve(ByVal oWeldFace As Face) As DrawingCurve
    Dim oEdge As Edge
    Dim oDrawCurveEnum As DrawingCurvesEnumerator
    Dim oSketchedSymbol As SketchedSymbol
    Dim SketchedSymbolDef As SketchedSymbolDefinition
   
    For Each oEdge In oWeldFace.Edges
            'On Error Resume Next
            Set oDrawCurveEnum = oView.DrawingCurves(oEdge)
            If Not oDrawCurveEnum Is Nothing Then
                If CheckSketchedSymbolDef() Is Nothing Then
                    Set SketchedSymbolDef = CreateSketchedSymbolDef()
                Else
                    Set SketchedSymbolDef = CheckSketchedSymbolDef()
                    'Symbol an curve hängen
                    Set oSketchedSymbol = InsertSketchedSymbolWithLeader(oDrawCurveEnum)
                    If Not oSketchedSymbol Is Nothing Then
                        Set GetDrawingCurve = oDrawCurveEnum.Item(1)
                        Exit Function
                    End If
                End If
            End If
        Next
End Function

Private Function CheckSketchedSymbolDef() As SketchedSymbolDefinition

    Dim oSketchedSymbolDef As SketchedSymbolDefinition
    For Each oSketchedSymbolDef In oDrawDoc.SketchedSymbolDefinitions
        If oSketchedSymbolDef.Name = "Nahtsymbol" Then
            Set CheckSketchedSymbolDef = oSketchedSymbolDef
        End If
    Next
End Function

Private Function CreateSketchedSymbolDef() As SketchedSymbolDefinition
    ' Create the new sketched symbol definition.
    Dim oSketchedSymbolDef As SketchedSymbolDefinition
    Call oDrawDoc.SketchedSymbolDefinitions.Add("Nahtsymbol")
    Set oSketchedSymbolDef = oDrawDoc.SketchedSymbolDefinitions.Item("Nahtsymbol")
   
    ' Open the sketched symbol definition's sketch for edit. This is done by calling the Edit
    ' method of the SketchedSymbolDefinition to obtain a DrawingSketch. This actually creates
    ' a copy of the sketched symbol definition's and opens it for edit.
    Dim osketch As DrawingSketch
    Set osketch = oSketchedSymbolDef.Sketch
    Call oSketchedSymbolDef.Edit(osketch)

    Dim oTG As TransientGeometry
    Set oTG = oInv.TransientGeometry

    ' Use the functionality of the sketch to add sketched symbol graphics.
            Dim oSketchLine(0 To 5) As SketchLine
            Set oSketchLine(0) = osketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(0, 0), oTG.CreatePoint2d(0.5, 0))
            Set oSketchLine(1) = osketch.SketchLines.AddByTwoPoints(oSketchLine(0).EndSketchPoint, oTG.CreatePoint2d(0.75, 0.25))
            Set oSketchLine(2) = osketch.SketchLines.AddByTwoPoints(oSketchLine(1).EndSketchPoint, oTG.CreatePoint2d(0.5, 0.5))
            Set oSketchLine(3) = osketch.SketchLines.AddByTwoPoints(oSketchLine(2).EndSketchPoint, oTG.CreatePoint2d(0, 0.5))
            Set oSketchLine(4) = osketch.SketchLines.AddByTwoPoints(oSketchLine(3).EndSketchPoint, oTG.CreatePoint2d(-0.25, 0.25))
            Set oSketchLine(5) = osketch.SketchLines.AddByTwoPoints(oSketchLine(4).EndSketchPoint, oSketchLine(0).StartSketchPoint)


            ' Create a point and make it the insertion point
            Dim oPoint As Point2d
            Set oPoint = oTG.CreatePoint2d(0.25, 0.25)

            Dim oSketchPoint As SketchPoint
            Set oSketchPoint = osketch.SketchPoints.Add(oPoint)
            oSketchPoint.InsertionPoint = True
            oSketchPoint.SketchOnly = True
                       
            ' Add the two text
            Dim sText As String
            sText = "<Prompt ReadOnlyUniqueID='1'>Nahtnr.</Prompt>"
            'sText = "Nahtnr."
            Dim oTextBox As Inventor.TextBox
            Set oTextBox = osketch.TextBoxes.AddFitted(oPoint, sText)
            'oTextBox.SingleLineText = True
            oTextBox.VerticalJustification = VerticalTextAlignmentEnum.kAlignTextMiddle
            oTextBox.HorizontalJustification = HorizontalTextAlignmentEnum.kAlignTextCenter
           
            Call oSketchedSymbolDef.ExitEdit(True)
           
            Set CreateSketchedSymbolDef = oSketchedSymbolDef
End Function

Private Function InsertSketchedSymbolWithLeader(ByVal oDrawCurveEnum As DrawingCurvesEnumerator) As SketchedSymbol

    If oDrawCurveEnum.Count = 0 Then Exit Function
   
    ' Set a reference to the drawing curve.
    Dim oDrawingCurve As DrawingCurve
    Set oDrawingCurve = oDrawCurveEnum.Item(1)
   
    ' Get the mid point of the selected curve
    ' assuming that the selection curve is linear
    Dim oMidPoint As Point2d
    Set oMidPoint = oDrawingCurve.MidPoint
   
    If oMidPoint Is Nothing Then Exit Function
   
    ' Set a reference to the TransientGeometry object.
    Dim oTG As TransientGeometry
    Set oTG = oInv.TransientGeometry

    Dim oLeaderPoints As ObjectCollection
    Set oLeaderPoints = oInv.TransientObjects.CreateObjectCollection

    ' Create a few leader points.
    Call oLeaderPoints.Add(oTG.CreatePoint2d(oMidPoint.X + 2, oMidPoint.Y + 2))
    'Call oLeaderPoints.Add(oTG.CreatePoint2d(oMidPoint.X + 10, oMidPoint.Y + 5))

    ' Create an intent and add to the leader points collection.
    ' This is the geometry that the symbol will attach to.
    Dim oGeometryIntent As GeometryIntent
    Set oGeometryIntent = oSheet.CreateGeometryIntent(oDrawingCurve)

    Call oLeaderPoints.Add(oGeometryIntent)

    ' Get the first symbol definition
    Dim oSketchSymDef As SketchedSymbolDefinition
    Set oSketchSymDef = oDrawDoc.SketchedSymbolDefinitions.Item("Nahtsymbol")
   
    Dim sPrompt(1) As String
    sPrompt(1) = iItem 'iItem & " - " & oWeldName
   
    ' Create the symbol with a leader
    Set InsertSketchedSymbolWithLeader = oSheet.SketchedSymbols.AddWithLeader(oSketchSymDef, oLeaderPoints, 0, 1, sPrompt)

End Function

Private Function CreateTable(ByRef oContents() As String) As CustomTable
   
    ' Set the column titles
    Dim oTitles(1 To 2) As String
    oTitles(1) = "Nahtnr."
    oTitles(2) = "Beschreibung"
   
    ' Set the column widths (defaults to the column title width if not specified)
    Dim oColumnWidths(1 To 2) As Double
    oColumnWidths(1) = 1
    oColumnWidths(2) = 5.5
   
    ' Set the number of rows
    Dim iRows As Integer
    iRows = UBound(oContents) / 2
         
    ' Create the custom table
    Dim oCustomTable As CustomTable
    Set oCustomTable = oSheet.CustomTables.Add("Nahttabelle", oInv.TransientGeometry.CreatePoint2d(0, 0), 2, iRows, oTitles, oContents, oColumnWidths)
   
    Dim oPos As Point2d
    Set oPos = oInv.TransientGeometry.CreatePoint2d(1, Abs(oCustomTable.RangeBox.MinPoint.Y) + 1)
   
    oCustomTable.Position = oPos
   
    ' Create a table format object
    Dim oFormat As TableFormat
    Set oFormat = oSheet.CustomTables.CreateTableFormat
   
    ' Set inside line color to red.
    oFormat.InsideLineColor = oInv.TransientObjects.CreateColor(255, 0, 0)
   
    ' Modify the table formats
    oCustomTable.OverrideFormat = oFormat


End Function

Private Function CleanUp()

'existierende Nahtnummernsymbole in der gewählten Ansicht suchen und löschen
'Nahtnummerntabelle löschen

Dim oSketchedSymbol As SketchedSymbol
For Each oSketchedSymbol In oSheet.SketchedSymbols
    If oSketchedSymbol.Leader.AllLeafNodes.Item(1).AttachedEntity.Geometry.Parent.Name = oView.Name Then
        oSketchedSymbol.Delete
    End If
Next

Dim oTable As CustomTable
For Each oTable In oSheet.CustomTables
    If oTable.Title = "Nahttabelle" Then oTable.Delete
Next

End Function


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

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

dittmarc
Mitglied
Dipl. Ing. Verfahrenstechnik


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

Beiträge: 12
Registriert: 05.07.2012

WIN 7 x64 Inventor 2012

erstellt am: 18. Jul. 2012 08: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

Hallo Ralf,

vielen, vielen Dank. Das Makro funtioniert soweit bestens.
Bin dann doch auf den "Geschmack" gekommen und habe einwenig gelesen und ausprobiert.
Derzeit versuche ich mich an einer Eingabe per InputBox:

-------------------------------------------------------
Dim oWeld As WeldBead
Dim oWeldFace As Face
Dim oEdges As EdgeCollection
Dim WNo As Integer
Dim j As Integer
Set oEdges = oInv.TransientObjects.CreateEdgeCollection

j = 1

WNo = InputBox("Startnummer eingeben: ", "Schweißnahtnummern")
iItem = WNo

ReDim oContents(oWeldCompdef.Welds.Count * 2) As String

'On Error Resume Next
For Each oWeld In oWeldCompdef.Welds
    oWeldName = oWeld.Name
    Set oWeldFace = GetWeldFace(oWeld)
    If Not oWeldFace Is Nothing Then
        oContents(j) = iItem
        j = j + 1
        oContents(j) = oWeldName
        j = j + 1
        iItem = iItem + 1
    End If
-------------------------------------------------------

Kannst du mir eine Empfehlung für ein gutes VB-Buch geben?
Ich habe da noch so einige Wünsche meiner Kollegen auf dem Tisch...

Gruss Christian

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 18. Jul. 2012 09:44    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 dittmarc 10 Unities + Antwort hilfreich

Hallo

Ein Buch kann ich dir nicht nennen. Ich such immer im Netz nach Lösungen. Für fast jedes Problem gibt's mittlerweile ein passendes Beispiel. Alles was ich da nicht finde, frage ich hier. Bisher hat das gereicht.
Wenn du intensiver in die Programmierung einsteigen willst, dann fang gleich mit VB, statt VBA an. Besorg dir ein kostenloses VisualStudio Express und schau dir die Beiträge zum Einstieg im Blog von Brian Ekins an. In der rechten Spalte unter Categories die Abschnitte Beginning API, Getting Started und Add-In Creaation.
Das mit den Wünschen der Kollegen würde ich mir nochmal überlegen. Denn wie heißt es: Reicht man den kleinen Finger.... 

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

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

Mohammad
Mitglied
Maschinenbauer

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

Beiträge: 2
Registriert: 11.09.2023

erstellt am: 11. Sep. 2023 20:09    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 dittmarc 10 Unities + Antwort hilfreich

Hallo,
Kannst du mir bitte helfen.
Ich brauche ein vba code, das alle erzeugten Schweißsymbole in eine Zeichnung automatisch löschen kann.

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: 2308
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 12. Sep. 2023 09: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 dittmarc 10 Unities + Antwort hilfreich

Hier geht es weiter

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

RKW Solutions GmbH
www.RKW-Solutions.com

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