Тема: VB - AutoCAD2007 Вставка готовых объектов

В ВБ работаю вроде не плохо, но за совмещение его с автокадом взялся впервые, да и еще сроки весьма ограничены.
При помощи каких команд можно создать обычный двухмерный чертеж (аля прямоугольный участок с заданными сторонами) и повставлять на него готовые объекты (прямоугольники и т.д.). Все объекты, количество и размеры заданы переменными в ВБ.
А вообще я еще перерываю конференции на сайте, мож самостоятельно что найду ;)
Но за совет благодарен буду безмерно :))

Re: VB - AutoCAD2007 Вставка готовых объектов

полазал собсно в автокаде.... там вроде как можно создать пользовательские объекты с уже заданными размерами и т.п.
или я чего-то не понял или такой объект будет легче вставить на требуемое место, чем вычерчивать тот же прямоугольник.

Re: VB - AutoCAD2007 Вставка готовых объектов

> Alexey fon Ritter
Лучше вычерчивать самому по вершинкам, не нужно привязываться к стандартному прямоугольнику а то привыкните.

ThisDrawing.ModelSpace.AddPolyline(points)

вот начертит что захотите в виде полилинии

Re: VB - AutoCAD2007 Вставка готовых объектов

> Alexey fon Ritter
Этот вопрос - вопрос изучения объектной модели AutoCAD в VB(VBA). И пока ты с ней не разберешься, более или менее, нет смысла говорить об отдельных командах и тем более о  создании чертежа.
Я бы посоветовал начинать с Help'а VBA for AutoCAD. Основываюсь на собственном опыте, поскольку тоже начинал с VB.

Re: VB - AutoCAD2007 Вставка готовых объектов

> SmeL
Пасиб :)

> LeonidSN
Пасиб, начал с хелпа ;)
проблема во времени, его не вагон :( потому работаю методом тыка, находя более-менее подходящее решение.
Включил в приложение (ВБ 6.0) через OLE окно atocad drawind
Подключил библиотеки: autocad (2007, object dbx common 17.0, focus control for vba) type lybrary
Теперь залез в браузер объектов, выбрал автокад, глянул, ужаснулся, но вроде, все что мне нужно имеется. Слава хелпу!
Угу, тут встала проблема, хелп я плохо понял что куда вписывать. В теории я могу нарисовать ромб, на практике он не рисуется:
Dim PLineObj As AcadLWPolyline
Dim lineObj As AcadLine
Dim D(1) As Double
Dim P(7) As Double
A = ThisDrawing.Utility.GetPoint(, 0)
B = ThisDrawing.Utility.GetPoint(A, 5)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A, B)
C = ThisDrawing.Utility.GetPoint(B, 30)
D(0) = A(0) + C(0) - B(0)
D(1) = A(1) + C(1) - B(1)
P(0) = A(0)
P(1) = A(1)
P(2) = B(0)
P(3) = B(1)
P(4) = C(0)
P(5) = C(1)
P(6) = D(0)
P(7) = D(1)
lineObj.Delete
Set PLineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(P)
PLineObj.Closed = True

Re: VB - AutoCAD2007 Вставка готовых объектов

> SmeL
В моем случае все же лучше "привыкнуть".
Все объекты однотипные круги и прямоугольники с фиксированными размерами длины, ширины и диаметра.

Re: VB - AutoCAD2007 Вставка готовых объектов

Вот пример построения полилинии из Help:

Sub Example_AddLightWeightPolyline()
    ' This example creates a light weight 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 light weight Polyline object in model space
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    ZoomAll
End Sub

Вопрос заключается в способе задания координат вершин:
1.Из текста кода (как в приведенном примере)
2.В виде параметров вызываемой процедуры Example_AddLightWeightPolyline()
3.Путем указания точек на чертеже
Какой способ применяешь ты, извини, не понял.
И еще. Чтобы не ужасаться, разглядывая browser, не подключай лишние библиотеки, начни с AutoCAD , а там видно будет.

Re: VB - AutoCAD2007 Вставка готовых объектов

> Alexey fon Ritter
Мне больше нравиться орисовывать примитивы
относительно центра, проще считать, хотя
могут быть другие мотивы
К сожалению, VB не имею, пример на VBA:

Option Explicit
Sub test()
     Dim oPoly As AcadLWPolyline, _
         wid As Double, _
         hgt As Double, _
         pts(7) As Double, _
         varPt
     varPt = ThisDrawing.Utility.GetPoint(, "Pick center point of rhombus")
     wid = CDbl(InputBox(vbCr & vbCr & "Enter the width of rhombus" & vbCr & _
                         "Or press enter to set default :", "Width", "10"))
     hgt = CDbl(InputBox(vbCr & vbCr & "Enter the height of rhombus" & vbCr & _
                         "Or press enter to set default :", "Height", "30"))
     pts(0) = varPt(0) - wid / 2
     pts(1) = varPt(1)
     pts(2) = varPt(0)
     pts(3) = varPt(1) - hgt / 2
     pts(4) = varPt(0) + wid / 2
     pts(5) = varPt(1)
     pts(6) = varPt(0)
     pts(7) = varPt(1) + hgt / 2
     Set oPoly = ThisDrawing.ModelSpace.AddLightWeightPolyline(pts)
     oPoly.color = acYellow
     oPoly.Closed = True
End Sub

~'J'~

Re: VB - AutoCAD2007 Вставка готовых объектов

Private Sub Command1_Click()
    On Error Resume Next
    ' Connect to the AutoCAD application
    Dim acadApp As AcadApplication
    Set acadApp = GetObject _
                  (, "AutoCAD.Application.17")
    If Err Then
        Err.Clear
        Set acadApp = CreateObject _
                  ("AutoCAD.Application.17")
        If Err Then
            MsgBox Err.Description
            Exit Sub
        End If
    End If
    ' Connect to the AutoCAD drawing
    Dim acadDoc As AcadDocument
    Set acadDoc = acadApp.ActiveDocument
    ' Establish the endpoints of the line
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    startPoint(0) = 1
    startPoint(1) = 1
    startPoint(2) = 0
    endPoint(0) = 5000
    endPoint(1) = 5000
    endPoint(2) = 0
    ' Create a Line object in model space
    Set lineObj = acadDoc.ModelSpace.AddLine _
                         (startPoint, endPoint)
    ZoomAll
    acadApp.Visible = True
End Sub

Я монстер! Я начертил линию!!!
Теперя попытался начертить рамку при помощи полилинии, за основу брал код из хелпа, приведенный LeonidSN (пасиб).

   ' This example creates a light weight 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 light weight Polyline object in model space
    Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
    ZoomAll

Но в получившемся результате не уверен, вродь автокад что-то чертил... но что, я так на чертеже и не нашел. Хотя, когда пытаешься его закрыть, автокад выдает запрос на сохранение, что для пустого проекта не свойственно.

Re: VB - AutoCAD2007 Вставка готовых объектов

> Alexey fon Ritter
но что, я так на чертеже и не нашел.
Попробуй вставить в конце кода строчку:

ZoomExtents

Re: VB - AutoCAD2007 Вставка готовых объектов

Эх, кто бы привел работающий пример на VBA вычерчивания прямоугольника из отрезков с вводом параметров B (ширина) и L (длина) из формы. Типовой такой классический пример.

Re: VB - AutoCAD2007 Вставка готовых объектов

> LeonidSN
Пасиб, попробую :)
хотя, я кажется понял, в чем моя ошибка...
Для полного счастья мне не хватает только примера начертания окружности, применительно к VB 6.0.
Хоят нет, вру... никто не знает, как заставить автокад экспортировать полученый чертеж в другой формат (jpg в идеале)
Уря! Автокад чертит почти то, что мне нада!!! Чувствую себя создателем франкенштейна: "Он живет!!!"

Re: VB - AutoCAD2007 Вставка готовых объектов

Плиз, хелп ми :(
У меня, по ходу дела и действия, возник вопрос, даже три:
1. Как изменить программно из приложения ВБ масштаб изображения в автокаде, чтобы весь чертеж вписывался в экран. В противном случае при экспорте в другой формат (.бмп) изображение получается из того куска, который был виден на экране.
2. Для экспорта необходимо выделить требуемые объекты, можно ли выбрать весь чертеж?
3. Никак не могу найти, как экспортировать чертеж. Если кто-нить делал такое, плиз :(

Re: VB - AutoCAD2007 Вставка готовых объектов

> Alexey fon Ritter
Почаще заглядывай в Help
Если сам решишь проблему то уже
не забудешь, тем более тут ничего
сложного нет
Вот по-быстрому накидал с объяснениями
попробуй, можешь применять любые расширения
для рисунка дозволенные в Автокаде
(см. Help-> Export)

Option Explicit
Sub ExportThisDrawing()
' Работаем с активным документом
With ThisDrawing
' Увеличиваем область рисования чтобы
' были видны все объекты
.Application.ZoomExtents
' Сокращенное имя документа с расширением
Dim dwgName As String
dwgName = .Name
' Получаем имя документа без расширения
dwgName = Left$(dwgName, Len(dwgName) - 4)
' Создаем пустой набор выбора и добавляем
' его в коллекцию наборов документа
Dim oSset As AcadSelectionSet
' Имя набора - случайное, без проверки на существующее
Set oSset = .SelectionSets.Add("$GooglyMoogly$")
'  Выбираем все объекты на экране
oSset.Select acSelectionSetAll
' Задаем имя папки куда экспортируем файл
' (наклонный слэш на конце имени)
Dim folderName As String
folderName = "C:\MyVBA\"
' Папка должна быть создана
' Если нужно сохранить в рабочей папке
' замени на :
' folderName = .Path & "\"
' Задаем имя файла для экспорта без расширения
' (без наклонного слэша)
Dim targName As String
targName = folderName & dwgName
' Задаем расширениe файла (BMP, JPG, PNG и тд)
Dim extStr As String
extStr = "BMP"
' Непосредственно экспорт файла
.Export targName, extStr, oSset
' Удаляем набор выбора из документа
' (это действие не удаляет объекты на экране)
oSset.Delete
' Удаляем ссылку на переменную 'oSset'
Set oSset = Nothing
' Завершаем работу с документом
End With
End Sub

~'J'~