OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 32-bit
Version: 0.17.13519 (Git)
Build type: Release
Branch: releases/FreeCAD-0-17
Hash: 1a8b868018f45ea486c0023fdbfeb06febc1fb89
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.2.0
Locale: Spanish/Spain (es_ES)
Hola buenas, estoy empezando a utilizar esta herramienta y se lo básico de python.
No encuentro información o tema a mi problema a ver si algun alma caritativa me puede ayudar.
Mi interes es crear una macro donde el usuario puedo generar una placa y hacerle micro perforaciones aleatorias, solo dando unos parametros como la dimesiones de la placa y lo que intento es que con la herramienta cut crear unos cilindros que la atraviesen y cree agujeros dandole una cordenadas y que pueda ser repetitivo.
Mi problema lo tengo que el programa me nombra las variables con cut, cut001 para el segundo corte y lo unico que se me ocurre es añadir un contador de repeticiones añadir un if para el primero, un elif para el segundo y el tercero agujero, todo esto dentro de la misma funcion, sea el else que ya quiero crear el bucle donde comience a repetir el procedimiento.
Mi funcion seria la siguiente:
def recortar(self):
global contador
if contador == 0:
radioc = float (self.Radioc.text())
cilindro = App.ActiveDocument.addObject("Part::Cylinder","agujero")
cilindro.Radius = radioc
global espesorp
cilindro.Height = espesorp
abcisac = float (self.Abcisac.text())
ordenadac = float (self.Ordenadac.text())
App.ActiveDocument.ActiveObject.Placement = App.Placement(App.Vector(abcisac,ordenadac,0), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
cut = App.activeDocument().addObject("Part::Cut","cut")
App.activeDocument().cut.Base = App.activeDocument().placa
App.activeDocument().cut.Tool = App.activeDocument().agujero
Gui.activeDocument().placa.Visibility = False
Gui.activeDocument().agujero.Visibility = False
Gui.ActiveDocument.cut.ShapeColor = Gui.ActiveDocument.placa.ShapeColor
Gui.ActiveDocument.cut.DisplayMode = Gui.ActiveDocument.placa.DisplayMode
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
contador+=1
print "el contador en el if esta: ",contador
elif contador == 1:
radioc = float (self.Radioc.text())
cilindro = App.ActiveDocument.addObject("Part::Cylinder","agujero001")
cilindro.Radius = radioc
cilindro.Height = espesorp
abcisac = float (self.Abcisac.text())
ordenadac = float (self.Ordenadac.text())
App.ActiveDocument.ActiveObject.Placement = App.Placement(App.Vector(abcisac,ordenadac,0), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
cut = App.activeDocument().addObject("Part::Cut","cut001")
App.activeDocument().cut001.Base = App.activeDocument().cut
App.activeDocument().cut001.Tool = App.activeDocument().agujero001
Gui.activeDocument().cut.Visibility = False
Gui.activeDocument().agujero001.Visibility = False
Gui.ActiveDocument.cut001.ShapeColor = Gui.ActiveDocument.cut.ShapeColor
Gui.ActiveDocument.cut001.DisplayMode = Gui.ActiveDocument.cut.DisplayMode
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
contador+=1
print "El contador en el elif esta: ",contador
else:
contadorcadena = str(contador)
agujerocadena="agujero00"+contadorcadena
cutcadena="cut00"+contadorcadena
radioc = float (self.Radioc.text())
cilindro = App.ActiveDocument.addObject("Part::Cylinder",agujerocadena)
cilindro.Radius = radioc
cilindro.Height = espesorp
abcisac = float (self.Abcisac.text())
ordenadac = float (self.Ordenadac.text())
App.ActiveDocument.ActiveObject.Placement = App.Placement(App.Vector(abcisac,ordenadac,0), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
diccionarioCut = {}
cut002 = App.activeDocument().addObject("Part::Cut",cutcadena)
App.activeDocument().cut002.Base = App.activeDocument().cut001
App.activeDocument().cut002.Tool = App.activeDocument().agujero002
Gui.activeDocument().cut001.Visibility = False
Gui.activeDocument().agujero002.Visibility = False
Gui.ActiveDocument.cut002.ShapeColor = Gui.ActiveDocument.cut001.ShapeColor
Gui.ActiveDocument.cut002.DisplayMode = Gui.ActiveDocument.cut001.DisplayMode
App.ActiveDocument.recompute()
Gui.activeDocument().activeView().viewAxonometric()
Gui.SendMsgToActiveView("ViewFit")
contador+=1
print "El contador en el else esta: ",contador
como se puede apreciar en el else, creando una cadena es posible que los nuevos cilindros tenga un nombre creciente cut002, cut003..., pero a la hora de igualar las bases de cut002 a cut001 como no es una cadena sino una referencia al objeto que posteriormente es invisibilizado, no se como convertir una cadena a nombre de una variable...
Resumiendo creo q es algo simple de resolver en python con un for pero no acabo de verlo, y como los nombres que freecad asigna a las piezas es inamobible el nombre una vez asignado, no puedo generar otro que contenga ese nombre? y pueda manipular?
Muchas gracias por la atención, espero que sea sencillo y sea yo el unico que no lo vea, y si ya ayudase a alguien se sentiria util. Un cordial saludo
Macro cuts into pieces of repetitive shape
Re: Macro cuts into pieces of repetitive shape
hola @josu20
Y sin tabulaciones.
El código sin indexado no se puede apreciar. Utiliza Code display. Por ejemplo:
Code: Select all
def hello():
print("Hello Word!")
Re: Macro cuts into pieces of repetitive shape
bien
Esto no lo entiendo. Conforme a tu implementación estás creando un "document object" para el cilindro, y otro para el corte. Si tienes una placa, y diez abujeros, al final tienes 10 +10 + 1 = 21 "document object". Esto es bastante caro. ¿Es realmente esto lo que quieres? Ya que puedes tener un único objeto del documento, la placa, y elaborar su forma ("Shape") con los parámetros más los abujeros, lo cual es mucho más económico.
Posteriormente defines un método def recortar(self) en el cual se crean toda la batería de document objects (cilindros y cortes). ¿Le has hechado un vistazo a la documentación de "sripted objects"? https://www.freecadweb.org/wiki/Scripted_objects. La organización tipo de la clase, o como se crean los objetos, suele ser diferente.
PD: disculpa que no entre al fondo de tu pregunta, pero es que me resulta dificil de entender fuera del esquema organizativo que normalmente se usa en FreeCAD.
Re: Macro cuts into pieces of repetitive shape
El nombre es la clave principal de todo objeto del documento y no se puede modificar. La etiqueta (obj.Label) si se puede modificar.
EDICION:
Los objectos se pueden seleccionar por normbre o por etiqueta
Code: Select all
App.ActiveDocument.getObject()
App.ActiveDocument.getObjectsByLabel()
Re: Macro cuts into pieces of repetitive shape
Muchas gracias por las respuestas, pero me podria esplicar como utilizar el getObjectsByLabel()...damian wrote: ↑Sat Aug 11, 2018 5:39 pmEl nombre es la clave principal de todo objeto del documento y no se puede modificar. La etiqueta (obj.Label) si se puede modificar.
EDICION:
Los objectos se pueden seleccionar por normbre o por etiquetaCode: Select all
App.ActiveDocument.getObject() App.ActiveDocument.getObjectsByLabel()
He leido que tiene una devuelve una lista y como defecto se añade el primero que suele ser unico con un [0] no?
Pues no soy capaz de que haga referencia a ese objeto... me devuelve esto:
App.activeDocument.getObjectsByLabel(CutCadena)[0].Base = App.activeDocument.getObjectsByLabel(CutCadena1)[0]
AttributeError: 'builtin_function_or_method' object has no attribute 'getObjectsByLabel'
Re: Macro cuts into pieces of repetitive shape
porque es ActiveDocument, con A mayúscula. La consola python del programa te va indicando.
https://www.freecadweb.org/wiki/Introduction_to_Python y siguientes
Para aprender a usarla lee Re: Macro cuts into pieces of repetitive shape
salutos
y citas para el nombre : "nombre" (string)
Manual_search_of_an_element_with_label
mario
y citas para el nombre : "nombre" (string)
Manual_search_of_an_element_with_label
Code: Select all
App.ActiveDocument.getObjectsByLabel("CutCadena1")[0]
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
My macros on Gist.github here complete macros Wiki and forum.
Re: Macro cuts into pieces of repetitive shape
SOLUCIONADO!
No era exactamente como me dijisteis pero me ha ayudado mucho a dar con la tecla. Comparto la macro por si a alguien le ha surgido el mismo problema. Gracias por todo y seguiré el foro de cerca. Un cordial saludo
https://drive.google.com/file/d/12QWjSs ... sp=sharing
No era exactamente como me dijisteis pero me ha ayudado mucho a dar con la tecla. Comparto la macro por si a alguien le ha surgido el mismo problema. Gracias por todo y seguiré el foro de cerca. Un cordial saludo
https://drive.google.com/file/d/12QWjSs ... sp=sharing