El 24px Entorno de trabajo de Ensamblaje es el Entorno de trabajo de ensamblaje integrado de FreeCAD. Utiliza el solucionador Ondsel de código abierto [1].
Este ejemplo es temporal y puede ser eliminado una vez que estén disponibles las descripciones/tutoriales adecuados.
El conjunto a crear consta de cuatro partes: una base, una varilla deslizante, una manivela y una biela. Estas se conectan mediante cuatro articulaciones.
Piezas ensambladas: Base (ámbar), Varilla deslizante (azul claro), Manivela (rojo), Biela (verde)
En este ejemplo, todas las piezas y el ensamblaje se crean en un solo documento.
Las geometrías cilíndricas de los objetos son paralelas o perpendiculares; el resto de las formas no son relevantes para este ejemplo, a menos que haya colisiones. Teniendo esto en cuenta, puede modelar sus propios objetos o crearlos con el código Python que se muestra a continuación. El código creará un nuevo documento con los cuatro objetos (más sencillo que en las imágenes). Simplemente copie y pegue las siguientes líneas en la Consola de Python:
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
box1 = Part.makeBox(140, 40, 7, App.Vector(0, -20, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(120, 0, 7))
box2 = Part.makeBox(20, 12, 10, App.Vector(5, -6, 7))
cyl2 = Part.makeCylinder(6, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(4, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
shape = box1.fuse([cyl1, box2, cyl2]).removeSplitter().cut(cyl3)
base = doc.addObject("Part::Feature", "Base")
base.Shape = shape
box1 = Part.makeBox(4, 12, 12, App.Vector(-12, -6, 0))
box2 = Part.makeBox(14, 12, 4, App.Vector(-8, -6, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(0, 0, 4))
cyl2 = Part.makeCylinder(4, 88, App.Vector(-12, 0, 6),App.Vector(-1, 0, 0))
shape = box1.fuse([box2, cyl1, cyl2]).removeSplitter()
slider_rod = doc.addObject("Part::Feature", "SliderRod")
slider_rod.Shape = shape
slider_rod.Placement.Base = App.Vector(100, -40, 0)
cyl1 = Part.makeCylinder(7.5, 4)
box1 = Part.makeBox(15, 30, 4, App.Vector(-7.5, 0, 0))
cyl2 = Part.makeCylinder(7.5, 4, App.Vector(0, 30, 0))
cyl3 = Part.makeCylinder(4, 6, App.Vector(0, 30, 4))
cyl4 = Part.makeCylinder(4, 4)
shape = cyl1.fuse([box1, cyl2]).removeSplitter().fuse(cyl3).cut(cyl4)
crank = doc.addObject("Part::Feature", "Crank")
crank.Shape = shape
crank.Placement.Base = App.Vector(125, -70, 0)
cyl1 = Part.makeCylinder(6, 4)
box1 = Part.makeBox(50, 12, 4, App.Vector(0, -6, 0))
cyl2 = Part.makeCylinder(6, 4, App.Vector(50, 0, 0))
cyl3 = Part.makeCylinder(4, 4)
cyl4 = Part.makeCylinder(4, 4, App.Vector(50, 0, 0))
shape = cyl1.fuse([box1, cyl2]).removeSplitter().cut(cyl3.fuse(cyl4))
connecting_rod = doc.addObject("Part::Feature", "ConnectingRod")
connecting_rod.Shape = shape
connecting_rod.Placement.Base = App.Vector(25, -70, 0)
mat = base.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
base.ViewObject.ShapeAppearance = (mat,)
mat = slider_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
slider_rod.ViewObject.ShapeAppearance = (mat,)
mat = crank.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.70, 0.30, 0.20, 0.0)
crank.ViewObject.ShapeAppearance = (mat,)
mat = connecting_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.0, 0.0)
connecting_rod.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Con la herramienta Nuevo ensamblaje agregue un ensamblaje al documento.
Vista en árbol de las piezas y el ensamblaje
En la vista de árbol, arrastre y suelte las piezas sobre el objeto Ensamblaje. Ahora el solucionador del Ensamblaje puede procesarlas.
Las piezas están ahora en el contenedor de ensamblaje
Para mantener el ensamblaje en la posición deseada, la pieza base debe estar bloqueada o fijada. Seleccione la base en la vista de árbol o en la vista 3D y utilice la herramienta "Fijar base" (Assembly_ToggleGrounded). Esto fija la posición de la base con respecto al sistema de coordenadas local (SCL) del contenedor del ensamblaje. Se añade un objeto GroundedJoint al contenedor de uniones.
Expanda el contenedor Articulaciones para encontrar el objeto GroundedJoint
En lugar de realizar los dos pasos mencionados anteriormente, también es posible usar la herramienta Componente para colocar objetos dentro de un ensamblaje. El primer objeto se convierte automáticamente en la pieza anclada. Por lo tanto, debe comenzar con el objeto Base. La herramienta crea vínculos y los objetos originales permanecen fuera del ensamblaje. Para evitar confusiones, es recomendable hacerlos invisibles.
Una unión conecta exactamente dos elementos de partes diferentes. Opcionalmente, se pueden seleccionar antes de activar la herramienta de unión deseada (si se seleccionan menos de dos elementos, la selección quedará vacía). Los elementos definen la posición y la orientación de un sistema de coordenadas local (LCS) representado por un círculo relleno en el plano XY local y tres líneas a lo largo de los ejes X (rojo), Y (verde) y Z (azul) locales.
Elementos seleccionados + Articulación de revolución → manivela reorganizada
Mueva la manivela con el botón izquierdo del ratón. Solo debería ser posible una rotación alrededor del punto de pivote.
Elementos seleccionados + Articulación del deslizador → Varilla del deslizador reorganizada
Mueva la SliderRod con el botón izquierdo del ratón. Solo debería ser posible un desplazamiento a lo largo de su eje central.
Elementos seleccionados + Articulación de revolución → Biela reorganizada
Mueva la ConnectingRod usando el botón izquierdo del ratón. Solo debería ser posible una rotación alrededor del punto de pivote.
Elementos seleccionados + Unión cilíndrica → Ensamblaje terminado
En el ensamblaje final, utilice el puntero del ratón para arrastrar las piezas según las uniones utilizadas.
El pasador de la biela deslizante tiene una orientación redundante. Su eje central es paralelo al pasador de la base a través de la cadena cinemática que va desde la base, pasando por la manivela y la biela, lo que significa que su eje Z local no puede girar alrededor de ningún eje X o Y. La articulación deslizante también impide la rotación de su eje Z alrededor de dos ejes locales, lo que resulta en dos grados de libertad con restricciones redundantes. Una articulación cilíndrica, en lugar de la deslizante, solo bloquearía una rotación, lo que resultaría en un único grado de libertad con restricciones redundantes.
Para controlar la disposición del conjunto mediante el ángulo entre la base y la manivela, debemos cambiar la articulación de revolución entre ellas por una articulación fija. Para ello, haga doble clic en el objeto de revolución en la vista de árbol. En el cuadro de diálogo, cambie la articulación de revolución a fija y modifique el valor de rotación según sea necesario (el movimiento debe seguir la acción de la rueda del ratón).
Tenga en cuenta que un cambio en el tipo de articulación modificará la etiqueta de la articulación, pero no su nombre. En este caso, la etiqueta cambia a "Fija".
Para animar el ensamblaje podemos cambiar la rotación (Offset1.Angle) de la articulación fija con código Python. Simplemente copie y pegue las siguientes líneas en la consola de Python:
import math
import FreeCAD as App
import FreeCADGui as Gui
actuator = App.ActiveDocument.getObjectsByLabel("Fixed")[0]
for angle in range(0, 361, 10):
# A full rotation of the Crank in steps of 10°
actuator.Offset1.Rotation.Angle = math.radians(angle)
App.ActiveDocument.recompute()
Gui.updateGui()
El extremo del rango debe ser mayor que 360 para que este ángulo también se considere un resultado válido.
Este ejemplo es temporal y puede ser eliminado una vez que estén disponibles las descripciones/tutoriales adecuados.
En este ejemplo se crea una universal joint.
El conjunto consta de tres piezas sólidas: dos horquillas idénticas y una cruz. También se necesitan dos elementos no sólidos adicionales, Eje1 y Eje2, que representen los ejes angulares. Los ejes y las piezas sólidas se conectan mediante varias articulaciones.
En este ejemplo, todas las piezas y el ensamblaje se crean en un solo documento.
El siguiente código Python creará un nuevo documento con cuatro objetos (solo 1 Fork). Simplemente copie y pegue las siguientes líneas en la Consola de Python:
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
axle1 = doc.addObject("Part::Line", "Axle1")
axle1.X2 = -80
axle1.Y2 = 0
axle1.Z2 = 0
axle2 = doc.addObject("Part::Line", "Axle2")
axle2.X2 = 80
axle2.Y2 = 0
axle2.Z2 = 0
axle2.Placement.Rotation.Angle = math.radians(20)
sph1 = Part.makeSphere(50, App.Vector(0, 0, 0), App.Vector(-1, 0, 0), 0, 90, 360)
box1 = Part.makeBox(50, 40, 80, App.Vector(-50, -20, -40))
cyl1 = Part.makeCylinder(20, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(20, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(30, 60, App.Vector(0, -30, 0), App.Vector(0, 1, 0))
box2 = Part.makeBox(30, 60, 60, App.Vector(0, -30, -30))
cyl4 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl5 = Part.makeCylinder(15, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
shape = sph1.common(box1).fuse([cyl1, cyl2]).cut(cyl3.fuse([box2, cyl4, cyl5]))
fork = doc.addObject("Part::Feature", "Fork")
fork.Shape = shape.removeSplitter()
fork.Placement.Base = App.Vector(0, 100, 0)
cyl1 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(15, 80, App.Vector(0, -40, 0), App.Vector(0, 1, 0))
shape = cyl1.fuse([cyl2])
cross = doc.addObject("Part::Feature", "Cross")
cross.Shape = shape.removeSplitter()
cross.Placement.Base = App.Vector(70, 100, 0)
mat = fork.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
fork.ViewObject.ShapeAppearance = (mat,)
mat = cross.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
cross.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
El ángulo entre los ejes está configurado en 20 grados. Si desea cambiar este valor, seleccione el Eje 2 y modifique la propiedad Placement.Angle. Esta propiedad debe modificarse antes de mover el Eje 2 al ensamblaje.
Advertencia: las piezas pueden chocar si el ángulo es demasiado grande.
Con la herramienta Nuevo ensamblaje agregue un ensamblaje al documento.
En la Vista_de_árbol, arrastre y suelte los ejes sobre el objeto Ensamblaje.
Seleccione los dos ejes en la Vista de árbol y utilice la herramienta Toggle Grounded.
Para los demás objetos, utilizaremos la herramienta Componente:
Elementos seleccionados + Articulación de revolución + Desplazamiento de +40 mm o -40 mm → Horquilla001 reorganizada
Si primero activa la herramienta y luego selecciona los elementos, puede hacer clic cerca del punto final correcto del Eje 1 para evitar tener que introducir un desplazamiento.
Elementos seleccionados + Unión cilíndrica → rearranged Cross001
Elementos seleccionados + Articulación cilíndrica → rearranged Fork002
Si es necesario, invierta la dirección de la articulación utilizando el botón en el panel de tareas.
Elementos seleccionados + Articulación cilíndrica → rearranged Cross001 and Fork002
La junta universal se puede accionar moviendo Fork001 con el botón izquierdo del ratón.
Si desea comprobar la situación en distintos ángulos de rotación, siga estos pasos:
Este ejemplo es temporal y puede ser eliminado una vez que estén disponibles las descripciones/tutoriales adecuados.
En este ejemplo se crea un vise.
El conjunto consta de tres partes sólidas: una mordaza fija y otra móvil, y un tornillo con palanca. También se necesita un elemento no sólido adicional: una manivela. La manivela y las partes sólidas están conectadas mediante varias articulaciones.
Una articulación de tornillo acopla la traslación de una pieza con articulación deslizante a la rotación de una pieza con articulación de revolución. La pieza de tornillo debe realizar tanto un movimiento de traslación como de rotación, por lo que debe ser una pieza con articulación cilíndrica. En este ensamblaje, la pieza de tornillo se acoplará a la mordaza móvil con una articulación de distancia, a la manivela no sólida con una articulación paralela y a la mordaza fija con una articulación cilíndrica.
En este ejemplo, todas las piezas y el ensamblaje se crean en un solo documento.
El siguiente código Python creará un nuevo documento con cuatro objetos. Simplemente copie y pegue las siguientes líneas en la Consola de Python:
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
box1 = Part.makeBox(95, 40, 75, App.Vector(0, -20, -22))
cyl1 = Part.makeCylinder(35, 80, App.Vector(0, -40, 53), App.Vector(0, 1, 0), 90)
box2 = Part.makeBox(20, 80, 30, App.Vector(-20, -40, 58))
cyl2 = Part.makeCylinder(15, 80, App.Vector(-15, -40, 58), App.Vector(0, 1, 0), 90)
box3 = Part.makeBox(5, 80, 15, App.Vector(-20, -40, 58))
box4 = Part.makeBox(35, 24, 24, App.Vector(0, -12, -12))
box5 = Part.makeBox(60, 34, 69, App.Vector(35, -17, -19))
cyl3 = Part.makeCylinder(20, 55, App.Vector(-20, -40, 53), App.Vector(1, 0, 0))
cyl4 = Part.makeCylinder(20, 55, App.Vector(-20, 40, 53), App.Vector(1, 0, 0))
cyl5 = Part.makeCylinder(5, 35, App.Vector(0, 0, 38), App.Vector(1, 0, 0))
box6 = Part.makeBox(7, 88, 15, App.Vector(-22, -44, 75))
box7 = Part.makeBox(95, 90, 10, App.Vector(0, -45, -32))
shape = box1.fuse([cyl1, box2, box6, box7]).cut(cyl2.fuse([box3, cyl3, cyl4, cyl5, box4, box5]))
fixedJaw = doc.addObject("Part::Feature", "FixedJaw")
fixedJaw.Shape = shape.removeSplitter()
fixedJaw.Placement.Rotation.Axis = App.Vector(0, 0, 1)
fixedJaw.Placement.Rotation.Angle = math.radians(180)
box1 = Part.makeBox(35, 40, 75, App.Vector(0, -20, -22))
cyl1 = Part.makeCylinder(35, 80, App.Vector(0, -40, 53), App.Vector(0, 1, 0), 90)
box2 = Part.makeBox(20, 80, 30, App.Vector(-20, -40, 58))
cyl2 = Part.makeCylinder(15, 80, App.Vector(-15, -40, 58), App.Vector(0, 1, 0), 90)
box3 = Part.makeBox(160, 24, 24, App.Vector(-160, -12, -12))
box4 = Part.makeBox(5, 80, 15, App.Vector(-20, -40, 58))
box5 = Part.makeBox(160, 18, 18, App.Vector(-160, -9, -9))
cyl3 = Part.makeCylinder(20, 55, App.Vector(-20, -40, 53), App.Vector(1, 0, 0))
cyl4 = Part.makeCylinder(20, 55, App.Vector(-20, 40, 53), App.Vector(1, 0, 0))
cyl5 = Part.makeCylinder(5, 35, App.Vector(0, 0, 38), App.Vector(1, 0, 0))
box6 = Part.makeBox(7, 88, 15, App.Vector(-22, -44, 75))
shape = box1.fuse([cyl1, box2, box3, box6]).cut(cyl2.fuse([box4, cyl3, cyl4, box5, cyl5]))
movableJaw = doc.addObject("Part::Feature", "MovableJaw")
movableJaw.Shape = shape.removeSplitter()
movableJaw.Placement.Base = App.Vector(150, 100, 0)
cyl1 = Part.makeCylinder(5, 190, App.Vector(0, 0, 0), App.Vector(1, 0, 0))
cyl2 = Part.makeCylinder(10, 20, App.Vector(190, 0, 0), App.Vector(1, 0, 0))
cyl3 = Part.makeCylinder(4, 100, App.Vector(200, 0, -50), App.Vector(0, 0, 1))
shape = cyl1.fuse([cyl2, cyl3])
leverScrew = doc.addObject("Part::Feature", "LeverScrew")
leverScrew.Shape = shape.removeSplitter()
leverScrew.Placement.Base = App.Vector(150, -100, 0)
wire1 = Part.makePolygon([App.Vector(0, 0, 100), App.Vector(0, 0, 0), App.Vector(100, 0, 0)])
crank = doc.addObject("Part::Feature", "Crank")
crank.Shape = wire1
crank.Placement.Base = App.Vector(0, -100, 0)
mat = fixedJaw.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
fixedJaw.ViewObject.ShapeAppearance = (mat,)
mat = movableJaw.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
movableJaw.ViewObject.ShapeAppearance = (mat,)
mat = leverScrew.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.70, 0.30, 0.20, 0.0)
leverScrew.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Con la herramienta Nuevo ensamblaje agregue un ensamblaje al documento.
En la vista de árbol, arrastre y suelte las piezas sobre el Objeto Ensamblaje. Ahora el solucionador del Ensamblaje puede procesarlas.
Para mantener el ensamblaje en la posición deseada, la pieza FixedJaw debe estar bloqueada o fijada, como se denomina aquí. Seleccione FixedJaw en la vista de árbol o en la vista 3D y utilice la herramienta Toggle Grounded. Se añadirá un objeto GroundedJoint al contenedor Articulaciones.
Elementos seleccionados + Articulación de revolución → rearranged Crank
Elementos seleccionados + Articulación deslizante → rearranged MovableJaw
Establezca la longitud mínima en -77 mm y la longitud máxima en -7 mm. Esto limita la apertura de la mordaza a 70 mm.
Las siguientes tres articulaciones son necesarias para forzar al tornillo de palanca a: trasladarse como la mandíbula móvil, girar como la manivela y girar alrededor del eje principal.
Elementos seleccionados + Unión de distancia → LeverScrew reorganizado
Seleccione dos caras. Establezca el valor de distancia en 20 mm.
Elementos seleccionados + Junta paralela → Palanca-tornillo reorganizada
Elementos seleccionados + Articulación cilíndrica → Palanca-tornillo reorganizada
Elementos seleccionados (Herramienta invisible) + Articulación de tornillo → mecanismo de tornillo completo (Herramienta visible)
Si es necesario, haga invisible el tornillo de palanca durante la selección.
Establezca el radio de paso en 5 mm.
La mordaza se puede accionar moviendo la manivela o la mandíbula móvil con el botón izquierdo del ratón.
Este ejemplo es temporal y puede ser eliminado una vez que estén disponibles las descripciones/tutoriales adecuados.
En este ejemplo se crea un amortiguador.
El conjunto consta de tres piezas sólidas: un pistón, un cilindro y un resorte. También se necesitan tres elementos no sólidos adicionales: dos ejes y una varilla. Todas las piezas están conectadas mediante varias articulaciones.
La bisagra del pistón gira alrededor del Eje 2, mientras que la bisagra del cilindro se mueve describiendo un arco de círculo centrado en el Eje 1. Para este movimiento se utiliza una varilla no sólida. La longitud de la varilla es igual al radio del arco.
El siguiente código Python creará un nuevo documento con 6 objetos. Cree una nueva macro y copie y pegue el código siguiente en el editor de Python (no en la consola de Python). Luego, ejecute la macro con Std_DlgMacroExecuteDirect.
El código siguiente no se puede ejecutar desde la consola de Python porque el resorte debe ser un objeto Part::FeaturePython definido por una clase con las funciones de devolución de llamada execute() y onChanged(). Solo entonces se puede cambiar su altura a través de una propiedad.
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
class Spring():
def __init__(self, spring):
spring.addProperty("App::PropertyLength", "Height", "Spring", "Height of the helix").Height = 200.0
spring.Proxy = self
spring.ViewObject.Proxy = 0
def execute(self, spring):
helix = Part.makeHelix(spring.Height/8.5, spring.Height, 35)
startPnt = helix.Edges[0].Curve.value(0)
section = Part.Wire([Part.Circle(startPnt, App.Vector(0, 1, 0), 5).toShape()])
hel1 = helix.makePipeShell([section], True, True)
box1 = Part.makeBox(80, 80, 10, App.Vector(-40, -40, -10))
box2 = Part.makeBox(80, 80, 10, App.Vector(-40, -40, spring.Height))
shape = hel1.cut(box1).cut(box2)
spring.Shape = shape
def onChanged(self, spring, prop):
if prop == "Height":
self.execute(spring)
spring = doc.addObject("Part::FeaturePython", "Spring")
Spring(spring)
spring.Placement.Base = App.Vector(0, 100, 0)
axle1 = doc.addObject("Part::Line", "Axle1")
axle1.X2 = 0
axle1.Y2 = 80
axle1.Z2 = 0
axle2 = doc.addObject("Part::Line", "Axle2")
axle2.X2 = 0
axle2.Y2 = 80
axle2.Z2 = 0
axle2.Placement.Base = App.Vector(120, 0, -250)
rod = doc.addObject("Part::Line", "Rod")
rod.X2 = 100
rod.Y2 = 0
rod.Z2 = 0
rod.Placement.Base = App.Vector(0, -50, 0)
cyl1 = Part.makeCylinder(40, 10,App.Vector(0, 0, -5))
tor1 = Part.makeTorus(40, 5)
cyl2 = Part.makeCylinder(45, 5)
box1 = Part.makeBox(30, 10, 30,App.Vector(-15, -5, -35))
cyl3 = Part.makeCylinder(15, 10, App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl4 = Part.makeCylinder(40, 5)
cyl5 = Part.makeCylinder(5, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl6 = Part.makeCylinder(5, 130)
cyl7 = Part.makeCylinder(20, 5,App.Vector(0, 0, 130))
shape = cyl1.fuse([tor1,cyl2, box1, cyl3]).cut(cyl4.fuse([cyl5])).fuse([cyl6, cyl7])
piston = doc.addObject("Part::Feature", "Piston")
piston.Shape = shape.removeSplitter()
piston.Placement.Base = App.Vector(200, 100, -200)
cyl1 = Part.makeCylinder(40, 10,App.Vector(0, 0, -5))
tor1 = Part.makeTorus(40, 5)
cyl2 = Part.makeCylinder(45, 5)
box1 = Part.makeBox(30, 10, 30,App.Vector(-15, -5, -35))
cyl3 = Part.makeCylinder(15, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl4 = Part.makeCylinder(40, 5)
cyl5 = Part.makeCylinder(5, 10,App.Vector(0, -5, -35), App.Vector(0, 1, 0))
cyl6 = Part.makeCylinder(25, 130)
tor2 = Part.makeTorus(20, 5,App.Vector(0, 0, 130))
cyl7 = Part.makeCylinder(20, 135)
cyl8 = Part.makeCylinder(20, 130)
cyl9 = Part.makeCylinder(5, 135)
shape = cyl1.fuse([tor1, cyl2, box1, cyl3]).cut(cyl4.fuse([cyl5])).fuse([cyl6, tor2, cyl7]).cut(cyl8.fuse([cyl9]))
cylinder = doc.addObject("Part::Feature", "Cylinder")
cylinder.Shape = shape.removeSplitter()
cylinder.Placement.Rotation.Axis = App.Vector(0, 1, 0)
cylinder.Placement.Rotation.Angle = math.pi
cylinder.Placement.Base = App.Vector(100, 100, 0)
mat = piston.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
piston.ViewObject.ShapeAppearance = (mat,)
mat = cylinder.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
cylinder.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Con la herramienta Nuevo ensamblaje agregue un ensamblaje al documento.
En la vista de árbol, arrastre y suelte las piezas sobre el objeto Ensamblaje. Ahora el solucionador del Ensamblaje puede procesarlas.
Para mantener el conjunto en la posición deseada, los dos ejes deben estar bloqueados o fijados al suelo. Seleccione los dos ejes en la vista de árbol o en la vista 3D y utilice la herramienta "Fijar y fijar al suelo". Se añadirán dos objetos GroundedJoint al contenedor de articulaciones.
Articulación de revolución + Elementos seleccionados → Pistón reorganizado
Junta deslizante + elementos seleccionados → Cilindro reorganizado y movido
Por favor, preste atención a la ubicación del sistema de coordenadas antes de seleccionar una cara. Debe estar en el centro de cada cara.
Arrastre el cilindro para crear una separación clara entre este y el pistón. Las superficies de apoyo del resorte deben ser visibles.
Unión de distancia + Caras seleccionadas → distancia del cilindro reorganizada establecida en 200 mm
Establezca el valor de distancia en 200 mm.
Las dos articulaciones siguientes son necesarias para forzar a la bisagra del cilindro a moverse en un arco de círculo.
Unión cilíndrica + Elementos seleccionados → Varilla reorganizada
Asegúrese de que el eje Z del sistema de coordenadas (azul) sea perpendicular a la varilla seleccionando un punto final.
Articulación de revolución + Elementos seleccionados → Cilindro reorganizado
Asegúrese nuevamente de que el eje Z del sistema de coordenadas (azul) sea perpendicular a la varilla.
Es posible que encuentre problemas con esta unión. Si es así, pruebe lo siguiente:
Las dos uniones siguientes son necesarias para fijar el resorte a la superficie de soporte.
Articulación paralela + Caras seleccionadas → Resorte reorganizado
Seleccione el centro de la cara de soporte del pistón y el centro de la cara inferior del resorte. Mantenga el valor de distancia en 0.
Unión fijada + elementos seleccionados → resorte reorganizado
Seleccione el vértice inferior de la costura del cilindro en el Pistón y el vértice de la esquina en el Resorte.
<<Distance>>.Distance
Para ello, haga doble clic en el objeto Distancia en la vista de árbol y cambie su propiedad Distancia. Vuelva a calcular el documento. El resorte cambiará su longitud.