Macro balayage version parametrique
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Re: Macro balayage version parametrique
Salut,
j'étais en vacance, d'où le retard de la réponse...
- Tu parles de déformation des trajectoires complexes, qu'entends-tu par là ? La trajectoire n'est pas modifiée.
- Les trajectoires comportant des angles ne sont pas utilisable car il est impossible de définir un comportement standard pour fabriquer les jointures. C'est la fonction makePipeShell qui en est la cause. Il faut utiliser des trajectoires "lisses" avec des arcs pour faire les liaisons.
- Le point de coïncidence existe, c'est l'origine de l'esquisse. On peut éventuellement ajouter une propriété supplémentaire pour le translater mais je ne suis pas sur que ça ait un intérêt.
- Définir la section comme point de départ n'est pas utilisable si on veut extruder une même section le long de plusieurs chemins, ce qui arrive beaucoup plus souvent que l'inverse. Typiquement le problème du charpentier qui trace les axes des poutres puis qui extrude une même section sur chacune.
j'étais en vacance, d'où le retard de la réponse...
- Tu parles de déformation des trajectoires complexes, qu'entends-tu par là ? La trajectoire n'est pas modifiée.
- Les trajectoires comportant des angles ne sont pas utilisable car il est impossible de définir un comportement standard pour fabriquer les jointures. C'est la fonction makePipeShell qui en est la cause. Il faut utiliser des trajectoires "lisses" avec des arcs pour faire les liaisons.
- Le point de coïncidence existe, c'est l'origine de l'esquisse. On peut éventuellement ajouter une propriété supplémentaire pour le translater mais je ne suis pas sur que ça ait un intérêt.
- Définir la section comme point de départ n'est pas utilisable si on veut extruder une même section le long de plusieurs chemins, ce qui arrive beaucoup plus souvent que l'inverse. Typiquement le problème du charpentier qui trace les axes des poutres puis qui extrude une même section sur chacune.
Re: Macro balayage version parametrique
Il me semble avoir constaté une déformation avec une trajectoirs complexes mais j'ai peu etre utilisé la selection a l'envert.- Tu parles de déformation des trajectoires complexes, qu'entends-tu par là ? La trajectoire n'est pas modifiée.
J'aurais aimé reussir a rendre la macro de Normandc parametrique avant de passer a la suite mais j'atteinds mes limites en python
tu as d'autre information pour rendre les choses parametrique que ce qu'il y a sur le site : Parametric objects
Re: Macro balayage version parametrique
Correction d'un bug sur le déplacement de la section qui était tournée de façon anormale quand le Placement de la trajectoire comportait une rotation. (c'est peut être sur ce cas que tu es tombé ryback08).
La section est maintenant déplacée quand la trajectoire change.
TODO :
- Clarifier le problème sauvegarde/chargement
La section est maintenant déplacée quand la trajectoire change.
Code: Select all
import Part, FreeCAD, math, PartGui, FreeCADGui, math
from FreeCAD import Placement, Vector
def makeBalayage(Trajectoire,Section):
"Cree un balayage a partir des objets fournis."
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Balayage")
_Balayage(obj)
_ViewProviderBalayage(obj.ViewObject)
obj.traj = Trajectoire
obj.traj.Label="Trajectoire"
obj.traj.ViewObject.Visibility=False
obj.section = Section
obj.section.Label="Section"
obj.section.ViewObject.Visibility=False
obj.Solide=True
return obj
class _Balayage:
"L'objet Balayage"
#Empeche une boucle infinie due au deplacement de la section dans la fonction onChenged
locked=False
def __init__(self,obj):
obj.addProperty("App::PropertyBool","Solide","Balayage","Solide")
obj.addProperty("App::PropertyBool","Frenet","Balayage","Frenet")
obj.addProperty("App::PropertyLink","traj","Balayage","Trajectoire")
obj.addProperty("App::PropertyLink","section","Balayage","Section")
obj.Proxy = self
self.Type = "Balayage"
def execute(self,obj):
self.createGeometry(obj)
def onChanged(self,obj,prop):
if prop in ["Solide","Frenet","traj","section"]:
if not self.locked:
self.locked=True
self.createGeometry(obj)
self.locked=False
def createGeometry(self,obj):
if obj.traj and obj.section:
depart=obj.traj.Geometry[0]
pl=Placement(Vector(0,0,0),Vector(0,0,1),math.degrees(depart.tangent(0)[0].getAngle(Vector(1,0,0))) )
pl2=Placement(depart.StartPoint,depart.tangent(0)[0].cross(Vector(0,0,1)),90).multiply(pl)
pl3=obj.traj.Placement.multiply(pl2)
obj.section.Placement=pl3
obj.Shape = Part.Wire(Part.Wire([obj.traj.Shape])).makePipeShell([Part.Wire([obj.section.Shape])],obj.Solide,obj.Frenet)
class _ViewProviderBalayage:
"A View Provider for the Balayage object"
def __init__(self,vobj):
vobj.Proxy=self
def getIcon(self):
return ":/icons/PartDesign_Revolution.svg"
def updateData(self,obj,prop):
return
def onChanged(self,vobj,prop):
return
def claimChildren(self):
return [self.Object.traj,self.Object.section]
def attach(self,vobj):
self.Object = vobj.Object
return
def getDisplayModes(self,obj):
modes=[]
return modes
def setDisplayMode(self,mode):
return mode
def __getstate__(self):
return None
def __setstate__(self,state):
return None
sel = FreeCADGui.Selection.getSelection()
err=(len(sel)<2) or (not hasattr(sel[0],"Shape"))
if not err:
section=sel[0]
sel_count=1
sel_length=len(sel)
while sel_count< sel_length and not err:
trajectoire=sel[sel_count]
if not hasattr(trajectoire,"Shape"):
err=True
else:
if sel_count>1:
section=FreeCAD.ActiveDocument.copyObject(sel[0])
makeBalayage(trajectoire,section)
sel_count += 1
if err:
print "Erreur de selection"
- Clarifier le problème sauvegarde/chargement
Re: Macro balayage version parametrique
Salut Flachy Joe, je me suis renseigné sur ce souci de sauvegarde/chargement, il semble que ceci soit du au fait que le code soit dans un seul fichier. J'ai suivi les conseils que m'ont donné les autres sur le forum développeur et cela fonctionne. J'ai pris une version légèrement modifiée de ta macro (pour creuser des chemins dans une pièce) et je l'ai séparé en trois fichiers, le premier contenant la classe qui crée la géométrie, le second celui qui contient le ViewProvider et dans le dernier j'ai mis la classe makeBalayage, ce dernier importe les deux fichiers précédents(donc tu devra mettre des .py comme extensions, sinon je ne suis pas sur que l'interpréteur digère très bien...). Cette manière de faire marche très bien (bon j'ai toujours des erreurs qui s'affichent, mais ils n'empêchent pas la macro de survivre à l'enregistrement).
Encore merci de partager ton code avec nous, il est vraiment pratique et marche sans soucis chez moi ^^.
Salutations
J.J.
Encore merci de partager ton code avec nous, il est vraiment pratique et marche sans soucis chez moi ^^.
Salutations
J.J.
Re: Macro balayage version parametrique
Merci jjsca,
voila donc la même chose en 3 fichiers ce qui corrige le problème de sauvegarde. Il reste des erreurs au chargement, je pense que des événements ont lieu sur l'objet Balayage avant que ses fils y soient attachés.
Un bug trouvé : on obtient une rotation aléatoire de la section autour de son axe z si le premier segment de la trajectoire est de longueur nulle.
voila donc la même chose en 3 fichiers ce qui corrige le problème de sauvegarde. Il reste des erreurs au chargement, je pense que des événements ont lieu sur l'objet Balayage avant que ses fils y soient attachés.
Un bug trouvé : on obtient une rotation aléatoire de la section autour de son axe z si le premier segment de la trajectoire est de longueur nulle.
Re: Macro balayage version parametrique
Bonjour,
Pour votre information, un outil de balayage paramétrique vient tout juste d'être intégré au code source. Cet outil se trouve déjà dans la version de développement du dépôt PPA pour Ubuntu, pour la version Windows je ne sais pas.
Cet outil supporte plusieurs sections et une trajectoire, cette dernière pouvant être constituée d'arêtes d'objets 3D existants.
Je n'ai testé que très rapidement. L'outil est disponible via le menu Pièce --> Sweep.
Pour votre information, un outil de balayage paramétrique vient tout juste d'être intégré au code source. Cet outil se trouve déjà dans la version de développement du dépôt PPA pour Ubuntu, pour la version Windows je ne sais pas.
Cet outil supporte plusieurs sections et une trajectoire, cette dernière pouvant être constituée d'arêtes d'objets 3D existants.
Je n'ai testé que très rapidement. L'outil est disponible via le menu Pièce --> Sweep.
Re: Macro balayage version parametrique
Salut,
effectivement c'est pas mal mais ça fonctionne comme la macro d'origine. L'objet créé n'est pas paramétrique et c'est bien l'extrusion d'une face en suivant un chemin plus que le balayage de la trajectoire par la face...
Quant aux "transitions", qui raccordent les segments entre eux, je ne comprend pas comment est déterminé la taille des arrondi du "round corner" mais ça fait de drôle de choses... C'est artistique
On pourrait renommer ma macro "création de barre" ou "épaissir un chemin", ça correspondrait sans doute mieux à sa fonction.
effectivement c'est pas mal mais ça fonctionne comme la macro d'origine. L'objet créé n'est pas paramétrique et c'est bien l'extrusion d'une face en suivant un chemin plus que le balayage de la trajectoire par la face...
Quant aux "transitions", qui raccordent les segments entre eux, je ne comprend pas comment est déterminé la taille des arrondi du "round corner" mais ça fait de drôle de choses... C'est artistique
On pourrait renommer ma macro "création de barre" ou "épaissir un chemin", ça correspondrait sans doute mieux à sa fonction.
Re: Macro balayage version parametrique
Salut,
C'est inexact. Si tu modifies une des esquisses qui a servi à générer le solide, ce dernier se met à jour automatiquement.flachyjoe wrote:L'objet créé n'est pas paramétrique
Par définition, un balayage est l'extrusion d'un (ou de plusieurs) profil(s) suivant une trajectoire. Je ne comprends pas ce que tu veux dire dans la seconde partie de ta phrase.flachyjoe wrote:c'est bien l'extrusion d'une face en suivant un chemin plus que le balayage de la trajectoire par la face...
Faudrait en discuter avec wmayer, qui a implémenté cet outil. Il me semble que c'est une fonctionnalité du noyau OpenCASCADE. Effectivement, ça ne semble pas très bien fonctionner. Pour ma part, je ne trouve pas cette option très utile. Dans d'autres logiciels de CAO, quand je veux des coins arrondis dans mon balayage, je dessine ma trajectoire avec les congés requis.flachyjoe wrote:Quant aux "transitions", qui raccordent les segments entre eux, je ne comprend pas comment est déterminé la taille des arrondi du "round corner" mais ça fait de drôle de choses... C'est artistique
Re: Macro balayage version parametrique
Bonsoir !
Oups !normandc wrote:C'est inexact. Si tu modifies une des esquisses qui a servi à générer le solide, ce dernier se met à jour automatiquement.
Ce que je veux dire c'est que c'est la face qui est prise comme référence de position, dans certains cas (par expl. création de multiples "barres" avec la même section droite) ce n'est pas pratique du tout. C'est pour ça que j'avais modifié ce comportement dans ma macro.flachyjoe wrote:le balayage de la trajectoire par la face
Idem.normandc wrote:quand je veux des coins arrondis dans mon balayage, je dessine ma trajectoire avec les congés requis
Re: Macro balayage version parametrique
Vous arrivez a faire fonctionner la fonction Sweep dans l'atelier Part Design ??.
Suite au post, j'ai voulu tester cette petite fonction, mais sans succès.
En chercher des infos sur le forum, je suis tomber sur ce fichier exemple, viewtopic.php?p=20268#p20268
et je n'arrive pas a faire le balayage
Suite au post, j'ai voulu tester cette petite fonction, mais sans succès.
En chercher des infos sur le forum, je suis tomber sur ce fichier exemple, viewtopic.php?p=20268#p20268
et je n'arrive pas a faire le balayage