Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Geometrische Daten eines Bogens (Inventor 2008)

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:  Geometrische Daten eines Bogens (Inventor 2008) (1556 mal gelesen)
Michael Brix
Mitglied



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

Beiträge: 33
Registriert: 01.11.2000

erstellt am: 09. Feb. 2009 12: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,

habe ein nettes Problem. Beim Versuch die Koordinaten eines Bogens zu erhalten bekomme ich Mittelpunkt, Start- Endpunkt und Winkel des Bogens usw. - nur, woher weiß ich in welche Richtung der Bogen geht?
Also, ist der Bogen Konvex oder Konkav? Anhand der Koordinaten wäre beides möglich.
Wenn ich mir die Zwischenpunkte des Bogens ausgeben lasse, kann ich sehen in welche Richtung der Bogen läuft aber das scheint mit ziemlich kompliziert.
Also meine Bitte an die Experten - wo scheint das Licht?

Gruß

Michael

Hier mein Versuch die Koordinaten auszulesen:

Option Explicit

Global mf As Double

Public Sub CurveGeometry()

mf = 10#

' Get the active document.
Dim oPartDoc As PartDocument
Set oPartDoc = ThisApplication.ActiveDocument

' Get the selected edge.
On Error Resume Next
Dim oEdge As Edge
Set oEdge = oPartDoc.SelectSet.Item(1)

If Err Then
  MsgBox "An edge must be selected."
  Exit Sub
End If
On Error GoTo 0

' Check the geometry type and print out some geometry specific information.

Select Case oEdge.GeometryType
    Case kLineSegmentCurve
        Dim oLineSegment As LineSegment
        Set oLineSegment = oEdge.Geometry
        Debug.Print "Start point: " & PointString(oLineSegment.StartPoint)
        Debug.Print "End point: " & PointString(oLineSegment.EndPoint)
    Case kCircleCurve
        Dim oCircle As Inventor.Circle
        Set oCircle = oEdge.Geometry
        Debug.Print "Center point: " & PointString(oCircle.Center)
        Debug.Print "Radius: " & Format(oCircle.Radius, "0.0000")
    Case kCircularArcCurve
        Dim dPi As Double
        dPi = Atn(1) * 4
        Dim oArc As Inventor.Arc3d
        Set oArc = oEdge.Geometry
        Debug.Print "Arc begin ### ### ###"
     
        Dim oCurveEval As CurveEvaluator
        Set oCurveEval = oEdge.Evaluator

        ' Get the parametric range of the curve.
        Dim dMinParam As Double
        Dim dMaxParam As Double
        Call oCurveEval.GetParamExtents(dMinParam, dMaxParam)
     
        Debug.Print "min: " & Str(dMinParam)
        Debug.Print "max: " & Str(dMaxParam)
     
        ' Iterate 10 steps over the curve length and print the
        ' parameter values and corresponding model points.
        Dim i As Integer
     
        For i = 0 To 10
            ' Calculate the current parameter to evaluate.
            Dim currentParam As Double
            currentParam = dMinParam + ((dMaxParam - dMinParam) / 10) * i
         
            ' Assign the value to an array since the GetPointAtParam
            ' takes an array as input.
            Dim adParam(0) As Double
            adParam(0) = currentParam
         
            ' Get the coordinates of the parameter point in model space.
            Dim adPoints(2) As Double
            Call oCurveEval.GetPointAtParam(adParam, adPoints)
         
            ' Print information about this point.
            Debug.Print "Parameter Nr.: " & Str(i) & ") " & Format(currentParam, "0.000") & _
                        " Coordinate: " & Format(adPoints(0) * mf, "0.000") & "," & _
                                          Format(adPoints(1) * mf, "0.000") & "," & _
                                          Format(adPoints(2) * mf, "0.000")
         
        Next i
     
        Debug.Print "Start point: " & PointString(oArc.StartPoint)
        Debug.Print "End point: " & PointString(oArc.EndPoint)
        Debug.Print "Center point: " & PointString(oArc.Center)
        Debug.Print "Radius: " & Format(oArc.Radius * mf, "0.000")
        Debug.Print "Sweep: " & Str(oArc.SweepAngle)    'Format(oArc.SweepAngle * (180 / dPi), "0.000000")
        Debug.Print "Arc end ### ### ###"
    Case Else
        Debug.Print "Unsupported geometry type selected."
    End Select

End Sub

' Given a point or vector return a string containing the X,Y,Z coordinates.
Private Function PointString(PointOrVector As Object) As String
PointString = Format(PointOrVector.X * mf, "0.000") & "," & _
              Format(PointOrVector.Y * mf, "0.000") & "," & _
              Format(PointOrVector.Z * mf, "0.000")
End Function

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

Windows 10 x64, AIP 2022

erstellt am: 10. Feb. 2009 20:39    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 Michael Brix 10 Unities + Antwort hilfreich

Hallo

Eine Lösung habe ich leider nicht, aber kannst du uns verraten was du mit der Unterscheidung konkav/konvex weiter vor hast? Vielleicht gibt es einen alternativen Lösungsansatz.

------------------
MfG
RK

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

Michael Brix
Mitglied



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

Beiträge: 33
Registriert: 01.11.2000

erstellt am: 10. Feb. 2009 21: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


Fraesen1.jpg

 
Hai,

ich möchte die Daten in ein CNC-Programm wandeln.
D.h. ich muss ganz genau wissen welche Richtung der
Bogen nimmt. Die Koordinaten die ich bisher erhalte
lassen immer beide Richtungen zu.
Wie im beigefügten Bild zu sehen, kann der Bogen nach oben
oder nach unten zeigen bei gleichen Koordinaten von Start-,
End- und Mittelpunkt. Auch das Vorzeichen beim Winkel des Bogens
ist gleich.

Gruss

Michael

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

Windows 10 x64, AIP 2022

erstellt am: 10. Feb. 2009 22:17    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 Michael Brix 10 Unities + Antwort hilfreich

Hallo

Teste mal das hier:

Code:
Option Explicit

Global mf As Double

Public Sub CurveGeometry()

mf = 10#

' Get the active document.
Dim oPartDoc As PartDocument
Set oPartDoc = ThisApplication.ActiveDocument

' Get the selected edge.
On Error Resume Next
Dim oEdge As Edge
Set oEdge = oPartDoc.SelectSet.Item(1)

If Err Then
  MsgBox "An edge must be selected."
  Exit Sub
End If
On Error GoTo 0

If oEdge.CurveType = kCircleCurve Or oEdge.CurveType = kCircularArcCurve Or oEdge.CurveType = kEllipseFullCurve Or oEdge.CurveType = kEllipticalArcCurve Then

Dim osurfacebody As SurfaceBody
Set osurfacebody = oEdge.Parent

Dim okonvexedges As EdgeCollection
Set okonvexedges = osurfacebody.ConvexEdges

Dim okonvexedge As Edge

Dim oedge2 As Edge
Dim zaehler As Integer
zaehler = 0

For Each oedge2 In oEdge.StartVertex.Edges
    For Each okonvexedge In okonvexedges
        If okonvexedge.TransientKey = oedge2.TransientKey Then
        zaehler = zaehler + 1
        End If
    Next
Next
If zaehler < 3 Then
    MsgBox "konvex"
Else
    MsgBox "konkav"
End If

Else
MsgBox "kein Bogenelement"
End If

Exit Sub


Ich gehe mal davon aus, du willst damit immer im Part arbeiten. Kurz noch die Idee dahinter zum Verständnis. Der oEdge.Parent ist ein SurfaceBody. Die hat je eine Collection für konkave und konvexe Edges. Jede dieser Edges hat einen eindeutigen TransientKey. Jetzt nehmen wir die 3 Edges die vom Startpunkt unseres Bogens abgehen und sehen anhand ihrer TransientKeys nach, wieviele davon in der Collection KonvexEdges vorhandenen sind. Bei einem konvexen Bogen sind nur 2 drin, bei einem konkaven sind es 3. Danach unterscheiden wir. Zur Sicherheit hab ich noch eine Prüfung drin, ob die gewählte Edge wirklich ein Bogen oder eine Ellipse ist.

An Rundungen bin ich mir nicht ganz sicher ob die Ergebnisse immer stimmen. Leider.   

------------------
MfG
RK

P.S.: Ich übernehme keine Haftung für zerfräste Konsolen und zerstörte Spindeln.    

EDIT: Hab grad selbst einen Fehler gefunden. Gehen zwei Bögen tangential ineinander über, haut's nicht hin.

[Diese Nachricht wurde von rkauskh am 10. Feb. 2009 editiert.]

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

Oliver Albrecht
Mitglied



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

Beiträge: 16
Registriert: 21.03.2009

erstellt am: 21. Jun. 2009 10:55    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 Michael Brix 10 Unities + Antwort hilfreich

Hallo Michael,

ein kleines CAM Tool für Inventor, das interessiert mich auch! 

vielleicht hilft Dir dieser Link etwas weiter (ist zwar AutoCAD aber ich denke die Grundsätze sind gleich):

http://www.lehrer.uni-karlsruhe.de/~za685/cnc/cnctools.htm

Gruß Oliver

[Diese Nachricht wurde von Oliver Albrecht am 21. Jun. 2009 editiert.]

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

Michael Brix
Mitglied



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

Beiträge: 33
Registriert: 01.11.2000

erstellt am: 22. Jun. 2009 09:34    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 Oliver,

für Acad habe ich schon alles, funktioniert tadellos und wir setzen es täglich ein.
Leider ist die Sache in Inventor etwas schwieriger. Mit dem Ausrichten des Werkzeuges
bin ich noch nicht weitergekommen.
Falls du an dem Acad-Tool interessiert bist, versuche ich es mal als Datei anzuhängen.
Hmmm - Datei ist etwas größer als 1 MB und darf nicht angehängt werden.
Bei interesse bitte via E-Mail.

Gruß

Michael

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