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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Видео в AutoCAD 2007 и LISP

Видео в AutoCAD 2007 и LISP

Ответ
Поиск в этой теме
Непрочитано 06.01.2007, 12:59 #1
Видео в AutoCAD 2007 и LISP
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Вот здесь все началось http://dwg.ru/forum/viewtopic.php?p=111899#111899

В 2007 Автокаде есть возможность записывать видео неподвижных объектов. С помощью Лиспа эти объекты можно расшевелить, но есть одна проблема. Во время записи анимации лисп-функцию можно запустить только реактором(я создал реактор правой кнопки мыши) и никак больше и нельзя запустить запись видео из лисп. Например для вращения шестерней нужен длинный цикл, но вся беда в том что запись приостанавливается и ожидает когда цикл закончится, я пробовал даже бесконечный цикл.

вот максимум чего удалось достичь:
Надо запустить команду _anipath закрыть окно просмотра и чтобы получить эффект вращения шестерней надо постоянно щелкать правой кнопкой мыши. Файл с шестернями в архиве.

Код:
[Выделить все]
;загрузка библиотечных функций
(load "LibFunctionsSamoCAD.fas" "Приложение \"LibFunctionsSamoCAD.fas\" не найдено")

;определение указателей объектов и необходимых данных

(setq sh1point (list 0.0 0.0 0.0))
(setq sh2point (list 1285.8870 0.0 0.0))

(setq sh1obj
       (nth 0 (ename-or-vla-ssget-lst-samocad nil (ssget "_X" (list (cons 8 "Слой1")(cons 0 "3Dsolid"))) T));библиотечная возвращает список с указателями
)

(setq sh2obj
       (nth 0 (ename-or-vla-ssget-lst-samocad nil (ssget "_X" (list (cons 8 "Слой2")(cons 0 "3Dsolid")) ) T)))

(setq obj
       (nth 0 (ename-or-vla-ssget-lst-samocad nil (ssget "_X" (list (cons 8 "Слой3")(cons 0 "3Dsolid")) ) T)))

;функция вращения шестерней

(defun rotsh (angSh1 angSh2)
    (vla-rotate sh1obj (vlax-3d-point sh1point) (deg->rad-samocad angSh1))
    (vla-rotate sh2obj (vlax-3d-point sh2point) (deg->rad-samocad angSh2))

  (vla-update sh1obj)
  (vla-update sh2obj)
  (princ)

  )
;;;(rotsh 10.0 -5.0)


(setq mousereactor (vlr-mouse-reactor nil (list '(:vlr-beginrightclick . mousefun))))


(defun mousefun (a b)
  (rotsh 10.0 -5.0)
  (princ)
    )
также пробовал делать реактор на камеру, но не смотря на то что во время записи камера движется по заданной траектории те модифицируется, событий для реактора всеравно не происходит.

Вобщем надо сделать так, чтобы лиспфункция запускалась циклично, не прерывая и не приостанавливая текущих операций. Например былобы неплохо еслибы существовал реактор на системную переменную CDATE, обычный SysvarReactor почемуто на нее не реагирует.
Или же на худой конец сам создаваемый видеофайл является документом стороннего приложения, значит на этот видеофайл можно получить VLAуказатель, и поставить на него реактор, хотя наврядли этот объект будет сообщать реактору о своих изменениях без применения метода(vla-update).

А еще лучше былобы отыскать недокументированную возможность или функцию записи, тоесть создать лисп-функцию примерно такого тиапа
(record [видеопараметры] [положение камеры] [путь создаваемого видеофайла])
наверняка это можно сделать.
И выполнять такую функцию в цикле с модификациями объектов, правда в итоге получится куча видеофайлов, но их можно будет сшить какойнибудь программой.
[ATTACH]1168077586.rar[/ATTACH]
Просмотров: 6419
 
Автор темы   Непрочитано 07.01.2007, 20:07
#2
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


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

Наверняка такое можно сделать в ARX. Или может это реализовано в каких нибудь бибилиотеках типа DOSLIB?????
?????????????
Може кото чтото знает ? или может?

Нужен реактор времени, так будет точнее.

Заранее благодарен.
mmax вне форума  
 
Непрочитано 09.01.2007, 11:41
#3
Кулик Алексей aka kpblc
Moderator

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


1. DosLIB: (dos_pause)
2. CADALYST: http://new.cadalyst.com/code/browsey...?fullyear=1992 функция delay - работает в миллисекундах.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.01.2007, 16:24
#4
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


(dos_pause) подвешивает автокад на заданное количество секунд, во время работы функции нельзя ничего делать, .

Нужно чтото такое, чтобы во ремя выполнения цикла, были доступны все действия автокада. Если бы во время работы (dos_pause) можно былобы вызвать другую команду -- работать так какбудто вообще не выполняется никаких пользовательских лиспов, то это былабы подходящая функция.
mmax вне форума  
 
Непрочитано 09.01.2007, 16:43
#5
Кулик Алексей aka kpblc
Moderator

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


У меня нет 2007, я б на твоем месте попробовал нечто иное:
1. Попробовать прописать "съемку" экрана в процессе выполнения лиспа;
2. Использовать нечто типа CamStudio c последующей обработкой получившегося avi-шника в том же MS WIndows Movie Maker'e или чем-то ином. Правда, с форматами придется разбираться некисло. Я пока не смог
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.01.2007, 20:38
#6
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Попробовать прописать "съемку" экрана в процессе выполнения лиспа
Если бы такое было можно -- этого топика не было.
mmax вне форума  
 
Непрочитано 10.01.2007, 01:40
#7
kln


 
Регистрация: 09.01.2007
tlt
Сообщений: 1


Пару недель назад я тоже с видео экспериментировал:
Попытку получить анимацию проделал в 2006 Акаде - вручную подвигал два источника света, рендеринг сохранял как BMP файлы, из них в Corel-фотопайнт собрал GIF-анимацию.
В лиспе почитал справку и нашел про реакторы и про рендеринг в автоматичесом режиме, когда под управлением лиспа картинка меняется, рендерится и файл сохраняется как новый кадр.
Это команда RPREF (Sets rendering preferences)
[ATTACH]1168381404.rar[/ATTACH]
В архиве базовая картинка для анимации, которую я попробовал - зубчатые роторы, и 2 текстовых файла из справки к лиспу.

Хочу попробовать сгенерировать кадры не вручную, а в лиспе в цикле и автоматически - утром запустил программу, а вечером смотри картинки!
__________________
Est modus in rebus.
kln вне форума  
 
Непрочитано 10.01.2007, 11:15
#8
ALEX.A


 
Регистрация: 07.12.2006
Донецк
Сообщений: 17
<phrase 1=


to kln
это ты в 7-ом сделал?

киньте кто-нить ссылочку как так сделать в 6-ом :?
ALEX.A вне форума  
 
Непрочитано 10.01.2007, 12:35
#9
Profan


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


Для AutoCAD 2005, 2006.
Задать тонирование в файл TGA. Отключить вывод диалога на экран.
Шаблон программы:
Код:
[Выделить все]
(defun C:REN_TGA ( / n img)
(if (not C:RENDER) (arxload "acrender"))
(setq n "1")
(repeat 10
        (setq img (strcat "E:\\TGA\\" n ".tga"))
        (C:RENDER img)
        (setq n (itoa (+ (atoi n) 1)))
)
(princ)
)
Я думаю, что в цикл "repeat" можно включить разные команды редактирования
объектов. Полученный набор файлов TGA можно потом объединить в 1 файл типа
AVI внешними программами.
Profan вне форума  
 
Автор темы   Непрочитано 10.01.2007, 20:52
#10
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


в 2007 в прцессе видеосъемки можно быстрее и лучше.

Вот еще одно предложение:
Так ка в поцессе съемки можно вызывать лисп только реактором, то надо создать реактор закрытия документа, который бы отменял это закрытие и анимировал. Пытаться закрыть автокад будет windows-приложение написанное тоже самостоятельно.

Не получается сделать такой реактор, а писать программы для windows я не умею.
mmax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Видео в AutoCAD 2007 и LISP

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск