Тема: Как создать коллекции SelectionSet без перебора в AcadEntity

Создаю объекты AutoCAD

Dim BlockObj As AcadBlock
Dim  PlineObj As AcadLWPolyline
Dim LineObj As AcadLine

Создаю коллекцию

Dim SelectObj = AcadDoc.SelectionSets.Add("SelectObj")

Как сделать так, чтобы созданные объекты добавить прямо в коллекцию, без перебора в AcadEntity
Например, что-то типа такого:

SelectObj.AddItems(BlockObj)
SelectObj.AddItems(PlineObj)
SelectObj.AddItems(LineObj)

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

В selectionSet можно жобавить объекты entity существующие в четртеже. Это раз.
А два, в метод addItems нужно передать массив variant.
И три, vba умер в акаде.
4 может лучше использовать collection

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Ситуация такая: данные объекты создаются в чертеже, собираются в коллекцию, а затем группируются. Таких сгруппированных коллекций будет много, и все они содержат те же самые объекты (блоки, полилинии, линии, окружности и т.д.). Просто когда они создаются, я их отслеживаю и хочу добавить, но не знаю как, а использование в выборе рамок и т.п. невозможно т.к. группы будут наложены одна на другую.
VS2010 говорит в подсказке, что метод AddItems требует pSelSet as Object.
Как Вы поняли работаю в VS2010 через com интерфейс, он навряд ли умрет.
В collection тоже непонятно, как найти нужные объекты если они все там одинаковые.

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Т.е. ты пишешь на VB.NET.
Советую перенести вопрос в раздел NET.

И какая ошибка появляется?
Может, код полностью покажешь.

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Да этот код пишу на VB.NET через Autodesk.AutoCAD.Interop.Common.
Это не чистый NET (acdbmgd.dll, acmgd.dll), он все-таки ближе к VBA.
Да полного кода еще нет. Есть мысль (с примерным кодом в верхнем сообщении): если есть объект, к которому я имею доступ, почему не могу добавить его в коллекцию напрямую.

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Вот и покажи код который пробуешь. Тогда я тоже попробую.
Никогда не писал в NET через interop. Слету подсказать не могу.
Интелисенс в VS покажет х-ню под com, нужно смотреть справку по ActiveX в акаде. И знать соответствие типов данных VBA и NET.

(изменено: valaut, 25 января 2011г. 05:45:16)

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

    Private Sub CreateObj()
        Dim StartPnt(2) As Double, StopPnt(2) As Double
        Dim PntPline(3) As Double, PlineObj As AcadLWPolyline
        Dim LineObj As AcadLine
        Dim CircleObj As AcadCircle
        Dim BlockObj As AcadBlock
        Dim SelectObj As AcadSelectionSet
        Dim SelectPline As Object
        Dim SelectLine As Object
        Dim SelectCircle As Object
        Dim SelectBlock As Object
        Dim GroupObj As AcadGroup

        StartPnt = AcadDoc.Utility.GetPoint(, "Укажите положение первой точки: ")
        StopPnt = AcadDoc.Utility.GetPoint(StartPnt, "Укажите положение второй точки: ")

        PntPline(0) = StartPnt.GetValue(0)
        PntPline(1) = StartPnt.GetValue(1)
        PntPline(2) = StopPnt.GetValue(0)
        PntPline(3) = StopPnt.GetValue(1)
        PlineObj = AcadDoc.ModelSpace.AddLightWeightPolyline(PntPline)

        LineObj = AcadDoc.ModelSpace.AddLine(StartPnt, StopPnt)

        CircleObj = AcadDoc.ModelSpace.AddCircle(StartPnt, 10)

        BlockObj = AcadDoc.ModelSpace.InsertBlock(StopPnt, "BlockObjName", 1, 1, 1, 0)

        SelectObj = AcadDoc.SelectionSets.Add("SelectObjName")

        SelectPline = PlineObj
        SelectObj.AddItems(SelectPline)

        SelectLine = LineObj
        SelectObj.AddItems(SelectLine)

        SelectCircle = CircleObj
        SelectObj.AddItems(SelectCircle)

        SelectBlock = BlockObj
        SelectObj.AddItems(SelectBlock)

        Dim appendObjs(0 To SelectObj.Count - 1) As AcadEntity
        For x = 0 To SelectObj.Count - 1
            appendObjs(x) = SelectObj.Item(x)
        Next

        GroupObj = AcadDoc.Groups.Add("GroupObjName")
        GroupObj.AppendItems(appendObjs)
    End Sub

(изменено: Вильдар, 25 января 2011г. 09:26:39)

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Попробуй так.

Dim objs(3) As AcadObject

        objs(0) = PlineObj
        objs(1) = LineObj
        objs(2) = CircleObj
        objs(3) = BlockObj

        SelectObj.AddItems(objs)

А почему бы тебе на NET.ARX не перейти. Зачем так извращаться?

(изменено: valaut, 25 января 2011г. 11:47:48)

Re: Как создать коллекции SelectionSet без перебора в AcadEntity

Спасибо Вильдар.
Иногда полезно ткнуть носом, чтобы увидеть банальные вещи.
Все, заработался, пора идти за пивом и один, другой денек провести без компьютера – отдохнуть от программирования.

Да в принципе какая разница, на чем писать. Я пишу одновременно и на Net. и на interop., но по interop. просто больше информации, чем по Net. Поэтому если проще на Net. делаю на Net, если проще на interop. делаю на interop.