(изменено: Electr, 3 июня 2011г. 11:24:26)

Тема: VBA для чайников

Много шарил по форумам, и по этому и по DWG.ru и по многим другим ресурсам и в итоге накопал совсем дало информации для начинающих. Много есть интересной литературы, но на английском языке если на русском то что то так мудрено, без 100 грамм не разберешься. Здесь в ветке VBA вопросы уже, я так понял, далеко не чайников. А хотелось бы с самого начала. К примеру:
1. Как начертить линию
2. Как начетрить полилинию
и т.д. и если можно с описанием всех команд, операторов, классов и что там еще есть.
Для начала два вопроса которые выше.
Буду очень благодарен и думаю что не только я.
Вот то что я нарыл, может кому пригодится
http://www.cad.dp.ua/stats/doc2.php
http://vbamaker.narod.ru/index.html
http://forum.dwg.ru/showthread.php?t=61 … hlight=vba
http://forum.dwg.ru/showthread.php?t=50 … hlight=vba
http://vbnet.ru/
http://vbamodel.narod.ru/AutoCAD/idx_objects.htm
http://teachpro.ru/Уроки?CourseID=98d01 … 2C+Variant
http://subscribe.ru/archive/comp.soft.s … 33458.html
http://entercad.ru/acad_acg.ru/ws73099c … b-7fac.htm
http://docs.autodesk.com/ACD/2011/RUS/f … b-7fac.htm
http://www.cad.dp.ua/stats/a_vba/acobject.php
http://www.cad.dp.ua/stats/a_vba/accomm.php#Пример функции, выполняющей над заданным объектом любую команду AutoCAD
http://www.askit.ru/custom/vba_office/m … atypes.htm

Re: VBA для чайников

Ты угадал. Для начала бери книгу VBA для чайников.
А чем справка в автокаде не подходит. На английском? Но объектную модель и код без английского всяко не напишешь.
Вот пример из справки:

Sub Example_AddLine()
    ' This example adds a line in model space
    
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    
    ' Define the start and end points for the line
    startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0#
    endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0#
    
    ' Create the line in model space
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
    ZoomAll
    
End Sub

Sub Example_AddLightWeightPolyline()
    ' This example creates a lightweight polyline in model space.
    
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 9) As Double
    
    ' Define the 2D polyline points
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
        
    ' Create a lightweight Polyline object in model space
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    ZoomAll
    
End Sub

Re: VBA для чайников

Я пользуюсь английским автокадом, и с этим проблем не будет. А вот прочитать что пишут в справке это проблема. Учитывая то что даже справку на русском языке не каждый поймет.
Спасибо за быстрый ответ.
Сейчас опробую, и продолжим если не возражаете

(изменено: Electr, 3 июня 2011г. 11:35:59)

Re: VBA для чайников

Я скопипастил с какой то страницы следующий код:

Private Sub CommandButton1_Click()
     Dim plineObj As AcadLWPolyline
      Dim Pt1(0 To 2)   As Double
      Dim Pt2(0 To 2)  As Double
      Dim Pt3(0 To 2)  As Double
      Dim Pt4(0 To 2)  As Double
    
    

 Pt1(0) = 0: Pt1(1) = 0: Pt1(2) = 0
 Pt2(0) = 420: Pt2(1) = 0: Pt2(2) = 0
  Pt3(0) = 420: Pt3(1) = 297: Pt3(2) = 0
  Pt4(0) = 0: Pt4(1) = 297: Pt4(2) = 0

    Set lineObj = ThisDrawing.ModelSpace.AddLWPolyline(Pt1, Pt2)
    Set lineObj = ThisDrawing.ModelSpace.AAddLWPolyline(Pt2, Pt3)
    Set lineObj = ThisDrawing.ModelSpace.AddLWPolyline(Pt3, Pt4)
    Set lineObj = ThisDrawing.ModelSpace.AddLWPolyline(Pt4, Pt1)
    ZoomExtents
End Sub

Выдает ошибку. Точнее код был для простых линий, я решил начертить полилинии. В чем ошибка, ткните пожалуйста.
PS Вильдар ваш код работает на ура. Спасибо попытаюсь разобраться что к чему

(изменено: Вильдар, 3 июня 2011г. 11:50:58)

Re: VBA для чайников

Это не мой код, это из справки.
AddLWPolyline такого метода нет.
Есть AddLightWeightPolyline, в который передается массив точек.
Вот так примерно должно быть.

Option Explicit
Private Sub CommandButton1_Click()
     Dim plineObj As AcadLWPolyline
      Dim Pts(0 To 11)   As Double

 Pts(0) = 0: Pts(1) = 0
 Pts(2) = 420: Pts(3) = 0
  Pts(4) = 420: Pts(5) = 297
  Pts(6) = 0: Pts(7) = 297

    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pts)
    
End Sub

Координата z не нужна. Т.к. полилиния копланарна (если не путаю, т.е. на одной плоскости располагается). Для этого есть свойство уровень (elevation, вроде, проверь сам).

(изменено: Anatoly, 3 июня 2011г. 11:58:03)

Re: VBA для чайников

Sub Example_AddLightWeightPolyline()
    ' This example creates a lightweight polyline in model space.
   
    Dim plineObj As AcadLWPolyline
    Dim points(0 To 9) As Double
   
    ' Define the 2D polyline points
    points(0) = 1: points(1) = 1
    points(2) = 1: points(3) = 2
    points(4) = 2: points(5) = 2
    points(6) = 3: points(7) = 2
    points(8) = 4: points(9) = 4
       
    ' Create a lightweight Polyline object in model space
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    ZoomAll
   
End Sub

Почему-то на points 8  выдает смайлик

Re: VBA для чайников

Это не мой код, это из справки

Извините в каком разделе справки все это?

(изменено: Вильдар, 3 июня 2011г. 11:55:54)

Re: VBA для чайников

Такие элементарные вопросы отпадут, когда ты прочитаешь любую книжку по VBA, и изучишь объектную модель автокада.

Re: VBA для чайников

ищи acadauto.chm или acadauto2009.chm
и VBA2006.pdf
но все на английском

Re: VBA для чайников

Или из самого автокада, меню справка-доп.ресурсы-справка для разработчиков (это в 2008 рус.версии)

(изменено: Electr, 3 июня 2011г. 12:04:35)

Re: VBA для чайников

Спасибо за предоставленую информацию
VBA для чайников описывает Word и Excel.
Меня интересую некоторые вопросы синтаксиса функция для автокада. Вот с линиями понял.
При использовании возник следующий вопрос: ни один файл не был открыт, и соответственно вылетела ошибка, значит надо контролировать наличие открытого файла, или даже запущенного автокада? Я правильно рассуждаю?

Re: VBA для чайников

Сойдет такая книга.
Нет контролировать не надо. Из самого пустого автокада код vba не запустить. А из IDE сам следи конечно.

Re: VBA для чайников

Спасибо большое!!! Сейчас помучаюсь сам и продолжу мучать вас, если вы не против, конечно :oops:

Re: VBA для чайников

Рекомендую самому хорошенько попариться :D

Re: VBA для чайников

А можно сделать чтобы после завершения определенной операции мое приложение закрылось само, до следующего вызова?

Re: VBA для чайников

Не очень понятно, что тебе нужно.
Но полное завершение программы можно сделать с помощью End.
Или с помощью оператора перехода Goto в конец программы.
Вообще, лучше если покажешь код, тогда точнее можно сказать.

Re: VBA для чайников

http://vbamodel.narod.ru/

Re: VBA для чайников

2 Electr
Если вы только начинаете изучать VBA под акад, то бросайте это дело. =(
К сожалению VBA под акад уже умер, а жаль.
У вас есть преимущество, вы не испорчены vba и по этому с теми же усилиями изучите другой язык или платформу.
             Удачи.

Re: VBA для чайников

Boxa Shu пишет:

К сожалению VBA под акад уже умер

Слухи о его смерти оказались несколько преувеличены...

Re: VBA для чайников

Леонид, а можно поподробнее? Особенно интересует связка Акад х64 + VBA

Re: VBA для чайников

Boxa Shu пишет:

Леонид, а можно поподробнее? Особенно интересует связка Акад х64 + VBA

http://usa.autodesk.com/adsk/servlet/it … ID=9240618

(изменено: Electr, 6 июня 2011г. 09:34:57)

Re: VBA для чайников

Boxa Shu пишет:

2 Electr
Если вы только начинаете изучать VBA под акад, то бросайте это дело. =(
К сожалению VBA под акад уже умер, а жаль.
У вас есть преимущество, вы не испорчены vba и по этому с теми же усилиями изучите другой язык или платформу.
             Удачи.

Так что дейтвительно может не стоит начинать. Тогда посоветуйте что же делать. Лично для меня возникла острая необходимость автоматизировать некоторые свои рутинные операции, вот и подумал что VBA поможет. Пытался начать с лиспа, как то не заладилось, скобок там много чтоли.

LeonidSN пишет:
Boxa Shu пишет:

К сожалению VBA под акад уже умер

Слухи о его смерти оказались несколько преувеличены...

Или чтобы написать полноценную програму средств VBA будет недостаточно?

(изменено: Максим Захаров, 6 июня 2011г. 10:57:41)

Re: VBA для чайников

Пока наверно еще достаточно. Но больше Autodesk его не поддерживает, по той простой причине что от него "отреклась" Microsoft. Начинай изучать VB.NET. Сначала будет страшно, потом привыкнешь. Вот ссылка на начало работы с VB (http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%20.NET%20Developer's%20Guide/index.html). Как настроить проект в Visual Studio спроси в другой ветке форума.

Re: VBA для чайников

По ссылке пишет

File not found.

.
Т.е. это совершенно 2 разных языка, или сходство есть?. Это я спрашиваю просто из интереса.

Re: VBA для чайников

Как говорит Microsoft это 2 разных языка. Но сходство естественно есть. Синтаксис практически не изменился. Практически все теже команды. Естественно много новых добавилось. Если программировал на VBA то на VB.NET легко перейдешь. Примеров маловато пока еще. Можешь начинать писать на C# там больше. Хотя я переделываю их и на VB. На VBA лучше не начинай писать, потом все равно будешь все переделывать.