Macro balayage version parametrique

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Macro balayage version parametrique

Post by flachyjoe »

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.
- Flachy Joe -
Image
ryback08
Posts: 57
Joined: Mon Jan 09, 2012 10:06 pm

Re: Macro balayage version parametrique

Post by ryback08 »

- Tu parles de déformation des trajectoires complexes, qu'entends-tu par là ? La trajectoire n'est pas modifiée.
Il me semble avoir constaté une déformation avec une trajectoirs complexes mais j'ai peu etre utilisé la selection a l'envert.

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
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Macro balayage version parametrique

Post by flachyjoe »

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.

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"
TODO :
- Clarifier le problème sauvegarde/chargement
- Flachy Joe -
Image
jjsca
Posts: 24
Joined: Thu Mar 01, 2012 8:58 pm

Re: Macro balayage version parametrique

Post by jjsca »

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.
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Macro balayage version parametrique

Post by flachyjoe »

Merci jjsca,
voila donc la même chose en 3 fichiers ce qui corrige le problème de sauvegarde.
Balayage.zip
(1.51 KiB) Downloaded 85 times
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.
- Flachy Joe -
Image
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Macro balayage version parametrique

Post by NormandC »

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.
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Macro balayage version parametrique

Post by flachyjoe »

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.
- Flachy Joe -
Image
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Macro balayage version parametrique

Post by NormandC »

Salut,
flachyjoe wrote:L'objet créé n'est pas paramétrique
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:c'est bien l'extrusion d'une face en suivant un chemin plus que le balayage de la trajectoire par la face...
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: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
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.
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Macro balayage version parametrique

Post by flachyjoe »

Bonsoir !
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.
Oups ! :oops: :?
flachyjoe wrote:le balayage de la trajectoire par la face
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. :geek:
normandc wrote:quand je veux des coins arrondis dans mon balayage, je dessine ma trajectoire avec les congés requis
Idem. ;)
- Flachy Joe -
Image
ryback08
Posts: 57
Joined: Mon Jan 09, 2012 10:06 pm

Re: Macro balayage version parametrique

Post by ryback08 »

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
Post Reply