.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Create Selection set and get insert point of multiple blocks

2 REPLIES 2
Reply
Message 1 of 3
AaronLucy
533 Views, 2 Replies

Create Selection set and get insert point of multiple blocks

I am very new to VB.NET and I am need some help.

 

What I am trying to do is create a selection set of blocks with the same name. Then step throught the selection set and if the block has an attribute "Tag" with a Specific "Value" then get the insert point.

 

Is there a good tutorial or example that someone could point me to?


Thanks

2 REPLIES 2
Message 2 of 3
hgasty1001
in reply to: AaronLucy

Hi,

 

this is a very crude example of a function to get a list of insertion points from a selection set (crossing):

Public Function getBlockInsPoints(ByVal tag As String) As List(Of Point3d)
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        Dim db As Database = doc.Database

        Dim ipoints As New List(Of Point3d)

        Dim p1, p2 As Point3d

        Using acTrans As Transaction = db.TransactionManager.StartTransaction()
            Dim acTypValAr(1) As TypedValue
            Dim blkref As BlockReference

            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "INSERT"), 0)
            acTypValAr.SetValue(New TypedValue(DxfCode.AttributeTag, tag), 1)

            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            Dim acSSPrompt As PromptPointResult = doc.Editor.GetPoint("Select First Point:")

            If acSSPrompt.Status = PromptStatus.OK Then
                p1 = acSSPrompt.Value
                acSSPrompt = doc.Editor.GetCorner("Select Second Point: ", p1)
                If acSSPrompt.Status = PromptStatus.OK Then
                    p2 = acSSPrompt.Value
                    Dim wssprompt As PromptSelectionResult

                    wssprompt = ed.SelectCrossingWindow(p1, p2, acSelFtr)
                    If wssprompt.Status = PromptStatus.OK Then
                        Dim wss As SelectionSet = wssprompt.Value
                        For Each acSSObj As SelectedObject In wss
                            If Not IsDBNull(acSSObj) Then
                                blkref = acSSObj.ObjectId.GetObject(OpenMode.ForRead)
                                ipoints.Add(blkref.Position)
                            End If
                        Next
                    End If
                End If
            End If
            acTrans.Commit()
        End Using
        Return ipoints
    End Function

Put the function in a command, ask for the tag name and pass it to the function, or hardcode the tag name in the function call.

 

Gaston Nunez

Message 3 of 3
AaronLucy
in reply to: hgasty1001

Thanks for the help. I will look over the code and see if I can get it to work for me.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost