Share

OnDrag Event - dragging a WorkPoint

Description

This sample demonstrates the use of the OnDrag event to drag fixed work points when no command is active. This sample only allows drags parallel to the X-Y plane. This sample is dependent on events and VB only supports events within a class module.

Code Samples

To use the sample copy the WorkPointDrag sub into a code module. Create a new class module called clsDragWorkPoint and copy all of the rest of the code into it. Have a part document open that contains at least one fixed work point. Run the sample and drag the fixed work point.
Option Explicit
Public oDragWorkPoint As clsDragWorkPoint

Sub WorkPointDrag()
    
    Set oDragWorkPoint = New clsDragWorkPoint
    oDragWorkPoint.Initialize
    
End Sub

'*************************************************************
' The declarations and functions below need to be copied into
' a class module whose name is "clsDragWorkPoint".  The name 
' can be changed but you'll need to change the declaration in
' the calling function "WorkPointDrag" to use the new name.
Option Explicit
Private WithEvents oUserInputEvents As UserInputEvents
Private oIE As InteractionEvents
Private WithEvents oMouseEvents As MouseEvents
Private oIntGraphics As InteractionGraphics
Private oWP As WorkPoint

Public Sub Initialize()
    Set oUserInputEvents = ThisApplication.CommandManager.UserInputEvents
End Sub

Private Sub oUserInputEvents_OnDrag(ByVal DragState As Inventor.DragStateEnum, ByVal ShiftKeys As Inventor.ShiftStateEnum, ByVal ModelPosition As Inventor.Point, ByVal ViewPosition As Inventor.Point2d, ByVal View As Inventor.View, ByVal AdditionalInfo As Inventor.NameValueMap, HandlingCode As Inventor.HandlingCodeEnum)

    Dim oSS As SelectSet
    Set oSS = ThisApplication.ActiveDocument.SelectSet

    If DragState = kDragStateDragHandlerSelection Then

        If oSS.Count = 1 And oSS.Item(1).Type = kWorkPointObject Then

            Set oWP = oSS.Item(1)

            If oWP.DefinitionType = kFixedWorkPoint Then
                HandlingCode = kEventCanceled
                Set oIE = ThisApplication.CommandManager.CreateInteractionEvents
                Set oMouseEvents = oIE.MouseEvents
                oMouseEvents.MouseMoveEnabled = True

                Set oIntGraphics = oIE.InteractionGraphics
                Call oIE.SetCursor(kCursorBuiltInCommonSketchDrag)
                oIE.Start                
            End If
        End If
    End If
End Sub

Private Sub oMouseEvents_OnMouseMove(ByVal Button As MouseButtonEnum, ByVal ShiftKeys As ShiftStateEnum, ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View)
    Dim oSS As SelectSet
    Set oSS = ThisApplication.ActiveDocument.SelectSet

    If oSS.Count = 1 And oSS.Item(1).Type = kWorkPointObject Then
        
        Dim oWPDef As FixedWorkPointDef
        Set oWPDef = oWP.Definition

        Dim oProjectedPoint As Inventor.Point
        Call ProjectPoint(ModelPosition, oWPDef.Point, oProjectedPoint)
            
        ' Set a reference to the transient geometry object for user later.
        Dim oTransGeom As TransientGeometry
        Set oTransGeom = ThisApplication.TransientGeometry
    
        ' Create a graphics data set object.  This object contains all of the
        ' information used to define the graphics.
        Dim oDataSets As GraphicsDataSets
        Set oDataSets = oIntGraphics.GraphicsDataSets
        
        If oDataSets.Count <> 0 Then
            oDataSets.Item(1).Delete
        End If
        
        ' Create a coordinate set.
        Dim oCoordSet As GraphicsCoordinateSet
        Set oCoordSet = oDataSets.CreateCoordinateSet(1)
        
        ' Create an array that contains coordinates that define a set
        ' of outwardly spiraling points.
        Dim oPointCoords(1 To 3) As Double
        ' Define the X, Y, and Z components of the point.
        oPointCoords(1) = oProjectedPoint.X
        oPointCoords(2) = oProjectedPoint.Y
        oPointCoords(3) = oProjectedPoint.Z
                 
        ' Assign the points into the coordinate set.
        Call oCoordSet.PutCoordinates(oPointCoords)
        
        ' Create the ClientGraphics object.
        Dim oClientGraphics As ClientGraphics
        Set oClientGraphics = oIntGraphics.PreviewClientGraphics
        
        If oClientGraphics.Count <> 0 Then
            oClientGraphics.Item(1).Delete
        End If
        
        ' Create a new graphics node within the client graphics objects.
        Dim oPtNode As GraphicsNode
        Set oPtNode = oClientGraphics.AddNode(1)
       
        ' Create a PointGraphics object within the node.
        Dim oPtGraphics As PointGraphics
        Set oPtGraphics = oPtNode.AddPointGraphics
        
        ' Assign the coordinate set to the line graphics.
        oPtGraphics.CoordinateSet = oCoordSet
        oPtGraphics.PointRenderStyle = kCrossPointStyle
        ThisApplication.ActiveView.Update
    End If
End Sub

Private Sub oMouseEvents_OnMouseUp(ByVal Button As MouseButtonEnum, ByVal ShiftKeys As ShiftStateEnum, ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View)
    
    Dim oSS As SelectSet
    Set oSS = ThisApplication.ActiveDocument.SelectSet

    If oSS.Count = 1 And oSS.Item(1).Type = kWorkPointObject Then
            
            Dim oWPDef As FixedWorkPointDef
            Set oWPDef = oWP.Definition

            Dim oProjectedPoint As Inventor.Point
            Call ProjectPoint(ModelPosition, oWPDef.Point, oProjectedPoint)

            ' Reposition the fixed work point
            oWPDef.Point = oProjectedPoint
            ThisApplication.ActiveDocument.Update
            oIE.Stop
            
            Set oWP = Nothing
            
    End If
End Sub

' Project the ModelPosition to a plane parallel to the
' X-Y plane on which the work point currently is.
Private Sub ProjectPoint(ByVal ModelPosition As Inventor.Point, ByVal WorkPointPosition As Inventor.Point, ProjectedPoint As Inventor.Point)
    
    ' Set a reference to the camera object
    Dim oCamera As Inventor.Camera
    Set oCamera = ThisApplication.ActiveView.Camera
    
    Dim oVec As Vector
    Set oVec = oCamera.Eye.VectorTo(oCamera.Target)
    
    Dim oLine As Line
    Set oLine = ThisApplication.TransientGeometry.CreateLine(ModelPosition, oVec)
    
    ' Create the z-axis vector
    Dim oZAxis As Vector
    Set oZAxis = ThisApplication.TransientGeometry.CreateVector(0, 0, 1)
    
    ' Create a plane parallel to the X-Y plane
    Dim oWPPlane As Plane
    Set oWPPlane = ThisApplication.TransientGeometry.CreatePlane(WorkPointPosition, oZAxis)
    
    Set ProjectedPoint = oWPPlane.IntersectWithLine(oLine)
End Sub


Was this information helpful?