Macro Draft Circle 3 Points/cs: Difference between revisions
(Created page with "Makro Nakresli kružnici ze 3 bodů") |
(Updating to match new version of source page) |
||
(25 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
⚫ | |||
{{Macro|Icon=Macro_Draft_Circle_3_Points|Name=Macro_Draft_Circle_3_Points|Description=Creates a circle from 3 selected points.|Author=Mario52}} |
|||
{{Macro/cs |
|||
|Name=Macro Make Circle 3 Points |
|||
|Icon=Macro_Make_Circle_3_Points.png |
|||
|Translate=Macro Draft Circle 3 Points |
|||
|Description=Vytváří kružnici ze 3 vybraných bodů. |
|||
|Author=Mario52 |
|||
|Version=01.00 |
|||
|Date=2013-03-11 |
|||
|FCVersion=All |
|||
|Download=[https://www.freecadweb.org/wiki/images/c/c7/Macro_Make_Circle_3_Points.png ToolBar Icon] |
|||
}} |
|||
== |
==Popis== |
||
Toto makro vytváří kružnice pode 3 vybraných bodů. Body mohou být objekty jako jsou krychle, válce, v takovém případě jsou vybrané souřadnice středem těchto forem. |
|||
This macro creates a circle on 3 selected points. The points can be objects such as cubes, cylinder, then selected coordinates will be the centre of these forms. |
|||
[[File:Macro Draft Circle 3 Points01.png|480px| |
[[File:Macro Draft Circle 3 Points01.png|480px|Kružnice vybudovaná podle 3 vybraných bodů]] |
||
{{Caption|Circle built on 3 selected points}} |
|||
{{clear}} |
|||
<div class="mw-translate-fuzzy"> |
|||
==Použití== |
|||
Vyberte 3 body nebo tvary ve 3D pohledu a spusťte makro. |
|||
Je-li tvarem přímka, souřadnice budou střed přímky. |
|||
</div> |
|||
==Volby== |
|||
Jsou-li vybrané objekty v různých rovinách, (xy '''Z10''', xy '''Z2''', xy '''Z5''') pak bude kružnice vytvořena na plánu x,y '''Z=0'''. |
|||
Mají-li všechny vybrané objekty stejnou souřadnici Z (xy '''Z5''', xy '''Z5''', xy '''Z5'''), bude kružnice vytvořena na plánu x,y '''Z=5'''. |
|||
== |
==Skript== |
||
Select 3 points, or forms in the 3D view and run the macro.<br /> |
|||
If the shape is a line, the coordinate will be the center of the line. |
|||
ToolBar Icon [[Image:Macro_Make_Circle_3_Points.png]] |
|||
==Options== |
|||
If the selected objects are on different planes, (xy '''Z10''', xy '''Z2''', xy '''Z5''') the circle will be built on the map x,y '''Z=0'''.<br /> |
|||
If all of the selected objects have their equal Z coordinates (xy '''Z5''', xy '''Z5''', xy '''Z5'''), circle will be built to the plan x,y '''Z=5'''. |
|||
⚫ | |||
==Script== |
|||
⚫ | |||
{{MacroCode|code= |
|||
<syntaxhighlight> |
|||
# -*- 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 84: | 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> |
|||
==Improved version== |
|||
==Vylepšená verze== |
|||
In addition to the previous features, this example is used to align an orthogonal circle on each shape in the selection, and the plan "'XY, YZ, XZ ' ' chosen.<br /> |
|||
Navíc k předcházejícímu makru, je tento příklad použit k vyrovnání kolmé kružnice ke každému tvaru ve výběru a je vybrán plán "'XY, YZ, XZ ' ' . |
|||
The circle takes the color of the axis dedicated regardless of current color, and the center point of the circle is drawn (option O/N). |
|||
Kružnice přebírá barvu od přiřazené osy bez ohledu na aktuálně vybranou barvu, a střed kružnice je vykreslen (volba O/N). |
|||
<center> |
<center> |
||
Line 100: | Line 117: | ||
{{clear}} |
{{clear}} |
||
Nastavení k úpravám. |
|||
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 108: | 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 116: | Line 133: | ||
# à la coordonnée d'une des trois formes sélectionnées au choix |
# à la coordonnée d'une des trois formes sélectionnées au choix |
||
# et création du point central O/N |
# et création du point central O/N |
||
# 04/03/2013 |
# 04/03/2013 , 07/09/2018 replace PyQt4 to PySide |
||
# la formule provient de |
# la formule provient de |
||
# http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf |
# http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf |
||
Line 125: | Line 142: | ||
from math import sqrt, pi, sin, cos |
from math import sqrt, pi, sin, cos |
||
from FreeCAD import Base |
from FreeCAD import Base |
||
from |
from PySide import QtCore, QtGui |
||
def errorDialog(msg): |
def errorDialog(msg): |
||
Line 256: | Line 273: | ||
#FreeCAD.Console.PrintError("Select 3 points and repeatr\n") |
#FreeCAD.Console.PrintError("Select 3 points and repeatr\n") |
||
}} |
|||
</syntaxhighlight> |
|||
==Anaglyph (3D pohled)== |
|||
==Anaglyphe== |
|||
Zde je 3D pohled, který Vám umožňuje vidět 2 různé pozice pohledu použitím brýlí s filtry červené a cyan barvy [[Image:Anaglyph_Tango.png|24px]]. |
|||
Dívejte se střídavě levým a pravým okem abyste viděli pohledy samostatně. |
|||
Watch alternately with the left eye and the right eye to see the views separately. |
|||
<center> |
<center> |
||
Line 267: | Line 284: | ||
{{clear}} |
{{clear}} |
||
== |
==Uznání== |
||
Geneze makra '''Draft Circle 3 Points''' [http://forum.freecadweb.org/viewtopic.php?f=12&t=3696&sid=17886f953113e162dc9a4a843e1fce94 na fóru (PYTHONu) coordonnées d'un point] helped flachyjoe thanks. |
|||
Vzorec pochází od [http://www-obs.univ-lyon1.fr/labo/fc/Ateliers_archives/ateliers_2005-06/cercle_3pts.pdf cercle_3pts.pdf] a byl použit s laskavým svolením jeho autora. |
|||
⚫ |
Latest revision as of 10:15, 23 May 2020
Popis |
---|
Vytváří kružnici ze 3 vybraných bodů. Version macro : 01.00 Date last modification : 2013-03-11 FreeCAD version : All Download : ToolBar Icon Autor: Mario52 |
Autor |
Mario52 |
Download |
ToolBar Icon |
Odkazy |
Makro recepty| Jak nainstalovat makra Jak přizpůsobit panely nástrojů |
Verze |
01.00 |
Datum poslední úpravy |
2013-03-11 |
Verze FreeCAD |
All |
Výchozí zástupce |
None |
Viz též |
None |
Popis
Toto makro vytváří kružnice pode 3 vybraných bodů. Body mohou být objekty jako jsou krychle, válce, v takovém případě jsou vybrané souřadnice středem těchto forem.
Circle built on 3 selected points
Použití
Vyberte 3 body nebo tvary ve 3D pohledu a spusťte makro. Je-li tvarem přímka, souřadnice budou střed přímky.
Volby
Jsou-li vybrané objekty v různých rovinách, (xy Z10, xy Z2, xy Z5) pak bude kružnice vytvořena na plánu x,y Z=0. Mají-li všechny vybrané objekty stejnou souřadnici Z (xy Z5, xy Z5, xy Z5), bude kružnice vytvořena na plánu x,y Z=5.
Skript
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")
Vylepšená verze
Navíc k předcházejícímu makru, je tento příklad použit k vyrovnání kolmé kružnice ke každému tvaru ve výběru a je vybrán plán "'XY, YZ, XZ ' ' . Kružnice přebírá barvu od přiřazené osy bez ohledu na aktuálně vybranou barvu, a střed kružnice je vykreslen (volba O/N).
-
Cercle circonscrit sur 3 formes,
-
de manière orthogonale sur la forme choisie
-
-
Nastavení k úpravám.
# 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")
Anaglyph (3D pohled)
Zde je 3D pohled, který Vám umožňuje vidět 2 různé pozice pohledu použitím brýlí s filtry červené a cyan barvy .
Dívejte se střídavě levým a pravým okem abyste viděli pohledy samostatně.
Uznání
Geneze makra Draft Circle 3 Points na fóru (PYTHONu) coordonnées d'un point helped flachyjoe thanks. Vzorec pochází od cercle_3pts.pdf a byl použit s laskavým svolením jeho autora.