Тема: Помогите запустить автокад...

Я пытаюсь запустить автокад из VB 6.0 и безуспешно. Помогите кто знает как это сделать. И если можете-то напишите как обратится к коммандной строке КАДА

Re: Помогите запустить автокад...

> Bobby
Если хотите получить помощь, то покажите что вы пытались сделать.

Re: Помогите запустить автокад...

Через вба я могу получить доступ к коммандной строке, а через ВБ не могу даже понять как это сделать.
в ВБА вот так
thisDrawing.Sendcommand "_point" & vbcr & "100,100" & vbcr
А мне нужно тоже самое сделать из ВБ 6.0 а я не магу :(. плизз памагите хтонить

Re: Помогите запустить автокад...

Вобщем проблема была такая:
Мне нужно оформить или программу или макрос которая берёт данные из экселя, обрабатывает их и рисует получившиеся точки с номерами в автокаде. В вба я не стал делать потому, что возникло слишком много непоняток насчёт работы с файлом ЭКСЭЛЯ до этого работал только с файлами (*.тхт) и решил что легче в ВБ вставить свой эксель и с ним работать. Все предыдущие стадии готовы осталось понять как работать с автокадом из ВБ, и как пронумировать.
PS(я смотрел программу уважаемого "kpblc" написанную на LISP, и не смог её даже запустить.Прорыскал в хелпе готовые примеры ВБА-но такого не обнаружил.)
Спасибо за помощь!!!!

Re: Помогите запустить автокад...

> Bobby
В принципе есть вариант доступа к Excel-ному файлу и из-под када :)
Примерно так (если идти хреновым методом создания объекта в памяти и без подключения библиотек):

Dim objExcel As Object, docExcel As Object
  On Error Resume Next
  Set objExcel = GetObject(, "Excel.Application")
  If Err.Number <> 0 Then
    Err.Clear
    Set objExcel = CreateObject("Excel.Application")
  End If
  Set docExcel = objExcel.workbooks.Open(sFileName)

Ну и дальше работать с docExcel как с обычной книгой Excel'a - то есть обращаться к Worksheet по индексу или имени, получать Cells и так далее. Есть еще вариант попробовать обращаться к xls-файлу через ADO, лисповый вариант делал Евгений Елпанов на dwg.ru, да и здесь в готовых было: https://www.caduser.ru/forum/topic21519.html
На VB(A) я перевести пока (надеюсь, что только пока) не могу, может, профи подключатся?

Re: Помогите запустить автокад...

Кстати, на буржуйском: http://www.cadtutor.net/forum/showthread.php?t=9558

Re: Помогите запустить автокад...

Спасибо огромное за то что уделили мне время. буду разбиратся с данным материалом!!!!

Re: Помогите запустить автокад...

> Bobby
Ыыыы... Меня один...
Кстати, о методе создания объекта. Если не выполнить в конце Set objExcel = Nothing, он так и останется болтаться в памяти.

Re: Помогите запустить автокад...

Спасибо ещё раз. Скоро выложу код проги для работы с экселем. Но и хотелось бы спросить: Как пронумировать точки??? Обидно что в примерах этого нету, а лисп не пойму хоть убейте :(

Re: Помогите запустить автокад...

> Bobby
Ну, наверное, либо создавать текст в текущем пространстве файла, либо создавать блок с одним атрибутом, вставлять его в текущее пространство, и менять значения атрибутов.

Re: Помогите запустить автокад...

Вот код программы которая берёт данные из ячейки Экселя
Dim objExcel As Object 'для открытия экселя
Dim docExcel As Object 'для открытия документа
Dim wsExcel As Object 'для работы с листом
Private Sub cmd1_Click()
Txt1.Text = wsExcel.Range("A1").Value 'берём данные из ячейки
End Sub
Private Sub Form_Load()
Set objExcel = CreateObject("Excel.Application")
Set objExcel = GetObject(, "Excel.Application")
Set docExcel = objExcel.Workbooks.open("C:\\Excel.xls") 'открываем документ
Set wsExcel = docExcel.Worksheets(3) 'указываем на третий лист
End Sub
Private Sub Form_Unload(Cancel As Integer)
docExcel.Close 'выгружаем эксель
Set docExcel = Nothing 'чистим память от
Set objExcel = Nothing 'уже ненужных переменных
Unload Me
End Sub
Это код программы для рисования точки двумя способами из VB(VB6.0+ACAD 2006)
Dim objAcad As Object
Dim docAcad As Object 'Переменная для открытия документа и работы с ним
Dim pointObj As Object 'переменная для построения точки
Private Sub cmd1_Click()
objAcad.Visible = True 'показываем уже открытый автокад
docAcad.SendCommand ("_point" & vbCr & "100,100" & vbCr) 'рисуем точку из коммандной строки
Dim location(0 To 2) As Double 'обьявляем массив для построения точки(это координаты)
location(0) = 100#: location(1) = 100#: location(2) = 0# 'задаём координаты точки
Set pointObj = docAcad.ModelSpace.AddPoint(location) 'строим точку
End Sub
Private Sub Form_Load()
Set objAcad = CreateObject("AutoCad.Application")
Set objAcad = GetObject(, "AutoCad.Application") 'запускаем автокад
Set docAcad = objAcad.documents.open("C:\work.dwg") 'указываем на файл который следует открыть
End Sub
Private Sub Form_Unload(Cancel As Integer)
objAcad.Visible = False 'Переводим автокад в фоновый режим
docAcad.Close (True) 'закрываем документ при этом его сохраняя
objAcad.quit 'выгружаем саму оболочку автокада
Set docAcad = Nothing 'выкидываем из
Set objAcad = Nothing 'памяти переменные
Unload Me
End Sub

Re: Помогите запустить автокад...

Вот стандартная процедура подключения из VB к AutoCAD'у:

Public AcadApplication As Object
Sub Main()
    On Error Resume Next
    Set AcadApplication = GetObject(, "AutoCAD.Application")
    If Err Then
        Set AcadApplication = CreateObject("AutoCAD.Application")
        AcadApplication.Visible = True
        Err.Clear
    End If
    Dim AcadDoc As Object
    Set AcadDoc = AcadApplication.Documents.Open("D:\Work\DWG\02-85-1.dwg")
    AcadDoc.Visible = True
    AcadDoc.SendCommand ("_point" & vbCr & "100,100" & vbCr)

Она работает, хотя и со скрипом.
Лучше подключить к проекту библиотеку AutoCAD2006 Type Library.
В коде, который выложен> Bobby (2006-10-16 19:08:32):

Set objAcad = CreateObject("AutoCad.Application")
Set objAcad = GetObject(, "AutoCad.Application") 'запускаем автокад

одна из функций CreateObject или GetObject излишняя.

Re: Помогите запустить автокад...

А зачем использовать SendCommand, если точка все равно создается объектными методами (это помимо поста LeonidSN)?

Re: Помогите запустить автокад...

Кому как нравится. Я тоже сначала начал учится посылать SendCommand. Но в итоге понял что это для самых элементарных случаев(или просто для обучения).
Ещё раз всем спасибо за помощ.