Dessiner une Trochoïde
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
-
- Posts: 28
- Joined: Mon Nov 23, 2020 1:36 pm
Dessiner une Trochoïde
Bonjour,
Est ce possible de dessiner une trochoïde avec FreeCAD ?
C'est le dessin qui est tout en haut de cette page :
https://mathcurve.com/courbes2d/trochoid/trochoid.shtml
Il faut pouvoir entrer les formules qui sont dans l'encart rose de cette même page
Est ce possible de dessiner une trochoïde avec FreeCAD ?
C'est le dessin qui est tout en haut de cette page :
https://mathcurve.com/courbes2d/trochoid/trochoid.shtml
Il faut pouvoir entrer les formules qui sont dans l'encart rose de cette même page
Re: Dessiner une Trochoïde
Bonsoir,
Avec la macro 3D_Parametric_Curves à installer par Addon ça devrait pouvoir se faire.
Avec la macro 3D_Parametric_Curves à installer par Addon ça devrait pouvoir se faire.
Fada de 3D.
Linux Mint
Linux Mint
-
- Posts: 28
- Joined: Mon Nov 23, 2020 1:36 pm
Re: Dessiner une Trochoïde
Merci,
Par contre j'ai un message d'erreur dès que je l'ouvre :
10:01:12 Traceback (most recent call last):
10:01:12 File "C:/Users/yvesl/AppData/Roaming/FreeCAD/Macro/3D_Parametric_Curve.FCMacro", line 127, in polyState
10:01:12 self.op2.setCheckState(QtCore.Qt.Unchecked)
10:01:12 AttributeError: 'ParamCurv' object has no attribute 'op2'
Par contre j'ai un message d'erreur dès que je l'ouvre :
10:01:12 Traceback (most recent call last):
10:01:12 File "C:/Users/yvesl/AppData/Roaming/FreeCAD/Macro/3D_Parametric_Curve.FCMacro", line 127, in polyState
10:01:12 self.op2.setCheckState(QtCore.Qt.Unchecked)
10:01:12 AttributeError: 'ParamCurv' object has no attribute 'op2'
Re: Dessiner une Trochoïde
Si tu as encore des soucis, j'ai adapté la macro pour en faire un objet modifiable.
Code: Select all
from __future__ import division
import FreeCAD, Part, Draft
from FreeCAD import Base
from math import *
class MathCurve:
def __init__(self, obj):
obj.addProperty("App::PropertyString","a","Parameters","Set a parameter a(t)").a = "1"
obj.addProperty("App::PropertyString","b","Parameters","Set b parameter b(a,t)").b = "0"
obj.addProperty("App::PropertyString","c","Parameters","Set c parameter c(a,b,t)").c = "0"
obj.addProperty("App::PropertyString","X","Parameters","X expression X(a,b,c,t)").X = "t"
obj.addProperty("App::PropertyString","Y","Parameters","Y expression Y(a,b,c,t)").Y = "a*sin(t)"
obj.addProperty("App::PropertyString","Z","Parameters","Z expression Z(a,b,c,t)").Z = "0"
obj.addProperty("App::PropertyFloat","start","Curve","Start t").start = 0
obj.addProperty("App::PropertyFloat","end","Curve","End t").end = 6.283185
obj.addProperty("App::PropertyFloat","interval","Curve","Interval dt").interval = 0.1
obj.addProperty("App::PropertyBool","createFace","Curve","Wheter to create a face or not").createFace = False
obj.addProperty("App::PropertyBool","close","Curve","close the curve or not").close = False
obj.Proxy = self
def onChanged(self, obj, prop):
if prop == "a" or prop == "b" or prop == "c" or prop == "X" or prop == "Y"or prop == "Z" or prop == "start" or prop == "end" or prop == "interval" or prop == "createFace" or prop == "close":
self.execute(obj)
def execute(self, obj):
fa = obj.a
fb = obj.b
fc = obj.c
fx = obj.X
fy = obj.Y
fz = obj.Z
x0 = 0
y0 = 0
z0 = 0
kx = 1
ky = 1
kz = 1
s = obj.start
e = obj.end
dt = obj.interval
nbpts = int((e-s)/dt) +1
matriz = []
t = s
if x1!=0 and x2!=0:
xmin = ymin = zmin = 0
xmax = ymax = zmax = 0
for i in range(nbpts):
try:
value="a"
a=eval(fa)
value="b"
b=eval(fb)
value="c"
c=eval(fc)
value="x"
x=eval(fx)
value="y"
y=eval(fy)
value="z"
z=eval(fz)
except ZeroDivisionError:
print("Error division by zero in calculus of "+value+"() for t="+str(t)+" !")
except:
print("Error in the formula of "+value+"() !")
if x<xmin:
xmin=x
if x>xmax:
xmax=x
if y<ymin:
ymin=y
if y>ymax:
ymax=y
if z<zmin:
zmin=z
if z>zmax:
zmax=z
t+=dt
try:
kx = (x2-x1)/(xmax-xmin)
except:
kx = 1
try:
ky = (y2-y1)/(ymax-ymin)
except:
ky = 1
try:
kz= (z2-z1)/(zmax-zmin)
except:
kz = 1
print (kx, ky, kz)
t = s
for i in range(nbpts):
try:
value="a"
a=eval(fa)
value="b"
b=eval(fb)
value="c"
c=eval(fc)
value="x"
x=kx*eval(fx)+x1
value="y"
y=ky*eval(fy)+y1
value="z"
z=kz*eval(fz)+z1
except ZeroDivisionError:
print("Error division by zero in calculus of "+value+"() for t="+str(t)+" !")
except:
print("Error in the formula of "+value+"() !")
#print(i,x,y,z)
matriz.append(FreeCAD.Vector(x,y,z))
t+=dt
curve = Part.BSplineCurve(matriz)
if obj.close == True:
curve.setPeriodic()
if obj.createFace == True:
sh = Part.Face(Part.Wire(curve.toShape()))
else:
sh = curve.toShape()
sh.Placement = obj.Placement
obj.Shape = sh
def MakeMathCurve():
doc = FreeCAD.activeDocument()
if doc == None:
doc = FreeCAD.newDocument()
obj=doc.addObject("Part::FeaturePython","Math3DCurve")
global x1, y1, z1, x2, y2, z2
try:
SelPt1 = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0]
SelPt2= FreeCADGui.Selection.getSelectionEx()[0].SubObjects[1]
x1 = SelPt1.X
y1 = SelPt1.Y
z1 = SelPt1.Z
x2 = SelPt2.X
y2 = SelPt2.Y
z2 = SelPt2.Z
except:
x1 = 0
y1 = 0
z1 = 0
x2 = 0
y2 = 0
z2 = 0
obj.addExtension("Part::AttachExtensionPython","obj")
MathCurve(obj)
obj.ViewObject.Proxy=0
viewObject = Gui.ActiveDocument.getObject(obj.Name)
viewObject.DisplayMode = "Flat Lines"
MakeMathCurve()
Last edited by Vincent B on Thu Nov 26, 2020 7:38 pm, edited 2 times in total.
Re: Dessiner une Trochoïde
Par contre il y a un
Code: Select all
[quote][/quote]
Re: Dessiner une Trochoïde
mauvais clic quelque part.
c'est corrigé.
c'est corrigé.
-
- Posts: 28
- Joined: Mon Nov 23, 2020 1:36 pm
Re: Dessiner une Trochoïde
Merci, ça marche bien maintenant
Par contre, dans X(a,b,c ,t) je n'arrive pas à entrer la formule a-b*cos(t)
Idem dans C , je n'arrive pas à entrer la formule : a*t-b*sin(t)
Edit : je n'ai pas la fenêtre "paramétrique curve" qui s'affiche non plus, c'est normal?
enfin pas comme sur la copie d'écran ci dessus
D'après ce que je vois, la macro est paramétrée autrement que dans le poste ci-dessus
Par contre, dans X(a,b,c ,t) je n'arrive pas à entrer la formule a-b*cos(t)
Idem dans C , je n'arrive pas à entrer la formule : a*t-b*sin(t)
Edit : je n'ai pas la fenêtre "paramétrique curve" qui s'affiche non plus, c'est normal?
enfin pas comme sur la copie d'écran ci dessus
D'après ce que je vois, la macro est paramétrée autrement que dans le poste ci-dessus
Re: Dessiner une Trochoïde
Bonjour,
Il ne faut pas entrer l'expression a*t-b*sin(t) (par exemple) dans l'éditeur de formule de FreeCAD. Ne pas se servir du bouton f(x), l'écrire directement dans le champ de la vue combinée.
L'entré des formules se fait dans la vue combinée aprés avoir sélectionner MathCurve dans l'arborescence.Versingétorix22 wrote: ↑Wed Dec 02, 2020 10:08 pm je n'ai pas la fenêtre "paramétrique curve" qui s'affiche non plus, c'est normal?
enfin pas comme sur la copie d'écran ci dessus
D'après ce que je vois, la macro est paramétrée autrement que dans le poste ci-dessus
Peut-être fait-tu la même erreur que moi au début.Versingétorix22 wrote: ↑Wed Dec 02, 2020 10:08 pm Par contre, dans X(a,b,c ,t) je n'arrive pas à entrer la formule a-b*cos(t)
Idem dans C , je n'arrive pas à entrer la formule : a*t-b*sin(t)
Il ne faut pas entrer l'expression a*t-b*sin(t) (par exemple) dans l'éditeur de formule de FreeCAD. Ne pas se servir du bouton f(x), l'écrire directement dans le champ de la vue combinée.
- Attachments
-
- Capture du 2020-12-03 13-27-14.png (28.56 KiB) Viewed 855 times
-
- DemoTrochoïde.FCStd
- (13.12 KiB) Downloaded 30 times
Fada de 3D.
Linux Mint
Linux Mint
- papyblaise
- Veteran
- Posts: 8000
- Joined: Thu Jun 13, 2019 4:28 pm
- Location: France
Re: Dessiner une Trochoïde
J'ai failli oublier de signaler qu'on peut pas le placer au scrabble : ya pas de ï