niedziela, 2 października 2011

OOSheet jako łącznik między LibreOffice a FreeCAD-em

Dostęp do dokumentów LibreOffice (OpenOffice.org) można uzyskać z poziomu Pythona. Służy do tego PyUNO. Gdy chcemy manipulować arkuszem programu Calc, sprawa jest jeszcze prostsza. Wystarczy wykorzystać moduł Pythona
OOSheet

Przykład wykorzystania

Jako przykład podam skrypt, który pobierze dane z arkusza LibreOffice, na ich bazie zmodyfikuje model programu FreeCAD i dodatkowo zwróci wyliczoną objętość modelu do arkusza.

Instalacja OOSheet pod Ubuntu

Zakładam, że wszyscy maja LibreOffice i Pythona.OOSheet najszybciej można zainstalować z wykorzystaniem terminala:

sudo apt-get install python-pip
sudo pip install oosheet

Instalacja aktualnej wersji FreeCAD-a

Najlepiej dodać repozytoria PPA:

sudo add-apt-repository ppa:freecad-maintainers/freecad-daily
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install freecad freecad-doc

Wymagane pomoce dydaktyczne

  1. Plik klucz.ods z danymi dla naszego modelu.
  2. Plik modelu klucz.fcstd. Wszystko powinno być zapisane do katalogu fctest.

Przykład

Nasz model bryłowy klucza opiera się na wyciągnięciu (Pad) pojedynczego szkicu. Skrypt będzie dla każdego z wierszy 2-12 arkusza:
  • zmieniał wartość wyciągnięcia (grubość klucza),
  • zmieniał więzy (constraints) szkicu nr: 45 (rozwarcie klucza), 51 (długość klucza), 54 (szerokość łącznika klucza),
  • odświeżał model,
  • eksportował bryłę do pliku STEP o numerze odpowiadającym wierszowi,
  • eksportował widoki klucza do pliku SVG o numerze odpowiadającemu wierszowi,
  • liczył objętość bryły i zwracał ją do ostatniej kolumny arkusza.
Najpierw otwieramy arkusz z nasłuchiwaniem przez LibreOffice na porcie 2002 wpisując w terminalu:
oocalc fctest/klucz.ods -accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"

Następnie otwieramy plik modelu klucz.fcstd w programie Freecad. Teraz po wklejeniu poniższego skryptu do konsoli Pythona w programie FreeCAD, powinny w katalogu fctest pojawić się nowe pliki SVG i STEP. W ostatniej kolumnie arkusza powinny pojawić się też wartości objętości kolejnych modeli.

Treść skryptu:

from oosheet import OOSheet as S # dla wspolpracy z OO Calc
import ImportGui # dla exportu STEP
for keynumber in range (2,13):
     skey = str(keynumber)
     App.ActiveDocument.Sketch.setDatum(54,S('b'+skey).value) #szer lacznika z arkusza
     App.ActiveDocument.Sketch.setDatum(51,S('a'+skey).value) #dlug klucza
     App.ActiveDocument.Sketch.setDatum(45,S('d'+skey).value) #rozwarcie klucza
     App.ActiveDocument.getObject("Pad").Length = S('c'+skey).value #grubosc klucza
     App.ActiveDocument.recompute() #odswiezenie modelu
     __objs__=[] #eksport STEP
     __objs__.append(FreeCAD.getDocument("klucz").getObject("Pad"))
     ImportGui.export(__objs__,'fctest/klucz'+skey+'.stp')
     del __objs__
     PageFile = open(App.activeDocument().Page.PageResult,'r') #eksport SVG
     OutFile = open('fctest/klucz'+skey+'.svg','w')
     OutFile.write(PageFile.read())
     del OutFile,PageFile
     S('e'+skey).value = App.ActiveDocument.getObject("Pad").Shape.Volume #zapis objetosci do arkusza



Ściągnij Video.