отрисоввка прарметрической 3D модели
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > отрисоввка прарметрической 3D модели

отрисоввка прарметрической 3D модели

Ответ
Поиск в этой теме
Непрочитано 11.05.2008, 10:53 #1
отрисоввка прарметрической 3D модели
bv7
 
инженер ОПС
 
Березники
Регистрация: 10.05.2008
Сообщений: 13

Доброе все мвремя суток. Гуру, нажна ваша консультация, преподавательница сказала написать программу по отрисовке объекта, до этого АС и Лисп вообще не учил. Лисп нам преподавали в течение 16 часов с перерывами между парами. Пересказали ведение из учебника пару раз, рассказали про функции, штук пять, при этом про некоторые атрибуты функций отозвались, "нафига они вообще непонятно" выдали чертежи и сказали пЕшыте.
Вот кусок кода который задаёт координаты точек, по ним в дальнейшем строится линия. Тока я чёт не то делаю потому что лисп ругется и ни чего рисовать не хотит.
Код:
[Выделить все]
(defun 3D()
(GetReal ("введи диаметр d = "))
(GetInt (Введи кол-во зубцов "z = "))
(GetInt (Введи шаг зубца "а = "))
(setq рt0(0, 0))
(setq р1(* 3 d))
(setq pt1(pt0, p1))
(setq р2(* 0.5 d))
(setq pt2(pt, p2))
(setq р3(* 2 d))
(setq pt3(pt2, p3))
(command "_line" pt0,pt1,pt2,pt3)
)
В итоге программа должна запросить у пользователя цифры, и на их остновании нарисовать объект, затем повернуть обект вокруг оси на 360 градусов, чтобы получить 3D, Предусмотреть тонирование и зуммирование детали.

Вложения
Тип файла: dwg
DWG 2004
Рисунок1.dwg (44.4 Кб, 1251 просмотров)


Последний раз редактировалось bv7, 12.05.2008 в 20:44. Причина: замена вложения
Просмотров: 8409
 
Непрочитано 11.05.2008, 14:47
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Кто ЭТО сочинил?
Profan вне форума  
 
Автор темы   Непрочитано 11.05.2008, 17:44
#3
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


Цитата:
Сообщение от Profan Посмотреть сообщение
Кто ЭТО сочинил?
Я это сочинил, по тем примерам что нам давали, немного их изменив, все изменение состояло в том, что в качестве координат использовал переменную, в переменную соответственно до этого передаю вычисленное значение. Что я не так делаю?
P.S. тут тока начальный кусок кода, если уже этот не рабобтает смысл дальше писать.

Последний раз редактировалось bv7, 11.05.2008 в 18:08.
bv7 вне форума  
 
Непрочитано 11.05.2008, 18:17
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да здесь столько "не так", что просто челюсть отвисла. И это только кусок кода?
Вот так должны выглядить строки с функциями (get***):
Код:
[Выделить все]
 
...........................................................
(setq d (GetReal "\nВведи диаметр d = "))
(setq z (GetInt "\nВведи кол-во зубцов z = "))
(setq a (GetInt "\nВведи шаг зубца а = "))
............................................................
Чехарда с координатами - полная чепуха.
Profan вне форума  
 
Автор темы   Непрочитано 11.05.2008, 20:14
#5
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


а как реализовать отрисовку по координатам, чтобы использовались только d, z, a.
Все равно не получается, строки с get... поправил, и всеравно ругается "ошибка: no function definition:PT0" это я так понимаю неверно заданы координаты точки, а как их туда передавать то?
Сперва выражение посчиталось, это значение передалось переменной и эта переменная уже участвует в построении объекта. Во вложении нарисовано, что должно в итоге получиться, только ещё объём доюавить надо.
Я же пока пытаюсь нарисовать хотя бы пару линий от этого обекта.
bv7 вне форума  
 
Непрочитано 11.05.2008, 21:47
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А что, у вас нет никакой литературы по AutoLisp? Можно, конечно, переписать за вас весь код - только это никому не интересно, даже вам, если вы не знаете элементарных функций. Вот попробуйте расшифровать выражение
Код:
[Выделить все]
 
(setq pt1(pt0, p1))
Profan вне форума  
 
Автор темы   Непрочитано 11.05.2008, 22:12
#7
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


Цитата:
Сообщение от Profan Посмотреть сообщение
Код:
[Выделить все]
 
(setq pt1(pt0, p1))
переменной pt1 присваиваются значения pt0 и p1.

ну да ... нелогично, сам вижу, а как тогда реализовать задуманное, как передать координаты точки по х и по у?
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.

Последний раз редактировалось bv7, 11.05.2008 в 22:18.
bv7 вне форума  
 
Непрочитано 11.05.2008, 22:25
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


(setq pt1 (list x y))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 11.05.2008, 23:02
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Сделать, что ли?
---
Добавлено: размеры указаны далеко не все. Это так, для справки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.05.2008, 00:43
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сделать, что ли?
Да если ты сделаешь, то тот преподователь навряд-ли пока не запустит поймет что это за лямбды в перепешку с vla и dfx'ом, да и когда запустит вряд-ли поймет, какое они отношение к лиспу имеют. И господину BV7 точно "провал" светит.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.05.2008, 20:29
#11
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


Товарищи, на мой взгляд мы все дальше удаляемся от темы, помогите пожалуйста. По словам преподавателя эта задачка лёгкая, по отношению к другим заданиям, тока с её методами преподавания, она становится архи сложной. Чесслово я уже всесь запутался, помогите пожалста.
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.
bv7 вне форума  
 
Непрочитано 12.05.2008, 20:55
#12
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сделать, что ли?
Учти, это ведь только кусок кода.
И непонятно, что предполагается делать с переменными p1, p2. p3.
А переменнные z и a вообще в этом коде не используются.
Profan вне форума  
 
Автор темы   Непрочитано 12.05.2008, 21:43
#13
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


Задача стоит так: отрисовать трёхмерную параметрическую модель детали (См. вложение). Отрисовка происходит по задаваемым пользователем значениям.
Я над этим рисунком детали уже недели 3 бьюсь, силы на исходе, нифига не получается. Справку АвтоКАДа обчитался уже, примеры в Самоучителе по АвтоКАДу теже самые, рисуют парковую дорожку, при чём такими средствами, про которые нам и не говорили совсем.
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.
bv7 вне форума  
 
Непрочитано 13.05.2008, 00:30
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Блин, а габариты кто задавать будет? Пушкин? Вот тебе вариант, если разберешься. Говорю сразу - контроля правильности ввода никакого; кое-что сделано на командах (хотя это и не совсем правильно, но в данном случае покатит), код можно упрощать и ускорять до невозможности.
Код:
[Выделить все]
(defun test (/ diam range step tmp tmp_pt fit rad pt_lst sub)
  (if (and (setq diam (getdist "\nДиаметр : "))
           (setq range (getint "\nКоличество зубьев : "))
           (setq step (getdist "\nШаг зубца : "))
           ) ;_ end of and
    (progn
      (setq fit    10. ; Принятое значение фаски
            rad    (* 0.15 diam)
            sub    60. ; Принятое падение
            step   (/ step 2.)
            pt_lst (append
                     (list
                       (list 10 fit diam)
                       (list 10 0. (+ diam fit))
                       (list 10 0. (* 4. diam))
                       (list 10 (* 0.5 diam) (* 4. diam))
                       (list 10 (* 0.5 diam) (+ (- (* 4. diam) sub) rad))
                       (cons 42 (setq tmp (/ (sin (setq tmp (/ pi 8.))) (cos tmp))))
                       (list 10 (+ (* 0.5 diam) rad) (- (* 4. diam) sub))
                       (list 10 (- (* 2.5 diam) rad) (- (* 4. diam) sub))
                       (cons 42 tmp)
                       (cons
                         10
                         (setq
                           tmp_pt (list (* 2.5 diam) (+ (- (* 4. diam) sub) rad))
                           ) ;_ end of setq
                         ) ;_ end of cons
                       (cons 10 (setq tmp_pt (polar tmp_pt (/ pi 2.) (- diam rad))))
                       (cons 10 (setq tmp_pt (polar tmp_pt 0. diam)))
                       (cons 10
                             (setq tmp_pt (polar tmp_pt (* pi 1.5) (- diam rad)))
                             ) ;_ end of cons
                       (cons 42 tmp)
                       (cons 10
                             (setq tmp_pt (list (+ rad (car tmp_pt))
                                                (- (cadr tmp_pt) rad)
                                                ) ;_ end of list
                                   ) ;_ end of setq
                             ) ;_ end of cons
                       (cons 10 (setq tmp_pt (polar tmp_pt 0. (- (* 2. diam) rad))))
                       ) ;_ end of list
                     ((lambda (/ res)
                        (repeat range
                          (setq res (append res
                                            (list
                                              (cons 10
                                                    (setq tmp_pt
                                                           (list (+ (car tmp_pt) step)
                                                                 (+ (cadr tmp_pt) step)
                                                                 ) ;_ end of list
                                                          ) ;_ end of setq
                                                    ) ;_ end of cons
                                              (cons 10
                                                    (setq tmp_pt
                                                           (list (+ (car tmp_pt) step)
                                                                 (- (cadr tmp_pt) step)
                                                                 ) ;_ end of list
                                                          ) ;_ end of setq
                                                    ) ;_ end of cons
                                              ) ;_ end of list
                                            ) ;_ end of append
                                ) ;_ end of setq
                          ) ;_ end of repeat
                        (setq tmp_pt (cdr (last res)))
                        res
                        ) ;_ end of lambda
                      )
                     (list
                       (cons 10 (setq tmp_pt (polar tmp_pt 0. (- diam rad))))
                       (cons 42 tmp)
                       (cons 10
                             (setq tmp_pt
                                    (list (+ (car tmp_pt) rad) (+ (cadr tmp_pt) rad))
                                   ) ;_ end of setq
                             ) ;_ end of cons
                       (cons
                         10
                         (setq
                           tmp_pt (polar tmp_pt (/ pi 2.) (- (* 4. diam) fit rad))
                           ) ;_ end of setq
                         ) ;_ end of cons
                       (cons 10
                             (setq tmp_pt
                                    (list (+ (car tmp_pt) fit) (+ (cadr tmp_pt) fit))
                                   ) ;_ end of setq
                             ) ;_ end of cons
                       (cons
                         10
                         (setq tmp_pt (polar tmp_pt 0. (- (* 1.5 diam) (* 2. fit))))
                         ) ;_ end of cons
                       (cons 10
                             (setq tmp_pt
                                    (list (+ (car tmp_pt) fit) (- (cadr tmp_pt) fit))
                                   ) ;_ end of setq
                             ) ;_ end of cons
                       (cons
                         10
                         (setq tmp_pt (polar tmp_pt (* 1.5 pi) (- (* 4. diam) fit)))
                         ) ;_ end of cons
                       (cons 10 (setq tmp_pt (polar tmp_pt 0. diam)))
                       (cons 10
                             (setq tmp_pt
                                    (list (+ (car tmp_pt) (* 0.5 diam)) (* 2. diam))
                                   ) ;_ end of setq
                             ) ;_ end of cons
                       (cons 10 (setq tmp_pt (polar tmp_pt 0. (* 0.5 diam))))
                       (cons 10 (polar tmp_pt (* 1.5 pi) (- diam fit)))
                       (cons 10 (list (- (car tmp_pt) fit) diam))
                       ) ;_ end of list
                     ) ;_ end of list
            ent    (entmakex
                     (append
                       (list
                         '(0 . "LWPOLYLINE")
                         '(100 . "AcDbEntity")
                         '(100 . "AcDbPolyline")
                         (cons 90 (length pt_lst))
                         '(70 . 1)
                         '(43 . 0.)
                         '(38 . 0.)
                         '(39 . 0.)
                         ) ;_ end of list
                       pt_lst
                       ) ;_ end of apply
                     ) ;_ end of entmakex
            ) ;_ end of setq
      (command "_.revolve" ent "" "_none" '(0. 0.) "_none" '(100. 0.) 360.)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
---
Добавлено:
В аттаче красным выделены те габариты, которые я не понял где задаются.
Вложения
Тип файла: dwg
DWG 2004
Рисунок1-1.dwg (59.2 Кб, 670 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.05.2008, 17:55
#15
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


Спасибо огромное за вариант, sub можно принять равным диаметру, ... только где это в коде поправить? Теперь буду с кодом разбираться, комментарии писать, ток наверно "без бутылки не разобраться".
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.
bv7 вне форума  
 
Непрочитано 13.05.2008, 21:10
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Ну, во-первых, проглядев код повнимательнее, сразу увидишь, где назначается sub и чему оно равно. Во-вторых, не "без бутылки", а "без DXF Reference"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.05.2008, 22:51
#17
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


прошу прощения за своё невежество, а что такое DXF Reference
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.
bv7 вне форума  
 
Непрочитано 14.05.2008, 22:44
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


См.изображение
Миниатюры
Нажмите на изображение для увеличения
Название: 001.jpg
Просмотров: 119
Размер:	64.9 Кб
ID:	6423  
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.05.2008, 16:45
#19
bv7

инженер ОПС
 
Регистрация: 10.05.2008
Березники
Сообщений: 13
<phrase 1=


сенкс
__________________
Жизнь хороша, если правильно подобрать антидепрессанты.
bv7 вне форума  
 
Непрочитано 15.05.2008, 22:43 Я в отчаянии, помогите...
#20
Ju1iya

Студентка
 
Регистрация: 15.05.2008
Сообщений: 9


Приветик всем. Очень нужна ваша помошь мальчики, уже не знаю что делать... У меня проблема как и у BV7, т.к. учимся вместе (спасибо ему что посоветовал ваш форум). На уроках нам выдали, наверно минимум основы - defun, setq, command, ну может ещё пару команд и задание. Здавать надо уже на этой неделе, а написать программу так и не могу. Из языков программирования учила то Бейсик и Паскаль, и те в школе. Из того, что смогла понять из программы BV7 и своих соображений, получилось нечто вроде этого:

Код:
[Выделить все]
(defun c:auto ()
 (if (and (setq b (getint "\nВведите длинну: "))
          (setq h (getint "\nВведите ширину: "))
          )
  (progn
      (setq r 0.50)
      (setq pt1 '(0 100))
      (setq pt2 '(0 125))
      (setq pt3 '(40 125))
      (setq pt4 '(40 15))
      (setq pt5 '(90 15))
      (command "_line" pt1 pt2 pt3 pt4 pt5 "_C")
      (setvar "FILLETRAD" r)
      (command "_fillet" pt4 15 pt5)
  )
 )
)
Строго не судите, но дальше никак сдвинутся не могу - связка угла между 2 линиями почему то не получается. И вы делаете с помощью команды list - нам её не давали и я не совсем понимаю как она работает. Получится должно нечто вроде этого auto.dwg . Буду всем очень признательна за малейшую помошь и объяснения
Ju1iya вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > отрисоввка прарметрической 3D модели



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Восстановление первоначального вида модели после 3d Orbit в sasha_lif AutoCAD 6 18.06.2008 22:44
AA2008: Как создать план 3d модели на определенной отметке Vildar Вертикальные решения на базе AutoCAD 6 12.02.2008 12:52
Подготовка рабочих чертежей по 3D модели constructorl AutoCAD 21 07.02.2007 19:50
2D чертежи из 3D модели. Как? Karales AutoCAD 1 16.10.2006 18:29
3d модели на плоскости Teplinski AutoCAD 3 26.05.2006 09:29