Animacje
Animacje
Dzień dobry
Chcę tworzyć animacje z programem FreeCAD.
Próbowałem ściągnąć dodatek "animation", ale po przeczytaniu tej informacji zrezygnowałem:
"Te środowisko pracy nie może być dłużej utrzymywane, a zainstalowanie go w systemie Python 3 z dużym prawdopodobieństwem doprowadzi do błędów podczas uruchamiania lub podczas użytkowania."
Zorientowałem się, że metod na tworzenie animacji we FC jest wiele.
Wielokrotnie korzystałem z narzędzia "widok obrotowy" i programu do przechwytywania ekranu, z dobrym skutkiem.
Teraz chcę zastosować animację poklatkową, czyli zapisywać obrazki po kolejnych przesunięciach, ale to żmudna robota.
Spreadsheet jest dużym ułatwieniem, bo mogę w nim modyfikować wymiary jako funkcję jednego parametru.
Robię to ręcznie, bo brakuje mi możliwości wpisania do arkusza, parametru zmieniającego się w zamkniętej pętli, o jakiś skok np. co 1/25 s.
Może warto to wprowadzić?
Filmiki mają służyć do celów dydaktycznych.
Przykładowo chcę pokazać taki elipsograf w akcji.
Chcę tworzyć animacje z programem FreeCAD.
Próbowałem ściągnąć dodatek "animation", ale po przeczytaniu tej informacji zrezygnowałem:
"Te środowisko pracy nie może być dłużej utrzymywane, a zainstalowanie go w systemie Python 3 z dużym prawdopodobieństwem doprowadzi do błędów podczas uruchamiania lub podczas użytkowania."
Zorientowałem się, że metod na tworzenie animacji we FC jest wiele.
Wielokrotnie korzystałem z narzędzia "widok obrotowy" i programu do przechwytywania ekranu, z dobrym skutkiem.
Teraz chcę zastosować animację poklatkową, czyli zapisywać obrazki po kolejnych przesunięciach, ale to żmudna robota.
Spreadsheet jest dużym ułatwieniem, bo mogę w nim modyfikować wymiary jako funkcję jednego parametru.
Robię to ręcznie, bo brakuje mi możliwości wpisania do arkusza, parametru zmieniającego się w zamkniętej pętli, o jakiś skok np. co 1/25 s.
Może warto to wprowadzić?
Filmiki mają służyć do celów dydaktycznych.
Przykładowo chcę pokazać taki elipsograf w akcji.
- Attachments
-
- elipsograf_.jpg (45.76 KiB) Viewed 8830 times
Re: Animacje
Czy możesz zapisać wszystkie ruchy jako funkcje? Wtedy dużo łatwiej jest użyć Pythona. Można też mieszać Pythona i arkusz kalkulacyjny, co robiłem generując animację z tego wątku. Tam użyłem Pythona, arkusz kalkulacyjny i moduł Assembly 3. Tego ostatniego nie potrzebujesz jeśli wiesz jakimi funkcjami opisać ruch. Cały skrypt Pythona generujący animację i zapisujący każdą klatkę jako osobny obrazek miał tylko 30 linii.
Jeśli chcesz tylko wypełnić komórki to też możesz sobie pomóc Pythonem, dla przykładu ten skrypt wypełnia komórki od A1 do A20 wartościami zwiększającymi się co 0,25 począwszy od 5:
Jeśli chcesz tylko wypełnić komórki to też możesz sobie pomóc Pythonem, dla przykładu ten skrypt wypełnia komórki od A1 do A20 wartościami zwiększającymi się co 0,25 począwszy od 5:
Code: Select all
val = 5
for x in range(20):
App.ActiveDocument.Spreadsheet.set("A" + str(x+1), str(val))
val = val + 0.25
App.ActiveDocument.recompute()
Re: Animacje
Dziękuję za istotne dla mnie informacje.
Twoja animacja wygląda super.
Z wyznaczeniem funkcji opisujących ruch, powinienem sobie poradzić.
Nie wiem tylko czy dam radę odszukać wszystkie potrzebne instrukcje do obsługi FreeCad-a z poziomu Pythona.
Spróbuję jednak to zrobić, bo efekt ruchu przekładni planetarnej zrobił na mnie pozytywne wrażenie.
Twoja animacja wygląda super.
Z wyznaczeniem funkcji opisujących ruch, powinienem sobie poradzić.
Nie wiem tylko czy dam radę odszukać wszystkie potrzebne instrukcje do obsługi FreeCad-a z poziomu Pythona.
Spróbuję jednak to zrobić, bo efekt ruchu przekładni planetarnej zrobił na mnie pozytywne wrażenie.
Re: Animacje
Nie wytłumaczyłem co robi skrypt od tej przekładni:
1. Po 0,5 s zwiększa wartość zmiennej "an" o 1
2. Wpisuje tę wartość do komórki arkusza A2
3. Przelicza arkusz
4. Obiekt (np. wiązanie kąta w szkicowniku) pobiera wartości z innych komórek arkusza - tego akurat nie umieszcza się w skrypcie a w właściwościach obiektu
5. Dokument/widok 3D zostaje przeliczony/zregenerowany
6. Wracamy do punktu 1
Animacja przekładni, którą zrobiłem korzysta z małego wycinka możliwości FreeCAD-a. Ograniczeniem jest głównie wyobraźnia: można nie tylko ruszać elementami, ale też kamerą, zmieniać przezroczystość/widoczność/kolorystykę, rysować ślad ruchu itd. itp.
Kiedy będziesz wiedział co i jak ma się ruszać, to pomyślimy jak to obudować w Pythona. Funkcji ruchu też nie zawsze trzeba wyprowadzać ręcznie, można się ratować którymś z modułów złożeń (a nawet szkicownikiem jeśli problem dotyczy 2D).
1. Po 0,5 s zwiększa wartość zmiennej "an" o 1
2. Wpisuje tę wartość do komórki arkusza A2
3. Przelicza arkusz
4. Obiekt (np. wiązanie kąta w szkicowniku) pobiera wartości z innych komórek arkusza - tego akurat nie umieszcza się w skrypcie a w właściwościach obiektu
5. Dokument/widok 3D zostaje przeliczony/zregenerowany
6. Wracamy do punktu 1
Animacja przekładni, którą zrobiłem korzysta z małego wycinka możliwości FreeCAD-a. Ograniczeniem jest głównie wyobraźnia: można nie tylko ruszać elementami, ale też kamerą, zmieniać przezroczystość/widoczność/kolorystykę, rysować ślad ruchu itd. itp.
Kiedy będziesz wiedział co i jak ma się ruszać, to pomyślimy jak to obudować w Pythona. Funkcji ruchu też nie zawsze trzeba wyprowadzać ręcznie, można się ratować którymś z modułów złożeń (a nawet szkicownikiem jeśli problem dotyczy 2D).
Re: Animacje
Twój skrypt do wypełniania komórek zadziałał, dziękuję.
Czy da się cyklicznie zmieniać wartość parametru, w jednej komórce arkusza?
Nie czuję się pewnie w pisaniu skryptów.
Na razie powiązałem wzorem obrót pisaka, z jego ruchem posuwistym i zapisałem to w arkuszu.
Ręcznie zmieniałem w nim kąt co 10 deg i zapisywałem obrazki.
Utworzyłem z nich ten film poklatkowy z czasem 0,3s.
Widać, że ruch nie jest płynny, więc pewnie zmiana kąta co 10 deg to zbyt dużo.
Zastosowałem widok perspektywy, bo wyglądał lepiej niż widok ortogonalny.
Odnoszę wrażenie, że widok ortogonalny różni się od typowego rzutu ortogonalnego, stosowanego w rysunku technicznym.
Czy da się cyklicznie zmieniać wartość parametru, w jednej komórce arkusza?
Nie czuję się pewnie w pisaniu skryptów.
Na razie powiązałem wzorem obrót pisaka, z jego ruchem posuwistym i zapisałem to w arkuszu.
Ręcznie zmieniałem w nim kąt co 10 deg i zapisywałem obrazki.
Utworzyłem z nich ten film poklatkowy z czasem 0,3s.
Widać, że ruch nie jest płynny, więc pewnie zmiana kąta co 10 deg to zbyt dużo.
Zastosowałem widok perspektywy, bo wyglądał lepiej niż widok ortogonalny.
Odnoszę wrażenie, że widok ortogonalny różni się od typowego rzutu ortogonalnego, stosowanego w rysunku technicznym.
Re: Animacje
Oczywiście, że tak. Skrypt poniżej zmienia wartość komórki A2 od 0 do 360 co 1 (co 0,1 s):
Code: Select all
import FreeCAD as App, FreeCADGui as Gui, Part, time
from PySide2 import QtGui,QtCore
class Animation(object):
def __init__(self):
App.Console.PrintMessage('Animacja wystartowala\n')
App.ActiveDocument.recompute()
self.timer = QtCore.QTimer()
QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.my_update)
self.timer.start(100) #krok co 0,1 sekundy (100 ms)
self.val = 0.0 #wartosc poczatkowa
self.step = 1.0 #wielkosc kroku
self.end = 360.0 #wartosc koncowa
def my_update(self):
App.ActiveDocument.Spreadsheet.set("A2", str(self.val)) #wpisujemy aktualna wartosc w komorke A2
self.val = self.val + self.step #kolejna wartosc bedzie powiekszona o krok
App.ActiveDocument.recompute() #przeliczamy dokument
if self.val > self.end: #zatrzymanie aktualizacji osiagnela 360
self.timer.stop()
App.Console.PrintMessage('Animacja dotarla do konca\n')
def stop(self):
self.timer.stop()
App.Console.PrintMessage('Animacja zatrzymana\n')
animation = Animation()
Code: Select all
animation.stop()
Re: Animacje
Dziękuję za skrypt, który działa znakomicie i znacznie ułatwia mi pracę nad animacją.
Widok ortogonalny jest jednak prawidłowy.
Tylna krawędź blatu wydawała mi się nieco większa niż przednia, ale jednak linijka pokazała ich równość.
Widok ortogonalny jest jednak prawidłowy.
Tylna krawędź blatu wydawała mi się nieco większa niż przednia, ale jednak linijka pokazała ich równość.
- Attachments
-
- złudzenie.jpg (31.76 KiB) Viewed 8456 times
Re: Animacje
Cieszę się, że działa.
Dopiero teraz doszło do mnie, że dodatek Animation, który chciałeś zainstalować został zrobiony przez microelly2, który z powodów prywatnych musiał opuścić społeczność.
Dodatek wydaje się w większości przeniesiony na Pythona3, ale żeby go uruchomić trzeba zakomentować (wstawić #) jedną linię w pliku Animation.py
Dopiero teraz doszło do mnie, że dodatek Animation, który chciałeś zainstalować został zrobiony przez microelly2, który z powodów prywatnych musiał opuścić społeczność.
Dodatek wydaje się w większości przeniesiony na Pythona3, ale żeby go uruchomić trzeba zakomentować (wstawić #) jedną linię w pliku Animation.py
Code: Select all
#matplotlib.rcParams['backend.qt4']='PySide'
Re: Animacje
Dziękuję za cenne informacje.
Na razie chcę sobie odświeżyć znajomość programowania, bo już zdążyłem to i owo zapomnieć.
Spróbuję zadziałać z biblioteką pythona: moviepy.
Ustaliłem dlaczego ruch na animacji był nierówny.
Dałem zbyt duży czas wyświetlania klatki: 0,4s zamiast 0,04s.
Po tej zmianie, ruch zrobił się płynny, nawet przy aktualizacji kąta co 10 deg.
Przy okazji chcę poruszyć sprawę wstawiania tekstu A w module Draft.
Czasem napisy, po zatwierdzeniu, same się przesuwają i trzeba je ponownie ustawiać.
Jest to niewygodne, więc ten obrazek, po zapisaniu, uzupełniłem literami w programie graficznym Paint.
Na razie chcę sobie odświeżyć znajomość programowania, bo już zdążyłem to i owo zapomnieć.
Spróbuję zadziałać z biblioteką pythona: moviepy.
Ustaliłem dlaczego ruch na animacji był nierówny.
Dałem zbyt duży czas wyświetlania klatki: 0,4s zamiast 0,04s.
Po tej zmianie, ruch zrobił się płynny, nawet przy aktualizacji kąta co 10 deg.
Przy okazji chcę poruszyć sprawę wstawiania tekstu A w module Draft.
Czasem napisy, po zatwierdzeniu, same się przesuwają i trzeba je ponownie ustawiać.
Jest to niewygodne, więc ten obrazek, po zapisaniu, uzupełniłem literami w programie graficznym Paint.
- Attachments
-
- solution.jpg (77.91 KiB) Viewed 7999 times
Re: Animacje
Jeśli potrafisz uzyskać ten błąd w sposób powtarzalny i opisać jak go wyzwalasz, to możemy zgłosić to na forum głównym.