Macro Draw Parametric 2D Function

    From FreeCAD Documentation
    This page is a translated version of the page Macro Draw Parametric 2D Function and the translation is 100% complete.
    Other languages:

    Macro Draw Parametric 2D Function.png Macro Draw Parametric 2D Function

    Description
    Dessin 2-dimensions, et éventuellement paramétrique avec une équation polaire.

    Version macro : 2.0
    Date dernière modification : 2012-08-30
    Version FreeCAD : Toutes versions
    Téléchargement : Icône pour votre barre d'outils
    Auteur: T4b
    Auteur
    T4b
    Téléchargement
    Icône pour votre barre d'outils
    Liens
    Version Macro
    2.0
    Dernière modification
    2012-08-30
    Version(s) FreeCAD
    Toutes versions
    Raccourci clavier
    None
    Voir aussi
    None

    Description

    Draws 2-dimensional, paramétrique et optionnellement équation polaire

    Macro drawParametric2Dfunction.png

    DrawParametric2DFunction

    Limitations

    Possède encore quelques bugs et il manque certaines fonctionnalités. La documentation est dans le docstrings.

    Utilisation

    Type :


    Exemple d'utilisation:

    draw2Dfunction(xFunction="0.5*n", yFunction="-0.75*n", n=0, nd=-math.pi, step=50, pol=1)

    Script

    ToolBar Icon Macro Draw Parametric 2D Function.png

    Macro_drawParametric2DFunction.FCMacro

    import FreeCAD, FreeCADGui, Part
    import math
    
    def evalFunction(suppliedFunction, n):
    	"""This function uses eval to evaluate suppliedFunction.
    	
    	It does in no way check whether suppliedFunction is evil, thus it is itself evil!
    	"""
    	return eval(suppliedFunction)
    
    def draw2Dfunction(xFunction="n", yFunction="n", n=-5, nd=10, step=10, z=0, pol=0):
    	"""Draws 2-dimensional mathemathical functions
    	
    	The function is drawn for n's between n and n+nd, in steps of 1/step, on the z-coordinate z.
    	Equations for x and y can be given (xFunction and yFunction arguments), they default to n.
    	
    	If pol=1 then x is interpreted as r and y is interpreted as t.
    	"""
    	nStart=n
    	while math.fabs(n-nd)-1.0/step>0:
    		print( "n: " + str(n))
    		x=evalFunction(xFunction, n)
    		y=evalFunction(yFunction, n)
    		nNext=n+math.copysign(1,nd-n)/step 
    		print( "nNext: " + str(nNext))
    		xNext=evalFunction(xFunction, nNext)
    		yNext=evalFunction(yFunction, nNext)
    		if pol==0:
    			nextSeg=(x,y,z),(xNext,yNext,z)
    		else:
    			nextSeg=(x*math.cos(y),x*math.sin(y),z),(xNext*math.cos(yNext),xNext*math.sin(yNext),z)
    		print( "nextSeg: " + str(nextSeg))
    		nomme=Part.makeLine(*nextSeg)
    		if n==nStart:
    			WWire=Part.Wire([nomme])
    		else:
    			WWire=Part.Wire([WWire,nomme])
    		n=nNext
    	Part.show(WWire)
    #Example usage:
    draw2Dfunction(xFunction="0.5*n", yFunction="-0.75*n", n=0, nd=-math.pi, step=50, pol=1)