Hallo zusammen,
folgendes Problem:
Zeichnungsdokument, Skizze in Zeichenansicht, 4 Linien in Skizze mit LängenMaßen d0 - d3.
Per VBA ist es mir möglich den Wert der Maße beliebig zu ändern. Dafür gehe ich in den Edit-Modus der Skizze und schreibe in jedes Maß irgendeinen Wert. Dieser wird korrekt eingetragen, danach verlasse ich den Edit-Modus.
Das Problem ist nun, das mir die Linienlänge nicht an den neu eingetragenen Wert angepasst wird. Erst wenn ich die Skizze manuell öffne und das Maß doppelklicke und per grünen Haken bestätige wird die Linienlänge aktualisiert. Das ist schlecht.
Verwende ich den gleichen Code, leicht angepasst, für eine Skizze in einem Bauteil, funktioniert das Ganze tadellos.
Ich vermute irgendeine Unzulänglichkeit in der Skizzierumgebung innerhalb einer Zeichnung, kennt jemand einen Workaround?
Z.B. wie ich das manuelle ändern des jeweiligen Maße simulieren kann. In der Api-Hilfe habe ich dazu nichts finden können.
Hier z.B. machen die ähnliches mit einem skizzierten Symbol, bzw. Titleblock mit iLogic. Allerdings hängt da hinter der Skizze ein Objekt (Symbol / Titleblock) welches sie dan refreshen.
Code für Zeichnung (Eine Ansicht mit einer Skizze "Masze_Fix" mit vier Linien und Maßen d0 - d3 muss vorhanden sein)
Code:
Sub drw_SkizzenMasz_manipulieren()Dim oApp As Inventor.Application: Set oApp = ThisApplication
Dim oDoc As Inventor.Document: Set oDoc = oApp.ActiveDocument
Dim oDocDType As DocumentTypeEnum: oDocDType = oDoc.DocumentType
Dim oDrwDoc As DrawingDocument: Set oDrwDoc = oDoc
Dim oSheets As Sheets: Set oSheets = oDrwDoc.Sheets
Dim oSheet As Sheet: Set oSheet = oDrwDoc.ActiveSheet
Dim oDrwViews As DrawingViews: Set oDrwViews = oSheet.DrawingViews
Dim oDrwView As DrawingView
Dim oSketch As Sketch
Dim sSketchName As String
sSketchName = "Masze_Fix"
'oApp.ScreenUpdating = False
Dim dScaleTmp As Double
Dim dD0 As Double: dD0 = 1 'oDrwDoc.Parameters.Item("Masze_Fix_d0").Value
Debug.Print "dD0: " & dD0
Dim dD1 As Double: dD1 = 0.8 'oDrwDoc.Parameters.Item("Masze_Fix_d1").Value
Debug.Print "dD1: " & dD1
Dim dD2 As Double: dD2 = 1.2 'oDrwDoc.Parameters.Item("Masze_Fix_d2").Value
Debug.Print "dD2: " & dD2
Dim dD3 As Double: dD3 = 1.4 'oDrwDoc.Parameters.Item("Masze_Fix_d3").Value
Debug.Print "dD3: " & dD3
Dim oDimCons As DimensionConstraint
For Each oDrwView In oDrwViews
If oDrwView.Sketches.Count > 0 Then
For Each oSketch In oDrwView.Sketches
If oSketch.Name = sSketchName Then
Debug.Print sSketchName
dScaleTmp = oDrwView.Scale
Debug.Print dScaleTmp
Call oSketch.Edit
For Each oDimCons In oSketch.DimensionConstraints
Select Case oDimCons.Parameter.Name
Case "d0"
oDimCons.Parameter.Value = dD0 / dScaleTmp
Debug.Print "d0"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d1"
oDimCons.Parameter.Value = dD1 / dScaleTmp
Debug.Print "d1"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d2"
oDimCons.Parameter.Value = dD2 / dScaleTmp
Debug.Print "d2"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d3"
oDimCons.Parameter.Value = dD3 / dScaleTmp
Debug.Print "d3"
Debug.Print oDimCons.Parameter.Value & "mm"
End Select
Next
Call oSketch.ExitEdit
Call oSketch.Edit
Call oSketch.ExitEdit
End If
Next
End If
Next
'oApp.ScreenUpdating = True
Call oDrwDoc.Update
End Sub
Code für Bauteil (Eine Skizze "Masze_Fix" mit vier Linien und Maßen d0 - d3 muss vorhanden sein)
Code:
Sub prt_SkizzenMasz_manipulieren()Dim oApp As Inventor.Application: Set oApp = ThisApplication
Dim oDoc As Inventor.Document: Set oDoc = oApp.ActiveDocument
Dim oDocDType As DocumentTypeEnum: oDocDType = oDoc.DocumentType
Dim oPrtDoc As PartDocument: Set oPrtDoc = oDoc
Dim oSketch As Sketch
Dim sSketchName As String
sSketchName = "Masze_Fix"
Dim dD0 As Double: dD0 = 1
Debug.Print "dD0: " & dD0
Dim dD1 As Double: dD1 = 0.8
Debug.Print "dD1: " & dD1
Dim dD2 As Double: dD2 = 1.2
Debug.Print "dD2: " & dD2
Dim dD3 As Double: dD3 = 1.4
Debug.Print "dD3: " & dD3
Dim oDimCons As DimensionConstraint
For Each oSketch In oPrtDoc.ComponentDefinition.Sketches
If oSketch.Name = sSketchName Then
Debug.Print sSketchName
Call oSketch.Edit
For Each oDimCons In oSketch.DimensionConstraints
Select Case oDimCons.Parameter.Name
Case "d0"
oDimCons.Parameter.Value = dD0 '/ dScaleTmp
Debug.Print "d0"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d1"
oDimCons.Parameter.Value = dD1 '/ dScaleTmp
Debug.Print "d1"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d2"
oDimCons.Parameter.Value = dD2 '/ dScaleTmp
Debug.Print "d2"
Debug.Print oDimCons.Parameter.Value & "mm"
Case "d3"
oDimCons.Parameter.Value = dD3 '/ dScaleTmp
Debug.Print "d3"
Debug.Print oDimCons.Parameter.Value & "mm"
End Select
Next
Call oSketch.ExitEdit
End If
Next
Call oPrtDoc.Update
End Sub
Vielen Dank fürs lesen und schon jetzt für eure Mühen
Grüße
EIBe 3D
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP