PickfirstSelectionSet Workaround

Discussion in 'AutoCAD' started by Clayola, May 3, 2006.

  1. Clayola

    Clayola Guest

    I found many posts about PickfirstSelectionSet not working properly, so
    when I found a solution for myself I thought I should share it.

    I use a lisp to launch my macro. The lisp I use to launch my macro
    calls another lisp before activating my desired VBA Sub. The lisp
    called senses if anything is currently selected. If anything is
    selected, it calls a macro to set a global variable ("UseActive")
    to true, and if nothing is selected it sets that variable to false.
    Then it launches my Sub. When my sub runs it checks UseActive. If
    UseActive is false the sub has the user select items; if UseActive is
    true the sub uses ThisDrawing.ActiveSelectionSet (which contains the
    items that were selected when the user started the command).



    Lisp Routines:

    (defun C:CurrentlySelected()
    (if (ssget "I") (vl-vbarun "CurrentSelection") (vl-vbarun
    "NotCurrentSelection"))
    )

    (defun C:Mir2x ()
    (C:CurrentlySelected)
    (vl-vbarun "mir2")
    )



    VBA Code:

    Dim UseActive As Boolean


    Public Sub NotCurrentSelection()
    UseActive = False
    End Sub

    Public Sub CurrentSelection()
    UseActive = True
    End Sub

    Public Sub SelectionSetRemove(SetName As String)
    Dim a As AcadSelectionSet

    For Each a In ThisDrawing.SelectionSets
    If StrComp(a.Name, SetName, 1) = 0 Then
    a.Delete
    Exit For
    End If
    Next a
    End Sub

    Public Sub mir2()

    Dim AttHolder()
    Dim Curr_Obj As AcadObject
    Dim Mird_Obj As AcadObject
    Dim AttLocs()
    Dim AttTemp(0 To 1)
    Dim Mird_AttLocs()
    Dim MiringTargets As AcadSelectionSet

    On Error Resume Next

    If UseActive = True Then
    Set MiringTargets = ThisDrawing.ActiveSelectionSet
    Else
    Err.Clear
    Set MiringTargets =
    ThisDrawing.SelectionSets.Add("ReservedUserSetForStarting")
    If Err.Number <> 0 Then
    Err.Clear
    SelectionSetRemove ("ReservedUserSetForStarting")
    Set MiringTargets =
    ThisDrawing.SelectionSets.Add("ReservedUserSetForStarting")
    End If
    MiringTargets.SelectOnScreen
    End If

    ...

    ...

    And then on to the rest of my program.
     
    Clayola, May 3, 2006
    #1
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.