Vous ne pouvez pas modifier cette page, pour la raison suivante :
L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs du groupe : Utilisateurs.
Statut du projet
(Un choix)
Concept Experimental Prototype Fonctionnel Inconnu Abandonné Obsolete
Statut de la publication
Aucune Brouillon Publié Finalisé
Image
Importer un fichier
Description
(petite description du projet, 80 caractères max)
Licence
Vous pouvez trouver plus d'informations sur les licences libres sur le site creativecommons.org.
Contributeur⋅ice⋅s
(personnes participant au projet, séparés par des virgules):
Inspiration
Matériaux
(liste des matériaux utilisés, séparés par des virgules)
Machines
(liste des machines spécifiques utilisées, séparés par des virgules)
Fichier(s) source
Url
Un problème ou une suggession à propos de ce formulaire ? Parlez en sur Discussion:DataFab
Texte libre:
== Objectif == * Montrer l'intérêt du scripting dans FreeCad. * Concevoir un script aisément adaptable. == Utilisation == * Console python : ** Menu "Affichage/Vues/Console python" ** Y coller le script qui suit et c'est tout. * DÉ supplémentaire : Pour générer un autre dé il suffit d'appeler à nouveau la fonction : <code> >>> deGenetation(cubeSize) </code> Ou bien si on souhaite générer un autre dé d'une autre taille : <code> >>> deGenetation(30.0) </code> == Le script == <code> # # de_scripthon.py # # for FreeCad # monDoc = FreeCAD.newDocument("deScripthon") # Dimenssions cubeSize = 20.0 # Description de la position des trous sur chaque face aFaces=[ # 1 Z:-2 [[0,0,-2]], # 2 X:-2 [[-2,-1,1],[-2,1,-1]], # 3 Y:-2 [[-1,-2,-1],[0,-2,0],[1,-2,1]], # 4 Y:+2 [[-1,2,-1],[-1,2,1],[1,2,1],[1,2,-1]], # 5 X:+2 [[2,-1,-1],[2,-1,1],[2,0,0],[2,1,1],[2,1,-1]], # 6 Z:+2 [[-1,-1,2],[-1,0,2],[-1,1,2],[1,1,2],[1,0,2],[1,-1,2]] ] def cutBall(pos, BS): # Créer et positionner une sphère name="Ball" vol = monDoc.addObject("Part::Sphere",name) vol.Radius=BS*1.33 vol.Placement.Base=App.Vector(pos[0]*BS*3,pos[1]*BS*3,pos[2]*BS*3) return([vol,name,"C"]) def deGenetation(CS): # Dimensions calculées HCS = CS/2 BS = CS/12 # Tableau des volumes à créer # Chaque élément est composé de 4 champs : # 0 : un volume (Cube, Cylinder, ...) # 1 : nom du volume # 2 : opération booléenne à appliquer avec le prédécesseur # 3 : volume résultant sur lequel sera appliquée l'opération avec le successeur aElem=[] # Cube de base name="blockD" vol = monDoc.addObject("Part::Box",name) vol.Length=CS vol.Width=CS vol.Height=CS vol.Placement.Base=App.Vector(-HCS,-HCS,-HCS) aElem.append([vol,name,""]) # une sphère par point à marquer sur chaque face for f in aFaces: for b in f: aElem.append(cutBall(b, BS)) # Opérations booléenes # Parcourir le tableau des volumes créés aPrev=[] aElem[0][2]='' # the first element can't be Cut or Fuse for elem in aElem: vol=elem[0] name=elem[1] oper=elem[2] if oper=="C": bVol=monDoc.addObject("Part::Cut","Cut"+name) bVol.Base=aPrev[3] # bVol.Tool=vol Gui.activeDocument().hide(aPrev[1]) Gui.activeDocument().hide(name) elem.append(bVol) elif oper=="F": bVol=monDoc.addObject("Part::Fuse","Fuse"+name) bVol.Base=aPrev[3] bVol.Tool=vol Gui.activeDocument().hide(aPrev[1]) Gui.activeDocument().hide(name) elem.append(bVol) else: elem.append(vol) aPrev=elem monDoc.recompute() # Création des congés sur les arrêtes # Les numéros des "Edges" (-1) sont récupérés manuellement # en utilisant l'interface graphique (je n'ai pas trouvé mieux) monDoc.ActiveObject.Shape = monDoc.ActiveObject.Shape.makeFillet(BS,[ monDoc.ActiveObject.Shape.Edges[0], monDoc.ActiveObject.Shape.Edges[1], monDoc.ActiveObject.Shape.Edges[2], monDoc.ActiveObject.Shape.Edges[3], monDoc.ActiveObject.Shape.Edges[5], monDoc.ActiveObject.Shape.Edges[6], monDoc.ActiveObject.Shape.Edges[7], monDoc.ActiveObject.Shape.Edges[12], monDoc.ActiveObject.Shape.Edges[13], monDoc.ActiveObject.Shape.Edges[22], monDoc.ActiveObject.Shape.Edges[23], monDoc.ActiveObject.Shape.Edges[30] ]) deGenetation(cubeSize) </code> [[Catégorie:3D]]
Résumé :
Modification mineure Suivre cette page
Annuler