IPB

Добро пожаловать, гость ( Вход | Регистрация )

Скрыть объявления

Объявления

Смотрите две обновленные статьи на нашем сайте - Шелковое платье с открытой спиной и Макетируем базовую основу

Лица Сезона - Ваша работа может занять почетное место!
14 Страниц V<1234>»
 
Ответить Новая тема
> Основы программирования на Visual Basic for AutoCAD, Уроки для начинающих
Добрушанка
сообщение May 5 2008, 10:09
Сообщение #21


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(Natalya @ May 5 2008, 04:38) *

Добрушанка, чтобы рассчитать координаты, наверное всё равно надо сделать предварительные расчёты в Ексель и загнать туда все формулы? Или сразу писать формулу в VB?
Наверное я стереотипно мыслю.

Программа на VB должна по возможности работать автономно, без использования других программ. Если есть возможность вычислить все в программе VB, то нужно этим пользоваться, не привлекая другие программы.
Обычно в построении все начинается с какой-то одной точки, которую можно принять за начало координат. А далее относительно нее все остальные точки и строяться. Это тоже самое как мы строим на бумаге, откладываем вниз, влево, вправо или вверх на заданное расстояние от этой точки.
Добрушанка
сообщение May 5 2008, 10:20
Сообщение #22


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(Natalya @ May 5 2008, 05:24) *

АвтоКад 2008 уже имеет в списке команды, когда набираешь As автоматически появляется список команд там AcLine нет, только AcLineSpasingStyle даже если я пишу вручную AcLine всё равно не работает.


Версия Visual Basic не меняется с времен АвтоКад 2000. Список команд появляется везде в VB. Линия задается не комадой AcLine, а командой AcadLine.


Спасибо сказали:
Добрушанка
сообщение May 5 2008, 10:30
Сообщение #23


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(Natalya @ May 5 2008, 08:23) *

Паника прошла, разобралась, в третьем макросе координаты точек Н1 и H2 получились несколько иначе.
H1(0) = (A1(0) + A4(0)) / 2: H1(1) = (A1(1) + A4(1)) / 2: H1(2) = 0
H2(0) = (A2(0) + A3(0)) / 2: H2(1) = (A2(1) + A3(1)) / 2: H2(2) = 0

Интересно, надо продолжать разбираться
Спасибо Добрушанке!


Вы местами поменяли точки H1 и H2. В этом построении это не важно, а когда каждая точка будет иметь значение, нужно быть более внимательными.
Добрушанка
сообщение May 5 2008, 10:44
Сообщение #24


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



Цветы, посмотрела Вашу программу. Во-первых, у Вас ошибка, что Вы дважды задаете координаты точек H1 и H2. А во-вторых, нарисуйте рисунок того, что Вы хотите получить и мы вместе будем разбираться, как это реализовать программно.
Цветы
сообщение May 5 2008, 11:11
Сообщение #25


Участник
Из: Алмата,Казахстан
Спасибо сказали: 213 раз(а)

Открыть альбомы


Прикрепленное изображение
QUOTE(Добрушанка @ May 5 2008, 11:44) *

Цветы, посмотрела Вашу программу. Во-первых, у Вас ошибка, что Вы дважды задаете координаты точек H1 и H2. А во-вторых, нарисуйте рисунок того, что Вы хотите получить и мы вместе будем разбираться, как это реализовать программно.





И расскажите подробнее о сохранении VB у меня все чертежи сохраняются обычными файлами в CAD и при открытии не получается загрузить, приходится открывать папку и находить обычный файл-рисунок dwg/ Если нужно удалить то достаточно просто выделить и нажать делет А в построении я просто пробую зафиксировать урок и чтобы более его понять пытаюсь ввести свои изменения , и естественно исправить ошибки В этом чертеже хотела построить отрезок H1H2=65 - А1А2=64 А3А4 =63 с разными сторонами и ширина А2Н1=26 А3Н1=28 Напоминающий построение юбки

Чертеж к документу ворд

Сообщение отредактировал цветы - May 5 2008, 13:10


--------------------
"Каждый может ошибиться", - сказал ежик, слезая с кактуса.
Pavelina
сообщение May 5 2008, 12:34
Сообщение #26


Что же из этого следует? Следует шить!
Из: Tallinn+Fuengirola
Спасибо сказали: 24085 раз(а)

Открыть альбомы


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



--------------------
Добрушанка
сообщение May 5 2008, 15:25
Сообщение #27


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



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

Рассмотрим следующий пример.
Построим сетку чертежа юбки.
Прикрепленное изображение

Все точки, как это описано в построении, будем откладывать от точки T.
В начале программы введем все необходимые мерки. Затем, приняв точку T за начало координат, вычислим координаты всех остальных точек в соответствии с тем, как это описано в методике построения.

Sub ubka()

' Ввод мерок
Sb = 50
' мерка Сб
Psb = 2
' прибавка Псб к мерке Сб
Dizd = 60
' длина изделия
TB = 20
' длина от талии до бедер

Sb = Sb + Psb
' переменную Sb сразу увеличим на прибавку

' Описываем все точки
Dim T(0 To 2) As Double
Dim T1(0 To 2) As Double
Dim T2(0 To 2) As Double
Dim B(0 To 2) As Double
Dim B1(0 To 2) As Double
Dim B2(0 To 2) As Double
Dim H(0 To 2) As Double
Dim H1(0 To 2) As Double
Dim H2(0 To 2) As Double

' Зададим координаты точки T, от которой мы будем все отсчитывать
T(0) = 0: T(1) = 0: T(2) = 0

' Вычисляем координаты каждой точки относительно точки T
H(0) = T(0): H(1) = T(1) - Dizd: H(2) = 0
' откладываем точку H вниз от точки Т на величину Dizd
B(0) = T(0): B(1) = T(1) - TB: B(2) = 0
' откладываем точку B вниз от точки Т на величину TB

T1(0) = T(0) + Sb: T1(1) = T(1): T1(2) = 0
' откладываем точку T1 вправо от точки Т на величину Sb
B1(0) = B(0) + Sb: B1(1) = B(1): B1(2) = 0
' откладываем точку B1 вправо от точки B на величину Sb
H1(0) = H(0) + Sb: H1(1) = H(1): H1(2) = 0
' откладываем точку H1 вправо от точки H на величину Sb

T2(0) = T(0) + 0.5 * Sb - 1: T2(1) = T(1): T2(2) = 0
' откладываем точку T2 вправо от точки Т на величину 0.5*Sb-1
B2(0) = B(0) + 0.5 * Sb - 1: B2(1) = B(1): B2(2) = 0
' откладываем точку B2 вправо от точки B на величину 0.5*Sb-1
H2(0) = H(0) + 0.5 * Sb - 1: H2(1) = H(1): H2(2) = 0
' откладываем точку H2 вправо от точки H на величину 0.5*Sb-1

Dim lineObj As AcadLine

Set lineObj = ThisDrawing.ModelSpace.AddLine(T, T1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(B, B1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(H, H1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(T, H)
Set lineObj = ThisDrawing.ModelSpace.AddLine(T1, H1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(T2, H2)

ZoomAll
End Sub

Прикрепленное изображение

Здесь, например, чтобы вычислить координаты точки H, относительно точки T, нужно от координаты Y точки T отнять Dizd, а координату X точки H оставить такой же, как и координата X точки T.

Сообщение отредактировал Добрушанка - May 5 2008, 15:37


Спасибо сказали:
Добрушанка
сообщение May 5 2008, 15:34
Сообщение #28


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(Pavelina @ May 5 2008, 12:34) *

...Или в процессе построения для определения координат я могу пользоваться и другими, уже созданными точкам или участками чертежа?

Pavelina, возможен и второй вариант, который Вы написали.
Для этого в программе координаты точки T можно определить не равными нулю (как в предыдующем случае), а равными координатам созданной ранее точки, от которой Вы захотите вести отсчет начала координат. Тогда в строчке T(0) = 0: T(1) = 0: T(2) = 0 вместо нуля вы введете другие числа. Больше нигде ничего менять в программе не нужно.
Добрушанка
сообщение May 5 2008, 15:44
Сообщение #29


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(цветы @ May 5 2008, 11:11) *

И расскажите подробнее о сохранении VB у меня все чертежи сохраняются обычными файлами в CAD и при открытии не получается загрузить, приходится открывать папку и находить обычный файл-рисунок dwg.

Я рассказывала в первом посте как сохранять проекты VB. Они сохраняются отдельно от файла с чертежом dwg, и имеют расширение dvb. Программа будет строить чертеж в том документе, который активен в АвтоКаде.


Добрушанка
сообщение May 5 2008, 16:15
Сообщение #30


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



QUOTE(цветы @ May 5 2008, 11:11) *

Прикрепленное изображение
В этом чертеже хотела построить отрезок H1H2=65 - А1А2=64 А3А4 =63 с разными сторонами и ширина А2Н1=26 А3Н1=28 Напоминающий построение юбки


Вот исправленный вариант Вашей программы.
Sub P()
'Построить прямоугольник, где A1A2=64, H1H2=65, A3A4=63 и A2H1=26, A3H1=28

a = 64
b = 54
c = 63
d = 26
t = 65

'Описание точек построения
Dim A1(0 To 2) As Double
Dim A2(0 To 2) As Double
Dim A3(0 To 2) As Double
Dim A4(0 To 2) As Double
Dim H1(0 To 2) As Double
Dim H2(0 To 2) As Double

'Вычисляем координаты точек
A1(0) = 0: A1(1) = 0: A1(2) = 0:
A2(0) = 0: A2(1) = a: A2(2) = 0:
A3(0) = b: A3(1) = c: A3(2) = 0:
A4(0) = b: A4(1) = 0: A4(2) = 0:
H1(0) = d: H1(1) = t: H1(2) = 0:
H2(0) = d: H2(1) = 0: H2(2) = 0: ' В этой строчке была ошибка

' Строим отрезки, соединяя соответствующие точки
Dim lineObj As AcadLine

Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A2)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A2, H1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(H1, A3)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A3, A4)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A4)
Set lineObj = ThisDrawing.ModelSpace.AddLine(H1, H2)

ZoomAll
End Sub


Natalya
сообщение May 6 2008, 09:05
Сообщение #31


Участник
Из: Melbournск
Спасибо сказали: 4896 раз(а)

Открыть альбомы


Добрушанка, книжку порекомендуйте пожалуста по VB
Я как раз собираюсь книги заказывать.


--------------------
Добрушанка
сообщение May 6 2008, 09:10
Сообщение #32


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



Книгу порекомендовать не могу, их много, я не пользовалась ни одной. Если мне нужна какая-то информация, то я ищу ее в интернете.
Добрушанка
сообщение May 7 2008, 14:37
Сообщение #33


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



Покажу, как изменяются координаты точки при сдвиге вправо, влево, вверх или вниз.
Прикрепленное изображение
Или на VB:
Прикрепленное изображение
Добрушанка
сообщение May 7 2008, 15:48
Сообщение #34


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



В VB есть (как и во многих других языках программирования) возможность повторяющиеся части программы оформлять в виде подпрограмм.
Рассмотрим пример нахождения длин сторон ромба, который образован точками A1, A2, A3 и A4 (см. рисунок в предыдущем посте). Выделим в отдельную подпрограмму нахождение расстояния между двумя точками.
Подпрограммы в VB можно описывать как до основной программы, так и после.
Вот сама программа

Sub PodProg()
a = 6
b = 8
' Описание точек
Dim A0(0 To 2) As Double
Dim A1(0 To 2) As Double
Dim A2(0 To 2) As Double
Dim A3(0 To 2) As Double
Dim A4(0 To 2) As Double

' Введем координаты точек
A0(0) = 0: A0(1) = 0: A0(2) = 0:
A1(0) = A0(0) + a: A1(1) = A0(1): A1(2) = 0:
A2(0) = A0(0): A2(1) = A0(1) + b: A2(2) = 0:
A3(0) = A0(0) - a: A3(1) = A0(1): A3(2) = 0:
A4(0) = A0(0): A4(1) = A0(1) - b: A4(2) = 0:

' Построим ромб
Set lineobj = ThisDrawing.ModelSpace.AddLine(A1, A2)
Set lineobj = ThisDrawing.ModelSpace.AddLine(A2, A3)
Set lineobj = ThisDrawing.ModelSpace.AddLine(A3, A4)
Set lineobj = ThisDrawing.ModelSpace.AddLine(A4, A1)

' Найдём длины сторон ромба с помощью подпрограммы Dlina
s1 = Dlina(A1(0), A1(1), A2(0), A2(1))
' Вычисляем расстояние между точками A1 и A2
MsgBox "Длина первой стороны=" & s1
' Выводим сообщение

s2 = Dlina(A2(0), A2(1), A3(0), A3(1))
' Вычисляем расстояние между точками A2 и A3
MsgBox "Длина второй стороны=" & s2
' Выводим сообщение

s3 = Dlina(A3(0), A3(1), A4(0), A4(1))
' Вычисляем расстояние между точками A3 и A4
MsgBox "Длина третьей стороны=" & s3
' Выводим сообщение

s4 = Dlina(A4(0), A4(1), A1(0), A1(1))
' Вычисляем расстояние между точками A4 и A1
MsgBox "Длина четвёртой стороны=" & s4
' Выводим сообщение

ZoomAll
End Sub

' Сама подпрограмма Dlina
Function Dlina(x1, y1, x2, y2) As Double
Dlina = Sqr((x1 - x2) ^ 2 + (y1 - y2) ^ 2)
End Function

Прикрепленное изображение

Чтобы VB знал, какая у вас основная программа, нужно чтобы курсор стоял в любом месте основной программ перед тем, как запустить программу. В нашем случае нужно, чтобы курсор находился в программе PodProg().

Сообщение отредактировал Добрушанка - May 7 2008, 16:02
Цветы
сообщение May 7 2008, 19:41
Сообщение #35


Участник
Из: Алмата,Казахстан
Спасибо сказали: 213 раз(а)

Открыть альбомы


QUOTE(Добрушанка @ May 5 2008, 17:15) *

Вот исправленный вариант Вашей программы.
Sub P()
' Строим отрезки, соединяя соответствующие точки
Dim lineObj As AcadLine

Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A2)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A2, H1)
Set lineObj = ThisDrawing.ModelSpace.AddLine(H1, A3)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A3, A4)
Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A4)
Set lineObj = ThisDrawing.ModelSpace.AddLine(H1, H2)

ZoomAll
End Sub


При построении любом постоянно будут писаться эти выражения (Set lineObj = ThisDrawing.ModelSpace.AddLine) или меняться
Только добавление точек будет, а выражения эти же, Да


--------------------
"Каждый может ошибиться", - сказал ежик, слезая с кактуса.
Добрушанка
сообщение May 7 2008, 20:22
Сообщение #36


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A2)
Это выражение строит отрезок, соединяющий две точки.
Если нам нужно, например, построить окружность, то мы вместо AddLine(A1, A2) запишем AddCircle(centerPoint, radius) и получим
Set сObj = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
Цветы
сообщение May 13 2008, 22:55
Сообщение #37


Участник
Из: Алмата,Казахстан
Спасибо сказали: 213 раз(а)

Открыть альбомы


[quote name='Добрушанка' date='May 7 2008, 21:22' post='93787']
Set lineObj = ThisDrawing.ModelSpace.AddLine(A1, A2)


Продолжение следует


--------------------
"Каждый может ошибиться", - сказал ежик, слезая с кактуса.
Добрушанка
сообщение May 15 2008, 15:10
Сообщение #38


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



Сейчас на примере статьи Юбка Злачевской я покажу, как написать программу по построению юбки.
Нам понадобятся следующие мерки. Все значения берем из этой статьи.
CODE
'Ввод мерок
Px = 2
Py = 8
Bx = 4
By = 23
Zx = 5.2
Zy = 18
Dp = 109.5
Db = 110
Dz = 110
d1 = 19
D2 = 26.2
OT = 80
OB = 106

Поскольку VB воспринимает одинаково переменные d и D, то d мы обозначили через d1, а D через D2.
Проведем необходимые вычисления (все обозначения и рассуждения взяты из указанной выше статьи).
CODE
'Вычисления
s = (Ob - OT) / 2
RP = (Px / (Px + Bx + Zx)) * s
RB = (Bx / (Px + Bx + Zx)) * s
RZ = (Zx / (Px + Bx + Zx)) * s

OO1 = D2 / 2 - (d1 / 2 + Px)

Shz = Ob / 4 + OO1 'Ширина задней детали
Shp = Ob / 4 - OO1 'Ширина передней детали

' Распределение боковой вытачки
RBokP = Shp - (OT / 4 + RP)
RBokZ = Shz - (OT / 4 + RZ)


Сообщение отредактировал Добрушанка - May 15 2008, 15:12
Добрушанка
сообщение May 15 2008, 15:18
Сообщение #39


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



А теперь непосредственно само построение. Я цитирую текст из статьи. После каждого предложения я буду показывать, как это запрограммировать.
Добавлю рисунок того, что мы будем строить (взят также из статьи, но я добавила обозначения нескольких точек).
Прикрепленное изображение
"...Проводим горизонтальную линию, являющуюся линией низа юбки.
По центру ставим засечку и поднимаем вверх перпендикуляр, на котором откладываем длину юбки по боку..."

Началом отсчета мы сделаем точку N. Итак, эта точка имеет координаты
N(0)=0:N(1)=0:N(2)=0
Тогда Tb(0)=N(0):Tb(1)=N(1)+Db:Tb(2)=0
Для проверки лучше сразу соединять вычисленные точки, что мы и сделаем следующей командой
Set lineobj = ThisDrawing.ModelSpace.AddLine(N, Tb)
Но не забываем, вводя новые точки, описывать их. Т.е. каждый раз сверху нужно добавлять соответствующую строчку с описанием.
CODE
Dim N(0 To 2)  As Double
Dim Tb(0 To 2) As Double
Добрушанка
сообщение May 15 2008, 15:20
Сообщение #40


Участник
Из: Беларусь, Гомель
Спасибо сказали: 725 раз(а)



"...Влево по горизонтали откладываем ширину переднего полотнища юбки по линии бёдер, а вправо - ширину заднего полотнища по линии бедер..."
CODE
Np(0)=N(0)-Shp:Np(1)=N(1):Np(2)=0
Nz(0)=N(0)+Shz:Nz(1)=N(1):Nz(2)=0
Set lineobj = ThisDrawing.ModelSpace.AddLine(Np, Nz)

"...От полученных точек строим вверх, к линии низа, перпендикуляры, на которых соответственно откладываем длину по переду, и длину изделия сзади 60 см..."
CODE
Tp(0)=Np(0):Tp(1)=Np(1)+Dp:Tp(2)=0
Tz(0)=Nz(0):Tz(1)=Nz(1)+Dz:Tz(2)=0

Set lineobj = ThisDrawing.ModelSpace.AddLine(Np, Tp)
Set lineobj = ThisDrawing.ModelSpace.AddLine(Nz, Tz)

"...По линии бокового шва опускаемся вниз от талии на величину БY."
CODE
B1(0)=Tb(0):B1(1)=Tb(1)-By:B1(2)=0

14 Страниц V<1234>»
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



-

Мобильная версия

|Упрощённая версия Сейчас: 22nd November 2019 - 03:23