Macro Draft Circle 3 Points/de: Difference between revisions

From FreeCAD Documentation
(Created page with "==Verbesserte Version== Zusätzlich zu den vorherigen Features wird dieses Beispiel verwendet, um einen orthogonalen Kreis an jeder Form in der Auswahl auszurichten und den Pl...")
(Updating to match new version of source page)
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:
{{Macro/de
{{Macro/de
|Name=Macro Draft Circle 3 Points
|Name=Macro Draft Circle 3 Points
|Icon=Macro_Make_Circle_3_Points.png
|Name/de=Macro Draft Circle 3 Points
|Name/de=Macro Draft Circle 3 Points
|Description=Erzeugt einen Kreis aus 3 ausgewählten Punkten.
|Description=Erzeugt einen Kreis aus 3 ausgewählten Punkten.
Line 7: Line 8:
|Version=01.00
|Version=01.00
|Date=2013-03-11
|Date=2013-03-11
|FCVersion=All
|Download=[https://www.freecadweb.org/wiki/images/c/c7/Macro_Make_Circle_3_Points.png ToolBar Icon]
}}
}}


Line 15: Line 18:
{{Caption|Circle built on 3 selected points}}
{{Caption|Circle built on 3 selected points}}


<div class="mw-translate-fuzzy">
==Verwenden Sie==
==Verwenden Sie==
Wählen Sie 3 Punkte oder Formulare in der 3D-Ansicht aus und führen Sie das Makro aus. <br />
Wählen Sie 3 Punkte oder Formulare in der 3D-Ansicht aus und führen Sie das Makro aus. <br />
Wenn die Form eine Linie ist, ist die Koordinate der Mittelpunkt der Linie.
Wenn die Form eine Linie ist, ist die Koordinate der Mittelpunkt der Linie.
</div>


== Optionen ==
== Optionen ==
Line 24: Line 29:


==Skript==
==Skript==

ToolBar Icon [[Image:Macro_Make_Circle_3_Points.png]]

'''Draft_Circle_3_Points.FCMacro'''
'''Draft_Circle_3_Points.FCMacro'''


{{MacroCode|code=
<syntaxhighlight class="macro-code">
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# créer un cercle à partir de 3 points sélectionnés sur le plan X,Y
# créer un cercle à partir de 3 points sélectionnés sur le plan X,Y
Line 92: Line 100:
FreeCAD.Console.PrintError("Sélectionnez 3 points et recommencez\r\n")
FreeCAD.Console.PrintError("Sélectionnez 3 points et recommencez\r\n")


}}
</syntaxhighlight>



==Verbesserte Version==
==Verbesserte Version==
Line 110: Line 119:
The settings to change.
The settings to change.


{{MacroCode|code=
<syntaxhighlight>
# Change the values here below
# Change the values here below
# mode by default vueChoix = 0 and alignerSur = 0
# mode by default vueChoix = 0 and alignerSur = 0
Line 116: Line 125:
alignerSur=0 # Aligns the circle shaped the choice (1,2 or 3) or Z = 0
alignerSur=0 # Aligns the circle shaped the choice (1,2 or 3) or Z = 0
afficherPoint=1 # Displays the center point of the circle
afficherPoint=1 # Displays the center point of the circle
}}
</syntaxhighlight>


{{MacroCode|code=
<syntaxhighlight>
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# créer un cercle à partir de 3 points séléctionnés
# créer un cercle à partir de 3 points séléctionnés
Line 264: Line 273:
#FreeCAD.Console.PrintError("Select 3 points and repeatr\n")
#FreeCAD.Console.PrintError("Select 3 points and repeatr\n")


}}
</syntaxhighlight>

== Anaglyphe ==
Hier eine Anaglyphenansicht, die es Ihnen ermöglicht, zwei verschiedene Positionen der Ansicht zu sehen, indem Sie eine Brille mit roten und Cyan-Filtern verwenden [[Image: Anaglyph_Tango.png|24px]]. <br />
Schauen Sie abwechselnd mit dem linken und dem rechten Auge, um die Ansichten separat zu sehen.


==Anaglyphe==
Here an Anaglyph view that allows you to see two different positions of the view by using glasses with filters red and Cyan [[Image:Anaglyph_Tango.png|24px]].<br />
Watch alternately with the left eye and the right eye to see the views separately.
<center>
<center>
[[File:Cercle3Points2D_anaglyphe.png|480px|Anaglyphe]]
[[File:Cercle3Points2D_anaglyphe.png|480px|Anaglyphe]]

Revision as of 10:15, 23 May 2020

Other languages:

Macro Draft Circle 3 Points

Beschreibung
Erzeugt einen Kreis aus 3 ausgewählten Punkten.

Versionsmakro : 01.00
Datum der letzten Änderung : 2013-03-11
FreeCAD version : All
Herunterladen : ToolBar Icon
Autor: Mario52
Autor
Mario52
Herunterladen
ToolBar Icon
Links
Macro-Version
01.00
Datum der letzten Änderung
2013-03-11
FreeCAD-Version(s)
All
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Dieses Makro erstellt einen Kreis an 3 ausgewählten Punkten. Die Punkte können Objekte wie Würfel oder Zylinder sein. Die ausgewählten Koordinaten bilden dann den Mittelpunkt dieser Formulare.

Circle built on 3 selected points

Verwenden Sie

Wählen Sie 3 Punkte oder Formulare in der 3D-Ansicht aus und führen Sie das Makro aus.
Wenn die Form eine Linie ist, ist die Koordinate der Mittelpunkt der Linie.

Optionen

Wenn sich die ausgewählten Objekte auf verschiedenen Ebenen befinden (xy Z10, xy Z2, xy Z5), wird der Kreis auf der Karte x, y erstellt. Z = 0.
Wenn alle ausgewählten Objekte die gleichen Z-Koordinaten haben (xy Z5, xy Z5, xy Z5), wird der Kreis nach dem Plan x, y gebildet Z = 5.

Skript

ToolBar Icon

Draft_Circle_3_Points.FCMacro

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

# prendre les objets sélectionnés
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 :
	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
# Affectation des variables
	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	
	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)
# Définition de la coordonnée Z
# Si toutes les coordonnées Z sont égales le centreZ s'aligne à la coordonnée Z
	if z_point_1==z_point_2 and z_point_2==z_point_3:
		centreZ=z_point_1
	else:
# Si une coordonnée est différente alors Z=0
		centreZ=0
# Création du cercle
	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)
# Affiche le résultat dans la Vue rapport de FreeCAD
	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:
# Si la condition n'est pas remplie, recommencer
	FreeCAD.Console.PrintError("Sélectionnez 3 points et recommencez\r\n")


Verbesserte Version

Zusätzlich zu den vorherigen Features wird dieses Beispiel verwendet, um einen orthogonalen Kreis an jeder Form in der Auswahl auszurichten und den Plan XY, YZ, XZzu wählen.
Der Kreis nimmt die Farbe der Achse unabhängig von der aktuellen Farbe an, und der Mittelpunkt des Kreises wird gezeichnet (Option O/N).

The settings to change.

# Change the values here below
			# mode by default vueChoix = 0 and alignerSur = 0
	vueChoix=0	# choice of the top view = 1 XY, view Front = 2 ZX, Right view = 3 ZY
	alignerSur=0	# Aligns the circle shaped the choice (1,2 or 3) or Z = 0
	afficherPoint=1	# Displays the center point of the circle
# -*- coding: utf-8 -*-
# créer un cercle à partir de 3 points séléctionnés
# avec comme options le cercle peut être construit sur un plans au choix
# à la coordonnée d'une des trois formes sélectionnées au choix
# et création du point central O/N
# 04/03/2013 , 07/09/2018 replace PyQt4 to PySide
# la formule provient de
# http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf
# lire la note dans le pdf, sur l'ordre de sélection des points,
# si la formule renvoie une erreur (exemple les 3 points dans le même alignement)
#
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui
from math import sqrt, pi, sin, cos
from FreeCAD import Base
from PySide import QtCore, QtGui

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)
	diag.setWindowModality(QtCore.Qt.ApplicationModal)
	diag.exec_()

def affiche(x,y,z,rayon,r,v,b,afficherPoint):
	pl.Base=FreeCAD.Vector(x,y,z)
	Draft.makeCircle((rayon),placement=pl,face=False,support=None)
	FreeCADGui.activeDocument().activeObject().LineColor = (r,v,b)
	if afficherPoint==1:
		Draft.makePoint(x,y,z)
	diag = QtGui.QMessageBox(QtGui.QMessageBox.Information,u"Coordinates",u"Coordinates X : "+str(x)+"\r\n"+u"Coordinates Y : "+str(y)+"\n"+u"Coordinates Z : "+str(z)+"\nRayon\t     : "+str(rayon))
	diag.setWindowModality(QtCore.Qt.ApplicationModal)
	diag.exec_()

# 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 :
	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
# Change the values here below
			# mode by default vueChoix = 0 and alignerSur = 0
	vueChoix=0	# choice of the top view = 1 XY, view Front = 2 ZX, Right view = 3 ZY
	alignerSur=0	# Aligns the circle shaped the choice (1,2 or 3) or Z = 0
	afficherPoint=1	# Displays the center point of the circle

    # Affectation des variables
	if vueChoix==3:		# View of right ZY (Red)
 	  	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:	# Front view ZX (Green)
 	  	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:			# Top view XY (blue)
 	  	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]

    # Calculation of coordinates of the center of the circle	
	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"Impossible calculation too aligned elements")
	else:
	#finally: sera TOUJOURS exécuté
	   # Definition of the coordinate 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)
			elif alignerSur==2:
				affiche(centreX,centreY,z_point_2,rayon,0.0,0.0,1.0,afficherPoint)
			elif alignerSur==3:
				affiche(centreX,centreY,z_point_3,rayon,0.0,0.0,1.0,afficherPoint)
		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)
			elif alignerSur==2:
				affiche(centreY,z_point_2,centreX,rayon,0.0,1.0,0.0,afficherPoint)
			elif alignerSur==3:
				affiche(centreY,z_point_3,centreX,rayon,0.0,1.0,0.0,afficherPoint)
		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)
			elif alignerSur==2:
				affiche(z_point_2,centreX,centreY,rayon,1.0,0.0,0.0,afficherPoint)
			elif alignerSur==3:
				affiche(z_point_3,centreX,centreY,rayon,1.0,0.0,0.0,afficherPoint)
		else:	# modifier pour avoir XYZ
			# si les coordonnées Z sont égales alors le cercle s'aligne à Z
			if z_point_1==z_point_2 and z_point_2==z_point_3:
				centreZ=z_point_1
				affiche(centreX,centreY,z_point_1,rayon,0.0,0.0,0.0,afficherPoint)
			else:
	        	# Si une coordonnée est différente alors Z=0
				affiche(centreX,centreY,0,rayon,0.0,0.0,0.0,afficherPoint)

else:
    # Si la condition n'est pas remplie, recommencer
	errorDialog(u"Select 3 points and repeat")
	#FreeCAD.Console.PrintError("Select 3 points and repeatr\n")

Anaglyphe

Hier eine Anaglyphenansicht, die es Ihnen ermöglicht, zwei verschiedene Positionen der Ansicht zu sehen, indem Sie eine Brille mit roten und Cyan-Filtern verwenden .
Schauen Sie abwechselnd mit dem linken und dem rechten Auge, um die Ansichten separat zu sehen.

Anaglyphe

Credits

The genesis of the macro Draft Circle 3 Points on the forum (PYTHON) coordonnées d'un point helped flachyjoe thanks.
The formula comes from cercle_3pts.pdf and used with the kind permission of its author.