Code python pour freecad
Aller à la navigation
Aller à la recherche
Nouveau sujet : utiliser l'IA (claude) pour générer du code python qui est importé dans freecad pour créer un objet. C'est une boite en forme de cube avec un couvercle, incluant ce qui ressemble à un encastrement.
Le code définit 2 fonctions, ouvrir et fermer, qui permettent de séparer / regrouper les pièces.
Le voici, et j'ai mis un 2e code avec le cube qui a des congés sur ses arêtes.
Avec quelques premières commandes pour démarrer sur Freeecad,
- ctrl F6 pour exécuter la macro
- touches V puis F pour recentrer la pièce
- clic sur molette + clic droit et déplacer la souris pour faire tourner la pièce
import FreeCAD as App
import Part
doc = App.ActiveDocument
if doc is None:
doc = App.newDocument("BoiteQuiSouvre")
# --- Dimensions générales ---
Longueur = 40.0
Largeur = 40.0
Hauteur = 30.0
Epaisseur = 2.0
HauteurCouvercle = 8.0
jeu = 0.2
# --- Dimensions de la jupe (agrandie pour test) ---
HauteurJupe = 5.0 # dépasse bien sous le couvercle
# --- 1. Corps de la boîte ---
exterieur = Part.makeBox(Longueur, Largeur, Hauteur - HauteurCouvercle)
interieur = Part.makeBox(
Longueur - 2 * Epaisseur,
Largeur - 2 * Epaisseur,
Hauteur,
App.Vector(Epaisseur, Epaisseur, Epaisseur)
)
corps_shape = exterieur.cut(interieur)
corps = doc.addObject("Part::Feature", "Corps")
corps.Shape = corps_shape
# --- 2. Couvercle avec jupe bien visible ---
# Le couvercle = un dessus plat + une jupe qui descend de HauteurJupe
# Dessus plat du couvercle
dessus = Part.makeBox(Longueur, Largeur, HauteurCouvercle)
# Jupe : anneau qui descend sous le dessus
jupe_ext = Part.makeBox(
Longueur - 2 * Epaisseur - 2 * jeu,
Largeur - 2 * Epaisseur - 2 * jeu,
HauteurJupe,
App.Vector(Epaisseur + jeu, Epaisseur + jeu, -HauteurJupe)
)
jupe_int = Part.makeBox(
Longueur - 2 * Epaisseur - 2 * jeu - 2 * Epaisseur,
Largeur - 2 * Epaisseur - 2 * jeu - 2 * Epaisseur,
HauteurJupe + 2,
App.Vector(Epaisseur + jeu + Epaisseur, Epaisseur + jeu + Epaisseur, -HauteurJupe - 1)
)
jupe = jupe_ext.cut(jupe_int)
couvercle_shape = dessus.fuse(jupe)
couvercle_shape.translate(App.Vector(0, 0, Hauteur - HauteurCouvercle))
couvercle = doc.addObject("Part::Feature", "Couvercle")
couvercle.Shape = couvercle_shape
doc.recompute()
# --- 3. Fonctions d'ouverture/fermeture ---
def ouvrir_boite(hauteur_ouverture=30):
couvercle.Placement = App.Placement(App.Vector(0, 0, hauteur_ouverture), App.Rotation())
doc.recompute()
def fermer_boite():
couvercle.Placement = App.Placement(App.Vector(0, 0, 0), App.Rotation())
doc.recompute()
import __main__
__main__.ouvrir_boite = ouvrir_boite
__main__.fermer_boite = fermer_boite
App.Gui.ActiveDocument.ActiveView.viewAxonometric()
App.Gui.SendMsgToActiveView("ViewFit")
2e code : cube avec arêtes.
import FreeCAD as App
import Part
# Crée un nouveau document (ou utilise le document actif)
doc = App.ActiveDocument
if doc is None:
doc = App.newDocument("MonCube")
# Crée un cube (longueur, largeur, hauteur en mm)
cube = doc.addObject("Part::Box", "Cube")
cube.Length = 10
cube.Width = 10
cube.Height = 10
doc.recompute()
# Rayon du congé (en mm)
rayon_conge = 1.0
# Crée l'objet Fillet et lui applique toutes les arêtes du cube
fillet = doc.addObject("Part::Fillet", "CubeConge")
fillet.Base = cube
# Liste de toutes les arêtes avec le même rayon
edges = []
for i in range(1, len(cube.Shape.Edges) + 1):
edges.append((i, rayon_conge, rayon_conge))
fillet.Edges = edges
# Cache le cube d'origine (sinon il reste visible en dessous)
cube.Visibility = False
doc.recompute()
# Ajuste la vue
App.Gui.ActiveDocument.ActiveView.viewAxonometric()
App.Gui.SendMsgToActiveView("ViewFit")