Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.
Jef_E
967 Views, 1 Reply

API - Get drawingcurve circle radius

Hi,

 

I'm trying to create a small tool that adds orienations on a drawing file. In order to do so, the user must select a circle and then the program will add 0°, 90° 180° 270° text items on them.

 

 

The problem:

After I obtained the DrawingCurve I get the center point of the cirlce, but I also need the radius.

I don't know how I can get this information?

 

 

My code:

Spoiler
    Private Sub Orientation_Click(sender As Object, e As EventArgs) Handles Orientation.Click
        ' Reference the active document
        Dim oDoc As Inventor.Document
        oDoc = oInvApp.ActiveDocument

        ' Check document type
        ' Only drawing files are to be saved with this code.
        If Not oDoc.DocumentType = DocumentTypeEnum.kDrawingDocumentObject Then
            MsgBox("Bad document type selected")
            Exit Sub
        End If

        ' Check select set for item, if none is selected let user select.
        Dim oSelectSet As Inventor.SelectSet
        oSelectSet = oInvApp.ActiveDocument.SelectSet

        Dim oSelected_item As DrawingCurveSegment
        oSelected_item = Nothing

        If oSelectSet.Count <> 1 Then
            oSelected_item = Pick(SelectionFilterEnum.kDrawingCurveSegmentFilter)
        ElseIf oSelectSet.Count = 1 Then
            oSelected_item = oSelectSet.Item(1)
        End If

        If oSelected_item Is Nothing Then
            MsgBox("Error, please try again.")
            Exit Sub
        End If

        Dim oDrawingCurve As DrawingCurve
        oDrawingCurve = oSelected_item.Parent

        Debug.Print("Selected curve type = " & oDrawingCurve.CurveType) ' Must be for circle 5124
        Debug.Print("Midpoint location = " & oDrawingCurve.CenterPoint.X & " - " & oDrawingCurve.CenterPoint.Y)



    End Sub

    Private WithEvents oInteraction As Inventor.InteractionEvents
    Private WithEvents oSelect As Inventor.SelectEvents
    Private oStillSelecting As Boolean

    Public Function Pick(filter As SelectionFilterEnum) As Object

        ' Initialize flag
        oStillSelecting = True

        ' Create a new interactionevent object
        oInteraction = oInvApp.CommandManager.CreateInteractionEvents

        ' Set the prompt
        oInteraction.StatusBarText = "Select an circle."

        ' Ensure the interaction is enabled
        oInteraction.InteractionDisabled = False

        ' Connect to the associated select events
        oSelect = oInteraction.SelectEvents

        ' Define that all circles should be selectable
        oSelect.AddSelectionFilter(filter)

        ' Enable single selection
        oSelect.SingleSelectEnabled = True

        ' Start the selection process
        oInteraction.Start()

        ' Loop untill a selection is made
        Do While oStillSelecting
            oInvApp.UserInterfaceManager.DoEvents()
        Loop

        ' Get the selected item
        Dim oSelectedEntity As ObjectsEnumerator
        oSelectedEntity = oSelect.SelectedEntities

        If oSelectedEntity.Count > 0 Then
            Pick = oSelectedEntity.Item(1)
        Else
            Pick = Nothing
        End If

        ' Stop the selection process
        oInteraction.Stop()

        ' Clean up.
        oSelect = Nothing
        oInteraction = Nothing

    End Function

    Private Sub Event_Terminates() Handles oInteraction.OnTerminate

        ' Set the flag to indicate we're done.
        oStillSelecting = False

    End Sub

    Private Sub Event_OnSelect(ByVal JustSelectedEntities As ObjectsEnumerator, ByVal SelectionDevice As SelectionDeviceEnum, ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View) Handles oSelect.OnSelect

        ' Set the flag to indicate we're done.
        oStillSelecting = False

    End Sub

 

 

I need the radius to I can determinate the position of my orientation text point

 

0° = (center point Y  + radius); center point X



Please kudo if this post was helpfull
Please accept as solution if your problem was solved

Inventor 2014 SP2
ekinsb
in reply to: Jef_E

From a drawing curve you can get its segments using the Segments property.  In this case it's likely there's just one segment but in any case you can just get the first segment.  The DrawingCurveSegment object has a Geometry property that in the case where the drawing curve does represent a circle will return a Circle2d object.  The Circle2d object supports Center and Radius properties.

 

Here's a blog post that illustrates a technique that's very useful in figuring out these kinds of things.  I just used this technique not to verify this so I could be sure about my response. http://modthemachine.typepad.com/my_weblog/2008/10/program-prototyping.html


Brian Ekins
Inventor and Fusion 360 API Expert
Mod the Machine blog