Назначить примитиву свой номер

Автор Тема: Назначить примитиву свой номер  (Прочитано 6463 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Есть ли метод с помощью, которого можно
назначить Handle примитиву?

Или все же это противоречит
правилам назначения уникальных номеров.

Например был примитив с уникальным
номером 184AD, потом его удалили.
И если в чертеже с таким номером не окажется
другого примитива, то возможно ли назначить этот номер примитиву.




Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Назначить примитиву свой номер
« Ответ #1 : 05-06-2017, 07:56:47 »
Или же попытаться решить задачу по другому.
Пользователь удалил примитив, но команду PURGE
не успел выполнить. Значит в таблице примитив еще жив.
 
Может еще не поздно восстановить примитив из таблицы?
 

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Назначить примитиву свой номер
« Ответ #2 : 05-06-2017, 08:21:42 »
Есть ли метод с помощью, которого можно
назначить Handle примитиву?
Нет.
Может еще не поздно восстановить примитив из таблицы?
Да. Вызвать его метод Erase(false).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Назначить примитиву свой номер
« Ответ #3 : 05-06-2017, 10:14:20 »
Да. Вызвать его метод Erase(false).

А как мне получить ссылку на объект чтобы вызвать метод Erase?
При попытке обратиться к бвзе пишет ошибку
eUnknownHandle

Handle примитива, который был удален я знаю.

Делаю так:

Код - vb.net [Выбрать]
  1.     Public Shared Sub acadnet_primitive_reanimate(ByVal Hndl As String)
  2.         If Hndl = "" Then Exit Sub
  3.         Dim doc As CAD_APS.Document = acadnet_document_Get()
  4.         If (doc Is Nothing) Then Exit Sub
  5.         Dim db = doc.Database
  6.         Using doc.LockDocument
  7.             Using trans As CAD_DBS.Transaction = db.TransactionManager.StartTransaction
  8.                 Dim ln As Long = Convert.ToInt64(Hndl, 16)
  9.                 Dim Hn = New CAD_DBS.Handle(ln)
  10.                 Dim ID = db.GetObjectId(False, Hn, 0)
  11.                 Dim dbObj = trans.GetObject(ID, CAD_DBS.OpenMode.ForWrite, True, True)
  12.                 If (dbObj.IsErased) Then
  13.                     dbObj.Erase(False)
  14.                     Dim ent = DirectCast(dbObj, CAD_DBS.Entity)
  15.                     ent.Visible = True
  16.                 End If
  17.                 trans.Commit()
  18.             End Using
  19.         End Using
  20.     End Sub

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Назначить примитиву свой номер
« Ответ #4 : 05-06-2017, 10:20:33 »
подправил тут

Код - vb.net [Выбрать]
  1. Dim ID = db.GetObjectId(True, Hn, 0)

ошибка: ePermanentlyErased

Значит ли это, примитив окончательно был удален?

Отмечено как Решение Алексей (IdeaSoft) 05-06-2017, 10:35:20

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Назначить примитиву свой номер
« Ответ #5 : 05-06-2017, 10:22:15 »
А как мне получить ссылку на объект чтобы вызвать метод Erase?
При попытке обратиться к бвзе пишет ошибку
eUnknownHandle
Значит этого примитива уже нет в базе. Такую операцию можно проводить только в течении одного сеанса работы с dwg-файлом. Если файл был сохранен, а затем открыт, то там этого примитива уже нет - при сохранении он не писался в dwg-файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Назначить примитиву свой номер
« Ответ #6 : 05-06-2017, 10:23:57 »
Если файл был сохранен, а затем открыт
Да именно так и было файл уже был сохранен и потом открыт.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Назначить примитиву свой номер
« Ответ #7 : 05-06-2017, 10:26:58 »
Значит ли это, примитив окончательно был удален?
Да. И тут ты уже ничего не сделаешь.
Разве что будешь работать с dxf-файлом. Там можно назначать почти любые шестнадцатиричные метки объектов. Только будь осторожен - метки не должны повторяться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Назначить примитиву свой номер
« Ответ #8 : 05-06-2017, 10:37:59 »
Спасибо.
Теперь мне тут все понятно.

У меня есть запасный выход из ситуации.
Так как я праллельно хранил координаты примитива (в моем случае полилинии)
и другую нужную информацию в Xrecord, то буду
воссстанавливать данные из XRecord.