Obijuan:Notas sobre programación en python en Freecad

De WikiRobotics
Revisión del 04:06 29 ago 2014 de Obijuan (Discusión | contribuciones) (Hito 2: Scripts con GUI en FREECAD)

Saltar a: navegación, buscar

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

  1. Hello world: programar un cilindro simple, con los parámetros h (grosor) y diámetro (d)
  2. scripts con GUI
  3. script empotrado en la "task" tab o otra ventana empotrada
  4. Script que permita cambiar los parámetros desde una GUI en freecad
  5. Programar la rueda del miniskybot, pero con esos mismos parametros variables
  6. Incluir 2 coronas: pequeña y grande y permitir que se puedan seleccionar una u otra para la rueda
  7. ¿Como crear un boton que al pulsarlo se abra el menú y permita meter una rueda definiendo sus parametros?
  8. ¿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