macro pour poulie GT2
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Re: macro pour poulie GT2
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
Re: macro pour poulie GT2
Oulala meme2704 t'as sorti la grosse Bertha là
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
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
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?
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
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
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
Re: macro pour poulie GT2
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.
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.
Re: macro pour poulie GT2
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
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
Re: macro pour poulie GT2
Bonsoir et merci pour ta participation
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é.
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é.
Re: macro pour poulie GT2
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
- 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
Re: macro pour poulie GT2
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.
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
Re: macro pour poulie GT2
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
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 (47.14 KiB) Viewed 1215 times
-
- poulie taraudée.FCStd
- (1003.44 KiB) Downloaded 53 times
Re: macro pour poulie GT2
Bonjour
J'ai repris ma macro pour poulie GT2, elle fonctionne avec Freecad 0.17, 0.18, 0.19
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_()