Code python pour freecad

De Wiki de Mémoire Vive
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")