Добрушанка Опубликовано 17 февраля, 2009 Автор Поделиться Опубликовано 17 февраля, 2009 Мне нужно нарисовать дугу (центр, начало, длина). Sub Test()x1 = 3: y1 = 5 ' началоxc = 8: yc = 7 ' центр дугиL = 2 ' длина дугиSet arc1 = AddArcPCL(x1, y1, xc, yc, L) 'первая дугаSet arc1 = AddArcPCL(x1, y1, xc, yc, -L) 'втораяZoomAllEnd SubFunction AddArcPCL(x1, y1, xc, yc, L) As AcadArcR = Sqr((x1 - xc) ^ 2 + (y1 - yc) ^ 2)If R = 0 Then MsgBox "Error: No Arc" AddArcPCL = EmptyElsePi = 3.14159265358979If x1 = xc Then If y1 > yc Then Angle1 = Pi / 2 Else Angle1 = -Pi / 2 End IfElse Angle1 = Atn((y1 - yc) / (x1 - xc)) If x1 < xc Then Angle1 = Angle1 + PiEnd Ifa2 = L / RAngle2 = Angle1 + a2If Angle1 > Angle2 Then p = Angle2 Angle2 = Angle1 Angle1 = pEnd IfDim centerPoint(0 To 2) As DoublecenterPoint(0) = xc: centerPoint(1) = yc: centerPoint(2) = 0Set AddArcPPR = ThisDrawing.ModelSpace.AddArc(centerPoint, R, Angle1, Angle2)End IfEnd Function Ссылка на сообщение Поделиться на другие сайты Поделиться
Rochery Опубликовано 28 февраля, 2009 Поделиться Опубликовано 28 февраля, 2009 Добрушанка, скажите пожалуйста а не могли бы вы поэтапно рассказать что и почему вы здесь написали? Так, как рассказывали как юбку нужно программировать. Я хочу сама научиться писать алогиртмы а не каждый раз спрашитавть как делоть то или это. Хочеться узнать с чего нужно начинать и на что обратить внемание когда собараешся что-то программировать. Можно на пример брать вами написан алгоритм арки.Буду очень благодарна, поскольку без этого я немогу двигаться в перед. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 1 марта, 2009 Автор Поделиться Опубликовано 1 марта, 2009 Добрушанка, скажите пожалуйста а не могли бы вы поэтапно рассказать что и почему вы здесь написали? ... Можно на пример брать вами написан алгоритм арки. На VB арку можно построить только одной функцией Set AddArcPPR = ThisDrawing.ModelSpace.AddArc(centerPoint, R, Angle1, Angle2) Для того, чтобы воспользоваться этой функцией, нам нужно знать координаты центра, радиус, начальный угол и конечный угол.Далее вы определяетесь для себя, по каким данным вы хотите построить арку. В последнем примере мы строили арку, зная координаты центра, координаты начала дуги и ее длину.Из этих данных нам нужно получить радиус, начальный и конечный углы. Радиус мы можем посчитать, как расстояние от центра до начальной точки дуги.R = Sqr((x1 - xc) ^ 2 + (y1 - yc) ^ 2) Теперь найдем начальный угол, как арктангенс отношения разности ординат к раности абсцисс центра и начальной точки.Angle1 = Atn((y1 - yc) / (x1 - xc)) В случае, когда x1=xc, арктангенс не существует, поэтому нужно выполнить проверку входных данных. Что мы и делаем в следующих строчках If x1 = xc Then If y1 > yc Then Angle1 = Pi / 2 Else Angle1 = -Pi / 2 End IfElse Angle1 = Atn((y1 - yc) / (x1 - xc)) If x1 < xc Then Angle1 = Angle1 + PiEnd If Вычислим разность между начальным и конечным углом арки, зная длину арки и ее радиус. a2 = L / RТеперь, зная начальный угол и разность углов, мы можем вычислить конечный угол арки.Angle2 = Angle1 + a2 Осталось только проверить, чтобы начальный угол был меньше конечного. If Angle1 > Angle2 Then p = Angle2 Angle2 = Angle1 Angle1 = pEnd If Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 2 марта, 2009 Поделиться Опубликовано 2 марта, 2009 Долго не выходила - не работал компьютер полетела материнская плата. Почти все построения потеряны. Но на форуме сохранились какие, то и собрала пока. Остальное заного строить прийдется, зато пройденный материал повторюВернулась ко всем урокам и так пока не дойду до умаPointR = SavePLine.Coordinate(1)pp = PointR(2): UserForm1.TextBox1.text = IntToStr(pp) -PointR = SavePLine.Coordinate(1)PointR(2) = StrToInt(UserForm1.TextBox1.text)SavePLine.Coordinate(1) = PointRПока не доходит какие значения нужно вставить Я поняла что Coordinate(1)это значение кнопки Label1 Допустим значение кноки Label1 я заполнила так Указала di, а в ControlTipText написала (длина рубашки) Следом для кнопки TextBox1 я написала в ControlTipText (длина рубашки)В этой строке я вместо pp пыталась подставить значение и ничего не получаетсяPointR = SavePLine.Coordinate(1) PointR(2): UserForm1.TextBox1.text = IntToStr(di) -В этой строкеPointR = SavePLine.Coordinate(1)PointR(2) = StrToInt(UserForm1.di.text)SavePLine.Coordinate(1) = PointRМеняю значения и программа пчихает на меня Что я делаю не так "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 3 марта, 2009 Поделиться Опубликовано 3 марта, 2009 Sub RestoreData() Dim PointR As Variant Dim pp As Double Call RestoreObject Подскажите какое значение должно быть под именем КоординатыConst_Pi.doc "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 3 марта, 2009 Поделиться Опубликовано 3 марта, 2009 (изменено) Да, на чертеже она есть, но нет координат в программе... я заметила что для VBA важна последовательность операций, то есть если точка К5 начальная, то и описывать ее координаты следует вначале, странно что редактор ошибки не выдал.... жду вашу программку где нужно найти точки пересечения окружностей:) Придется заново начинать строить свой пиджак. Половина выкроек слетело из-за неисправности компа Был в ремонте 2 недели.А пока у меня есть просьба, посмотрите пожалуйста мой документ ворд и подскажите какие координаты надо писать Так пока и не получается получить формую. А Добрушанки пока видно некогда. У вас уже получилось. А то я вставляю данные и программа выдает ошибку и правильно я разместила программки с подпрограммами.Буду очень признательна вам и вашей помощи. Изменено 3 марта, 2009 пользователем Цветы "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 4 марта, 2009 Автор Поделиться Опубликовано 4 марта, 2009 Менять нужно данные только в процедуре InitVaribles(). Вы это сделали правильно. В других процедурах формы меняется только КОЛИЧЕСТВО строк. Если у Вас 12 переменных (я поняла, что Вы столько используете для построения), то ничего менять не нужно, поскольку в рассмотренном примере было столько же переменных. Тексты процедур RestoreData(), SaveData() возьмите такие, как в примере на форуме, и НИЧЕГО в них не меняйте. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 4 марта, 2009 Поделиться Опубликовано 4 марта, 2009 (изменено) Менять нужно данные только в процедуре InitVaribles(). Вы это сделали правильно. В других процедурах формы меняется только КОЛИЧЕСТВО строк. Если у Вас 12 переменных (я поняла, что Вы столько используете для построения), то ничего менять не нужно, поскольку в рассмотренном примере было столько же переменных. Тексты процедур RestoreData(), SaveData() возьмите такие, как в примере на форуме, и НИЧЕГО в них не меняйте. Спасибо! Я восприняла, что данные координат. У меня видно где-то идет ошибка в записи так как если я значения не меняю а просто копирую текст с форума и вставляю в свое построение, то ничего не показывает Может неправильно вставила в свое построение Допустим надо было вставить в конце построения. Изменено 4 марта, 2009 пользователем Цветы "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Rochery Опубликовано 5 марта, 2009 Поделиться Опубликовано 5 марта, 2009 Добрушанка, Где вы находите эти формулы: Angle1 = Atn((y1 - yc) / (x1 - xc)) Angle1 = Pi / 2? Я в математике несильна, но и в интернете не могу их найти. Спасибо. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 5 марта, 2009 Автор Поделиться Опубликовано 5 марта, 2009 Добрушанка, Где вы находите эти формулы?Это проходят в школьном курсе математики. Ссылка на сообщение Поделиться на другие сайты Поделиться
Rochery Опубликовано 6 марта, 2009 Поделиться Опубликовано 6 марта, 2009 Это проходят в школьном курсе математики.Извените пожалуйста, я не знала... Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 6 марта, 2009 Автор Поделиться Опубликовано 6 марта, 2009 Извините, не хотела Вас обидеть. Математика - это моя профессия. Ссылка на сообщение Поделиться на другие сайты Поделиться
"марина Опубликовано 12 марта, 2009 Поделиться Опубликовано 12 марта, 2009 (изменено) Всем доброго времени суток. Какая полезная темка!!! Заболела Автокадом основательно. Спасибо Добрушанка, получила кучу информации и массу удовольствия программируя построение основы брюк. Готовые подпрограммки здорово облегчают жизнь и ускоряют процесс. Строю по Злачевской. Передняя часть практически готова, а вот задняя заставляет задуматься. По методике предусмотрена прибавка на шаг до 3 см. Суть в том, что верхнюю часть основы надо повернуть вокруг определенной точки на выбранную прибавку (до3 см.), при этом нижняя часть не изменяется. Не знаю, понятно ли объяснила. Этот метод применяется при моделировании - например перевод грудной выточки в плечевую. Вопрос: можно ли каким-то образом описать геом. фигуру, в данном случае трапеция, с помощью точек и повернуть ее вокруг точки, принадлежащей этой трапеции? Или придется искать с помощью пересечения окружностей новое местоположение каждой точки? Или есть какой-либо другой вариант? Изменено 12 марта, 2009 пользователем "марина Ссылка на сообщение Поделиться на другие сайты Поделиться
PAS Опубликовано 13 марта, 2009 Поделиться Опубликовано 13 марта, 2009 Добрушанка, а у меня тоже вопросик по форме: В главном меню создается дополнительный пункт "Одежда". Чтобы запустить всю программу, нужно запустить макрос Init().Пункт "Одежда" у меня создается, но для этого каждый раз при открытии файла приходится запускать макрос Init() заново. Я что-то не так делаю? Что надо сделать, чтобы пункт "Одежда" сразу загружался, как в Вашей программе основы с рукавом? (Программку делаю для племянниц, боюсь запускать их в макросы...) Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 14 марта, 2009 Поделиться Опубликовано 14 марта, 2009 Извините, не хотела Вас обидеть. Математика - это моя профессия. Добрушаночка так у меня и не получается. Что не так не нахожу .Даже пиджак забросила строить, все пытаюсь, чтобы программка в макросе вышла. И еще если мы будем также программировать брюки макрос тот же только меняется в макросе наименование модели Например если сейчас у нас юбка, а потом просто нужно менять на Брюки или макрос будет другой для нихSub_ubka__.zip "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 15 марта, 2009 Автор Поделиться Опубликовано 15 марта, 2009 Что надо сделать, чтобы пункт "Одежда" сразу загружался, как в Вашей программе основы с рукавом? Для того, чтобы меню "Одежда" загружалось автоматически при открытии файла с расширением dwg, нужно выполнить следующие шаги.1. Создать файл, например Чертеж1.dwg2. Зайти в меню Сервис/Макросы/Макросы...3. Выбрать внизу Чертеж1.dwg 4. Вверху написать имя макроса, например Init.Нажать кнопку Создать.5. Вместо Sub Init()End Subвставить весь ваш код. Теперь вся ваша программа находится внутри файла Чертеж1.dwg, а не в файле проекта VB. 6. Перейдем на ThisDrawingи выберем AcadDocument7. Справа выбрать Activate 8. Записать следующий код Private Sub AcadDocument_Activate()Call InitEnd Sub 9. Сохранить файл и открыть его заново.P.S. Если у вас уже есть готовая форма, которую вы хотите использовать и здесь, а не строить ее заново, то нужно в файле с расширением dvb (где содержится форма) сделать экспорт формы в файл, а в новом документе (в примере Чертеж1.dwg) сделать импорт формы из файла. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 15 марта, 2009 Автор Поделиться Опубликовано 15 марта, 2009 Вопрос: можно ли каким-то образом описать геом. фигуру, в данном случае трапеция, с помощью точек и повернуть ее вокруг точки, принадлежащей этой трапеции? Или придется искать с помощью пересечения окружностей новое местоположение каждой точки? Или есть какой-либо другой вариант? Можно повернуть каждую точку на один и тот же угол, вокруг заданной, при помощи процедуры rotate_beta(x1, y1, x2, y2, beta, LL, x, y). Этот угол можно вычислить. Но честно говоря, мне кажется, что по сложности будет одинаково, что и строить с помощью пересечения окружностей каждую точку. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 15 марта, 2009 Автор Поделиться Опубликовано 15 марта, 2009 Добрушаночка так у меня и не получается. Что не так не нахожу .Даже пиджак забросила строить, все пытаюсь, чтобы программка в макросе вышла. И еще если мы будем также программировать брюки макрос тот же только меняется в макросе наименование модели Например если сейчас у нас юбка, а потом просто нужно менять на Брюки или макрос будет другой для нихПосмотрела Ваш вариант программы. У Вас не там были объявлены глобальные переменные. ubka01.zip Процедуру построения брюк можно сделать отдельным пунктом меню. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 15 марта, 2009 Поделиться Опубликовано 15 марта, 2009 Процедуру построения брюк можно сделать отдельным пунктом меню. Правильно я поняла, что процедура для брюк будет такая же как для юбки только в названии построения для формы и макроса нужно будет менять (юбку на имя изделия Брюки) Макрос, который дан сейчас для юбки он одинаков будет для всех построений или нет.... "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 15 марта, 2009 Автор Поделиться Опубликовано 15 марта, 2009 Можно и так, но в этом случае, у Вас будут разные проекты. Я бы делала все в одном проекте, добавив кроме юбки еще и процедуру по построению брюк. Меню "Одежда" можно дополнить еще одним пунктом "Построить брюки". Добавить мерки на форму и для брюк, поэтому увеличится количество переменных. Из-за этого нужно переписать соответствующие процедуры. Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 15 марта, 2009 Поделиться Опубликовано 15 марта, 2009 (изменено) Можно и так, но в этом случае, у Вас будут разные проекты. Я бы делала все в одном проекте, добавив кроме юбки еще и процедуру по построению брюк. Меню "Одежда" можно дополнить еще одним пунктом "Построить брюки". Добавить мерки на форму и для брюк, поэтому увеличится количество переменных. Из-за этого нужно переписать соответствующие процедуры. Вы имеете ввиду - допустим талия и бедра одинаковы и в юбке и в брюках только нужно правильно дописать процедуры и расположить мерки и тогда у меня программа будет строить и брюки одновременно с юбкой в одной форме И в построении брюк или юбке нужно внести будет подправку в обозначениях Например ОТ (От) Но тогда для построения брюк нужно еще будет ввести CommandButton как для юбки только вместо слова юбки вставить брюки или объединенно написать (Брюки и юбка) Изменено 15 марта, 2009 пользователем Цветы "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
PAS Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 Делюсь опытом использования функций измерения длины сплайна, вдруг кому пригодится: L = GetCurveLength(SplineObj1)L = GetCurveLength2(SplineObj1) Первая функция у меня работала как часы, пока программу я загружала напрямую из VB, как только загнала все в форму для мерок - работать отказалась напрочь, пришлось заменять ее на вторую, результат стал гулять в пределах 0-4 мм, зато все работает:) Ссылка на сообщение Поделиться на другие сайты Поделиться
Цветы Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 (изменено) Добрушанка, а что нужно еще добавить к программе для того, чтобы не удалять сетку построения, но и при выполнении "Одежда"-юбка сетку небыло видно, как у вас в построении рукава Да и хотлось бы чтобы вы нашли время достроить там одношовный рукав. И мерки я вставила сама в форму , так как они сами не открываются В чем причина может быть Изменено 16 марта, 2009 пользователем Цветы "Каждый может ошибиться", - сказал ежик, слезая с кактуса. Ссылка на сообщение Поделиться на другие сайты Поделиться
Добрушанка Опубликовано 16 марта, 2009 Автор Поделиться Опубликовано 16 марта, 2009 Вы имеете ввиду - допустим талия и бедра одинаковы и в юбке и в брюках ... ... нужно еще будет ввести CommandButton как для юбки только вместо слова юбки вставить брюки или объединенно написать (Брюки и юбка) Да, Вы правильно поняли, нужно создать еще одну кнопку для построения брюк, или строить одновременно по одной кнопке (как Вам нравится).Добрушанка, а что нужно еще добавить к программе для того, чтобы не удалять сетку построения, но и при выполнении "Одежда"-юбка сетку небыло видно, как у вас в построении рукава Не строить вспомогательные линии (закомментируйте соответствующие строки). И мерки я вставила сама в форму , так как они сами не открываются В чем причина может быть Когда Вы вводите мерки на форме, они сохраняются в файле dwg, который открыт в настоящий момент (где строится чертеж). Сохраните этот файл. В следующий раз откройте его и запустите программу, мерки должны появится на форме. Ссылка на сообщение Поделиться на другие сайты Поделиться
PAS Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 Добрушанка, гранд мерси! Форму благополучно импортировала, "Одежда" загружается автоматически, и все работает:)) Ссылка на сообщение Поделиться на другие сайты Поделиться
Рекомендуемые сообщения