Bonsoir,
J'aimerais créer un objet générique qui permettrait d'avoir dans ses propriétés:
- des entrées qui seraient l'expression python d'autres propriétés d'objets
- et au moins une propriété de sortie qui serait une formule des ces entrées à affecter à la propriété d'un autre objet.
La propriété de cet objet dépendrait donc de celles de plusieurs autres.
Mon idée serait de créer un "scripted-object", mais sans géométrie. Ses propriétés en entrées seraient donc celles des objets source et la propriété de sortie (ça s'appelle plus une méthode je crois, au moins en langage VBA que je connais à peu près) contendrait la formule qui calcule la propriété de mon objet cible.
L'intérêt par rapport à une macro c'est que cette propriété mettrait à jour automatiquement l'objet cible, sans relancer manuellement la macro à chaque modif.
Avant de creuser un peu plus comment le mettre en oeuvre en apprenant le code python, je voudrais savoir si dans le principe c'est faisable? Déjà s'il est possible de créer un objet sans géométrie, l'intérêt c'est de le voir dans l'arborescence, et d'autre part si la fameuse propriété de sortie n'est pas quelque chose d'irréaliste compte-tenu du fonctionnement de FreeCAD, sans que cela devienne un module à part entière.
Si ça parait faisable, je me débrouillerai, ça me donne un objectif intéressant pour apprendre le python FreeCAD, mais j'aimerais un avis d'experts svp?
Le module spreadsheet ne permet pas de mettre des formules, ce qui répondrait à mon besoin, et je ne sais d'ailleurs pas si c'est en cours dans les travaux d'amélioration.
Idem pour les travaux sur la possibilté de mettre une expression dans une propriété au lieu d'une simple valeur numérique. C'est pas pour tout de suite et je ne suis pas certain que les formules seraient faisables.
Merci d'avance pour votre éclairage!
Bonne soirée,
Matthieu
Objet "virtuel" pour lier des priopriétés d'autres objets?
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
-
- Posts: 26
- Joined: Fri Jan 09, 2015 8:31 pm
- Location: France
Objet "virtuel" pour lier des priopriétés d'autres objets?
Ubuntu 16.04 LTS 64bits - FreeCAD daily-build - FreeCAD 0.17
Re: Objet "virtuel" pour lier des priopriétés d'autres objet
Bonjour et bienvenue
je ne suis pas expert mais en programmation tout est possible il suffit d'avoir l'idée et de connaître la programmation et les API puis la concrétisation suit.
ici quelques liens pour débuter
Online_Help_Toc
Introduction_to_Python
Python_scripting_tutorial
Scripting_examples
et n'oubiez pas, VEUILLEZ LIRE AVANT DE DEMANDER DE L'AIDE
bon amusement
OS: Windows Vista
Word size of OS: 32-bit
Word size of FreeCAD: 32-bit
Version: 0.15.4415 (Git)
Branch: master
Hash: ab24e9df6a16db8c87aea1f7b768e70529ff8d82
Python version: 2.7.8
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 6.7.1
mario
je ne suis pas expert mais en programmation tout est possible il suffit d'avoir l'idée et de connaître la programmation et les API puis la concrétisation suit.
je crois que ça avait été discutéSchmilBlick wrote:Idem pour les travaux sur la possibilté de mettre une expression dans une propriété au lieu d'une simple valeur numérique. C'est pas pour tout de suite et je ne suis pas certain que les formules seraient faisables.
ici quelques liens pour débuter
Online_Help_Toc
Introduction_to_Python
Python_scripting_tutorial
Scripting_examples
et n'oubiez pas, VEUILLEZ LIRE AVANT DE DEMANDER DE L'AIDE
bon amusement
OS: Windows Vista
Word size of OS: 32-bit
Word size of FreeCAD: 32-bit
Version: 0.15.4415 (Git)
Branch: master
Hash: ab24e9df6a16db8c87aea1f7b768e70529ff8d82
Python version: 2.7.8
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 6.7.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.
My macros on Gist.github here complete macros Wiki and forum.
Re: Objet "virtuel" pour lier des priopriétés d'autres objet
Oui c'est tout-à-fait faisable... Tu peux créer un objet paramétrique, sans géométrie, qui possède par exemple quelques propriétés PropertyLink, qui servent à créer une relation avec d'autres objets... De là, tu peux faire ce que tu veux, par exemple lire la valeur de certaines propriétés d'un objet, et modifier d'autres...
Le wiki contient pas mal de documentation (le Powerusers hub surtout), il y a aussi de nombreux exemples dans le répertoire src/Mod/TemplatePyMod du code source de FreeCAD
Le wiki contient pas mal de documentation (le Powerusers hub surtout), il y a aussi de nombreux exemples dans le répertoire src/Mod/TemplatePyMod du code source de FreeCAD
-
- Posts: 26
- Joined: Fri Jan 09, 2015 8:31 pm
- Location: France
Re: Objet "virtuel" pour lier des priopriétés d'autres objet
Ah merci pour vos réponses! (je n'avais pas vérifié l'activation des notifications de réponses)
Je vais approfondir la question donc.
Oui, oui Mario , j'ai bien lu qu'il fallait mettre les infos sur sa config, pour le moment j'ai pas de questions sur un cas précis, mais si j'oublie j'aurai droit de me faire gronder .
Hier j'ai testé déjà avec une macro. Avec les 4 planches d'une boite, la première planche définit hauteur, longueur et épaisseur et la 2ème planche la largeur de la boite. Ensuite cela se met à jour avec la macro. Je vais tenter de transformer le code pour en faire des objets en creusant les pistes que vous m'avez données.
Ci-dessous mon cas d'école:
Et le code:
Je vais approfondir la question donc.
Oui, oui Mario , j'ai bien lu qu'il fallait mettre les infos sur sa config, pour le moment j'ai pas de questions sur un cas précis, mais si j'oublie j'aurai droit de me faire gronder .
Hier j'ai testé déjà avec une macro. Avec les 4 planches d'une boite, la première planche définit hauteur, longueur et épaisseur et la 2ème planche la largeur de la boite. Ensuite cela se met à jour avec la macro. Je vais tenter de transformer le code pour en faire des objets en creusant les pistes que vous m'avez données.
Ci-dessous mon cas d'école:
Et le code:
Code: Select all
import FreeCAD
MonDoc = "LienParametriqueObjets"
def Link1_ObjDest_ObjSrc(NomObjDest, NomObjSrc):
# Objects list
ObjDest = App.getDocument(MonDoc).getObject(NomObjDest)
ObjSrc = App.getDocument(MonDoc).getObject(NomObjSrc)
# Target object ObjDest properties links
ObjDest.Width = ObjSrc.Width
ObjDest.Height = ObjSrc.Height
# ObjDest placement relative to ObjSrc
mPosition = App.Vector(ObjDest.Width,ObjSrc.Width,0)
mRotation = App.Rotation(App.Vector(0,0,1),90)
mCenter = App.Vector(0,0,1)
# ObjDest absolute placement applying the same placement of ObjSrc
mPlacement = App.Placement(mPosition,mRotation,mCenter)
mPlacement = ObjSrc.Placement.multiply(mPlacement)
ObjDest.Placement = mPlacement
def Link2_ObjDest_ObjSrc(NomObjDest, NomObjSrc):
# Objects list
ObjDest = App.getDocument(MonDoc).getObject(NomObjDest)
ObjSrc = App.getDocument(MonDoc).getObject(NomObjSrc)
# Target object ObjDest properties links
ObjDest.Width = ObjSrc.Width
ObjDest.Height = ObjSrc.Height
# ObjDest placement relative to ObjSrc
mPosition = App.Vector(ObjSrc.Length,ObjDest.Width,0)
mRotation = App.Rotation(App.Vector(0,0,1),90)
mCenter = App.Vector(0,0,1)
# ObjDest absolute placement applying the same placement of ObjSrc
mPlacement = App.Placement(mPosition,mRotation,mCenter)
mPlacement = ObjSrc.Placement.multiply(mPlacement)
ObjDest.Placement = mPlacement
def Link3_ObjDest_ObjSrc(NomObjDest, NomObjSrc1,NomObjSrc2):
# Objects list
ObjDest = App.getDocument(MonDoc).getObject(NomObjDest)
ObjSrc1 = App.getDocument(MonDoc).getObject(NomObjSrc1)
ObjSrc2 = App.getDocument(MonDoc).getObject(NomObjSrc2)
# Target object ObjDest properties links
ObjDest.Width = ObjSrc1.Width
ObjDest.Height = ObjSrc1.Height
ObjDest.Length = ObjSrc1.Length
# ObjDest placement relative to ObjSrc
mPosition = App.Vector(0,ObjSrc1.Width + ObjSrc2.Length,0)
mRotation = App.Rotation(App.Vector(0,0,1),0)
mCenter = App.Vector(0,0,1)
# ObjDest absolute placement applying the same placement of ObjSrc
mPlacement = App.Placement(mPosition,mRotation,mCenter)
mPlacement = ObjSrc1.Placement.multiply(mPlacement)
ObjDest.Placement = mPlacement
Link1_ObjDest_ObjSrc("Box001","Box")
Link2_ObjDest_ObjSrc("Box002","Box")
Link3_ObjDest_ObjSrc("Box003","Box","Box001")
- Attachments
-
- LienParametriqueObjets.FCStd
- (5.99 KiB) Downloaded 25 times
Ubuntu 16.04 LTS 64bits - FreeCAD daily-build - FreeCAD 0.17