Une des fonctionnalités que je trouve très utile, dans les gros systèmes de CAO, c'est la possibilité de lier les paramètres entre eux par des équations.
Dans le premier code ci-dessous je voulais créer un lien entre deux paramètres d'une même "class" d'objet paramétré. Mais le lien n'est pas maintenu après l’exécution du script.
Dans le second code ci-dessous le lien est bien maintenu, mais en créant une deuxième "class" d'objet. D’où un problème si on veut multiplier les objets liés.
Est-ce qu'il y aurait d'autres solutions ? Notamment : lié les paramètres une fois les objets créés sans passer par des scripts...
En tous cas bravo aux développeurs, Freecad devient vraiment un outils de plus en plus intéressant.
Nicolas
Code: Select all
# -*- coding:Utf-8 -*-
import FreeCAD, FreeCADGui, Part, Draft, math, MeshPart, Mesh, Drawing
from PyQt4 import QtGui,QtCore
from FreeCAD import Base
App=FreeCAD
Gui=FreeCADGui
class Boite:
def __init__(self, obj):
obj.addProperty("App::PropertyLength","L1","Boite","L1").L1=40.0
obj.addProperty("App::PropertyLength","L2","Boite","L2").L2=40.0
obj.addProperty("App::PropertyLength","Epaisseur","Boite","Epaisseur").Epaisseur=10.0
obj.addProperty("App::PropertyLength","PosX","Boite","PosX").PosX=0.0
obj.addProperty("App::PropertyLength","PosY","Boite","PosY").PosY=0.0
obj.addProperty("App::PropertyLength","PosZ","Boite","PosZ").PosZ=0.0
obj.Proxy = self
def execute(self, fp):
P1=Base.Vector(fp.PosX,fp.PosY,fp.PosZ)
S1=Part.makeBox(fp.L1,fp.L2,fp.Epaisseur,P1)
fp.Shape=S1
if FreeCAD.ActiveDocument==None:
FreeCAD.newDocument("Boites")
boite1=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Boite1")
Boite(boite1)
boite1.ViewObject.Proxy=0
boite2=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Boite2")
Boite(boite2)
boite2.L1=boite1.Epaisseur
boite2.Epaisseur=3*boite1.Epaisseur
boite2.PosX=boite1.L1
boite2.ViewObject.Proxy=0
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")
Code: Select all
# -*- coding:Utf-8 -*-
import FreeCAD, FreeCADGui, Part, Draft, math, MeshPart, Mesh, Drawing
from PyQt4 import QtGui,QtCore
from FreeCAD import Base
App=FreeCAD
Gui=FreeCADGui
class BoiteA:
def __init__(self, obj):
obj.addProperty("App::PropertyLength","L1","Boite","L1").L1=40.0
obj.addProperty("App::PropertyLength","L2","Boite","L2").L2=40.0
obj.addProperty("App::PropertyLength","Epaisseur","Boite","Epaisseur").Epaisseur=10.0
obj.addProperty("App::PropertyLength","PosX","Boite","PosX").PosX=0.0
obj.addProperty("App::PropertyLength","PosY","Boite","PosY").PosY=0.0
obj.addProperty("App::PropertyLength","PosZ","Boite","PosZ").PosZ=0.0
obj.Proxy = self
def execute(self, fp):
P1=Base.Vector(fp.PosX,fp.PosY,fp.PosZ)
S1=Part.makeBox(fp.L1,fp.L2,fp.Epaisseur,P1)
fp.Shape=S1
class BoiteB:
def __init__(self, obj):
obj.addProperty("App::PropertyLink","Source" ,"CalpinageFace","Source shape").Source=None
obj.Proxy = self
def execute(self, fp):
P1=Base.Vector(fp.Source.L1,fp.Source.PosY,fp.Source.PosZ)
S1=Part.makeBox(fp.Source.Epaisseur,fp.Source.L2,3*fp.Source.Epaisseur,P1)
fp.Shape=S1
if FreeCAD.ActiveDocument==None:
FreeCAD.newDocument("Boites")
boite1=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","BoiteA")
BoiteA(boite1)
boite1.ViewObject.Proxy=0
boite2=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","BoiteB")
BoiteB(boite2)
boite2.Source=boite1
boite2.ViewObject.Proxy=0
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")