Quelques macros disponibles

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: Quelques macros disponibles

Post by openBrain »

Salut. Est-ce que tu peux copier le message d'erreur en entier ?
Dans tous les cas ça ne changera pas grand chose dans ce cas, puisque la macro n'est pas dispo dans l'addon manager. Il faut que tu la télécharges dans le post au-dessus, et tu l'enregistres dans %APPDATA%\FreeCAD\Macro\
User avatar
papyblaise
Veteran
Posts: 8026
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: Quelques macros disponibles

Post by papyblaise »

voilà
"09:09:50 GitPython n'est pas installé. Impossible de récupérer les macros depuis git"
et pis je vieilli : j'arrive pas à trouver ce fichier
%APPDATA%\FreeCAD\Macro\
tu peu me rappeler le chemin complet :?:

Edit ça yest j'ai trouver où la mettre , je la vois dans la liste , mais quand je lance , Nib / Nadah / quedall :!: je vai me balader :!:
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: Quelques macros disponibles

Post by openBrain »

papyblaise wrote: Fri Jul 31, 2020 7:11 am Edit ça yest j'ai trouver où la mettre , je la vois dans la liste , mais quand je lance , Nib / Nadah / quedall :!: je vai me balader :!:
C'est normal qu'il ne se passe rien au lancement (enfin rien de visible en fait). Ensuite il faut double-cliquer sur l'onglet de la vue que tu veux séparer. ;)
mario52
Veteran
Posts: 4698
Joined: Wed May 16, 2012 2:13 pm

Re: Quelques macros disponibles

Post by mario52 »

Bonjour

voila tout ce qui s'affiche et l'installation se fait malgrés tout
Failed to initialize: Bad git executable.
The git executable must be specified in one of the following ways:
- be included in your $PATH
- be set via $GIT_PYTHON_GIT_EXECUTABLE
- explicitly set via git.refresh()

All git commands will error until this is rectified.

This initial warning can be silenced or aggravated in the future by setting the
$GIT_PYTHON_REFRESH environment variable. Use one of the following values:
- quiet|q|silence|s|none|n|0: for no warning or exception
- warn|w|warning|1: for a printed warning
- error|e|raise|r|2: for a raised exception

Example:
export GIT_PYTHON_REFRESH=quiet

GitPython est introuvable. Utilisation du téléchargement standard.
Downloading https://github.com/tomate44/CurvesWB/archive/master.zip
OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.22130 (Git)
Build type: Release
Branch: master
Hash: dc65b055e5143a7d7349520da466d4d722df57e8
Python version: 3.6.8
Qt version: 5.12.1
Coin version: 4.0.0a
OCC version: 7.3.0

openBrain wrote: Fri Jul 31, 2020 5:52 am puisque la macro n'est pas dispo dans l'addon manager.
pourquoi ne pas créer de page dans le wiki ? elles seront directement installables

mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets, Topological_data_scripting.
My macros on Gist.github here complete macros Wiki and forum.
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: Quelques macros disponibles

Post by openBrain »

mario52 wrote: Fri Jul 31, 2020 9:55 am pourquoi ne pas créer de page dans le wiki ? elles seront directement installables

mario
Un peu toujours pour la même raison, pas vraiment le temps. :) Mais ça viendra.
User avatar
papyblaise
Veteran
Posts: 8026
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: Quelques macros disponibles

Post by papyblaise »

C'est génial , mes neurones se sont enfin éveillées , et tu peu m^me en mettre plusieurs :!:
Petits conseils à ceusses qui sont un peu moins bourrin que moi mais qui chercheraient quand même :

Dabord mettre Windows sur écran multiple et option "Étendu" , relier son 2em écran ou télé par câble HDMI et mettre sa télé sur Imput = HDMI

ouvrir 2 fichiers Fc ; sur celui qu'on veu mettre à gauche , lancer la macro et double clicker sur son onglet en bas de l'écran , l'image va apparaitre reduite , la faire glisser à la souris vers l'autre écran , rétablir sa taille ou pas , parcequ'on peu renouveler l'op et placer plusieurs document en vignette
Dans Fc on peu importer plusieurs type de fichier tu peu ainsi ouvrir une feuille de calcul pour avoir un équivalent de calculette toujours ouvert , un autre dessin importer , ou la photo de ta dernière (petite fille , pas conquette , quoi que...)

j"'espère que l'inventeur y avait pensé
ce descriptif pourrait presque être un début de Wiki , malheureusement je sai pas les faire

aller une petite dernière pour la route :
ça fait des siècles (le dernier + celui-ci) que les adepte de Windows aimeraient bien une telle fonction .... y aurait - il moyen :?: , celui qui la fait , il dépose l'appli et il prend sa retraite même à 20ans :!:
User avatar
papyblaise
Veteran
Posts: 8026
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: Quelques macros disponibles

Post by papyblaise »

je viens de découvrir une peccadille : quand ma télé est déconnectée du Pc , le pointeur de la souris lui ne sais pas que la télé n'est plus là , et il disparait sur le coté , au début , je me demandais pourquoi il avait disparut
User avatar
papyblaise
Veteran
Posts: 8026
Joined: Thu Jun 13, 2019 4:28 pm
Location: France

Re: Quelques macros disponibles

Post by papyblaise »

je m amuse avec ça (faut bien que vieillesse se passe)
autre truc rigolo si tu fais une copie d'écran avec l'outil capture : il sétend aux 2
à gauche mon Pc , à droite avec le cadre noir : ma télé avec un tableau Excel , un objet Fc et en fond ma p'tite dernière
et j'ai oublié de tester la touche "capture écran" ça sera pour un autre jour
Aller à chio
Attachments
2 écrans.PNG
2 écrans.PNG (321.21 KiB) Viewed 802 times
openBrain
Veteran
Posts: 9041
Joined: Fri Nov 09, 2018 5:38 pm
Contact:

Re: Quelques macros disponibles

Post by openBrain »

Autre macro pour ceux qui utilisent plusieurs workbenches et qui ne souhaitent pas créer des barres d'outils personnalisées pour tous les cas.
La macro attachée, une fois lancée, ouvrira une fenêtre avec la liste des commandes disponibles en appuyant sur 'Meta+Espace' (Meta c'est la touche avec le symbole Windows).
Les commandes disponibles sont les commandes globales + le workbench en cours + tous les workbenches qui ont été ouvert au moins une fois depuis le lancement de FreeCAD (oui, c'est comme ça que FreeCAD marche). Typiquement dans l'exemple ci-dessous, j'ai ouvert Draft et Part avant de passer dans PartDesign pour que les commandes des 2 premiers soient accessibles. Et oui, il faut connaitre les noms des commandes en anglais. :)
phpBB [video]
Attachments
cmdRunner.FCMacro
(1.7 KiB) Downloaded 19 times
User avatar
Vincent B
Veteran
Posts: 4741
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: Quelques macros disponibles

Post by Vincent B »

J'ai fait 2 macro:

-LameCurve qui permet de faire des courbes de Lamé:
scircle (cercle carré), super ellipse, astroid.
https://en.wikipedia.org/wiki/Superellipse

-Chicken qui permet de faire un oeuf.

Pas tout a fait finies: je souhaiterais que les objets soit centrés sur un point (vertex).

Code: Select all

from __future__ import division
import FreeCAD, Part, math, Draft
from FreeCAD import Base
from math import pi

# Lame Curve on 2 points on XY.
# https://en.wikipedia.org/wiki/Superellipse

class LameCurveOnPoint:
    def __init__(self, obj,a,b,c,d):
      
        
        obj.addProperty("App::PropertyFloat","n","Curve","0-1: Astroid 1:Diamond 2:Ellipse 2+:SuperOeuf 4+:Squircle").n = 4.0
        obj.addProperty("App::PropertyInteger","Iterations","Curve","Number of iterations by quadrant. Smooths the curve").Iterations = 100
        obj.addProperty("App::PropertyFloat","AngleEnd","Curve","Angle end degree").AngleEnd = 90
        obj.addProperty("App::PropertyFloat","AngleStart","Curve","Angle start degree").AngleStart = 0
        obj.addProperty("App::PropertyBool","CreateFace","Curve","Wheter to create a face or not").CreateFace = False
        obj.addProperty("App::PropertyBool","ForceClose","Curve","Help to close the curve").ForceClose = False
        
        obj.addProperty("App::PropertyFloat","x1","Vertex Start","").x1 = a
        obj.addProperty("App::PropertyFloat","y1","Vertex Start","").y1 = b
        obj.addProperty("App::PropertyFloat","x2","Vertex End","").x2 = c
        obj.addProperty("App::PropertyFloat","y2","Vertex End","").y2 = d
        obj.Proxy = self
       

    def onChanged(self, obj, prop):
        if prop == "n" or prop == "Iterations" or prop == "AngleStart" or prop=="AngleEnd":
            self.execute(obj)

    def execute(self, obj):
        
        a = obj.x1
        b = obj.y1
        a2 = obj.x2
        b2 = obj.y2
        
        
           
        if obj.n <= 0:
            obj.n = 0.1
        K = obj.n
        
        if obj.AngleStart > 90:
            obj.AngleStart = 90
            
        tmax = math.radians(obj.AngleEnd)
        intv = (math.radians(obj.AngleEnd)-math.radians(obj.AngleStart))/((obj.Iterations))
        
        matriz = []
            
        t = math.radians(obj.AngleStart)
        x0 = (a*math.cos(t)**(2/K)).real
        y0 = (b*math.sin(t)**(2/K)).real
        while t<(pi/2) and t<tmax:
            x = (a*math.cos(t)**(2/K)).real
            y = (b*math.sin(t)**(2/K)).real
            matriz.append(Base.Vector(x,y,0))
            t += intv
            
        t2 = pi/2    
        while t<pi and t<tmax:
            x = (a2*math.cos(t2)**(2/K)).real
            y = (b*math.sin(t2)**(2/K)).real
            matriz.append(Base.Vector(x,y,0))
            t2-= intv
            t +=intv
            
        t2 = 0   
        while t<(3*pi/2) and t<tmax:
            x = (a2*math.cos(t2)**(2/K)).real
            y = (b2*math.sin(t2)**(2/K)).real
            matriz.append(Base.Vector(x,y,0))
            t2 += intv
            t += intv
           
        t2 = pi/2
        while t<(2*pi) and t<tmax:
            x = (a*math.cos(t2)**(2/K)).real
            y = (b2*math.sin(t2)**(2/K)).real
            matriz.append(Base.Vector(x,y,0))
            t += intv
            t2 -= intv
        
        curve = Part.BSplineCurve(matriz)
        # curve.interpolate(matriz)
        if obj.ForceClose == True:
            curve.setPeriodic()
            
        if obj.CreateFace == True:
            pt1 = Base.Vector(x,y,0)
            pt2 = Base.Vector(x0,y0,0)
            ligne = Part.LineSegment(pt1,pt2)
            edge = ligne.toShape()
            courbe = curve.toShape()
            wire = Part.Wire([courbe, edge])
            sh = Part.Face(Part.Wire(wire))
         
        else:
            sh = curve.toShape()
      
        sh.Placement = obj.Placement
        obj.Shape = sh
        
        
       

def MakeLameCurve():
        doc = FreeCAD.activeDocument()
        if doc == None:
            doc = FreeCAD.newDocument()
        obj=doc.addObject("Part::FeaturePython","LameCurve") 
        
        try:
            # deux points de deux objets
            a = Gui.Selection.getSelectionEx()[0].SubObjects[0].Point.x
            b = Gui.Selection.getSelectionEx()[0].SubObjects[0].Point.y
            c = Gui.Selection.getSelectionEx()[1].SubObjects[0].Point.x
            d = Gui.Selection.getSelectionEx()[1].SubObjects[0].Point.y
        
        except:
            try:
                # deux points d'un seul objet
                a = Gui.Selection.getSelectionEx()[0].SubObjects[0].Point.x
                b = Gui.Selection.getSelectionEx()[0].SubObjects[0].Point.y
                c = Gui.Selection.getSelectionEx()[0].SubObjects[1].Point.x
                d = Gui.Selection.getSelectionEx()[0].SubObjects[1].Point.y
            
            except:
                a = 1
                b = 1
                c = -1
                d = -1
                
        LameCurveOnPoint(obj,a,b,c,d)
        obj.ViewObject.Proxy=0
        viewObject = Gui.ActiveDocument.getObject(obj.Name)
        viewObject.DisplayMode = "Flat Lines"
 
 
MakeLameCurve()

Code: Select all

from __future__ import division
import FreeCAD, Part, math, Draft
from FreeCAD import Base
from math import pi

# a faire: ajouter d'autre type d'ovoide


class OvoideShape:
   def __init__(self, obj):
      
      obj.addProperty("App::PropertyFloat","RadiusA","Parameters","Set radius on X axle").RadiusA = 3.0
      obj.addProperty("App::PropertyFloat","RadiusB","Parameters","Set radius on Y axle").RadiusB = 2.0
      obj.addProperty("App::PropertyFloat","K","Parameters","Coefficient").K = 0.3
      obj.addProperty("App::PropertyInteger","Iterations","Curve","Number of iterations. Smooths the curve").Iterations = 20
      obj.addProperty("App::PropertyBool","CreateFace","Curve","Wheter to create a face or not").CreateFace = False
      obj.addProperty("App::PropertyFloat","End","Curve","Angle end degree").End = 180
      obj.addProperty("App::PropertyFloat","Start","Curve","Angle start degree").Start = 0
      obj.Proxy = self

   def onChanged(self, obj, prop):
      if prop == "RadiusA" or prop == "RadiusB" or prop == "K" or prop == "Iterations" or prop == "CreateFace" or prop == "Start" or prop == "End":
        self.execute(obj)

   def execute(self, obj):
      a = obj.RadiusA
      b = obj.RadiusB
      c = obj.K
      sr = obj.Start *pi/180
      er = obj.End *pi/180
      intv = (er-sr) / obj.Iterations
      matriz = []
      t = sr 
      x0 = a*math.cos(t)+c*math.cos(2*t)
      y0 = b*math.sin(t)
     
      for i in range(obj.Iterations+1):
        x = a*math.cos(t)+c*math.cos(2*t)
        y = b*math.sin(t)
        matriz.append(Base.Vector(x,y,0))
        t+= intv
        
      curve = Part.BSplineCurve()
      curve.interpolate(matriz)
          
      
      if obj.CreateFace == True:
                  
         pt1 = Base.Vector(x,y,0)
         pt2 = Base.Vector(x0,y0,0)
         ligne = Part.LineSegment(pt1,pt2)
         edge = ligne.toShape()
         courbe = curve.toShape()
         wire = Part.Wire([courbe, edge])
         sh = Part.Face(Part.Wire(wire))
         
      else:
         sh = curve.toShape()
         
      obj.Shape = sh   
      sh.Placement = obj.Placement
      
       

def MakeEgg():
   doc = FreeCAD.activeDocument()
   if doc == None:
      doc = FreeCAD.newDocument()
   obj=doc.addObject("Part::FeaturePython","Egg") 
   OvoideShape(obj)
   obj.ViewObject.Proxy=0
   viewObject = Gui.ActiveDocument.getObject(obj.Name)
   viewObject.DisplayMode = "Flat Lines"
   
def IsActive(self):
    if FreeCAD.ActiveDocument == None:
        return False
    else:
        return True
               
MakeEgg()
Post Reply