macro pour poulie GT2

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
meme2704
Veteran
Posts: 2926
Joined: Sat Apr 01, 2017 2:47 pm
Location: Vosges

Re: macro pour poulie GT2

Post by meme2704 »

Pour ceux qui font de réel efforts pour progresser , je suis prét à y passer beaucoup de temps (certains peuvent en témoigner) mais pour ceux qui ne souhaitent que pomper , ils n'ont pas ma sympathie en effet
User avatar
-alex-
Veteran
Posts: 1861
Joined: Wed Feb 13, 2019 9:42 pm
Location: France

Re: macro pour poulie GT2

Post by -alex- »

Oulala meme2704 t'as sorti la grosse Bertha là :shock:
En plus je me demande si c'est pas sur un malentendu de formulation de phrase de calotype.
C'est dommage, il avait lu le post, faisait part d'une limitation de la macro et proposait une amélioration : ça me semble honnête, je n'y ai rien vu de malicieux :roll:
On est pas si nombreux à s'impliquer sur le forum Français, si en plus on vire les nouveaux... :?

Calotype si t'es toujours dans les parages on repart sur de bonnes bases?

Bienvenue sur le forum :D
Le manque que tu pointe concernant la macro correspond à l'équivalent de la propriété "offset" des engrenages du module Gears.
C'est vrai qu'un paramètre de décalage de profile de dents serait un petit plus pour l'impression 3D des poulies. En tout cas je m'en sert tout le temps avec le module Gears pour l'impression de mes engrenages.
Malheureusement je n'ai pas les compétences pour modifier la macro, je ne peux que demander peut-être à Blonblon ou Eaguire si ils sont motivés?
blonblon wrote:ping
eaguirre wrote:ping
User avatar
Vincent B
Veteran
Posts: 4733
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: macro pour poulie GT2

Post by Vincent B »

Forthman wrote: Mon Jun 03, 2019 6:20 am Ce qui est bien avec les réponses de meme2704 c'est que les nouveaux sur le forum se sentent de suis à l'aise :mrgreen:
ouais il est plutôt cinglant, mémé, tu pourrais t'auto-moderer, c'est relou par moment.
User avatar
calotype
Posts: 10
Joined: Wed May 29, 2019 2:53 pm

Re: macro pour poulie GT2

Post by calotype »

Hello,

Merci pour vos mots positifs.
Je poursuis ma démarche de partage et d'explication étant donné que je cherche à faire un prototype fonctionnel.

..et pour info pour les mauvaises langues je n'ai pas une imprimante à 200 euros mais une chinoiserie à 400€ avec une précision en Z à 0,01mm et XY à 0,047 mm donc autant l'exploiter. Et je le redis normalement un bon slicer permet ce genre de modifs le mien ne l'a pas encore alors je cherche une solution et je l'ai trouvée et la partage.
J'ai d'autre modifs utile qui viendront sur le fichier.
Bonne journée.
ImageImage
User avatar
-alex-
Veteran
Posts: 1861
Joined: Wed Feb 13, 2019 9:42 pm
Location: France

Re: macro pour poulie GT2

Post by -alex- »

Au cas où là macro ne serai pas modifiée, peut-être le sais-tu déjà, tu peux faire un clone de ta poulie (Draft WB-> Clone) et attribuer une échelle axe par axe. Donc si tu appliques une échelle sur les 2 axes du plan de ta poulie tu peux obtenir un résultat très approchant de ce que tu recherches. Mais déterminer le facteur d'échelle n'est pas du plus aisé et de mémoire les décimales du facteur d'échelle sont tronquées, donc la précision est limitée.
Un décalage serait plus simple. Ça pourrait se faire avec l'atelier Part, mais la sélection de toutes les faces des dents me paraît trop fastidieux pour ensuite créer un offset (Part WB -> 3D offset). Je ne crois pas que l'outil de sélection de boucles de faces (Defeaturing WB) fonctionne dans ce cas (à cause des tangences de rayons de fond de dents).
Un paramètre de décalage intégré à la macro serait le mieux il me semble. Mais les conseilleurs ne sont pas les payeurs :roll:
User avatar
calotype
Posts: 10
Joined: Wed May 29, 2019 2:53 pm

Re: macro pour poulie GT2

Post by calotype »

Bonsoir et merci pour ta participation
-alex- wrote: Mon Jun 03, 2019 6:43 pm Au cas où là macro ne serai pas modifiée, peut-être le sais-tu déjà, tu peux faire un clone de ta poulie (Draft WB-> Clone) et attribuer une échelle axe par axe. [...]
Comme je l'ai testé ici https://forum.freecadweb.org/viewtopic. ... 30#p311453 le problème de l’échelle est qu'elle ne corrige pas complétement la surcote du à d'impression comme il faudrait.

Depuis que mes tests et ajouts de correction au fichier de FADA3D sont concluant je vais passer à autre chose car c’était un besoin spécifique que j'ai résolu !
Concernant la macro c’était surtout pour inviter l'auteur à la rendre plus poussée en intégrant mes modifs et en faire profiter aux autres car je la trouve puissante en terme de rapidité et simplicité.
User avatar
calotype
Posts: 10
Joined: Wed May 29, 2019 2:53 pm

Re: macro pour poulie GT2

Post by calotype »

Nouvelles options de variables ajoutées:

- Méplat, la valeur à entrer est celle de l'ouverture restante. Si non souhaité entrer 0mm.
- Trou n°1 de fixation pour vis sans tête, placé perpendiculairement au méplat. Si non souhaité entrer 0 mm.
- Trou n°2 de fixation pour vis sans tête, la variable est l'angle formé avec le premier trou. Si non souhaité entrer 0°.
nb: le Diamètre du trou n°2=n°1. Si le trou n°1 =0mm donc absent alors il n'y a pas de trou n°2. Les deux trous sont placés au milieu de l'épaisseur de la poulie


Voilà le fichier
Attachments
Poulies_GT2-GT3.FCStd
(470.79 KiB) Downloaded 54 times
User avatar
calotype
Posts: 10
Joined: Wed May 29, 2019 2:53 pm

Re: macro pour poulie GT2

Post by calotype »

Nouvelle modif:

Changement de plan d'esquisse passage de XZ -> XY.

Même si les slicers permettent l'orientation d'un objet c'est plus propre ainsi car une poulie va logiquement s'imprimer à plat sur le plateau XY au vue des ses caractéristiques.
Attachments
Poulies_GT2-GT3.FCStd
(447.02 KiB) Downloaded 85 times
User avatar
meme2704
Veteran
Posts: 2926
Joined: Sat Apr 01, 2017 2:47 pm
Location: Vosges

Re: macro pour poulie GT2

Post by meme2704 »

Ha , je vois que tu as bossé donc je retire ce que j'ai dit plus haut :)
Et pour aider , j'ai recentré le trou à 120°, il faut même le déplacé plus pour qu'il soit dans le creux sinon il va te bouffer de la courroie , et comme c'est un trou taraudé si tu le laisse en haut de la dent , impossible à entré un taraud et une vis
pour finir , je t'ai taraudé le N°1 avec un chambrage d'entrée
Attachments
poulie taraudée.PNG
poulie taraudée.PNG (47.14 KiB) Viewed 1215 times
poulie taraudée.FCStd
(1003.44 KiB) Downloaded 53 times
User avatar
blonblon
Posts: 253
Joined: Sat Sep 24, 2016 6:06 pm
Location: Uzes (Gard), France

Re: macro pour poulie GT2

Post by blonblon »

Bonjour

J'ai repris ma macro pour poulie GT2, elle fonctionne avec Freecad 0.17, 0.18, 0.19

Code: Select all

#-*- coding: utf-8 -*-
#
# Dessin pignon GT2
#

import Draft, Part
import sys
import math
import Part
import sys
import FreeCAD, FreeCADGui
import Sketcher, PartDesign
import ProfileLib.RegularPolygon
from FreeCAD import Base
from PySide import QtCore, QtGui

def proceed():

   if FreeCAD.ActiveDocument == None:
      FreeCAD.newDocument("Pignon GT2")

# On crée l'objet Part
   App.activeDocument().Tip = App.activeDocument().addObject('App::Part','Part')
   App.activeDocument().Part.Label = 'Part'

# On crée l'objet Body
   App.activeDocument().addObject('PartDesign::Body','Body')
   App.activeDocument().Part.addObject(App.ActiveDocument.Body)

   App.activeDocument().Body.newObject('Sketcher::SketchObject','Sketch')
   App.activeDocument().Sketch.Support = (App.activeDocument().XY_Plane001, [''])
   App.activeDocument().Sketch.MapMode = 'FlatFace'

# Parametres de calcul
   nombre_de_dents = int(s1.text())
   pas = 2
   circonference = nombre_de_dents * pas
   diametre_primitif = circonference / math.pi
   PLD = 0.254
   diametre_poulie = diametre_primitif - (PLD * 2)
   rayon_poulie = diametre_poulie / 2
   largeur_poulie = float(s2.text())
   R1 = 0.15 # rayon_R1
   positionX = rayon_poulie
   R2 = 1 # rayon_R2
   positionX_R2 = 0.4
   R3 = 0.555 # rayon_R3
   b = 0.4
   b2 = b*2
   h = 0.75
   positionX_R3 = rayon_poulie - (h - R3)

# On place le rond qui va servir pour le pignon
   App.ActiveDocument.Sketch.addGeometry(Part.Circle(App.Vector(-0.959298,0.986822,0),App.Vector(0,0,1),rayon_poulie),False)
   App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',-1,1,0,3)) 
   App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Radius',0,rayon_poulie)) 
   App.ActiveDocument.Sketch.setDatum(1,App.Units.Quantity(str(rayon_poulie)+' mm'))

# On extrude le rond
   App.activeDocument().Body.newObject("PartDesign::Pad","Pad")
   App.activeDocument().Pad.Profile = App.activeDocument().Sketch
   App.activeDocument().Pad.Length = largeur_poulie

   App.ActiveDocument.Pad.Length = largeur_poulie
   App.ActiveDocument.Pad.Length2 = 100.000000
   App.ActiveDocument.Pad.Type = 0
   App.ActiveDocument.Pad.UpToFace = None
   App.ActiveDocument.Pad.Reversed = 0
   App.ActiveDocument.Pad.Midplane = 0
   App.ActiveDocument.Pad.Offset = 0.000000
   App.ActiveDocument.recompute()
   Gui.getDocument("Pignon_GT2").getObject("Sketch").Visibility=False

# On dessine une dent
   App.activeDocument().Body.newObject('Sketcher::SketchObject','Sketch001')
   App.activeDocument().Sketch001.Support = (App.ActiveDocument.Pad,["Face3"])
   App.activeDocument().Sketch001.MapMode = 'FlatFace'
   App.ActiveDocument.recompute()


   App.ActiveDocument.Sketch001.addGeometry(Part.LineSegment(App.Vector(-0.193479,5.124362,0),App.Vector(0.192029,5.124362,0)),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Symmetric',0,1,0,2,-2)) 
   App.ActiveDocument.Sketch001.toggleConstruction(0) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceX',0,1,0,2,b2)) # Entraxe rayon R2 
   App.ActiveDocument.Sketch001.setDatum(1,App.Units.Quantity(str(b2) + ' mm')) # Entraxe rayon R2
   geoList = []
   geoList.append(Part.LineSegment(App.Vector(-0.733822,4.858931,0),App.Vector(0.675494,4.858931,0)))
   geoList.append(Part.LineSegment(App.Vector(0.675494,4.858931,0),App.Vector(0.675494,4.707256,0)))
   geoList.append(Part.LineSegment(App.Vector(0.675494,4.707256,0),App.Vector(-0.733822,4.707256,0)))
   geoList.append(Part.LineSegment(App.Vector(-0.733822,4.707256,0),App.Vector(-0.733822,4.858931,0)))
   App.ActiveDocument.Sketch001.addGeometry(geoList,False)
   conList = []
   conList.append(Sketcher.Constraint('Coincident',1,2,2,1))
   conList.append(Sketcher.Constraint('Coincident',2,2,3,1))
   conList.append(Sketcher.Constraint('Coincident',3,2,4,1))
   conList.append(Sketcher.Constraint('Coincident',4,2,1,1))
   conList.append(Sketcher.Constraint('Horizontal',1))
   conList.append(Sketcher.Constraint('Vertical',2))
   conList.append(Sketcher.Constraint('Vertical',4))
   App.ActiveDocument.Sketch001.addConstraint(conList)

   App.ActiveDocument.Sketch001.toggleConstruction(4) 
   App.ActiveDocument.Sketch001.toggleConstruction(1) 
   App.ActiveDocument.Sketch001.toggleConstruction(3) 
   App.ActiveDocument.Sketch001.toggleConstruction(2) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceY',3,2,1,1,R1)) # Arc cercle R1 
   App.ActiveDocument.Sketch001.setDatum(9,App.Units.Quantity(str(R1) + ' mm')) # Arc cercle R1
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Symmetric',3,2,2,2,-2))  

   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(-0.661711,4.752790,0),App.Vector(0,0,1),0.192858),0.236851,1.887364),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',3,2,5,3)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',1,1,5,2)) 
   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.450575,5.100380,0),App.Vector(0,0,1),1.036934),-2.747505,-2.448713),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',0,2,6,3)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Tangent',5,1,6,1)) 
   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.068227,4.563197,0),App.Vector(0,0,1),0.468263),-2.587285,-1.242243),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Tangent',6,2,7,1)) 
   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.668608,4.825469,0),App.Vector(0,0,1),0.204199),1.190289,2.657114),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',8,3,2,2)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',1,2,8,1)) 
   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(-0.465797,5.119339,0),App.Vector(0,0,1),1.025216),-0.712926,-0.365625),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',9,3,0,1)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Tangent',8,2,9,2)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Tangent',7,2,9,1)) 

   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Radius',6,R2)) # Arc cercle R2 
   App.ActiveDocument.Sketch001.setDatum(21,App.Units.Quantity(str(R2) + ' mm')) # Arc cercle R2
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Radius',7,R3)) # Arc cercle R3 
   App.ActiveDocument.Sketch001.setDatum(22,App.Units.Quantity(str(R3) + ' mm')) # Arc cercle R3

   App.ActiveDocument.Sketch001.addGeometry(Part.Point(App.Vector(-0.150355,4.112466,0)))
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('PointOnObject',10,1,-2)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('PointOnObject',10,1,7)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('DistanceY',10,1,8,1,h)) # Hauteur 
   App.ActiveDocument.Sketch001.setDatum(25,App.Units.Quantity(str(h) + ' mm'))

   App.ActiveDocument.Sketch001.addExternal("Pad","Edge3")
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('PointOnObject',5,2,-3)) 

   App.ActiveDocument.Sketch001.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.298317,3.331532,0),App.Vector(0,0,1),1.930821),1.288327,2.078132),False)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',5,2,11,2)) 
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Coincident',8,1,11,1)) 
   App.ActiveDocument.Sketch001.movePoint(11,0,App.Vector(-0.107088,4.967296,0),0)
   App.ActiveDocument.Sketch001.addConstraint(Sketcher.Constraint('Tangent',-3,11))
   Gui.getDocument("Pignon_GT2").getObject("Sketch001").Visibility=False

###############
   App.activeDocument().Body.newObject("PartDesign::Pocket","Pocket")
   App.activeDocument().Pocket.Profile = App.activeDocument().Sketch001
   App.activeDocument().Pocket.Length = largeur_poulie

   App.ActiveDocument.recompute()

   App.ActiveDocument.Pocket.Length = largeur_poulie
   App.ActiveDocument.Pocket.Length2 = 100.000000
   App.ActiveDocument.Pocket.Type = 0
   App.ActiveDocument.Pocket.UpToFace = None
   App.ActiveDocument.Pocket.Reversed = 0
   App.ActiveDocument.Pocket.Midplane = 0
   App.ActiveDocument.Pocket.Offset = 0.000000

   App.ActiveDocument.recompute()

   App.activeDocument().Body.newObject("PartDesign::PolarPattern","PolarPattern")
   App.ActiveDocument.recompute()
   App.activeDocument().PolarPattern.Originals = [App.activeDocument().Pocket,]
   App.activeDocument().PolarPattern.Axis = (App.activeDocument().Sketch001, ["N_Axis"])
   App.activeDocument().PolarPattern.Angle = 360

   App.activeDocument().PolarPattern.Occurrences = int(nombre_de_dents)
   App.ActiveDocument.recompute()

   App.activeDocument().Body.Tip = App.activeDocument().PolarPattern

   App.ActiveDocument.recompute()
   App.ActiveDocument.PolarPattern.Originals = [App.ActiveDocument.Pocket,]
   Gui.getDocument("Pignon_GT2").getObject("PolarPattern").Visibility=True
   App.ActiveDocument.recompute()

   App.getDocument('Pignon_GT2').recompute()

   close()


def close():
      dialog.hide()
      print('Modélisation terminée au revoir')


def __init__():
# Initialisation
   dialog = None
s1 = None

# Dimentionner la boite de dialogue
dialog = QtGui.QDialog()
dialog.resize(180,160)

# Titre de la boite
dialog.setWindowTitle("Poulie GT2")
la = QtGui.QVBoxLayout(dialog)

# Affichage Label
t1 = QtGui.QLabel("Nombre de Dents")
la.addWidget(t1)

# Affichage LineEdit
s1 = QtGui.QLineEdit()
s1.setText("16")
s1.setFixedWidth(100)
la.addWidget(s1)

t2 = QtGui.QLabel("Largeur Poulie")
la.addWidget(t2)

# Affichage LineEdit
s2 = QtGui.QLineEdit()
s2.setText("8.0")
s2.setFixedWidth(100)
la.addWidget(s2)

# Gestion boutons OK / Cancel
okbox = QtGui.QDialogButtonBox(dialog)
okbox.setOrientation(QtCore.Qt.Horizontal)
okbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
la.addWidget(okbox)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("accepted()"), proceed)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("rejected()"), close)
QtCore.QMetaObject.connectSlotsByName(dialog)
dialog.show()
dialog.exec_()
Post Reply