Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Aktualisieren der Bemaßung in einer 2D-Skizze

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:  Aktualisieren der Bemaßung in einer 2D-Skizze (2037 mal gelesen)
st.w
Mitglied



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 06. Jun. 2013 09:45    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


Bemasung.jpg

 
Hallo VBAler,

ich habe ein Makro geschrieben, dass in einer Skizze einer ipt die markierten Bemaßungen mit der Toleranz "H7" bzw "f7" ergänzt.
Wie im Bild links zu sehen, ist das Maß zunächst ohne Toleranz. Dann markiere ich (mehrere) Maße und starte das Makro, dass zuerst die markierten Objekte nach zulässigen Bemaßungen durchsucht und diese auf eben "H7" bzw. "F7" setzt.

Bei den Toleranzfeldern habe ich ein Aktualisierungsproblem:
Die dargestellte Toleranz ist 1/10 so groß wie in Wirklichkeit nötig OBWOHL die anschließend geöffneten 'Bemaßungseigenschaften' (Kontextmenü) den richtigen Wert ausweisen.

Interessanterweise: Wenn ich im Fenster 'Bemaßungseigenschaften' die Toleranz erneut wähle, wird die Skizze auf die richtige Toleranz hin aktualiert. Schließe ich das Fenster 'Bemaßungseigenschaften' ohne Neuauswahl, bleibt die falsche Toleranz sichtbar.

Wie aktualisiere ich die Bemaßung? Oder die Skizze?

Danke für Euren Tipp...
Stefan

PS.: Ich habe zu Testzwecken zusätzlich eine Maßveränderung um 0.1 bzw 0.01cm hinzugenommen, um zu sehen, dass das Makro auch die Werte ändert und was genau (nicht = die Skizze) aktualisiert wird.

Code:
Public Sub H7()
    Dim oSelectedObject
    Dim oOffsetDimConstr As OffsetDimConstraint
    Dim oTwoPointDistanceDimConstr As TwoPointDistanceDimConstraint
   
   
    Dim oc As ObjectCollection
    Set oc = ThisApplication.TransientObjects.CreateObjectCollection
    For Each oSelectedObject In ThisApplication.ActiveDocument.SelectSet
        If oSelectedObject.Type = kOffsetDimConstraintObject Or _
                oSelectedObject.Type = kTwoPointDistanceDimConstraintObject Then
            oc.Add oSelectedObject
        End If
    Next
    For Each oSelectedObject In oc
        If oSelectedObject.Type = kOffsetDimConstraintObject Then
            Set oOffsetDimConstr = oSelectedObject
            Call oOffsetDimConstr.Parameter.Tolerance.SetToDefault
            Call oOffsetDimConstr.Parameter.Tolerance.SetToSymmetric(0.05)
            oOffsetDimConstr.Parameter.Value = oOffsetDimConstr.Parameter.Value + 0.1
            Call oOffsetDimConstr.Parameter.Tolerance.SetToFits(kLimitsFitsShowTolerance, "H7", "")
        End If
        If oSelectedObject.Type = kTwoPointDistanceDimConstraintObject Then
            Set oTwoPointDistanceDimConstr = oSelectedObject
            Call oTwoPointDistanceDimConstr.Parameter.Tolerance.SetToDefault
            oTwoPointDistanceDimConstr.Parameter.Value = oTwoPointDistanceDimConstr.Parameter.Value + 0.1
            Call oTwoPointDistanceDimConstr.Parameter.Tolerance.SetToFits(kLimitsFitsShowTolerance, "H7", "")
        End If
    Next
    Set oc = Nothing
End Sub

Public Sub f7()
    Dim oSelectedObject
    Dim oOffsetDimConstr As OffsetDimConstraint
    Dim oTwoPointDistanceDimConstr As TwoPointDistanceDimConstraint
   
   
    Dim oc As ObjectCollection
    Set oc = ThisApplication.TransientObjects.CreateObjectCollection
    For Each oSelectedObject In ThisApplication.ActiveDocument.SelectSet
        If oSelectedObject.Type = kOffsetDimConstraintObject Or _
                oSelectedObject.Type = kTwoPointDistanceDimConstraintObject Then
            oc.Add oSelectedObject
        End If
    Next
    For Each oSelectedObject In oc
        If oSelectedObject.Type = kOffsetDimConstraintObject Then
            Set oOffsetDimConstr = oSelectedObject
            Call oOffsetDimConstr.Parameter.Tolerance.SetToDefault
            oOffsetDimConstr.Parameter.Value = oOffsetDimConstr.Parameter.Value + 0.01
            Call oOffsetDimConstr.Parameter.Tolerance.SetToFits(kLimitsFitsShowTolerance, "", "f7")
        End If
        If oSelectedObject.Type = kTwoPointDistanceDimConstraintObject Then
            Set oTwoPointDistanceDimConstr = oSelectedObject
            Call oTwoPointDistanceDimConstr.Parameter.Tolerance.SetToDefault
            oTwoPointDistanceDimConstr.Parameter.Value = oTwoPointDistanceDimConstr.Parameter.Value + 0.01
            Call oTwoPointDistanceDimConstr.Parameter.Tolerance.SetToFits(kLimitsFitsShowTolerance, "", "f7")
        End If
    Next
    Set oc = Nothing
End Sub


------------------
IV2008

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

st.w
Mitglied



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 10. Jun. 2013 11:19    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 Leute,

anbei meine Erkenntnisse:
  >> Inventor macht bei Toleranzfeldern echt einen Fehler!
und das Ergebnis meiner mühsamen Versuche:
  >> Makro öffnet Dialog, setzt die Einstellungen und schließt denselben, also ein kurzes Aufflackern und die Tolerenz ist gesetzt 

Wer es schöner kann, gerne posten...

Code:

Sub H9()
    Call toToleranzfeld("H9")
End Sub

Sub f7()
    Call toToleranzfeld("f7")
End Sub

Sub e8()
    Call toToleranzfeld("e8")
End Sub

' setzt auf Toleranzfeld
Private Sub toToleranzfeld(sToleranz As String)
    Dim oSelectedObject
    Dim lIndex As Long, lPos As Long
    Dim sFeld As String
    Dim lZahl As Long
    Dim oOffsetDimConstr As OffsetDimConstraint
    Dim oTwoPointDistanceDimConstr As TwoPointDistanceDimConstraint
    Dim oDiameterDimConstr As DiameterDimConstraint
   
    lIndex = 1
    For Each oSelectedObject In ThisApplication.ActiveDocument.SelectSet
        If Not (oSelectedObject.Type = kOffsetDimConstraintObject Or _
                oSelectedObject.Type = kTwoPointDistanceDimConstraintObject Or _
                oSelectedObject.Type = kDiameterDimConstraintObject) Or _
                lIndex > 1 Then
            Call ThisApplication.ActiveDocument.SelectSet.Remove(lIndex)
        Else
            lIndex = lIndex + 1
        End If
    Next
    If ThisApplication.ActiveDocument.SelectSet.count > 0 Then
        lZahl = 0
        lPos = 0
        While lZahl = 0
            lPos = lPos + 1
            lZahl = CLng(Val(Mid(sToleranz, lPos)))
        Wend
        sFeld = Left(sToleranz, lPos - 1)
        Select Case sFeld ' wenn Toleranzfelder mit gleichem Buchstaben hintereinander liegen
            Case "cd", "j", "za", "J", "ZA": lZahl = lZahl + 18 ' dann 18 weiterspringen
            Case "zb", "ZB": lZahl = lZahl + 36 ' analog
            Case "zc", "ZC": lZahl = lZahl + 54
        End Select
        AppActivate "Autodesk Inventor 2008", True
        Call ThisApplication.CommandManager.ControlDefinitions.Item("AppDimensionSettingsCtxCmd").Execute2(False)
        SendKeys "{TAB 6}"
        SendKeys "{HOME}" ' erstmal auf obersten Wert Setzen = Standard
        SendKeys "{DOWN 9}" ' nach 9x runter ist man bei Größengrenzwerte
        If sFeld = UCase(sFeld) Then ' wenn Großbuchstabe, dann H, E,... - Feld
            SendKeys "{TAB}"
            SendKeys "{HOME}" ' erstmal auf obersten Wert Setzen
            SendKeys Left(sFeld, 1) ' Toleranzfeld z.B. H
            If lZahl > 1 Then SendKeys "{DOWN " & (lZahl - 1) & "}" ' z.B. H7 = 6x runter
            SendKeys "{TAB 4}"
        Else ' Kleinbuchstabe, also f, e, ... -Feld
            SendKeys "{TAB 2}"
            SendKeys "{HOME}" ' erstmal auf obersten Wert Setzen
            SendKeys Left(sFeld, 1) ' Toleranzfeld z.B. f
            If lZahl > 1 Then SendKeys "{DOWN " & (lZahl - 1) & "}"  ' z.B. f8 = 7x runter
            SendKeys "{TAB 3}"
        End If
        SendKeys "{ENTER}" ' Übernehmen
        SendKeys "{ESC}"
    End If
End Sub


Vielleicht hilft dieser Code ja jemanden 

Danke für Eure Anteilnahme...
Stefan

------------------
IV2008

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

Donni123
Mitglied


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

Beiträge: 2
Registriert: 21.09.2017

erstellt am: 21. Sep. 2017 14: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 st.w 10 Unities + Antwort hilfreich

Hallo,

gibt es mittlerweile eine saubere Lösung für das Problem?

Gruß Donni


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