Как узнать что запущен Civil 3D as AutoCAD?

Автор Тема: Как узнать что запущен Civil 3D as AutoCAD?  (Прочитано 6813 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Собственно есть приложение, которое работает с поверхностями AECC_TIN_SURFACE, это приложение автозагрузчиком подгружается в Civil 3D, но и при запуске Civil 3D as AutoCAD, оно(это приложение) тоже оказывается доступным, и если в простом AutoCAD поверхности  AECC_TIN_SURFACE будут как ACAD_PROXY_ENTITY и моё приложение их не увидит и проблем нет, то в  Civil 3D as AutoCAD, они остаются как AECC_TIN_SURFACE, но вот свойств у них уже в 3 раза меньше и работать с ними как в Civil уже нельзя.
Конечно можно просто проанализировать отсутствие каких-либо свойств и сделать вывод, но мне кажется что должен быть способ проще или правильнее.
Функции (vlax-get-acad-object) для Civil 3D as AutoCAD, вроде ни как не подсказывает что он запущен из под Civil.

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #1 : 18-11-2015, 12:22:30 »
Новые подробности  :D
в общем у пользователя выдавал такую ошибку:
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: Name
по-ходу  функция vla-get-name, потому что не находит такого свойства у объекта, добиться такого я смог открыв Civil 3D как AutoCAD.
dump поверхности из Civil as AutoCAD
Цитировать
; IAcadEntity: Интерфейс AutoCAD для работы со своими объектами.
; Значения свойств:
; Application (RO) = #<VLA-OBJECT IAcadApplication 000000013fe5a130>
; Document (RO) = #<VLA-OBJECT IAcadDocument 000000002b470c68>
; EntityTransparency = "ПоСлою"
; Handle (RO) = "358E"
; HasExtensionDictionary (RO) = -1
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000003b371238>
; Layer = "0"
; Linetype = "Continuous"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; ObjectID (RO) = 42
; ObjectName (RO) = "AeccDbSurfaceTin"
; OwnerID (RO) = 43
; PlotStyleName = "ByLayer"
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000003b45d400>
; Visible = -1
как видно ни какого Name тут нет.
dump поверхности из Civil
Цитировать
; IAeccTinSurface: Интерфейс IAeccTinSurface
; Значения свойств:
; Application (RO) = #<VLA-OBJECT IAeccApplication 000000003d4909e0>
; Boundaries (RO) = #<VLA-OBJECT IAeccSurfaceBoundaries 000000003d59aa28>
; Breaklines (RO) = #<VLA-OBJECT IAeccSurfaceBreaklines 000000003d5926e8>
; ContourLabelGroups (RO) = #<VLA-OBJECT IAeccSurfaceContourLabelGroups 000000003a6326e0>
; Contours (RO) = #<VLA-OBJECT IAeccSurfaceContours 000000003d59a128>
; DefinitionProperties (RO) = #<VLA-OBJECT IAeccTinSurfaceDefinitionProperties 000000003d532160>
; DEMFiles (RO) = #<VLA-OBJECT IAeccSurfaceDEMFiles 000000003d593be8>
; Description = "Описание"
; DisplayName (RO) = "Поверхность1"
; Document (RO) = #<VLA-OBJECT IAeccDocument 000000003d535310>
; EntityTransparency = "ПоСлою"
; Handle (RO) = "358E"
; HasExtensionDictionary (RO) = -1
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000003d515de8>
; Labels (RO) = #<VLA-OBJECT IAeccSurfaceLabels 000000003d5b5160>
; Layer = "0"
; Linetype = "Continuous"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "Поверхность1"
; ObjectID (RO) = 44
; ObjectName (RO) = "AeccDbSurfaceTin"
Тут уже Name есть.

Предложил пользователю, быть внимательнее и не запускать Civil as AutoCAD, на что он мне ответил , что он не глупый, и прислал видео где ошибку выдаёт именно Civil .
Но при этом dump поверхности у него получается как у меня в Civil as AutoCAD.
Ещё я обратил внимание, что в "плохом" варианте, в первой строке написано "IAcadEntity: Интерфейс AutoCAD для работы со своими объектами." а в хорошем:  -  " IAeccTinSurface: Интерфейс IAeccTinSurface"
Как это победить?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #2 : 18-11-2015, 12:42:32 »
Надеюсь, что речь идёт об одной и той же версии AutoCAD.
Для начала запусти у себя и у него в командной строке:
Код - Auto/Visual Lisp [Выбрать]
  1. (arx)
и сравни полученные списки.
Потом через команду _APPLOAD попробуй загрузить те arx/dbx-приложения, которые есть у тебя и которых нет у пользователя. И после этого снова выполнить свой код.
Внешне это выглядит так, что не загружена COM-обертка для класса AeccDbSurfaceTin и у пользователя видны только свойства, которые общие для всех классов примитивов (AcadEntity).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #3 : 18-11-2015, 13:09:18 »
Конечно можно просто проанализировать отсутствие каких-либо свойств и сделать вывод, но мне кажется что должен быть способ проще или правильнее.
Средствами .NET это делается так: http://adn-cis.org/eto-ekzemplyar-prilozheniya-civil-3d.html
Можно попытаться сделать тоже самое на lisp'е. Наверное как-то так:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq acadApp (vlax-get-acad-object))
  2. (setq C3DObject (vlax-invoke acadApp 'GetInterfaceObject "AeccXUiLand.AeccApplication.N.N")
N.N зависит от версии Civil 3D, как указано в приведённой выше статье.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #4 : 18-11-2015, 13:40:54 »
Можно попытаться сделать тоже самое на lisp'е. Наверное как-то так:
Так не вышло, пишет
; ошибка: AutoCAD: Проблемы при загрузке приложения
в статье сказано узнать Civil или не Civil, и правда зачем мне узнавать а не Civil 3D as AutoCAD ли это, достаточно просто что не Civil, а это гораздо проще
Код - Auto/Visual Lisp [Выбрать]
  1. (wcmatch (vla-get-Name (vlax-get-acad-object)) "*Civil 3D*")
На бушующее буду иметь в виду, ну как выяснилось проблема была не в этом.

Надеюсь, что речь идёт об одной и той же версии AutoCAD.
Разные, у меня 20.0 у "проблемного" пользователя 20.1, хотя другие обладатели 20.1 не жаловались.


попробуй загрузить те arx/dbx-приложения, которые есть у тебя и которых нет у пользователя.
у меня выдал порядка 130 приложений, пользователь очень далеко находится, на просьбу глянуть список по (arx) ответил, что пока ни как, виндоус у него слетел. Может в этом и была проблема  :D
Но при этом сам-то он с поверхностями работал, создавал их, значит ли это что с COM-обёрткой у него всё хорошо? А если не хорошо, и она не загружена, это же не только моё приложение не будет работать, но и много чего ещё. Т.е. это же не должно быть моей проблемой(моего маленького приложения) диагностировать неисправность Civil и предложить его переустановку?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #5 : 18-11-2015, 13:58:53 »
Так не вышло, пишет
; ошибка: AutoCAD: Проблемы при загрузке приложения
Ты уверен, что указал правильную версию (т.е. правильный N.N)?
виндоус у него слетел. Может в этом и была проблема  :D
Может в этом. Хотя скорее Civil у него частично слетел.
Но при этом сам-то он с поверхностями работал, создавал их, значит ли это что с COM-обёрткой у него всё хорошо?
Нет. Это ничего не значит, если он с ним не работал через VisualLisp (т.е. так же как и ты).
Вполне возможно, что сам Civil работает нормально и .NET приложения тоже работают нормально.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать что запущен Civil 3D as AutoCAD?
« Ответ #6 : 18-11-2015, 14:17:41 »
Похоже, что в этой dll находится нужная тебе COM-обертка: AeccXLand.dll
Но средствами lisp её не загрузить, т.к. это не .NET-сборка и не arx/dbx-файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение