Macro Draft Circle 3 Points/fr

Description
Cette macro crée un cercle sur 3 points sélectionnés. Les points peuvent être des objets comme des cubes, cylindre,. . . les coordonnées alors retenues seront le centre de ces formes.

Utilisation
Sélectionnez 3 points, ou formes dans la vue 3D et exécutez la macro.

Si la forme est une ligne, la coordonnée sera le centre de la ligne.

Options
Si les objets sélectionnés sont sur des plans différents, (xy Z10,xy Z2,xy Z5) le cercle sera construit sur le plan x,y Z=0.

Si tous les objets sélectionnés ont leurs coordonnées Z égales (xy Z5,xy Z5,xy Z5), le cercle sera construit au plan x,y Z=5.

Script
Draft_Circle_3_Points.FCMacro

import Draft, Part, FreeCAD, math, PartGui, FreeCADGui from math import sqrt, pi, sin, cos from FreeCAD import Base
 * 1) -*- coding: utf-8 -*-
 * 2) créer un cercle à partir de 3 points sélectionnés sur le plan X,Y
 * 3) 04/03/2013
 * 4) la formule provient de
 * 5) http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf
 * 6) lire la note dans le pdf, sur l'ordre de sélection des points,
 * 7) si la formule renvoie une erreur (exemple les 3 points dans le même alignement)

sel = FreeCADGui.Selection.getSelection i=0 centreX=0 centreY=0 rayon=0 if len(sel)==3 : i=0 ta=[0,0,0,0,0,0,0,0,0] for obj in sel: x=(obj.Shape.BoundBox.Center) ta[i+0]=(x.x)		ta[i+1]=(x.y)		ta[i+2]=(x.z)		i=i+3 x_point_1=ta[0] y_point_1=ta[1] z_point_1=ta[2] x_point_2=ta[3] y_point_2=ta[4] z_point_2=ta[5] x_point_3=ta[6] y_point_3=ta[7] z_point_3=ta[8] centreX =((x_point_3**2-x_point_2**2+y_point_3**2-y_point_2**2)/(2*(y_point_3-y_point_2))-(x_point_2**2-x_point_1**2+y_point_2**2-y_point_1**2)/(2*(y_point_2-y_point_1)))/((x_point_3-x_point_2)/(y_point_3-y_point_2)-(x_point_2-x_point_1)/(y_point_2-y_point_1)) centreY =-(x_point_2-x_point_1)/(y_point_2-y_point_1)*centreX+(x_point_2**2-x_point_1**2+y_point_2**2-y_point_1**2)/(2*(y_point_2-y_point_1)) rayon =sqrt((x_point_1-centreX)**2+(y_point_1-centreY)**2) if z_point_1==z_point_2 and z_point_2==z_point_3: centreZ=z_point_1 else: centreZ=0 pl=FreeCAD.Placement pl.Rotation.Q=(0.0,-0.0,-0.0,1.0) pl.Base=FreeCAD.Vector(centreX,centreY,centreZ) Draft.makeCircle((rayon),placement=pl,face=False,support=None) FreeCAD.Console.PrintMessage("Coordonnée X : "+str(centreX)+"\r\n") FreeCAD.Console.PrintMessage("Coordonnée Y : "+str(centreY)+"\r\n") FreeCAD.Console.PrintMessage("Coordonnée Z : "+str(centreZ)+"\r\n") FreeCAD.Console.PrintMessage("Rayon       : "+str(rayon  )+"\r\n") else: FreeCAD.Console.PrintError("Sélectionnez 3 points et recommencez\r\n")
 * 1) prendre les objets sélectionnés
 * 1) S'il y a 3 points sélectionnés alors..
 * 1) Affectation des variables
 * 1) Calcul des coordonnées du centre du cercle
 * 1) Définition de la coordonnée Z
 * 2) Si toutes les coordonnées Z sont égales le centreZ s'aligne à la coordonnée Z
 * 1) Si une coordonnée est différente alors Z=0
 * 1) Création du cercle
 * 1) Affiche le résultat dans la Vue rapport de FreeCAD
 * 1) Si la condition n'est pas remplie, recommencer

Crédits
La genèse de la macro Draft_Circle_3_Points sur le forum (PYTHON) coordonnées d'un point aidé de flachyjoe merci.

La formule provient de cercle_3pts.pdf et utilisée avec l'aimable autorisation de son auteur.