Разорвать СПДС-объекты программно

Автор Тема: Разорвать СПДС-объекты программно  (Прочитано 27720 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Здравствуйте! У меня чертеж с СПДС графикой, версия Civil3D 2016 с СПДС-object enabler'ом, но работать мне нужно в 2019 версии, в которой enabler я не установил, потому что с ним программа становится крайне не стабильной. Чтобы иметь возможность работать с чертежом в 2019 версии, я хочу разорвать все СПДС объекты в 2016 версии. Для этого я хочу выбирать все объекты СПДС и разрывать их по типу explode. Я могу методом простого перебора находить СПДС объекты, но не знаю, как их разрывать. Т.е. я перебираю все объекты в чертеже, могу выделить каждый отдельный объект СПДС, но как разорвать его я не знаю. Подскажите, как можно решить эту задачу? Следующая на подходе задача: проверять все определения блоков в чертеже на наличие СПДС графики, взрывать объекты СПДС и изменять определения блоков.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #1 : 02-11-2019, 14:18:16 »
Icu,
Проверь есть ли у них метод explode - если есть попробуй воспользоваться им. Если нет, то попробуй через команду Explode.
Кстати, речь идёт об Autodesk SPDS Extenstion или СПДС GraphiCS?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #2 : 02-11-2019, 14:38:24 »
Проверь есть ли у них метод explode - если есть попробуй воспользоваться им. Если нет, то попробуй через команду Explode.
Кстати, речь идёт об Autodesk SPDS Extenstion или СПДС GraphiCS?

Я не могу точно сказать, что за enabler у меня установлен. Я перебираю объекты типа Object, метода explode у него нет. А как провернуть эту операцию через команду explode?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #3 : 02-11-2019, 14:40:50 »
Я перебираю объекты типа Object, метода explode у него нет.
Что для этих объектов возвращает метод ObjectName?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #4 : 02-11-2019, 14:46:15 »
А как провернуть эту операцию через команду explode?
Как-то так. Для каждого из объектов получаем его метку (свойство Handle) и передаём в эту функцию:
Код - Visual Basic [Выбрать]
  1. Private Sub ExplodeObj(entHandle As String)
  2.     Dim qM As String
  3.     qM = """"
  4.     ThisDrawing.SendCommand "(command " & qM & "_EXPLODE" & qM & " " & "(handent " & qM & entHandle & qM & ")) "
  5.     DoEvents
  6. End Sub
Код не тестировал - перепроверь его.

P.S.: Код исправил по замечанию Icu
« Последнее редактирование: 02-11-2019, 15:17:22 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #5 : 02-11-2019, 14:57:13 »
Что для этих объектов возвращает метод ObjectName?
Возвращает имена с префиксом mcsDbObject.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #6 : 02-11-2019, 14:59:49 »
Возвращает имена с префиксом mcsDbObject.
Ага. Это объекты СПДС GraphiCS. Уточни у производителя нет ли готовой команды, которая бы расчленяла все их объекты.
Кажется вот эта команда: spexplodeall
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #7 : 02-11-2019, 15:08:30 »
Возвращает имена с префиксом mcsDbObject.
Ага. Это объекты СПДС GraphiCS. Уточни у производителя нет ли готовой команды, которая бы расчленяла все их объекты.
Кажется вот эта команда: spexplodeall
Суть в том, что обычный _explode прекрасно справляется с этими объектами при выполнении операции руками.

Отмечено как Решение Icu 02-11-2019, 15:16:00

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #8 : 02-11-2019, 15:14:45 »
А как провернуть эту операцию через команду explode?
Как-то так. Для каждого из объектов получаем его метку (свойство Handle) и передаём в эту функцию:
Код - Visual Basic [Выбрать]
  1. Private Sub ExplodeObj(entHandle As String)
  2.     Dim qM As String
  3.     qM = """"
  4.     ThisDrawing.SendCommand "(command " & qM & "_EXPLODE" & qM & " " & "(handent " & qM & entHandle & qM & "))
  5.    DoEvents
  6. End Sub
Код не тестировал - перепроверь его.
Проверил ваш код. Внёс единственную правку - добавил пробел после финальной скобки перед кавычкой. Работает. Спасибо! Финальный вариант:
Код - Visual Basic [Выбрать]
  1. Private Sub ExplodeObj(entHandle As String)
  2.     Dim qM As String
  3.     qM = """"
  4.     ThisDrawing.SendCommand "(command " & qM & "_EXPLODE" & qM & " " & "(handent " & qM & entHandle & qM & ")) "
  5.     DoEvents
  6. End Sub
« Последнее редактирование: 02-11-2019, 15:16:00 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #9 : 02-11-2019, 15:18:07 »
Icu,
Открытый вопрос остаётся с объектами СПДС внутри блоков.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #10 : 02-11-2019, 15:19:54 »
Icu,
Открытый вопрос остаётся с объектами СПДС внутри блоков.
Да, с этим буду эксперементировать. Можете дать какую-нибудь наводку? С определениями блоков пока ни разу не сталкивался.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #11 : 02-11-2019, 18:07:11 »
Icu,
Открытый вопрос остаётся с объектами СПДС внутри блоков.
Да, с этим буду эксперементировать. Можете дать какую-нибудь наводку? С определениями блоков пока ни разу не сталкивался.
Тут боюсь, что командой не обойтись. Нужно анализировать состав всех блоков и если есть объекты СПДС, то входить в редактор блоков расчленять объекты, и закрывать блок с сохранением изменений.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Разорвать СПДС-объекты программно
« Ответ #12 : 03-11-2019, 18:35:38 »
Тут боюсь, что командой не обойтись. Нужно анализировать состав всех блоков и если есть объекты СПДС, то входить в редактор блоков расчленять объекты, и закрывать блок с сохранением изменений.
В общем, ситуация такая: могу программно войти в редактор блока, а выйти - уже никак. _blclose работает, только выдавая диалог подтверждения сохранения. Но это не все и не самое главное: способ "подрыва" объектов, использованный ранее, не срабатывает внутри редактора блока. Получаю цепочку сообщений в командной строке:
Цитировать
Команда: (command "_EXPLODE" (handent "87426")) _EXPLODE
Выберите объект: <Неверное имя объекта: E0F94E60>
nil
Выберите объект: *Прервано*
Команда:
Команда: (command "_EXPLODE" (handent "87427")) _EXPLODE
Выберите объект:
Не могу понять, в чем дело.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #13 : 03-11-2019, 18:42:44 »
Не могу понять, в чем дело.
А как ты получаешь примитивы внутри блока?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Разорвать СПДС-объекты программно
« Ответ #14 : 03-11-2019, 18:50:06 »
_blclose работает, только выдавая диалог подтверждения сохранения.
Можешь её запускать через lisp:
Код - Auto/Visual Lisp [Выбрать]
  1. (command "_bclose" "_save")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение