une commande pour mettre à jour des volumes en changeant la

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Post Reply
ninaraf
Posts: 3
Joined: Thu Feb 21, 2013 12:25 am

une commande pour mettre à jour des volumes en changeant la

Post by ninaraf »

Bonjour,

Voilà, je travaille avec la version 0.12 de FreeCAD sur WindowsXP, et je voudrai savoir si il y a moyen, par une macro ou autrement, qu'à partir d'une simple commande dans la console python je puisse changer la valeur d'une variable (nommée x1 par exemple), et que ça change sur la vue du document la dimension et la position de tous les volumes ayant x1 apparaissant dans leur propriété, et même pour les objets fusionnés ou cuttés.

L'idéal serait en fait d'avoir un tableau de toutes mes variables, via une fenêtre FreeCAd ou une feuille de classeur LibreOfficeCalc ou excel, que je puisse me servir comme tableau de bord pour changer leur valeur et qu'elles soient prises en compte dans la console Pyton de FreeCAD.

Je ne sais pas si je demande l'impossible, mais ça me faciliterai énormément la tâche. En fait, je débute complètement dans la conception mécanique, et je découvre la programmation en Python également.... Si vous avez des pistes pour m'aider, n'hésitez pas !

Merci d'avance :D
mario52
Veteran
Posts: 4698
Joined: Wed May 16, 2012 2:13 pm

Re: une commande pour mettre à jour des volumes en changeant la

Post by mario52 »

Bonjour et bienvenue
c'est ici que ça se passe

http://sourceforge.net/apps/mediawiki/f ... _Positions

à partir de la console Python intégrée à FreeCAD tu peux pratiquement tout faire, si tu veux t'y mettre,
tu peux cliquer sur les liens < gauche et droit > en bas de page pour d'autres tutoriels en rapport avec la programmation Python
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.
ninaraf
Posts: 3
Joined: Thu Feb 21, 2013 12:25 am

Re: une commande pour mettre à jour des volumes en changeant la

Post by ninaraf »

Merci pour le lien :D

Mais j'ai un problème pour le changement des valeurs des composantes d'un vecteur dans la console Python, voilà ce que je rentre:

>>> xZero = 1
>>> yZero = 0
>>> zZero = 0
>>>
>>> vecteurZero = FreeCAD.Vector(xZero, yZero, zZero)
>>> vecteurZero
Vector (1, 0, 0)
>>>
>>> xZero = 2
>>> vecteurZero
Vector (1, 0, 0)

Je voudrais savoir comment faire pour que la composante X de vecteurZero se mette à jour, et me renvoie donc Vector (2, 0, 0) pour cet exemple, ... et que la mise à jour soit faite pour tous les autres vecteurs dont les composantes seront fonction de xZero, yZero et zZero évidemment.

Merci d'avance ;)
mario52
Veteran
Posts: 4698
Joined: Wed May 16, 2012 2:13 pm

Re: une commande pour mettre à jour des volumes en changeant la

Post by mario52 »

Bonjour
en mettant l'opération à jour

Code: Select all

>>> xZero=1
>>> yZero=0
>>> zZero=0
>>> vecteurZero=FreeCAD.Vector(xZero, yZero, zZero)
>>> vecteurZero
Vector (1, 0, 0)
>>> xZero=2
>>> vecteurZero=FreeCAD.Vector(xZero, yZero, zZero)
>>> vecteurZero
Vector (2, 0, 0)
>>> 
ou tu peux construire une petite procédure

Code: Select all

>>> def xyz(x,y,z):
...     vecteurZero=FreeCAD.Vector(x, y, z)
...     return vecteurZero
... 
>>> xyz(1,0,0)
Vector (1, 0, 0)
>>> xyz(5,1,1)
Vector (5, 1, 1)
>>>
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.
ninaraf
Posts: 3
Joined: Thu Feb 21, 2013 12:25 am

Re: une commande pour mettre à jour des volumes en changeant la

Post by ninaraf »

mario52 wrote:en mettant l'opération à jour
C'est bien là le problème, il n'existe pas une commande simple pour faire une mise à jour sur tout ? Si j'ai des centaines de vecteurs dont chacunes de leurs composantes sont des fonctions dépendantes de la variable Xzero, je vais devoir rappeler tous ces vecteurs, avec toutes leurs composantes ! C'est faramineux ! Même en gérant ça par des macros ! Et je peux m'attendre à toute sorte de problême pour les objets fusionnés et cuttés...
mario52
Veteran
Posts: 4698
Joined: Wed May 16, 2012 2:13 pm

Re: une commande pour mettre à jour des volumes en changeant la

Post by mario52 »

Bonjour
alors peut être en utilisant la fonction move qui déplace un ou plusieurs objet(s) sélectionné(s)

Code: Select all

import FreeCAD,Draft
Draft.move(FreeCAD.ActiveDocument.ActiveObject,FreeCAD.Vector(2,2,0))
https://sourceforge.net/apps/mediawiki/ ... aft_API/fr
https://sourceforge.net/apps/mediawiki/ ... Draft_Move
(il manque pour le moment la partie Script dans la page française, et on ne peut pas modifier cause de transfert du site )
et Placement https://sourceforge.net/apps/mediawiki/ ... cement_API
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.
galou_breizh
Posts: 437
Joined: Wed Sep 15, 2010 9:38 am

Re: une commande pour mettre à jour des volumes en changeant la

Post by galou_breizh »

Bonjour,

tu peux créer un classe et définir un attribut comme une propriété, c'est à dire dont la valeur est recalculée à chaque fois qu'on "interroge" la valeur de l'attribut. Voir "@property" dans la doc Python.

Code: Select all

class vect(object):
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    @property
    def vecteurZero(self):
        return FreeCAD.Vector(self.x, self.y, self.z)

v1 = vect(xZero, yZero, zZero)
v1.x = 2
v1.vecteur
--> Vector(2, 0, 0)
Est-ce ce que ça te conviendrait ?

Gaël
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: une commande pour mettre à jour des volumes en changeant la

Post by gdo35 »

Galou je trouve ton bout de code très sexy. ;)

Mais d'après l'API tu peux déjà récupérer une référence sur chaque coordonnée :

Code: Select all

import FreeCAD as f

f.Vector(1,1,2)
type(v.x)
v.x = 3.
v.x
Attention à bien utiliser un float par contre. ;)
Post Reply