Obijuan:Notas sobre programación en python en Freecad
Contenido
Introducción
Quiero aprender a programar piezas en Freecad, al estilo openscad, para poder hacer piezas paramétricas.
Empezaremos con ruedas paramétricas para printbots
Roadmap
- Hello world: programar un cilindro simple, con los parámetros h (grosor) y diámetro (d)
- scripts con GUI
- script empotrado en la "task" tab o otra ventana empotrada
- Script con una GUI diseñada con QTcreator
- Programar la rueda del miniskybot, pero con esos mismos parametros variables
- Incluir 2 coronas: pequeña y grande y permitir que se puedan seleccionar una u otra para la rueda
- ¿Como crear un boton que al pulsarlo se abra el menú y permita meter una rueda definiendo sus parametros?
- ¿Cómo programar un workbench de printbots? que incluya botones con piezas: ruedas, portapilas, chásis...
Hito 0: Leer
Hito 1: programa "hola mundo"
Visualizar un cilindro genérico (el mismo que cuando se le da al botón de cilindro en el workbench part)
import FreeCAD import Part doc = App.ActiveDocument cyl = doc.addObject("Part::Cylinder","Cylinder") cyl.Label = "Cylinder" doc.recompute()
Otro ejemplo, con la función cilindro definida, donde se le pasan los parámetros de altura y diámetro
import FreeCAD import Part def cylinder(h = 8, d = 56): doc = App.ActiveDocument cyl = doc.addObject("Part::Cylinder","Cylinder") cyl.Label = "Cylinder" cyl.Height = h cyl.Radius = d / 2.0
cylinder() cylinder(h = 20, d =10) App.ActiveDocument.recompute()
He encontrado una forma más sencilla de hacer el cilindro:
import FreeCAD import Part #-- radius = 56, height = 8 cyl = Part.makeCylinder(56, 8) Part.show(cyl)
sin embargo el objeto que se crea es un "shape". Las propiedades de altura y radio se pierden. Nos servirá por tanto para construir otros objetos, pero no para hacer algo paramétrico que cambie dinámicamente
Hito 2: Scripts con GUI en FREECAD
Ejemplo hola mundo para sacar una ventana emergente
from PyQt4 import QtGui QtGui.QMessageBox.information(None,"Titulo","Hola Mundo!")
Ventana desde la que especifiar el lado para hacer un cubo
from PyQt4 import QtGui, QtCore import Part, FreeCAD from FreeCAD import Base, Vector class BoxExample(QtGui.QWidget): def __init__(self): super(BoxExample, self).__init__() self.initUI() def initUI(self): self.setGeometry(100, 100, 260, 100) self.setWindowTitle('Mi cubo') self.lengthLabel = QtGui.QLabel("Lado: ",self) self.lengthLabel.move(20, 20) self.length = QtGui.QLineEdit(self) self.length.move(100, 15) self.okButton = QtGui.QPushButton("Crear cubo",self) self.okButton.move(20, 60) self.show() QtCore.QObject.connect (self.okButton, QtCore.SIGNAL("pressed()"),self.box) def box(self): l = float(self.length.text()) box = Part.makeBox(l, l, l) Part.show(box) d = BoxExample()
¿Cómo hacer que el layout de la ventana esté creado con qtdesigner?
Hito 3: Script con gui empotrada en Freecad
Log
- 28/Agosto/2014: Comenzada esta página