Вставка блока из другого файла

Автор Тема: Вставка блока из другого файла  (Прочитано 35991 раз)

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

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

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Re: Вставка блока из другого файла
« Ответ #30 : 15-08-2014, 14:38:23 »
Результаты экспериментов с подключением к COM-объекту AutoCAD 2013 LT.
Дано: установлены AutoCAD 2014, AutoCAD 2014 VBA Enabler, AutoCAD 2013 LT
Ассоциация с файлами dwg привязана на
AutoCAD 2013 LT

Мои попытки:
Код - Visual Basic [Выбрать]
  1. Set AcadApp = CreateObject("C:\Program Files\Autodesk\AutoCAD LT 2013\acadlt.exe")
  2. Set AcadApp = CreateObject("C:\Program Files\Autodesk\AutoCAD LT 2013\acadlt.exe","AutoCAD.Application")
  3. Set AcadApp = CreateObject(,"AutoCAD.Application")
  4. Set AcadApp = CreateObject(,"AutoCAD.Application.**") '** - пробежал по вариантам: 17, 18, LT18, 18LT
  5. Set AcadApp = GetObject(,"AutoCAD.Application") ' при открытом AutoCAD 2013 LT
  6. Set AcadApp = GetObject(,"AutoCAD.Application.**") '** - пробежал по вариантам: 17, 18, LT18, 18LT


все варианты приводили к различным ошибкам: "Невозможно создание контейнером объекта ActiveX..."
На сторонних сайтах нашел следующую информацию:

http://www.cadtutor.net/forum/showthread.php?30446-vb-code-to-open-drawings-in-autocad-lt
Цитировать
I do not believe the LT version can be accessed with VB in it's present state.
Цитировать
That's right. You have no COM interface in LT, so you have nothing like
Set acadLTApp = CreateObject("AutoCADLT.Application")


http://www.vbaexpress.com/forum/showthread.php?24269-Solved-How-to-control-AutoCad-LT-with-Visual-Basic-6
Цитировать
autocad LT do not support vb in its present version..this is the response i got from the autodesk customer support...
Цитировать
This is correct, you cannot control Autocad LT with the createobject/getobject methods. You can however write a script that will open Autocad LT and insert the drawing(s) that you want and close it.


Все это наводит на мысль, что я никак не смогу обратиться к COM-объекту AutoCAD 2013 LT версии.
Может есть какие идеи на этот счет?
« Последнее редактирование: 15-08-2014, 15:05:03 от Дамир »
Сколько голов, столько умов. Но голов больше

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вставка блока из другого файла
« Ответ #31 : 16-08-2014, 16:06:15 »
Все это наводит на мысль, что я никак не смогу обратиться к COM-объекту AutoCAD 2013 LT версии.
Может есть какие идеи на этот счет?
Мысль абсолютно правильная. Всё что можно делать с LT я указал здесь: http://adn-cis.org/forum/index.php?topic=917.0


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Re: Вставка блока из другого файла
« Ответ #32 : 16-08-2014, 17:24:26 »
Александр Ривилис, благодарю. Я как новичок не знал об этом. Поэтому и привел лишь результаты своих поисков по этой теме. Благодарю. Значит будем работать на полноценных версиях AutoCAD. Пока эксперименты провел на 14 версии. Планирую проверить на 12, и 15. По результатам отпишу!
Сколько голов, столько умов. Но голов больше

Оффлайн art_rrc

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Вставка блока из другого файла
« Ответ #33 : 18-09-2014, 20:26:25 »
Я в своих программах использую следующий код собственного сочинения. Гуру СНГ программирования он покажется смешным, но для моих потребностей вполне хватает  :)
В программе:
Код - Visual Basic [Выбрать]
  1. On Error Resume Next
  2. Set NewBlock = .ModelSpace.InsertBlock(nPnt, nameBlock, 1, 1, 1, 0)
  3. If Err Then
  4.     Err.Clear
  5.     Call art_InsertBaseBlocks(nameBlock)
  6.     Set NewBlock = .ModelSpace.InsertBlock(nPnt, nameBlock, 1, 1, 1, 0)
  7. End If
  8.  
Сама процедура:
Код - Visual Basic [Выбрать]
  1. Public Sub art_InsertBaseBlocks(strName As String)
  2. Dim XRef As AcadExternalReference
  3. Dim insPnt(0 To 2) As Double
  4. Dim FileWay As String
  5. Dim objDel As AcadBlock
  6. Dim strDel As String
  7. With ThisDrawing
  8. insPnt(0) = 1#: insPnt(1) = 1#: insPnt(2) = 0#
  9. FileWay = "D:\All_For_Acad_2015\Acad_Blocks\Blocks.dwg"
  10. Set XRef = .ModelSpace.AttachExternalReference(FileWay,  "БазаДанныхБлоков", insPnt, 1, 1, 1, 0, False)
  11. .Blocks.Item(XRef.Name).Bind True
  12. XRef.Delete
  13. FileWay = "ВаляКоля"
  14. 'On Error Resume Next
  15. Set XRef = .ModelSpace.AttachExternalReference(FileWay, "Шило", insPnt, 1, 1, 1, 0, False)
  16. .Blocks.Item("БазаДанныхБлоков").Delete
  17. For Each objDel In .Blocks
  18.     strDel = objDel.Name
  19.     If strDel <> strName Then
  20.         .Blocks.Item(strDel).Delete
  21.     End If
  22. Next
  23. End With
  24. End Sub
« Последнее редактирование: 18-09-2014, 21:58:20 от Александр Ривилис »

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

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Re: Вставка блока из другого файла
« Ответ #34 : 18-09-2014, 20:34:31 »
Здорово! Спасибо. Моя проблема заключалась в том, что я пишу на VBS, а не на VBA. На основании чего столкнулся с массой проблем связанной с восприятием типов данных VBS'ом.
Сколько голов, столько умов. Но голов больше