FreeCAD-Doc/localwiki/Macro_Make_Circle_3_Points-it.html
2018-07-19 18:47:02 -05:00

689 lines
37 KiB
HTML

<html><head><title>Macro Make Circle 3 Points/it</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>Macro Make Circle 3 Points/it</h1></div>
<div id="mw-content-text" lang="it" dir="ltr" class="mw-content-ltr"><hr/><div class="mw-parser-output"><table class="fcinfobox wikitable ct" width="100%" style="float: right; width: 230px; margin-left: 10px;">
<tr>
<td class="ctTitle">
<h3><span class="mw-headline" id="Cerchio_da_3_punti"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macro_Draft_Circle_3_Points.png" class="image"><img alt="Macro Draft Circle 3 Points.png" src="32px-Macro_Draft_Circle_3_Points.png" width="32" height="32" srcset="/wiki/images/thumb/1/10/Macro_Draft_Circle_3_Points.png/48px-Macro_Draft_Circle_3_Points.png 1.5x, /wiki/images/1/10/Macro_Draft_Circle_3_Points.png 2x" /></a> Cerchio da 3 punti</span></h3>
</td></tr>
<tr>
<th class="ctOdd">Descrizione
</th></tr>
<tr>
<td class="ctEven left">Crea un cerchio passante per tre punti selezionati nello spazio
</td></tr>
<tr>
<th class="ctOdd">Autore
</th></tr>
<tr>
<td class="ctEven"><a href="https://www.freecadweb.org/wiki/index.php?title=User:Mario52" title="User:Mario52">Mario52</a>
</td></tr>
<tr>
<th class="ctOdd">Link
</th></tr>
<tr>
<td class="ctEven"><a href="https://www.freecadweb.org/wiki/index.php?title=Macros_recipes/it" title="Macros recipes/it">Esempi di macro</a><br /><a href="https://www.freecadweb.org/wiki/index.php?title=How_to_install_macros/it" title="How to install macros/it">Come installare le Macro</a><br /><a href="https://www.freecadweb.org/wiki/index.php?title=Customize_Toolbars/it" title="Customize Toolbars/it">Personalizzare la barra degli strumenti</a>
</td></tr>
<tr>
<th class="ctOdd">Versione
</th></tr>
<tr>
<td class="ctEven macro-version">1.0
</td></tr>
<tr>
<th class="ctOdd">Data ultima modifica
</th></tr>
<tr>
<td class="ctEven macro-date">2014-08-08
</td></tr>
<tr>
<th class="ctOdd">
</th></tr>
<tr>
<td class="ctToc"><br /><div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1"><a href="#Cerchio_da_3_punti"><span class="tocnumber">1</span> <span class="toctext">Cerchio da 3 punti</span></a></li>
<li class="toclevel-1 tocsection-1"><a href="#Uso"><span class="tocnumber">2</span> <span class="toctext">Uso</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Opzioni"><span class="tocnumber">3</span> <span class="toctext">Opzioni</span></a>
<ul>
<li class="toclevel-2 tocsection-3"><a href="#Mode_:"><span class="tocnumber">3.1</span> <span class="toctext">Mode&#160;:</span></a></li>
<li class="toclevel-2 tocsection-4"><a href="#Allineamento_:"><span class="tocnumber">3.2</span> <span class="toctext">Allineamento&#160;:</span></a></li>
<li class="toclevel-2 tocsection-5"><a href="#Visualizzare_il_centro_:"><span class="tocnumber">3.3</span> <span class="toctext">Visualizzare il centro&#160;:</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#Combinare_i_colori"><span class="tocnumber">3.4</span> <span class="toctext">Combinare i colori</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-7"><a href="#Script"><span class="tocnumber">4</span> <span class="toctext">Script</span></a></li>
<li class="toclevel-1 tocsection-8"><a href="#Anaglifo"><span class="tocnumber">5</span> <span class="toctext">Anaglifo</span></a></li>
<li class="toclevel-1 tocsection-9"><a href="#Crediti"><span class="tocnumber">6</span> <span class="toctext">Crediti</span></a></li>
</ul>
</div>
</td></tr>
</table>
<p><br />
</p><p>Questa macro crea un cerchio su tre punti selezionati, ortogonalmente o nello spazio 3D, a scelta. I punti possono essere oggetti quali cubi, cilindri,. . . quindi le coordinate selezionate sono il centro di queste forme (BoundBox.Center).
</p><p><br />
<a href="https://www.freecadweb.org/wiki/index.php?title=File:Macro_Draft_Circle_3_Points01.png" class="image" title="Circle built on 3 selected points"><img alt="Circle built on 3 selected points" src="480px-Macro_Draft_Circle_3_Points01.png" width="480" height="324" srcset="/wiki/images/6/6d/Macro_Draft_Circle_3_Points01.png 1.5x" /></a>
</p>
<div style="clear:both"></div>
<p><br />
</p>
<h2><span class="mw-headline" id="Uso">Uso</span></h2>
<p>Selezionare 3 punti, o 3 forme nella vista 3D ed eseguire la macro.<br />
Se la forma è una linea, le coordinate sono date dal centro della linea.
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Circle_on_3_points.png" class="image" title="Circle_on_3_points"><img alt="Circle_on_3_points" src="Circle_on_3_points.png" width="845" height="466" /></a>
</p>
<div style="clear:both"></div>
<p><br />
</p>
<h2><span class="mw-headline" id="Opzioni">Opzioni</span></h2>
<h3><span class="mw-headline" id="Mode_:">Mode&#160;:</span></h3>
<p><b>Defaut&#160;:</b>
</p>
<dl><dd> Mode per impostazione predefinita, crea un cerchio sui tre punti o forme nello spazio 3D.</dd>
<dd> L'ordine di selezione delle forme influenza l'angolo <b>AXIS</b> e invertire l'inclinazione del cerchio. In questo caso, invertire o modificare l'ordine di selezione delle forme.</dd>
<dd> Se le coordinate <b>X, Y, Z</b> hanno valore <b>0</b> o i punti sono allineati non è possibile eseguire il calcolo, e possono restituire una divisione per zero, quindi si riceve il messaggio <b>I tre punti sono allineati</b></dd></dl>
<p><b>Vista frontale&#160;:</b>
</p>
<dl><dd> Crea il cerchio nella vista frontale della forma scelta, 1, 2 or 3 </dd></dl>
<p><b>Vista dall'alto&#160;:</b>
</p>
<dl><dd>Crea il cerchio nella vista in pianta della forma scelta, 1, 2 or 3 </dd></dl>
<p><b>Vista da destra&#160;:</b>
</p>
<dl><dd>Crea il cerchio nella vista da destra della forma scelta, 1, 2 or 3</dd></dl>
<h3><span class="mw-headline" id="Allineamento_:">Allineamento&#160;:</span></h3>
<p><b>Forma 1, 2, 3</b>
</p>
<dl><dd> Forme, in ordine di selezione.</dd></dl>
<h3><span class="mw-headline" id="Visualizzare_il_centro_:">Visualizzare il centro&#160;:</span></h3>
<dl><dd> Se questa casella è selezionata, verrà creato un punto al centro del cerchio costruito</dd></dl>
<h3><span class="mw-headline" id="Combinare_i_colori">Combinare i colori</span></h3>
<dl><dd> Se questa casella è selezionata, il cerchio prendere il colore della vista corrispondente,</dd></dl>
<dl><dd><dl><dd>Vista dall'alto (X,Y) = Blue(axe Z) </dd>
<dd>Vista frontale (Z,X) = Green(Axe Y) </dd>
<dd>Vista laterale (Z,Y) = Red(Axe X)</dd></dl></dd></dl>
<p><br />
</p>
<div style="clear:both"></div>
<center>
<ul class="gallery mw-gallery-traditional">
<li class="gallerybox" style="width: 235px"><div style="width: 235px">
<div class="thumb" style="width: 230px;"><div style="margin:15px auto;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macro_Draft_Circle_3_Points02.png" class="image"><img alt="" src="133px-Macro_Draft_Circle_3_Points02.png" width="133" height="100" srcset="/wiki/images/thumb/e/e8/Macro_Draft_Circle_3_Points02.png/200px-Macro_Draft_Circle_3_Points02.png 1.5x, /wiki/images/thumb/e/e8/Macro_Draft_Circle_3_Points02.png/267px-Macro_Draft_Circle_3_Points02.png 2x" /></a></div></div>
<div class="gallerytext">
<p>Circumcircle on 3 forms (front view),
</p>
</div>
</div></li>
<li class="gallerybox" style="width: 235px"><div style="width: 235px">
<div class="thumb" style="width: 230px;"><div style="margin:15px auto;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macro_Draft_Circle_3_Points03.png" class="image"><img alt="" src="133px-Macro_Draft_Circle_3_Points03.png" width="133" height="100" srcset="/wiki/images/thumb/4/49/Macro_Draft_Circle_3_Points03.png/200px-Macro_Draft_Circle_3_Points03.png 1.5x, /wiki/images/thumb/4/49/Macro_Draft_Circle_3_Points03.png/267px-Macro_Draft_Circle_3_Points03.png 2x" /></a></div></div>
<div class="gallerytext">
<p>in an orthogonal manner on the form chosen (right view)
</p>
</div>
</div></li>
<li class="gallerybox" style="width: 235px"><div style="width: 235px">
<div class="thumb" style="width: 230px;"><div style="margin:15px auto;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macro_Draft_Circle_3_Points04.png" class="image"><img alt="" src="133px-Macro_Draft_Circle_3_Points04.png" width="133" height="100" srcset="/wiki/images/thumb/e/eb/Macro_Draft_Circle_3_Points04.png/200px-Macro_Draft_Circle_3_Points04.png 1.5x, /wiki/images/thumb/e/eb/Macro_Draft_Circle_3_Points04.png/267px-Macro_Draft_Circle_3_Points04.png 2x" /></a></div></div>
<div class="gallerytext">
<p>Three bystanders orthogonal circles by the form chosen.
</p>
</div>
</div></li>
</ul>
</center>
<p><br />
</p>
<h2><span class="mw-headline" id="Script">Script</span></h2>
<p>il file deve essere copiato in " <b>C:/Program Files/FreeCAD0.13/</b> ". Per metterlo in un'altra directory, modificare il percorso nella riga 53
</p>
<pre>path = FreeCAD.ConfigGet("AppHomePath") # chemin </pre>
<p><a href="https://www.freecadweb.org/wiki/index.php?title=File:View-Top.png" class="image"><img alt="View-Top.png" src="View-Top.png" width="64" height="64" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:View-Left.png" class="image"><img alt="View-Left.png" src="View-Left.png" width="64" height="64" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:View-Front.png" class="image"><img alt="View-Front.png" src="View-Front.png" width="64" height="64" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:View-C3P.png" class="image"><img alt="View-C3P.png" src="View-C3P.png" width="64" height="64" /></a>
</p><p>Le tre icone devono trovarsi nella stessa directory del modulo.<br />
Per scaricarle, posizionare il mouse sopra l'icona, fare clic destro e poi <b>salva immagine con nome ...</b>
</p><p>Il file <b>Make_Circle_3_Points/fr.FCMacro</b>:
</p><p><br />
</p>
<pre># -*- coding: utf-8 -*-
# Cercle sur 3 points.py
# create a circle from 3 points selected
# combination of the two programs 'create a circle from 3 points selected'
# with as options (orthogonal) circle can be built on a choice plans
# to coordinate one of the three selected choice shapes
# mode by default, creates the circle in 3D space
# the options create the circle of orthogonal way on the map and view the choice
# with the creation of a central color related to the axes Y/N Y/N
# 04/03/2013 # 24/03/2013 # 08/08/2014 by mario52
# the formula adapted (with permission of its author) by "mario52" for orthogonal circles comes from
# http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf
# read the note in pdf, on the order of selection points,
# If the formula returns an error (example the 3 points in the same alignment)
# the formula adapted by "galou_breizh" for the cecle in 3D space comes from
# http://en.wikipedia.org/wiki/Circumscribed_circle
# the window is always visible and allows you to work on other programs
# as for example to select other items in FreeCAD
#08/08/2014 PyQt4 and PySide
#OS: Windows Vista
#Word size: 32-bit
#Version: 0.14.3700 (Git)
#Branch: releases/FreeCAD-0-14
#Hash: 32f5aae0a64333ec8d5d160dbc46e690510c8fe1
#Python version: 2.6.2
#Qt version: 4.5.2
#Coin version: 3.1.0
#SoQt version: 1.4.1
#OCC version: 6.5.1
try:
import PyQt4
from PyQt4 import QtCore, QtGui
except Exception:
import PySide
from PySide import QtCore, QtGui
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui
from math import sqrt, pi, sin, cos, asin
from FreeCAD import Base
# vueChoix = 0 et alignerSur = 0 , mode par défaut
global vueChoix# choix de la vue Dessus=1 XY, vue Face=2 ZX, vue Droite=3 ZY (Orthogonal)
global alignerSur # aligne le cercle sur une forme au choix (1,2 ou 3) ou sur Z=0 (Orthogonal)
global afficherPoint# affiche le point central du cercle
global colorer # colorer suivant l'axe 1=Ok 0=Couleur courante uniquement Orthogonal&#160;!
vueChoix = 0
alignerSur = 0
afficherPoint = 1
colorer = 1
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def __init__(self, MainWindow):
self.window = MainWindow
path = FreeCAD.ConfigGet("AppHomePath") # chemin
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(490, 302)
MainWindow.setWindowIcon(QtGui.QIcon(path+'View-C3P.png'))
self.centralWidget = QtGui.QWidget(MainWindow)
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
self.groupBox = QtGui.QGroupBox(self.centralWidget)
self.groupBox.setGeometry(QtCore.QRect(20, 10, 130, 161))
self.groupBox.setObjectName(_fromUtf8("groupBox_1"))
self.radioButton_1 = QtGui.QRadioButton(self.groupBox)
self.radioButton_1.setGeometry(QtCore.QRect(10, 30, 130, 20))
self.radioButton_1.setChecked(True)
self.radioButton_1.setObjectName(_fromUtf8("radioButton_1"))
self.radioButton_1.clicked.connect(self.on_radioButton_1_clicked) #connection radioButton_1
self.radioButton_1.setToolTip(_translate("MainWindow", "Cercle sur 3 points dans l'espace", None))
self.radioButton_2 = QtGui.QRadioButton(self.groupBox)
self.radioButton_2.setGeometry(QtCore.QRect(10, 60, 130, 20))
self.radioButton_2.setObjectName(_fromUtf8("radioButton_2"))
self.radioButton_2.clicked.connect(self.on_radioButton_2_clicked) #connection radioButton_2
self.radioButton_2.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la vue de face", None))
#self.image_01 = "C:\Program Files\FreeCAD0.13\View-Front.png"
self.image_01 = path+"View-Front.png"
icon01 = QtGui.QIcon()
icon01.addPixmap(QtGui.QPixmap(self.image_01),QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.radioButton_2.setIcon(icon01)
self.radioButton_3 = QtGui.QRadioButton(self.groupBox)
self.radioButton_3.setGeometry(QtCore.QRect(10, 90, 130, 20))
self.radioButton_3.setObjectName(_fromUtf8("radioButton_3"))
self.radioButton_3.clicked.connect(self.on_radioButton_3_clicked) #connection radioButton_3
self.radioButton_3.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la vue de dessus", None))
#self.image_02 = "C:\Program Files\FreeCAD0.13\View-Top.png"
self.image_02 = path+"View-Top.png"
icon02 = QtGui.QIcon()
icon02.addPixmap(QtGui.QPixmap(self.image_02),QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.radioButton_3.setIcon(icon02)
self.radioButton_4 = QtGui.QRadioButton(self.groupBox)
self.radioButton_4.setGeometry(QtCore.QRect(10, 120, 130, 20))
self.radioButton_4.setObjectName(_fromUtf8("radioButton_4"))
self.radioButton_4.clicked.connect(self.on_radioButton_4_clicked) #connection radioButton_4
self.radioButton_4.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la vue de droite", None))
#self.image_03 = "C:\Program Files\FreeCAD0.13\View-Left.png"
self.image_03 = path+"View-Left.png"
icon03 = QtGui.QIcon()
icon03.addPixmap(QtGui.QPixmap(self.image_03),QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.radioButton_4.setIcon(icon03)
self.groupBox_2 = QtGui.QGroupBox(self.centralWidget)
self.groupBox_2.setGeometry(QtCore.QRect(170, 10, 120, 161))
self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
self.radioButton_5 = QtGui.QRadioButton(self.groupBox_2)
self.radioButton_5.setGeometry(QtCore.QRect(10, 30, 95, 20))
self.radioButton_5.setChecked(True)
self.radioButton_5.setObjectName(_fromUtf8("radioButton_5"))
self.radioButton_5.clicked.connect(self.on_radioButton_5_clicked) #connection radioButton_5
self.radioButton_5.setToolTip(_translate("MainWindow", "Cercle sur 3 points dans l'espace", None))
self.radioButton_6 = QtGui.QRadioButton(self.groupBox_2)
self.radioButton_6.setGeometry(QtCore.QRect(10, 60, 95, 20))
self.radioButton_6.setObjectName(_fromUtf8("radioButton_6"))
self.radioButton_6.clicked.connect(self.on_radioButton_6_clicked) #connection radioButton_6
self.radioButton_6.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la forme 1", None))
self.radioButton_7 = QtGui.QRadioButton(self.groupBox_2)
self.radioButton_7.setGeometry(QtCore.QRect(10, 90, 95, 20))
self.radioButton_7.setObjectName(_fromUtf8("radioButton_7"))
self.radioButton_7.clicked.connect(self.on_radioButton_7_clicked) #connection radioButton_7
self.radioButton_7.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la forme 2", None))
self.radioButton_8 = QtGui.QRadioButton(self.groupBox_2)
self.radioButton_8.setGeometry(QtCore.QRect(10, 120, 95, 20))
self.radioButton_8.setObjectName(_fromUtf8("radioButton_8"))
self.radioButton_8.clicked.connect(self.on_radioButton_8_clicked) #connection radioButton_8
self.radioButton_8.setToolTip(_translate("MainWindow", "Cercle orthogonal sur la forme 3", None))
self.checkBox_1 = QtGui.QCheckBox(self.centralWidget)
self.checkBox_1.setGeometry(QtCore.QRect(20, 190, 140, 20))
self.checkBox_1.setChecked(True)
self.checkBox_1.setObjectName(_fromUtf8("checkBox_1"))
self.checkBox_1.setToolTip(_translate("MainWindow", "Affiche un point sur le centre du cercle", None))
# self.checkBox_1.clicked.connect(self.on_checkBox_1_clicked) #connection checkBox_1
self.checkBox_2 = QtGui.QCheckBox(self.centralWidget)
self.checkBox_2.setGeometry(QtCore.QRect(170, 190, 150, 20))
self.checkBox_2.setChecked(True)
self.checkBox_2.setObjectName(_fromUtf8("checkBox_2"))
self.checkBox_2.setToolTip(_translate("MainWindow", "Associe la couleur du cercle à la couleur des axes X,Y,Z (Orthogonal)", None))
# self.checkBox_2.clicked.connect(self.on_checkBox_2_clicked) #connection checkBox_1
self.lineEdit_1 = QtGui.QLineEdit(self.centralWidget)
self.lineEdit_1.setGeometry(QtCore.QRect(320, 30, 151, 22))
self.lineEdit_1.setObjectName(_fromUtf8("lineEdit_1"))
self.lineEdit_1.setReadOnly(True)
self.lineEdit_2 = QtGui.QLineEdit(self.centralWidget)
self.lineEdit_2.setGeometry(QtCore.QRect(320, 80, 151, 22))
self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
self.lineEdit_2.setReadOnly(True)
self.lineEdit_3 = QtGui.QLineEdit(self.centralWidget)
self.lineEdit_3.setGeometry(QtCore.QRect(320, 130, 151, 22))
self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3"))
self.lineEdit_3.setReadOnly(True)
self.lineEdit_4 = QtGui.QLineEdit(self.centralWidget)
self.lineEdit_4.setGeometry(QtCore.QRect(320, 180, 151, 22))
self.lineEdit_4.setObjectName(_fromUtf8("lineEdit_4"))
self.lineEdit_4.setReadOnly(True)
self.lineEdit_5 = QtGui.QLineEdit(self.centralWidget)
self.lineEdit_5.setGeometry(QtCore.QRect(320, 230, 151, 22))
self.lineEdit_5.setObjectName(_fromUtf8("lineEdit_5"))
self.lineEdit_5.setReadOnly(True)
self.label_1 = QtGui.QLabel(self.centralWidget)
self.label_1.setGeometry(QtCore.QRect(320, 10, 91, 16))
self.label_1.setObjectName(_fromUtf8("label_1"))
self.label_2 = QtGui.QLabel(self.centralWidget)
self.label_2.setGeometry(QtCore.QRect(320, 60, 91, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.label_3 = QtGui.QLabel(self.centralWidget)
self.label_3.setGeometry(QtCore.QRect(320, 110, 91, 16))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.centralWidget)
self.label_4.setGeometry(QtCore.QRect(320, 160, 53, 16))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.label_5 = QtGui.QLabel(self.centralWidget)
self.label_5.setGeometry(QtCore.QRect(320, 210, 81, 16))
self.label_5.setObjectName(_fromUtf8("label_5"))
self.pushButton_1 = QtGui.QPushButton(self.centralWidget)
self.pushButton_1.setGeometry(QtCore.QRect(20, 230, 90, 28))
self.pushButton_1.setObjectName(_fromUtf8("pushButton_1"))
self.pushButton_1.clicked.connect(self.on_pushButton_1_clicked) #connection pushButton_1
self.pushButton_1.setToolTip(_translate("MainWindow", "Quitte la fonction", None))
self.pushButton_2 = QtGui.QPushButton(self.centralWidget)
self.pushButton_2.setGeometry(QtCore.QRect(110, 230, 90, 28))
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.pushButton_2.clicked.connect(self.on_pushButton_2_clicked) #connection pushButton_2
self.pushButton_2.setToolTip(_translate("MainWindow", "Applique la fonction sans quitter", None))
#self.pushButton_2.setStyleSheet("background-color: red") #cette fonction donne une couleur au bouton
#self.pushButton_2.setStyleSheet("color&#160;: #ff0000") #cette fonction donne une couleur au texte du bouton
#self.pushButton_2.setStyleSheet("color&#160;: #ff0000; background-color&#160;: #0000ff;" ) #combinaison des deux
self.pushButton_3 = QtGui.QPushButton(self.centralWidget)
self.pushButton_3.setGeometry(QtCore.QRect(200, 230, 90, 28))
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
self.pushButton_3.clicked.connect(self.on_pushButton_3_clicked) #connection pushButton_3
self.pushButton_3.setToolTip(_translate("MainWindow", "Définit le mode par défaut (Cercle sur 3 points dans l'espace)", None))
MainWindow.setCentralWidget(self.centralWidget)
self.statusBar = QtGui.QStatusBar(MainWindow)
self.statusBar.setObjectName(_fromUtf8("statusBar"))
MainWindow.setStatusBar(self.statusBar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
try:
MainWindow.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) # PyQt4 cette fonction met la fenêtre en avant
except Exception:
MainWindow.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenêtre en avant
#MainWindow.setStyleSheet("background-color: red") #cette fonction donne une couleur à la fenêtre
#MainWindow.setWindowOpacity(0.5) #cette fonction donne une transparence à la fenêtre
MainWindow.setWindowTitle(_translate("MainWindow", "Cercle sur 3 points", None))
self.groupBox.setTitle(_translate("MainWindow", "Mode", None))
self.radioButton_1.setText(_translate("MainWindow", "Défaut", None))
self.radioButton_2.setText(_translate("MainWindow", "Vue Face", None))
self.radioButton_3.setText(_translate("MainWindow", "Vue Dessus", None))
self.radioButton_4.setText(_translate("MainWindow", "Vue Droite", None))
self.groupBox_2.setTitle(_translate("MainWindow", "Alignement sur", None))
self.radioButton_5.setText(_translate("MainWindow", "Défaut", None))
self.radioButton_6.setText(_translate("MainWindow", "Forme 1", None))
self.radioButton_7.setText(_translate("MainWindow", "Forme 2", None))
self.radioButton_8.setText(_translate("MainWindow", "Forme 3", None))
self.checkBox_1.setText(_translate("MainWindow", "Afficher le centre", None))
self.checkBox_2.setText(_translate("MainWindow", "Associer les couleurs", None))
self.label_1.setText(_translate("MainWindow", "Coordonnée X", None))
self.label_2.setText(_translate("MainWindow", "Coordonnée Y", None))
self.label_3.setText(_translate("MainWindow", "Coordonnée Z", None))
self.label_4.setText(_translate("MainWindow", "Rayon", None))
self.label_5.setText(_translate("MainWindow", "Angle", None))
self.pushButton_1.setText(_translate("MainWindow", "Quitter", None))
self.pushButton_2.setText(_translate("MainWindow", "Appliquer", None))
self.pushButton_3.setText(_translate("MainWindow", "Défaut", None))
# première série de radioboutons
def on_radioButton_1_clicked(self):
if self.radioButton_1.isChecked():
self.radioButton_5.setChecked(True)
def on_radioButton_2_clicked(self):
if self.radioButton_5.isChecked():
self.radioButton_6.setChecked(True)
def on_radioButton_3_clicked(self):
if self.radioButton_5.isChecked():
self.radioButton_6.setChecked(True)
def on_radioButton_4_clicked(self):
if self.radioButton_5.isChecked():
self.radioButton_6.setChecked(True)
# deuxième série de radioboutons
def on_radioButton_5_clicked(self):
if self.radioButton_5.isChecked():
self.radioButton_1.setChecked(True)
def on_radioButton_6_clicked(self):
if self.radioButton_1.isChecked():
self.radioButton_2.setChecked(True)
def on_radioButton_7_clicked(self):
if self.radioButton_1.isChecked():
self.radioButton_2.setChecked(True)
def on_radioButton_8_clicked(self):
if self.radioButton_1.isChecked():
self.radioButton_2.setChecked(True)
# Boutons
def on_pushButton_1_clicked(self): # Bouton Quitte la fonction
App.Console.PrintMessage("Terminé\r\n")
self.window.hide()
def on_pushButton_2_clicked(self): # Bouton Appliquer
if self.radioButton_1.isChecked():
vueChoix=0
if self.radioButton_2.isChecked():
vueChoix=1
if self.radioButton_3.isChecked():
vueChoix=2
if self.radioButton_4.isChecked():
vueChoix=3
if self.radioButton_5.isChecked():
alignerSur=0
if self.radioButton_6.isChecked():
alignerSur=1
if self.radioButton_7.isChecked():
alignerSur=2
if self.radioButton_8.isChecked():
alignerSur=3
if self.checkBox_1.checkState()==0:
afficherPoint=0
else:
afficherPoint=1
if self.checkBox_2.checkState()==0:
colorer=0
else:
colorer=1
# App.Console.PrintMessage("Appliquer\r\n")
# App.Console.PrintMessage(str(vueChoix)+" \t")
# App.Console.PrintMessage(str(alignerSur)+" \t")
# App.Console.PrintMessage(str(afficherPoint)+" \t")
# App.Console.PrintMessage(str(colorer)+" \r\n")
def errorDialog(msg):
# Create a simple dialog QMessageBox
# The first argument indicates the icon used: one of QtGui.QMessageBox.{NoIcon, Information, Warning, Critical, Question}
diag = QtGui.QMessageBox(QtGui.QMessageBox.Critical,u"Error Message",msg)
try:
diag.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) # PyQt4 cette fonction met la fenêtre en avant
except Exception:
diag.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenêtre en avant
#diag.setWindowModality(QtCore.Qt.ApplicationModal) # la fonction a été désactivée pour favoriser "WindowStaysOnTopHint"
diag.exec_()
def affiche(x,y,z,rayon,r,v,b,afficherPoint,angle):
pl.Base=FreeCAD.Vector(x,y,z)
Draft.makeCircle((rayon),placement=pl,face=False,support=None)
if colorer==1:
FreeCADGui.activeDocument().activeObject().LineColor = (r,v,b)
if afficherPoint==1:
Draft.makePoint(x,y,z)
if colorer==1:
FreeCADGui.activeDocument().activeObject().PointColor = (r,v,b)
str(self.lineEdit_1.setText(str(x)))
str(self.lineEdit_2.setText(str(y)))
str(self.lineEdit_3.setText(str(z)))
str(self.lineEdit_4.setText(str(rayon)))
str(self.lineEdit_5.setText(str(angle)))
# prendre les objets selectionnes
sel = FreeCADGui.Selection.getSelection()
i=0
centreX=0;centreY=0;rayon=0
# S'il y a 3 points sélectionnés alors..
if len(sel)==3&#160;:
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
if vueChoix==3: # Vue de droite ZY (Rouge)
z_point_1=ta[0]
x_point_1=ta[1]
y_point_1=ta[2]
z_point_2=ta[3]
x_point_2=ta[4]
y_point_2=ta[5]
z_point_3=ta[6]
x_point_3=ta[7]
y_point_3=ta[8]
elif vueChoix==2: # Vue de face ZX (Vert)
y_point_1=ta[0]
z_point_1=ta[1]
x_point_1=ta[2]
y_point_2=ta[3]
z_point_2=ta[4]
x_point_2=ta[5]
y_point_3=ta[6]
z_point_3=ta[7]
x_point_3=ta[8]
else: # Vue de dessus XY (Bleu)
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]
# Calcul des coordonnées du centre du cercle
try:
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)
except:
errorDialog(u"Calcul impossible trop d'élements alignés")
else:
#finally: # si finally est présent, il sera TOUJOURS exécuté
# Définition de la coordonnée Z
centreZ=0
# Création du cercle
pl=FreeCAD.Placement()
if vueChoix==1: # Plan XY Dessus
pl.Rotation.Q=(0,0,0,1.0)
if alignerSur==1:
affiche(centreX,centreY,z_point_1,rayon,0.0,0.0,1.0,afficherPoint,0)
elif alignerSur==2:
affiche(centreX,centreY,z_point_2,rayon,0.0,0.0,1.0,afficherPoint,0)
elif alignerSur==3:
affiche(centreX,centreY,z_point_3,rayon,0.0,0.0,1.0,afficherPoint,0)
elif vueChoix==2: # Plan XZ Face
pl.Rotation.Q=(1,0,0,1.0)
if alignerSur==1:
affiche(centreY,z_point_1,centreX,rayon,0.0,1.0,0.0,afficherPoint,0)
elif alignerSur==2:
affiche(centreY,z_point_2,centreX,rayon,0.0,1.0,0.0,afficherPoint,0)
elif alignerSur==3:
affiche(centreY,z_point_3,centreX,rayon,0.0,1.0,0.0,afficherPoint,0)
elif vueChoix==3: # Plan YZ Droite
pl.Rotation.Q=(0,1,0,1.0)
if alignerSur==1:
affiche(z_point_1,centreX,centreY,rayon,1.0,0.0,0.0,afficherPoint,0)
elif alignerSur==2:
affiche(z_point_2,centreX,centreY,rayon,1.0,0.0,0.0,afficherPoint,0)
elif alignerSur==3:
affiche(z_point_3,centreX,centreY,rayon,1.0,0.0,0.0,afficherPoint,0)
else: # 3D XYZ
P1 = sel[0].Shape.BoundBox.Center
P2 = sel[1].Shape.BoundBox.Center
P3 = sel[2].Shape.BoundBox.Center
P1P2 = (P2 - P1).Length
P2P3 = (P3 - P2).Length
P3P1 = (P1 - P3).Length
# Circle radius.
l = ((P1 - P2).cross(P2 - P3)).Length
try:
#if l &lt; 1e-8:
# errorDialog("The three points are aligned")
r = P1P2 * P2P3 * P3P1 / 2 / l
except:
errorDialog("The three points are aligned")
else:
# Sphere center.
a = P2P3**2 * (P1 - P2).dot(P1 - P3) / 2 / l**2
b = P3P1**2 * (P2 - P1).dot(P2 - P3) / 2 / l**2
c = P1P2**2 * (P3 - P1).dot(P3 - P2) / 2 / l**2
P1.multiply(a)
P2.multiply(b)
P3.multiply(c)
PC = P1 + P2 + P3
# Creation of a circle
pl = Base.Placement()
v = (P1 - P2).cross(P3 - P2)
v.normalize()
axis = Base.Vector(0, 0, 1).cross(v)
angle = asin(axis.Length) * 180 / pi
axis.normalize()
pl = Base.Placement(PC, axis, angle)
affiche((PC.x),(PC.y),(PC.z),r,0.0,0.0,0.0,afficherPoint,angle)
else:
# Si la condition n'est pas remplie, recommencer
errorDialog(u"Sélectionnez 3 points et recommencez")
#FreeCAD.Console.PrintError("Sélectionnez 3 points et recommencez\r\n")
#________________________________________________________________________________
def on_pushButton_3_clicked(self): # Valeurs d'origine
App.Console.PrintMessage("Défaut\r\n")
vueChoix=0# choix de la vue Dessus=1 XY, vue Face=2 ZX, vue Droite=3 ZY
self.radioButton_1.setChecked(True)
alignerSur=0# aligne le cercle sur une forme au choix (1,2 ou 3) ou sur Z=0
self.radioButton_5.setChecked(True)
afficherPoint=1# affiche le point central du cercle
self.checkBox_1.setChecked(True)
colorer=1# colorer suivant l'axe 1=Ok 0=Couleur courante uniquement Orthogonal&#160;!
self.checkBox_2.setChecked(True)
#______________________________________________________________________________________
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow(MainWindow)
MainWindow.show() </pre>
<p><br />
</p>
<h2><span class="mw-headline" id="Anaglifo">Anaglifo</span></h2>
<p>Utilizzando occhiali con filtri rosso e ciano, in questo anaglifo è possibile vedere due diverse posizioni <a href="https://www.freecadweb.org/wiki/index.php?title=File:Anaglyph_Tango.png" class="image"><img alt="Anaglyph Tango.png" src="24px-Anaglyph_Tango.png" width="24" height="24" srcset="/wiki/images/thumb/d/dd/Anaglyph_Tango.png/36px-Anaglyph_Tango.png 1.5x, /wiki/images/d/dd/Anaglyph_Tango.png 2x" /></a>.<br />
Guarda alternativamente con l'occhio sinistro e l'occhio destro per vedere le viste separatamente.
</p>
<center>
<p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Cercle3Points2D_anaglyphe.png" class="image" title="Anaglyphe"><img alt="Anaglyphe" src="480px-Cercle3Points2D_anaglyphe.png" width="480" height="360" srcset="/wiki/images/d/d1/Cercle3Points2D_anaglyphe.png 1.5x" /></a>
</p>
</center>
<div style="clear:both"></div>
<p><br />
</p>
<h2><span class="mw-headline" id="Crediti">Crediti</span></h2>
<p>La genesi della macro <b>Draft Circle 3 Points</b> si trova nel forum <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=12&amp;t=3696&amp;sid=17886f953113e162dc9a4a843e1fce94">(PYTHON) coordonnées d'un point</a> a cui ha contribuito flachyjoe che ringrazio.<br />
La formula è presa da <a rel="nofollow" class="external text" href="http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf">cercle_3pts.pdf</a> ed utilizzata con il gentile permesso del suo autore.
La formula <i>circle in 3D space</i>, adattata da " galou_breizh " è presa da <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Circumscribed_circle">Circumscribed_circle</a><br />
Altre macro si trovano in:<br />
</p>
<ul><li> <a href="Macro_Draft_Circle_3_Points.html" title="Macro Draft Circle 3 Points">Macro Draft Circle 3 Points</a><br /> </li>
<li> <a href="Macro_Draft_Circle_3_Points_3D.html" title="Macro Draft Circle 3 Points 3D">Macro Draft Circle 3 Points 3D</a></li></ul>
</div>
</div>
</div><div class="printfooter">
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=Macro_Make_Circle_3_Points/it&amp;oldid=240362">http://www.freecadweb.org/wiki/index.php?title=Macro_Make_Circle_3_Points/it&amp;oldid=240362</a>"</div>
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
</div>
</div>
<div id="mw-navigation">
<h2>Navigation menu</h2>
</body></html>