Animacje

Polish forum

Moderators: PrzemoF, kaktus

Forum rules
Regulamin forum i pomocne informacje

WAŻNE! Przeczytaj zanim poprosisz o pomoc
User avatar
matyk
Posts: 107
Joined: Thu Feb 15, 2018 2:37 pm

Animacje

Post by matyk »

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.
Attachments
elipsograf_.jpg
elipsograf_.jpg (45.76 KiB) Viewed 8637 times
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Animacje

Post by kwahoo »

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:

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()
User avatar
matyk
Posts: 107
Joined: Thu Feb 15, 2018 2:37 pm

Re: Animacje

Post by matyk »

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.
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Animacje

Post by kwahoo »

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).
User avatar
matyk
Posts: 107
Joined: Thu Feb 15, 2018 2:37 pm

Re: Animacje

Post by matyk »

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.

phpBB [video]


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.
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Animacje

Post by kwahoo »

matyk wrote: Tue Oct 19, 2021 12:52 pm Czy da się cyklicznie zmieniać wartość parametru, w jednej komórce arkusza?
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()
Jeśli chcesz go zatrzymać wcześniej (bo np. animacja nie wygląda tak jak powinna) to wpisujesz:

Code: Select all

animation.stop()
Widok ortogonalny (rzut prostokątny) zawsze będzie wyglądał tak samo, czy to w książce czy w FreeCADzie. Za to przy widoku perspektywicznym można dostosować szerokość pola widzenia, a nawet bawić się w takie efekty znane z Hollywood https://pl.wikipedia.org/wiki/Dolly_zoom
User avatar
matyk
Posts: 107
Joined: Thu Feb 15, 2018 2:37 pm

Re: Animacje

Post by matyk »

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ść.
Attachments
złudzenie.jpg
złudzenie.jpg (31.76 KiB) Viewed 8263 times
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Animacje

Post by kwahoo »

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

Code: Select all

#matplotlib.rcParams['backend.qt4']='PySide'
User avatar
matyk
Posts: 107
Joined: Thu Feb 15, 2018 2:37 pm

Re: Animacje

Post by matyk »

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.
Attachments
solution.jpg
solution.jpg (77.91 KiB) Viewed 7806 times
User avatar
kwahoo
Posts: 680
Joined: Fri Nov 29, 2013 3:09 pm
Contact:

Re: Animacje

Post by kwahoo »

matyk wrote: Wed Oct 27, 2021 10:22 am Przy okazji chcę poruszyć sprawę wstawiania tekstu A w module Draft.
Czasem napisy, po zatwierdzeniu, same się przesuwają i trzeba je ponownie ustawiać.
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.
Post Reply