PDA

Просмотр полной версии : Рисование параметрических поверхностей в автокаде



=FPS=Altekerve
05.06.2006, 18:50
Часто бывает нужно нарисовать поверхности, которые описываются в пространстве формулами.
Хоть гиперболу, хоть эллипсоид.
Очень легко рисовать параметрические меши в автокаде.

Вот пример подпрограммки, которая рисует разомкнутый цилиндр из сегментов 10x10.
Функция F(u v) возвращает точку (x y z)


(defun 3dmesh_plot()
(command "3dmesh" 10 10)
(setq i 0 j 0)
(while (< j 10)
(while (< i 10)
(setq u (* (/ pi 5) i) v j)
(setq pt (F u v))
(command pt)
(setq i (1+ i))
)
(setq j (1+ j) i 0)
)
)

(defun F(u v)
; это рисует цилиндр: первый в списке X, потом Y и Z коорд
(setq r 2.0)
(list (* r (cos u)) (* r (sin u)) v)
)

Сохраняем содержимое в файле, допустим, test.lsp (файл должен быть в доступном директории, например в текущем), в командной строке вводим

(load "test.lsp")

и затем

(3dmesh_plot)

Должен нарисоваться разомкнутый цилиндр. Если хотите, можете его куда-нибудь экспортировать, в 3dMax тот же.

Я специально привел упрощенную схему, чтобы понял даже самый непонятливый.

naryv
05.06.2006, 19:20
Спасибо. А какой-нибудь практический пример можно? Чтобы сделать объект таким способом с экспортом в Мах было проще(или быстрее) чем в самом Мах-е?

=FPS=Altekerve
06.06.2006, 05:56
Спасибо. А какой-нибудь практический пример можно? Чтобы сделать объект таким способом с экспортом в Мах было проще(или быстрее) чем в самом Мах-е?

Сложный вопрос. Рассматривайте это как хинт, еще один способ работы. Что уж из него можно извлечь (гиперболические мачты амерских линкоров или моделирование террейна, параметрические гайки, швеллеры и нервюры) - дело вашей фантазии, it's up to you как говорят англичане. Хотите, нарисуйте параметрическое крыло этим же методом, или фюзеляж.

Я в курсе, что в максе есть скрипты, но не видел ни одного толкового примера. С другой стороны, языка проще чем Лисп, придумать, мне кажется, невозможно.

=FPS=Altekerve
06.06.2006, 06:58
Вот, например, заменим функцию F:


(defun 3dmesh_plot()
(command "3dmesh" 6 11)
(setq i 0 j 0)
(while (< j 6)
(while (< i 11)
(setq u (* (/ pi 5) i) v j)
(setq pt (F u v))
(command pt)
(setq i (1+ i))
)
(setq j (1+ j) i 0)
)
)

(defun F(u v)
(list (* (- 10 (* 0.9 v)) (cos u)) (* (- 10 (* 0.2 v)) (sin u)) (* v 10))
)

Получим вот такую секцию фюзеляжа:

naryv
06.06.2006, 09:17
Сложный вопрос. Рассматривайте это как хинт, еще один способ работы. Это-то понятно, просто хотелось узнать - может Вы уже что-то делали таким способом, для наглядности.


Что уж из него можно извлечь (гиперболические мачты амерских линкоров или моделирование террейна, параметрические гайки, швеллеры и нервюры) - дело вашей фантазии, it's up to you как говорят англичане. Хотите, нарисуйте параметрическое крыло этим же методом, или фюзеляж. Я потому и написал - чтобы проще или быстрее было чем в Мах-е, что понятно, что можно и крыло и фюзеляж сделать так, но вопрос в трудо/время-затратах. Про гиперболические мачты - видимо хороший пример - похоже таким образом действительно будет просто и быстро их сделать.

Я в курсе, что в максе есть скрипты, но не видел ни одного толкового примера. А в папке samples Мах-а смотрели? Мне понравился PaintCylinder :).

С другой стороны, языка проще чем Лисп, придумать, мне кажется, невозможно.
Это да:).

Получим вот такую секцию фюзеляжа: Не очень хорошо видно на скриншоте - это получился конус, с одной стороны - окружность, с другой эллипс?

=FPS=Altekerve
06.06.2006, 13:29
Это-то понятно, просто хотелось узнать - может Вы уже что-то делали таким способом, для наглядности.

Еще нет. Но результаты мне нравятся.



Я потому и написал - чтобы проще или быстрее было чем в Мах-е, что понятно, что можно и крыло и фюзеляж сделать так, но вопрос в трудо/время-затратах.

Макс, с моей ТЗ, вообще одно сплошное недоразумение в плане геометрии. Я вообще не понимаю, как в нем кто-то геометрию рисует.
Привязки - не поймешь что. 2D, 3D, 2.5D. Как разметить линию или сплайн на участки равной длины или на целое число участков? Нету командной строки? Нету дубликатов команд с параметрами с клавиатуры. Если в Автокаде надо что-нибудь быстро сосчитать, пишешь в командной строке (* 2 2) и все.

Что касается последней секции фюзеляжа - работы было ровно на 30 секунд (изменить F). Сделайте за то же время такую же секцию в максе.



А в папке samples Мах-а смотрели? Мне понравился PaintCylinder :).





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

Каждое сечение - эллипс, но с разными осями. В плане и сбоку - трапеция. Формулу для F смотрим.

naryv
06.06.2006, 14:22
Еще нет. Но результаты мне нравятся. Ок, как будет какой-нибудь пример, покажите здесь?


Макс, с моей ТЗ, вообще одно сплошное недоразумение в плане геометрии. Я вообще не понимаю, как в нем кто-то геометрию рисует.
Привязки - не поймешь что. 2D, 3D, 2.5D. Как разметить линию или сплайн на участки равной длины или на целое число участков?
:) ну не всё так плохо, кое что, конечно через одно место делать приходится, а вобщем нормально:)

Нету командной строки? Как нет ? В левом нижнем оглу, она же ScriptListener Window.

Нету дубликатов команд с параметрами с клавиатуры. Есть, всё там-же , например :
Cylinder smooth:on heightsegs:5 capsegs:1 sides:18 height:10.4695 radius:10.7213 mapCoords:off transform:(matrix3 [1,0,0] [0,0,1] [0,-1,0] [60.0885,4.36545e-007,-9.987]) isSelected:on делает цилиндр.


Если в Автокаде надо что-нибудь быстро сосчитать, пишешь в командной строке (* 2 2) и все. :) Там же, только 2*2 надо писать :).


Что касается последней секции фюзеляжа - работы было ровно на 30 секунд (изменить F). Сделайте за то же время такую же секцию в максе. Верю :).


Каждое сечение - эллипс, но с разными осями. В плане и сбоку - трапеция. Формулу для F смотрим. Угу, на картинку сразу ткнул, поленился формулу смотреть :)

=FPS=Altekerve
07.06.2006, 04:00
Ок, как будет какой-нибудь пример, покажите здесь?


Что-то мне тут какой-то сарказм мерещится.

Да, все точно. Максовский скрипт аналог лиспа. И командная строка есть, только я не имел представления что это такое. И пример с рисованием параметрического меша там же есть.

Но почему он мне кажется таким неудобным, макс?
В автокаде есть лисп, в максе скрипт.
В автокаде я могу написать свое приложение на object_arx, но и в максе есть свой SDK.

Конечно, для рендеринга и текстуринга макс лучше. И в отличие от автокада есть булевы операции с сетками. Но возиться с геометрией в максе для меня почему-то мучение, в CADе я все делаю на два порядка быстрее. Дело привычки?

naryv
07.06.2006, 09:22
Что-то мне тут какой-то сарказм мерещится. Да нет, нет никакого сарказма. Просто хочется видеть - в каких конкретных случаях такой способ будет удобнее, чтобы его применять - самому выяснять - со временем несколько напряжно, а раз уж Вы занялись этим вопросом - хочется "на халяву" получить совет - в таком то случае стоит применять связку Акад-Мах, в другом - проще в Мах-е всё сделать.
Так что сорри, если выглядит как сарказм - и в мыслях не было.


Да, все точно. Максовский скрипт аналог лиспа. И командная строка есть, только я не имел представления что это такое. И пример с рисованием параметрического меша там же есть.

Но почему он мне кажется таким неудобным, макс?
В автокаде есть лисп, в максе скрипт.
В автокаде я могу написать свое приложение на object_arx, но и в максе есть свой SDK.

Конечно, для рендеринга и текстуринга макс лучше. И в отличие от автокада есть булевы операции с сетками. Но возиться с геометрией в максе для меня почему-то мучение, в CADе я все делаю на два порядка быстрее. Дело привычки? Наверное привычка + если не ошибаюсь, АCAD работает в 3Д с телом, а Мах - с поверхностью, м.б. для Вас удобнее с объектами-телами работать? Или ACAD и с поверхностями тоже сейчас работает(я в нём давно серьёзного ничего не делал)? Ну и система привязок кажется в ACADе немного более удобной - в Мах-е вроде всё практически то-же самое есть, но пользоваться мне ими не очень удобно.

=FPS=Altekerve
07.06.2006, 14:03
Плюс в том, что поверхность, построенная таким методом, совершенно гладкая. Ее точки лежат на гладкой поверхности. Это очевидно из того, что сами функции задания гладкие. При ручной расстановк точек может получиться лишь приближение к реальной поверхности. Кроме того, в параметрической поверхности известны нормали, что полезно в движке для правильного шейдинга, в поверхности же вручную собираемой нориали расставляет движок абы как.

Stalevar
07.06.2006, 18:55
А минус в том, чтоб сделать этими функциями что-то конкретное(ту же секцию фюзеляжа) - надо иметь функции для чего-то конкретного(а их наверняка не существует для тех же фюзеляжей). Абстрактное нечто, пусть совершенно гладкое, но не соответствующее моделируемому обьекту, никому не нужно. По крайней мере выглядит это именно так. Потому остается вопрос насчет хоть какого-то примера применения ентой вещи на практике.

=FPS=Altekerve
08.06.2006, 17:32
Ошибаешься. Интерполировать кривые многочлеными с чертежей легко.

Lobster
08.06.2006, 19:21
скажу просто, в максе все есть тока надо знать где что лежит и как этим пользоваться, сравнивать несравнимые по своей сути проги я считаю неуместным. А в чем и как делать ту или иную весч пускай решит для себя каждый в силу знания той или иной проги.

Stalevar
09.06.2006, 20:31
Ошибаешься. Интерполировать кривые многочлеными с чертежей легко.
Тогда объясни как. Собственно к тому я и писал про конкретный пример, чтоб наглядней и понятней было :)

=FPS=Altekerve
13.06.2006, 14:27
Тогда объясни как. Собственно к тому я и писал про конкретный пример, чтоб наглядней и понятней было :)

Попозжее чуток. Вот времени полчасика появится, тогда.