Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Адаптация Civil 3D => Тема начата: Doublefish от 23-05-2016, 11:08:19

Название: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Doublefish от 23-05-2016, 11:08:19
Есть файл на котором происходит фатальная ошибка при попытке сформировать комплект в 2012 на некоторых компьютерах.
На других файлах не фаталит на этих компьютерах, а именно на этом фаталит, при чем вне зависимости от установленного SP.
В других версиях С3D сформировать комплект работает нормально.
Полное удаление 2012, включая удаление из реестра и всех  папок 2012, установка - не помогают.

Подскажите пожалуйста что в этом файле не так и чем посмотреть какие объекты в нём (помнится была какая то программка)?
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Александр Ривилис от 23-05-2016, 17:21:51
1. У меня фатальная ошибка не воспроизводится. Впрочем я проверял в чистом AutoCAD 2012, т.к. AutoCAD C3D 2012 у меня нет.
2. AutoCAD C3D 2012 уже давно не поддерживается, так что техподдержка с ним не поможет.
Файл вроде бы совершенно нормальный. Разве что возможно хвосты от C3D как-то мешают, но в виде прокси-объектов они ведут себя нормально. Так что увы....
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Doublefish от 24-05-2016, 08:24:52
Большая жаль.

А можно ли как нибудь сравнить два файла dwg программно если в нём нет графических объектов?
В данном случае все графические объекты удалены, но есть FATAL ERROR. Как сравнить этот файл с пустым чертежём на основе acadiso.dwt без графических объектов чтобы понять чем он отличается?
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Александр Ривилис от 24-05-2016, 08:37:48
как сравнить этот файл с пустым чертежём на основе acadiso.dwt без графических объектов чтобы понять чем он отличается?
Можешь воспользоваться ARXDBG (для версии 2012: http://www.maestrogroup.com.ua/support/ArxDbg2010.zip для остальных там же: http://www.maestrogroup.com.ua/support/)
Загружаешь arx-файл и в контекстном меню выбираешь ArxDbg->Database Info... (или команда SNOOPDB):

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F60682%2F7842324.6%2F0_12627a_32f5f410_orig.png&hash=64b3ffde7b4eab3e41a1e46e778dd2fb)

Ну а дальше смотришь и анализируешь. То, что относится непосредственно к C3D скорее всего здесь:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F31690%2F7842324.6%2F0_12627b_6d631b93_orig.png&hash=ce68a89500b65d2eb3057dd099344a72)

Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Doublefish от 25-05-2016, 15:40:29
Фаталить etransmit перестал в 2012 после удаления словоря ACAD_MATERIAL.
Код - Auto/Visual Lisp [Выбрать]
  1. (DICTREMOVE (namedobjdict) "ACAD_MATERIAL")

Можно ли как нибудь посмотреть средствами AutoCAD что находится в этом словаре?
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Александр Ривилис от 25-05-2016, 17:05:17
Можно ли как нибудь посмотреть средствами AutoCAD что находится в этом словаре?
Средствами AutoCAD нельзя, а при помощи ARXDBG можно:

Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Doublefish от 26-05-2016, 08:31:00
Теоретически не подскажите за что отвечает этот словарь (понятно что что-то с материалами наверное) и на что может повлиять если его удалить?
Насколько я понял он при последующем открытии чертежа после удаления этого словоря - создаётся занова поумолчанию.
Можно ли как то программно определить используется ли этот словарь в графических объектах и если он не используется, то удалить его?
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Александр Ривилис от 26-05-2016, 08:37:36
Вообще то, что у тебя произошло - случай исключительный. Так что просто смело его убивай. Он действительно пересоздастся. Врядли в C3D вы используете какие-то материалы, которые нужны для лишь для визуализации. Проверить используется этот словарь (а точнее один из его элементов) можно при помощи метода Database.Purge, которому передашь коллекцию ObjectId элементов этого словаря. Те элементы, которые останутся в этой коллекции после вызова Database.Purge, можно теоретически удалить.
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Doublefish от 26-05-2016, 09:42:49
Необходимо отметить, что проблема возникла как минимум на 3-х разных компьютерах (Windows XP, Windows 7 x64) с совершенно разными чертежами и именно только в одной версии AutoCAD Civil 3D 2012 и в не зависимости от установленых SP - фатальная ошибка при вызове команды "Сформировать коплект".

Проверил на разных компьютерах, команда etransmit начинает работать (если нет материалов для визуализации):
Код - Auto/Visual Lisp [Выбрать]
  1. (DICTREMOVE (namedobjdict) "ACAD_MATERIAL")

Предположительно эти чертежи редактировались в более высокой версии.

Спасибо за помощь.
Название: Re: Команда etransmit фаталит в AutoCAD C3D 2012
Отправлено: Александр Ривилис от 26-05-2016, 10:15:21
Предположительно эти чертежи редактировались в более высокой верии.
Очень может быть. У меня было аналогичное предположение.