Bohrungsbemaßung automatisieren mit Unterscheidung der Durchmesser

Bohrungsbemaßung automatisieren mit Unterscheidung der Durchmesser

haistshomie
Contributor Contributor
1.363Aufrufe
6Antworten
Nachricht 1 von 7

Bohrungsbemaßung automatisieren mit Unterscheidung der Durchmesser

haistshomie
Contributor
Contributor

Hallo zusammen,

ich beschäftige mich seit einiger Zeit mit der Automatisierung von Zeichnungen und habe nun ein Problem bei dem ich nicht so wirklich weiter komme. Ich möchte eine Bohrlochplatte bemaßen, welche unterschiedlich große Bohrungen und Gewindebohrungen hat. 

Meine Idee ist, dass ich allen Bohrungen mit dem Durchmesser Ø8 mm noch eine Passung zuweisen kann, und alle Gewindebohrungen mit Kernlochdurchmessern von Ø6,647mm den Namen "M8" zuweisen kann (vielleicht gibt es für letzteres auch eine elegantere Variante, die ich noch nicht gefunden habe).  Ich habe mich schon mal durch einige Beiträge geklickt und vermute, dass es über "SelectSet" möglich sein müsste meine Bohrungen in Sets hinzuzufügen.

Auch habe ich mir hier schon die Guides von autodesk angeschaut, allerdings sehe ich dort nur, welche Bausteine es gibt und was diese tun müssten. Ob ich Kanten, Flächen, Bohrungen aus dem Browser usw. als Input brauche habe ich nicht herauslesen können. 

Es wäre also super wenn mir jemand erklären könnte wie ich mithilfe eines SelectSets Bohrungen eines bestimmten Durchmessers sammeln kann um diese entsprechend bemaßen zu können. 

Eine Anschlussfrage die sich daraus ergibt: Angenommen ich habe eine Gewindebohrung mit Kernlochdurchmesser 6,647, wie überschreibe ich das angezogene Maß mit dem Wert "M8", gibt es einen Befehl den Bemaßungstext automatisiert auszublenden?

Ich nutze Inventor 2020

Vielen Dank im Voraus!
Gruß Colin

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (1)
1.364Aufrufe
6Antworten
Antworten (6)
Nachricht 2 von 7

RaphaelMichel
Advisor
Advisor

Hallo Colin


Ohne jetzt auf die iLogic-Frage einzugehen, würde ich mich mit dem Bohrungs- und Gewinde-Feature an die Thematik herantasten.

RaphaelMichel_0-1715171782725.png

über die Stilbibliothek und deine Thread.xls kannst du definieren, wie die Bohrungen beschriftet werden. Dann musst du nicht den Umweg über den Kernlochdurchmesser gehen. Voraussetzung ist natürlich, dass die Bohrung mit einem Bohrungs- oder Gewindefeature erzeugt wurde und nicht ein Step-Import ist.
Allenfalls kannst du also statt einer "normalen" Bemassung" gleich "Bohrung und Gewinde" mit iLogic abgreifen.
Eine nach wie vor gute Quelle für Programmierungen innerhalb Inventor ist inventorfaq.blogspot. Darin werden unteranderem erklärt, wie man auf die verschiedenen Objekte zugreift. Leider ist der Autor und Seitenbetreiber verstorben und die Seite wird nicht mehr weitergeführt. 

Also keine fertige Lösung aber eine weitere Quelle, die dich hoffentlich weiter bringt.

0 „Gefällt mir“-Angaben
Nachricht 3 von 7

haistshomie
Contributor
Contributor

Hallo,
erstmal danke für deine Antwort, auf der Seite werde ich mich mal einlesen, ich glaube da wird mir nochmal einiges klarer. Zu dem Thema mit der Bohrungsbemaßung: das war auch zuerst meine Idee, allerdings habe ich hier das Problem bestimmte Bohrungseigenschaften automatisiert nicht einfügen zu können (z.B. für Ø8 H7 und für Ø6 H6). Ich werde trotzdem mal schauen inwiefern ich mit den Anleitungen auf der Seite zum Erfolg komme, ich lasse den Thread aber trotzdem nochmal offen, vielleicht findet sich ja noch jemand der direkt auf mein Problem eine Lösung findet.

0 „Gefällt mir“-Angaben
Nachricht 4 von 7

richterBKSAC
Advocate
Advocate
Akzeptierte Lösung

Hallo Colin,

 

ich habe auf http://hjalte.nl/37-auto-overall-dimension, Code für eine ähnliche Aufgabe gefunden und etwas angepasst. Ich schätze das war was du gesucht hast oder?

Public Class ThisRule
    Private _doc As DrawingDocument
    Private _sheet As Sheet
    Private _view As DrawingView
    Private _intents As List(Of GeometryIntent) = New List(Of GeometryIntent)()

    Sub Main()
        _doc = ThisDoc.Document
        _sheet = _doc.ActiveSheet
        _view = ThisApplication.CommandManager.Pick(
                       SelectionFilterEnum.kDrawingViewFilter, 
                       "Select a drawing view")
					   
		' Bohrungsbemaßung erzeugen
        CreateIntentList("kCircleCurve2d")
		createNormalDiameterDimension()
		_intents.Clear()
		
		' Gewindebemaßung erzeugen
		CreateIntentList("kCircularArcCurve2d")
		createThreadDimension()
    End Sub

    Private Sub createNormalDiameterDimension()
		
		For Each intent In _intents
			Dim radius As Double = intent.Geometry.ModelGeometry.Geometry.Radius
			If radius = 0.4 Then
				Dim textY = intent.PointOnSheet.Y
		        Dim textX = intent.Geometry.Evaluator2D.RangeBox.MinPoint.X - 2*radius
		
		        Dim pointText = ThisApplication.TransientGeometry.CreatePoint2d(textX, textY)
				Dim diameter As DiameterGeneralDimension = _sheet.DrawingDimensions.GeneralDimensions.AddDiameter(pointText, intent, , True, False)
				diameter.Tolerance.SetToFits(kLimitsFitsStackedTolerance,"H8","")
				
			End If
		Next
    End Sub
	
  	Private Sub createThreadDimension()
		Dim intent_count As Integer = 1
		
		For Each intent In _intents
			If (intent_count Mod 2) > 0 Then
				Dim pointLeft = intent
		        Dim pointRight = _intents(intent_count)
		
		        Dim textY = pointLeft.PointOnSheet.Y + (pointRight.PointOnSheet.Y - pointLeft.PointOnSheet.Y) / 2
		        Dim textX = pointLeft.PointOnSheet.X + (pointLeft.PointOnSheet.Y - pointRight.PointOnSheet.Y)
		
		        Dim pointText = ThisApplication.TransientGeometry.CreatePoint2d(textX, textY)
				Dim thread As LinearGeneralDimension = _sheet.DrawingDimensions.GeneralDimensions.AddLinear(pointText, pointLeft, pointRight, DimensionTypeEnum.kVerticalDimensionType)
				thread.Text.FormattedText = "M<DimensionValue/>"
				intent_count +=1
			Else
				intent_count +=1
				Continue For	
			End If
			
		Next
    End Sub

    Private Sub addIntent(Geometry As DrawingCurve, IntentPlace As Object, onLineCheck As Boolean)
        Dim intent As GeometryIntent = _sheet.CreateGeometryIntent(Geometry, IntentPlace)
        If intent.PointOnSheet Is Nothing Then Return

        If onLineCheck Then
            If (IntentIsOnCurve(intent)) Then
                _intents.Add(intent)
            End If
        Else
            _intents.Add(intent)
        End If
    End Sub

    Private Function IntentIsOnCurve(intent As GeometryIntent) As Boolean
        Dim Geometry As DrawingCurve = intent.Geometry
        Dim sp = intent.PointOnSheet

        Dim pts(1) As Double
        Dim gp() As Double = {}
        Dim md() As Double = {}
        Dim pm() As Double = {}
        Dim st() As SolutionNatureEnum = {}
        pts(0) = sp.X
        pts(1) = sp.Y

        Try
            Geometry.Evaluator2D.GetParamAtPoint(pts, gp, md, pm, st)
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

    Private Sub CreateIntentList(Intentfilter As String)
		Select Case Intentfilter
			Case "kCircleCurve2d"
    			For Each oDrawingCurve As DrawingCurve In _view.DrawingCurves
		            If oDrawingCurve.ProjectedCurveType = Curve2dTypeEnum.kCircleCurve2d Then
						addIntent(oDrawingCurve, PointIntentEnum.kCircularLeftPointIntent, True)
					End If
				Next
			Case "kCircularArcCurve2d"
				For Each oDrawingCurve As DrawingCurve In _view.DrawingCurves
					If oDrawingCurve.ProjectedCurveType = Curve2dTypeEnum.kCircularArcCurve2d Then
						addIntent(oDrawingCurve, PointIntentEnum.kCircularBottomPointIntent, True)
	                    addIntent(oDrawingCurve, PointIntentEnum.kCircularTopPointIntent, True)
					End If
				Next
			End Select
    End Sub
End Class

Das einzige "Problem", wo auch der Autor drauf hinweist, ist das die Bemaßungen bei jedem ausführen nochmal erstellt werden und dann übereinander liegen.

 

Grüße

 

Nachricht 5 von 7

haistshomie
Contributor
Contributor

Hallo,

ja das kommt der ganzen Sache schon ein gutes Stück näher, ich denke ich werde mich mal intensiv mit dem Code auseinandersetzen müssen. Aktuell bemaßt Inventor nicht ein Gewinde, sondern den Abstand von Gewindebogen zu Gewindebogen, aber ich denke damit ist schon mal ein Grundstein gelegt, der Rest ist Fleißarbeit.

Manchmal ist es wirklich schade, dass es zu solchen Themen keine deutschen Anleitungen gibt, im Englischen braucht es für mich doch viel länger zum Verstehen und teilweise haut es gar nicht hin (Stichwort geometry-intent).

Danke dir auf jeden Fall für deine Nachricht.

Eine schöne Woche wünsche ich!

0 „Gefällt mir“-Angaben
Nachricht 6 von 7

richterBKSAC
Advocate
Advocate

Hallo,

 

da stimme ich dir zu das es auf Deutsch nicht so viele Infos/Hilfe gibt wie auf Englisch. Ich schaue auch immer zuerst im englischen Forum.

Die Sache mit dem Geometry Intent war auch neu für mich und eine sinnvolle Übersetzung habe ich auch nicht dafür gefunden. Im Prinzip sind es alle Objekte Linien/Kreise/Bögen/etc. aus denen sich die 2D Projektion zusammensetzt. Jedenfalls eröffnet es ziemlich viele Möglichkeiten zur Automatisierung. 

Zu der Bemaßung der Gewindebohrung, es ist auch zeichnerisch richtig das der Gewindebogen und nicht das Kernloch bemaßt wird.

Dir auch einen gute Woche!

 

0 „Gefällt mir“-Angaben
Nachricht 7 von 7

haistshomie
Contributor
Contributor

Hallo,

tatsächlich habe ich jetzt den Code soweit, dass er zumindest das abdeckt was an Fällen aufkommen könnte. Was ich bei den Bohrungen meinte war viel mehr, dass ein Maß von einem Dreiviertelkreis zum nächsten Dreiviertelkreis erstellt wird, aber das lag wohl an meinem Assembly. 

0 „Gefällt mir“-Angaben