Script pour filetage

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: Script pour filetage

Post by flachyjoe »

Merci pour le complément d'info,
effectivement la DraftArray fonctionne bien, j'ai tenté avec un script qui dupliquait un tour puis le décalait et enfin l'additionnait au reste mais ça prend un temps fou pour un résultat nul : les opérations booléennes n'ont pas l'air de fonctionner sur ce balayage. ( je tourne avec la révision 1827).
D'ailleurs c'est pareil avec la DraftArray, impossible de la soustraire à un cylindre.
- Flachy Joe -
Image
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Script pour filetage

Post by flachyjoe »

Voila un script qui finalement fonctionne, c'est un peu long pour la création mais après ça va bien, il n'y a pas le délai à l'ouverture comme lorsque l'on fait tous les tours d'un coup.

Code: Select all

import Part, FreeCAD, math, copy
from FreeCAD import Base

#Fabrication du premier tour de filet
helix = Part.makeHelix(1,1,3) #Un seul tour d'helice
edge1 = Part.makeLine((2.5,0,-0.125), (2.5,0,0.125))
edge2 = Part.makeLine((2.5,0,0.125), (3.1,0,0.419))
edge3 = Part.makeLine((3.1,0,0.419), (3.1,0,-0.419))
edge4 = Part.makeLine((3.1,0,-0.419), (2.5,0,-0.125))
section = Part.Wire([edge1,edge2,edge3,edge4])
makeSolid=True
isFrenet=True
pipe = Part.Wire(helix).makePipeShell([section],makeSolid,isFrenet)

#Continuation du filet
count=1
length=10 #Dix tours de fillet
trslt = FreeCAD.Vector(0,0,1) #decalage entre chaque tour
pipe2=pipe.copy()
while count< length :
	pipe2.translate(trslt)
	pipe=pipe.fuse(pipe2)
	count += 1
pipe2.nullify()
Part.show(pipe)
Une méthode plus rapide de continuation du filet : on fait 1 tour, on le duplique on en obtiens 2 , on duplique ce bloc, on a 4 tour, puis 8, etc, mais c'est pas bien pratique pour un nombre de tour qui n'est pas une puissance de 2.

Code: Select all

#Continuation du filet
count=0
length=10 #Au moins dix tours de fillet...
while (pow(2,count))< length :
	pipe2=pipe.copy()
	pipe2.translate(FreeCAD.Vector(0,0,pow(2,count)))
	pipe=pipe.fuse(pipe2)
	count += 1
	pipe2.nullify()
Part.show(pipe)
- Flachy Joe -
Image
mario52
Veteran
Posts: 4698
Joined: Wed May 16, 2012 2:13 pm

Re: Script pour filetage

Post by mario52 »

Bonjour
est il possible de combiner les arcs et edge ou bien faut-il remplacer les courbes par une polyline ?

Code: Select all

arc1 = Part.makeCircle(0.144339769921, Base.Vector( -0.469204000000,0,0.5), Base.Vector(0,1,0), (RadDeg(2.094335598958)), (RadDeg(3.128711895642)))
edge1 = Part.makeLine((-0.541366446790,0.000000000000,-0.374993798337),( -0.000112000000,0.000000000000,-0.062500000000))
section = Part.Wire([edge1,edge3,edge2])
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.
Post Reply