Общие вопросы по иерархии

Автор Тема: Общие вопросы по иерархии  (Прочитано 600 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LucaАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 80
  • Карма: -1
Re: Общие вопросы по иерархии
« Ответ #15 : 14-11-2019, 04:29:47 »
А ты попробуй. Воообще-то AutoCAD - не консольное приложение.
просто консоль не запустилась. хотя не понятно почему я не могу в stdout что-то отправить... фиг с ней, с консолью. убрал все эти проверки.
Запусти уже наконец свой код в AutoCAD под отладчиком и посмотри что получится.
это как? ))) "О, сколько нам открытий чудных..." где об этом можно узнать?
Ты добавил объекты в коллекции для какой-то цели...
хотите сказать, что за границами операторных скобок ссылки на объекты, которые я получил "битые"? А ObjectId, я так понял, константные и их можно хоть в текстовом файле хранить и при следующем случае получать снова тот же объект по id?



И к тому же нет смысла открывать все подряд entity. Лучше заранее проверить тип ObjectId.ObjectClass.
для меня это пустые слова - я искренне не понимаю о чем речь - как на китайском!
А различать ссылки на блок можно не только по имени но и по BlockTableRecord. Предвижу, что далее тебе понадобятся свойства самого блока, а не ссылки - открывай BTR.
снова китайская грамота... (
для меня btr - это блок, в первую очередь... а получается, что блок-блок и полилиния - блок... я полагал, что есть таблица блоков, в которой хранятся все блоки и есть бтр - интстанс конкретного блока, а получается, что вообще всё есть btr что ли?


Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 303
  • Карма: 37
Re: Общие вопросы по иерархии
« Ответ #16 : 14-11-2019, 10:53:45 »
Цитировать
это как?
https://docs.microsoft.com/ru-ru/visualstudio/debugger/attach-to-running-processes-with-the-visual-studio-debugger?view=vs-2019

Цитировать
А ObjectId, я так понял, константные и их можно хоть в текстовом файле хранить и при следующем случае получать снова тот же объект по id?
нет

Цитировать
хотите сказать, что за границами операторных скобок ссылки на объекты, которые я получил "битые"?
да

Цитировать
я искренне не понимаю о чем речь
учи dxf

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 494
  • Карма: 112
    • ПГСу Бложик
Re: Общие вопросы по иерархии
« Ответ #17 : 14-11-2019, 11:09:47 »
для меня это пустые слова - я искренне не понимаю о чем речь - как на китайском!
Код - C# [Выбрать]
  1. if (id.ObjectClass.IsDerivedFrom(Rtm.RXObject.GetClass(typeof(Db.BlockReference))))
  2. {
  3. }

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 303
  • Карма: 37
Re: Общие вопросы по иерархии
« Ответ #18 : 14-11-2019, 11:12:10 »
Код - vb.net [Выбрать]
  1.     Public Shared Function CrTbl(acDoc As MyAcAs.Document) As MyTable
  2.         'Создаём таблицу
  3.         Dim ed As Editor = acDoc.Editor
  4.         Dim objIdArray() As ObjectId = MyTable.GetSelect(ed) 'Получаем от пользователя набор данных для парсинга
  5.         If objIdArray IsNot Nothing Then
  6.             Dim dbObj As DBObject
  7.             Dim wList As New List(Of Line)
  8.             Dim wTList As New List(Of DBText)
  9.             Dim wMTList As New List(Of MText)
  10.             Using tr As Transaction = acDoc.Database.TransactionManager.StartTransaction
  11.                 Try
  12.                     For Each objId As ObjectId In objIdArray
  13.                         dbObj = tr.GetObject(objId, OpenMode.ForRead)
  14.                         'Сортируем полученные объекты
  15.                         Select Case True
  16.                             Case TypeOf dbObj Is Line
  17.                                 wList.Add(dbObj)
  18.                             Case TypeOf dbObj Is Polyline
  19.                                 wList.AddRange(MyTable.PolyToLine(dbObj))
  20.                             Case TypeOf dbObj Is DBText
  21.                                 wTList.Add(dbObj)
  22.                             Case TypeOf dbObj Is MText
  23.                                 wMTList.Add(dbObj)
  24.                         End Select
  25.                     Next
  26.                     tr.Commit()
  27.                 Catch ex As Exception
  28.                     ed.WriteMessage(ex.ToString())
  29.                     tr.Abort()
  30.                 End Try
  31.             End Using
  32.             '
  33.             Dim wMTbl As MyTable = MyTable.CrTbl(wList)
  34.             'Заполняем текстом
  35.             For Each wt In wTList
  36.                 wMTbl.SetValue(wt)
  37.             Next
  38.             For Each wmt In wMTList
  39.                 wMTbl.SetValue(wmt)
  40.             Next
  41.             Return wMTbl
  42.         Else
  43.             Return Nothing
  44.         End If
  45.     End Function
https://github.com/triroakenshield/tblPrs/blob/master/TableParser/MyTable.vb

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 505
  • Карма: 95
    • Мои плагины к Автокаду
Re: Общие вопросы по иерархии
« Ответ #19 : 14-11-2019, 11:18:32 »
хотите сказать, что за границами операторных скобок ссылки на объекты, которые я получил "битые"?
Хоспидя... Объекты открытые в транзакции принадлежат ей и диспозятся ей. Как только вы вызываете Commit, Abort или Dispose транзакции (а вы его вызываете не явно, а через using) - объекты уничтожаются. Так что создавайте ваши массивы ВНУТРИ блока using(Transaction...
А ObjectId, я так понял, константные и их можно хоть в текстовом файле хранить
Нельзя. У них есть OldIdPtr который уникален во всей БД чертежа, но он меняется при перезагрузках. И есть Handle, который хранится в чертеже, не меняется. Но с ним другая проблема - он не уникален, т.к. объекты во внешних ссылках запросто могут иметь такие же Handle. Если надо сохранять ссылки на объекты чертежа, для этого есть особые типы записей в xData. Но вообще другая тема. Короче, используйте ObjectId так как во всех примерах.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 505
  • Карма: 95
    • Мои плагины к Автокаду
Re: Общие вопросы по иерархии
« Ответ #20 : 14-11-2019, 11:33:00 »
для меня btr - это блок, в первую очередь... а получается, что блок-блок и полилиния - блок... я полагал, что есть таблица блоков, в которой хранятся все блоки и есть бтр - интстанс конкретного блока, а получается, что вообще всё есть btr что ли?
Я писал про ссылки на блок (BlockReference). Да btr - это и есть блок. В btr модели и листов хранятся все видимые Entity чертежа. В чертеж (т.е. в BTR "ModelSpace") вставляется ссылка (BlockReference) на блок (BTR). Таким образом получает сколько угодно уровней вложенности блоков в блоки. И один блок (BTR) может быть сколько угодно раз вставлен в чертеж и в другие блоки за счет использования BlockReference.
А таблица блоков просто хранит список ObjectId всех BTR, чтоб их можно было как-то найти, перебрать, выбрать нужный по имени. В том числе в ней всегда можно найти идентификатор модели.
Инстанс - это терминология ООП, а не базы данных чертежа DWG.
Полилиния тут не при чем. Это обычный Entity, не блок. Она, как и все остальные Entity может сохраняться только в каком нибудь BTR. Например, в модели.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 505
  • Карма: 95
    • Мои плагины к Автокаду
Re: Общие вопросы по иерархии
« Ответ #21 : 14-11-2019, 11:49:15 »
Код - C# [Выбрать]
  1. if (id.ObjectClass.IsDerivedFrom(Rtm.RXObject.GetClass(typeof(Db.BlockReference))))
  2. {
  3. }
Вот так, через IsDerivedFrom,  можно получить все блоки, плюс массивы, плюс таблицы и все что унаследовано от блоков. Иногда это полезно. Но в данном случае скорее всего нужны именно блоки, заменяем на == или сравниваем типы по имени id.ObjectClass.Name  == "AcDbBlockReference"

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 494
  • Карма: 112
    • ПГСу Бложик
Re: Общие вопросы по иерархии
« Ответ #22 : 14-11-2019, 11:52:54 »
Вот так, через IsDerivedFrom,  можно получить все блоки, плюс массивы, плюс таблицы и все что унаследовано от блоков. Иногда это полезно.
Тут немного другое, тут проверяется что объект с заданным id наследован от класса BlockReference. (Дословно Is Derived From == Производный от)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 505
  • Карма: 95
    • Мои плагины к Автокаду
Re: Общие вопросы по иерархии
« Ответ #23 : 14-11-2019, 11:54:22 »
Да, да. Я именно про это и пытался написать максимально простыми словами :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 10386
  • Карма: 1314
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Общие вопросы по иерархии
« Ответ #24 : 14-11-2019, 11:57:06 »
Вот так, через IsDerivedFrom,  можно получить все блоки, плюс массивы, плюс таблицы и все что унаследовано от блоков. Иногда это полезно.
Тут немного другое, тут проверяется что объект с заданным id наследован от класса BlockReference. (Дословно Is Derived From == Производный от)
Table унаслендован от BlockReference - соответственно таблицы тоже могут пройти этот фильтр, а это в данном случае лишнее.
Об этом avc как раз и писал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 494
  • Карма: 112
    • ПГСу Бложик
Re: Общие вопросы по иерархии
« Ответ #25 : 14-11-2019, 12:02:22 »
ага, по разному поняли друг друга. Подумалось, что получить все, это из чертежа получить... =)