Bon courage. Si tu as besoin d'aide, il faudra un peu plus de code pour comprendre.
Gestion d'une fenetre et des variables destinées au dessin
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Re: Gestion d'une fenetre et des variables destinées au dessin
J'ai ajouté une barre de progression pour visualiser l'avancement du programme.
Il reste un problème les Pad ne s'empilent pas mais reste sur le plan Z=0 je n'arrive pas à trouver l'erreur.
voici le code.
après il restera à tester vraiment le programme.
Il reste un problème les Pad ne s'empilent pas mais reste sur le plan Z=0 je n'arrive pas à trouver l'erreur.
voici le code.
Code: Select all
#-*- coding: utf-8 -*-
#
# Dessin pignon GT2
#
import Draft, Part
import sys
import math
import Part
import sys
import PartDesignGui
import FreeCAD, FreeCADGui
import Sketcher, PartDesign
import ProfileLib.RegularPolygon
from FreeCAD import Base
from PySide import QtCore, QtGui
__DBG__ = False #True #Mettre à False pour supprimer la sortie de debug
def pdbg(text):
###
if __DBG__: #Si on est en mode debug
App.Console.PrintMessage(text)
###
def proceed():
###
Type = t0.currentText() # on récupére le type de poulie
progress.setValue(5)
###
###
# Données nécessaires au dessin poulie GT2
if 'GT2' == Type:
pdbg('Type = ' + str(Type)+"\n")
nombre_de_dents = float(s1.text())
pdbg('Nb dents = ' + str(nombre_de_dents)+"\n")
pas = 2
pdbg('Pas = ' + str(pas)+"\n")
PLD = 0.254
pdbg('PLD = ' + str(PLD)+"\n")
h = 0.75
pdbg('h = ' + str(h)+"\n")
circonference = nombre_de_dents * pas
pdbg('circonference = ' + str(circonference)+"\n")
diametre_primitif = circonference / math.pi
pdbg('diametre_primitif = ' + str(diametre_primitif)+"\n")
diametre_poulie = diametre_primitif - (PLD * 2)
pdbg('diametre_poulie = ' + str(diametre_poulie)+"\n")
rayon_poulie = diametre_poulie / 2
pdbg('rayon_poulie = ' + str(rayon_poulie)+"\n")
largeur_poulie = float(s2.text())
pdbg('largeur_poulie = ' + str(largeur_poulie)+"\n")
R1 = 0.15
pdbg('rayon_R1 = ' + str(R1)+"\n")
R2 = 1
pdbg('rayon_R2 = ' + str(R2)+"\n")
R3 = 0.555
pdbg('rayon_R3 = ' + str(R3)+"\n")
b = 0.4
b2 = b*2
elif 'GT3' == Type:
pdbg('Type = ' + str(Type)+"\n")
nombre_de_dents = float(s1.text())
pdbg('Nb dents = ' + str(nombre_de_dents)+"\n")
pas = 3
pdbg('Pas = ' + str(pas)+"\n")
PLD = 0.381
pdbg('PLD = ' + str(PLD)+"\n")
h = 1.14
pdbg('h = ' + str(h)+"\n")
circonference = nombre_de_dents * pas
pdbg('circonference = ' + str(circonference)+"\n")
diametre_primitif = circonference / math.pi
pdbg('diametre_primitif = ' + str(diametre_primitif)+"\n")
diametre_poulie = diametre_primitif - (PLD * 2)
pdbg('diametre_poulie = ' + str(diametre_poulie)+"\n")
rayon_poulie = diametre_poulie / 2
pdbg('rayon_poulie = ' + str(rayon_poulie)+"\n")
largeur_poulie = float(s2.text())
pdbg('largeur_poulie = ' + str(largeur_poulie)+"\n")
R1 = 0.25
pdbg('rayon_R1 = ' + str(R1)+"\n")
R2 = 1.52
pdbg('rayon_R2 = ' + str(R2)+"\n")
R3 = 0.85
pdbg('rayon_R3 = ' + str(R3)+"\n")
b = 0.61
b2 = b*2
elif 'GT5' == Type:
pdbg('Type = ' + str(Type)+"\n")
nombre_de_dents = float(s1.text())
pdbg('Nb dents = ' + str(nombre_de_dents)+"\n")
pas = 5
PLD = 0.43
pdbg('PLD = ' + str(PLD)+"\n")
h = 1.2
pdbg('h = ' + str(h)+"\n")
circonference = nombre_de_dents * pas
pdbg('circonference = ' + str(circonference)+"\n")
diametre_primitif = circonference / math.pi
pdbg('diametre_primitif = ' + str(diametre_primitif)+"\n")
diametre_poulie = diametre_primitif - (PLD * 2)
pdbg('diametre_poulie = ' + str(diametre_poulie)+"\n")
rayon_poulie = diametre_poulie / 2
pdbg('rayon_poulie = ' + str(rayon_poulie)+"\n")
largeur_poulie = float(s2.text())
pdbg('largeur_poulie = ' + str(largeur_poulie)+"\n")
largeurDent = 2.65
angleDent = 40
###
###
# ici on insére le teste de présence nouveau fichier part body sketch
myDoc = App.ActiveDocument
if myDoc == None: #il n'y a pas de Document on le crée
myDoc = App.newDocument("Pignon" + Type)
############
objs = [obj for obj in myDoc.Objects if str(obj) == "<Part object>"]
if len(objs) == 0: #Il n'y a pas de Part on le crée
myPart = myDoc.addObject('App::Part','Part')
myPart.Label = "Pièce"
else: #Il y a (au moins) un Part dans le document
myPart = objs[0] #On utilise par ex. le premier Part dans la suite
############
objs = [obj for obj in myDoc.Objects if str(obj) == "<body object>"]
if len(objs) != 0 and t1.isChecked() == False:
myBody = objs[ - 1]
mySketch = myBody.newObject('Sketcher::SketchObject','Sketch')
# mySketch.Support = (App.ActiveDocument.Pad,[''])
a = 0
a = App.ActiveDocument.Pad.Length
# App.activeDocument().Sketch.Placement = App.Placement(App.Vector(0.000000,0.000000,a),App.Rotation(0,00,1,0))
print('obj != 0')
print(str(a))
else:
myBody = myDoc.addObject('PartDesign::Body','Body')
# App.activeDocument().Part.addObject(App.ActiveDocument.Body)
mySketch = myBody.newObject('Sketcher::SketchObject','Sketch')
mySketch.Support = (myDoc.XY_Plane001, [''])
mySketch.MapMode = 'FlatFace'
a = 0
# App.activeDocument().Sketch.Placement = App.Placement(App.Vector(0.000000,0.000000,a),App.Rotation(0,00,1,0))
print('obj == 0')
print(str(a))
############
# premier Sketch ici on insére le code du dessin
# On place le cercle qui va servir pour le pignon en GT2, GT3, ou GT5
progress.setValue(20)
print(str(App.getDocument))
# FreeCAD.getDocument("PignonGT2").getObject("Sketch002").Placement = App.Placement(App.Vector(0,0,8),App.Rotation(App.Vector(0,0,1),0))
# App.activeDocument().Sketch001.Placement = App.Placement(App.Vector(0.000000,0.000000,0.000000),App.Rotation(-0.707107,0.000000,0.000000,-0.707107))
# App.getDocument("PignonGT2").getObject("Sketch002").Placement = App.Placement(App.Vector(0,0,a),App.Rotation(App.Vector(0,0,1),0))
mySketch.addGeometry(Part.Circle(App.Vector(-0.959298,0.986822,0),App.Vector(0,0,1),rayon_poulie),False)
mySketch.addConstraint(Sketcher.Constraint('Coincident',-1,1,0,3))
mySketch.addConstraint(Sketcher.Constraint('Radius',0,rayon_poulie))
# mySketch.Placement = App.Placement(App.Vector(0.000000,0.000000,a),App.Rotation(0,0,1,0))
App.ActiveDocument.recompute()
mySketch.ViewObject.Visibility = False
############
# On extrude le cercle
myPad = myBody.newObject("PartDesign::Pad","Pad")
# print(str(myPad.Length))
myPad.Profile = mySketch
myPad.Length = largeur_poulie
App.ActiveDocument.recompute()
# myPad.Length = (float(a) + largeur_poulie)
myPad.Length2 = 100.000000
myPad.Type = 0
myPad.UpToFace = None
myPad.Reversed = 1
myPad.Midplane = 0
myPad.Offset = 0.000000
# myPad.ViewObject.Visibility = False
App.ActiveDocument.recompute()
progress.setValue(30)
###
# on dessine une dent
###
if 'GT2' == Type or 'GT3' == Type:
mySketch1 = myBody.newObject('Sketcher::SketchObject','Sketch001')
# App.activeDocument().Sketch001.Support = (App.ActiveDocument.Pad,["Face5"])
mySketch1.Support = (App.ActiveDocument.Pad,["Face3"]) # (myDoc,["Face3"]) # myPad myDoc
mySketch1.MapMode = 'FlatFace'
# mySketch1.Placement = App.Placement(App.Vector(0.000000,0.000000,a),App.Rotation(0,0,1,0))
mySketch1.addGeometry(Part.LineSegment(App.Vector(-0.193479,5.124362,0),App.Vector(0.192029,5.124362,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Symmetric',0,1,0,2,-2))
mySketch1.toggleConstruction(0)
mySketch1.addConstraint(Sketcher.Constraint('DistanceX',0,1,0,2,b2)) # Entraxe rayon R2
mySketch1.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)))
mySketch1.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))
mySketch1.addConstraint(conList)
mySketch1.toggleConstruction(4)
mySketch1.toggleConstruction(1)
mySketch1.toggleConstruction(3)
mySketch1.toggleConstruction(2)
mySketch1.addConstraint(Sketcher.Constraint('DistanceY',3,2,1,1,R1)) # Arc cercle R1
mySketch1.setDatum(9,App.Units.Quantity(str(R1) + ' mm')) # Arc cercle R1
mySketch1.addConstraint(Sketcher.Constraint('Symmetric',3,2,2,2,-2))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(-0.661711,4.752790,0),App.Vector(0,0,1),0.192858),0.236851,1.887364),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',3,2,5,3))
mySketch1.addConstraint(Sketcher.Constraint('Coincident',1,1,5,2))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.450575,5.100380,0),App.Vector(0,0,1),1.036934),-2.747505,-2.448713),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',0,2,6,3))
mySketch1.addConstraint(Sketcher.Constraint('Tangent',5,1,6,1))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.068227,4.563197,0),App.Vector(0,0,1),0.468263),-2.587285,-1.242243),False)
mySketch1.addConstraint(Sketcher.Constraint('Tangent',6,2,7,1))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.668608,4.825469,0),App.Vector(0,0,1),0.204199),1.190289,2.657114),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',8,3,2,2))
mySketch1.addConstraint(Sketcher.Constraint('Coincident',1,2,8,1))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(-0.465797,5.119339,0),App.Vector(0,0,1),1.025216),-0.712926,-0.365625),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',9,3,0,1))
mySketch1.addConstraint(Sketcher.Constraint('Tangent',8,2,9,2))
mySketch1.addConstraint(Sketcher.Constraint('Tangent',7,2,9,1))
mySketch1.addConstraint(Sketcher.Constraint('Radius',6,R2)) # Arc cercle R2
mySketch1.setDatum(21,App.Units.Quantity(str(R2) + ' mm')) # Arc cercle R2
mySketch1.addConstraint(Sketcher.Constraint('Radius',7,R3)) # Arc cercle R3
mySketch1.setDatum(22,App.Units.Quantity(str(R3) + ' mm')) # Arc cercle R3
mySketch1.addGeometry(Part.Point(App.Vector(-0.150355,4.112466,0)))
mySketch1.addConstraint(Sketcher.Constraint('PointOnObject',10,1,-2))
mySketch1.addConstraint(Sketcher.Constraint('PointOnObject',10,1,7))
mySketch1.addConstraint(Sketcher.Constraint('DistanceY',10,1,8,1,h)) # Hauteur
mySketch1.setDatum(25,App.Units.Quantity(str(h) + ' mm'))
mySketch1.ViewObject.Visibility = True
App.ActiveDocument.recompute()
mySketch1.addExternal("Pad","Edge2")
mySketch1.addConstraint(Sketcher.Constraint('PointOnObject',5,2,-3))
mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.298317,3.331532,0),App.Vector(0,0,1),1.930821),1.288327,2.078132),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',5,2,11,2))
mySketch1.addConstraint(Sketcher.Constraint('Coincident',8,1,11,1))
mySketch1.movePoint(11,0,App.Vector(-0.107088,4.967296,0),0)
mySketch1.addConstraint(Sketcher.Constraint('Tangent',-3,11))
mySketch1.ViewObject.Visibility = False
progress.setValue(50)
# Gui.getDocument("Pignon" + Type).getObject("Sketch001").Visibility=False
# mySketch1.addConstraint(Sketcher.Constraint('Tangent',-3,11)
# mySketch1.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.298317,3.331532,0),App.Vector(0,0,1),1.930821),1.288327,2.078132),False)
# mySketch1.addConstraint(Sketcher.Constraint('Coincident',5,2,11,2))
# mySketch1.addConstraint(Sketcher.Constraint('Coincident',8,1,11,1))
# mySketch1.addConstraint(Sketcher.Constraint('Distance',-1,1,8,1,rayon_poulie))
# mySketch1.ViewObject.Visibility = False
# App.ActiveDocument.recompute()
elif 'GT5' == Type:
###
# On dessine une dent GT5
###
mySketch1 = myBody.newObject('Sketcher::SketchObject','Sketch')
# mySketch1.Support = (App.ActiveDocument.Pad,["Face2"])
# mySketch1.MapMode = 'FlatFace'
mySketch1.addGeometry(Part.LineSegment(App.Vector(-1.135752,12.395073,0),App.Vector(-1.122119,13.022206,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Vertical',0))
mySketch1.addGeometry(Part.LineSegment(App.Vector(-1.135752,13.022206,0),App.Vector(1.427315,13.144907,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',0,2,1,1))
mySketch1.addGeometry(Part.LineSegment(App.Vector(1.427315,13.144907,0),App.Vector(1.427315,12.531406,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',1,2,2,1))
mySketch1.addConstraint(Sketcher.Constraint('Vertical',2))
mySketch1.addGeometry(Part.LineSegment(App.Vector(1.427315,12.531406,0),App.Vector(0.759282,11.195339,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',2,2,3,1))
mySketch1.addGeometry(Part.LineSegment(App.Vector(0.759282,11.195339,0),App.Vector(-0.522252,11.099906,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',3,2,4,1))
mySketch1.addGeometry(Part.LineSegment(App.Vector(-0.522252,11.099906,0),App.Vector(-1.122119,12.081507,0)),False)
mySketch1.addConstraint(Sketcher.Constraint('Coincident',4,2,5,1))
mySketch1.addConstraint(Sketcher.Constraint('Coincident',5,2,0,1))
myPad.ViewObject.Visibility = True
App.ActiveDocument.recompute()
mySketch1.addExternal("Pad","Edge3")
mySketch1.addConstraint(Sketcher.Constraint('PointOnObject',0,1,-3))
mySketch1.addConstraint(Sketcher.Constraint('Equal',5,3))
mySketch1.addConstraint(Sketcher.Constraint('Symmetric',4,2,3,2,-2))
mySketch1.addConstraint(Sketcher.Constraint('Symmetric',0,2,1,2,-2))
mySketch1.addConstraint(Sketcher.Constraint('DistanceY',2,2,2,1,0.883285))
mySketch1.setDatum(12,App.Units.Quantity('1.000000 mm'))
mySketch1.addConstraint(Sketcher.Constraint('DistanceX',1,1,1,2,2.438514))
mySketch1.setDatum(13,App.Units.Quantity(str(largeurDent) + ' mm'))
mySketch1.addConstraint(Sketcher.Constraint('Angle',3,2,5,1,1.008739))
mySketch1.setDatum(14,App.Units.Quantity(str(angleDent) + ' deg'))
mySketch1.ViewObject.Visibility = False
App.ActiveDocument.recompute()
###
# On fait un Pocket de la dent GT2, GT3 ou GT5
###
myPocket = myBody.newObject("PartDesign::Pocket","Pocket")
myPocket.Profile = mySketch1
myPocket.Length = largeur_poulie
App.ActiveDocument.recompute()
myPocket.Length2 = 100.000000
myPocket.Type = 0
myPocket.UpToFace = None
myPocket.Reversed = 0
myPocket.Midplane = 0
myPocket.Offset = 0.000000
myPocket.ViewObject.Visibility = False
App.ActiveDocument.recompute()
progress.setValue(70)
###
# On dessine toutes les dents
###
myPolar = myBody.newObject("PartDesign::PolarPattern","PolarPattern")
myDoc.recompute()
myPolar.Originals = [myPocket]
myPolar.Axis = (mySketch1, ["N_Axis"])
myPolar.Angle = 360
myPolar.Occurrences = int(nombre_de_dents)
myDoc.recompute()
myBody.Tip = myPolar
myDoc.recompute()
myPolar.Originals = [myPocket,]
# myPolar.Visibility=True
Gui.getDocument(myDoc).getObject("PolarPattern").Visibility=True
myDoc.recompute()
progress.setValue(90)
###
close()
def fin():
close()
def close():
dialog.close()
print('Terminé')
###
# Gestion de la fenetre de dialogues
dialog = None
s1 = None
dialog = QtGui.QDialog()
dialog.resize(200,400) # Dimentionner la boite de dialogue
dialog.setWindowTitle("Poulie GT2") # Titre de la fenetre
la = QtGui.QVBoxLayout(dialog)
progress = QtGui.QProgressBar()
la.addWidget(progress)
progress.setGeometry(QtCore.QRect(0, 0, 200, 40))
t1 = QtGui.QCheckBox("cocher pour plusieurs Body")
la.addWidget(t1)
t1.setCheckState(QtCore.Qt.Unchecked) # Unchecked Checked
la.addWidget(QtGui.QLabel("Type de poulie")) # Affichage Label
t0 = QtGui.QComboBox() # Affichage ComboBox
la.addWidget(t0)
t0.addItems(["GT2", "GT3", "GT5"])
t0.setFixedWidth(100)
la.addWidget(QtGui.QLabel("Nombre de Dents")) # Affichage Label)
s1 = QtGui.QLineEdit() # Affichage LineEdit
s1.setText("16.0")
s1.setFixedWidth(100)
la.addWidget(s1)
la.addWidget(QtGui.QLabel("Largeur Poulie")) # Affichage Label
s2 = QtGui.QLineEdit() # Affichage LineEdit
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)
dialog.exec_()
après il restera à tester vraiment le programme.
Re: Gestion d'une fenetre et des variables destinées au dessin
Salut blonblon,
Je ne comprends pas trop le problème. Quand je lance ta macro, ça me crée un seul pignon (effectivement à l'origine).
Il y a un seul Pad dans le Body, donc je ne comprends pas l'histoire des Pad qui s'empilent et tout ça.
Tu peux donner une petite procédure à reproduire pour voir le problème ?
Sinon en commentaires sur la forme :
Je ne comprends pas trop le problème. Quand je lance ta macro, ça me crée un seul pignon (effectivement à l'origine).
Il y a un seul Pad dans le Body, donc je ne comprends pas l'histoire des Pad qui s'empilent et tout ça.
Tu peux donner une petite procédure à reproduire pour voir le problème ?
Sinon en commentaires sur la forme :
- Ce serait mieux si la barre de progression était en bas (juste en dessous où au dessus des boutons. Idéalement même la masquer quand elle ne sert à rien.
- Je ne comprends pas trop parce que dans le fichier généré il y a un Part container nommé "Pièce" mais il est vide et ne sert donc à rien.
Re: Gestion d'une fenetre et des variables destinées au dessin
Si on lance la macro plusieurs fois la case du CheckBox non cochée les poulies devraient se superposer.
La case du CheckBox cochée on crée plusieurs Body qui peuvent contenir une ou plusieurs poulies superposées.
Le problème est quand on lance plusieurs fois la macro la case du CheckBox non cochée.
Le Part contient un ou plusieurs Body qui peuvent contenir une ou plusieurs poulies.
Pour la barre de progression je dois encore faire des recherches je n'ai pas encore trouvé comment positionner les composants sur la fenetre, la je n'ai rien paramétré.
Ce qui devrait etre fait par la macro
La case du CheckBox cochée on crée plusieurs Body qui peuvent contenir une ou plusieurs poulies superposées.
Le problème est quand on lance plusieurs fois la macro la case du CheckBox non cochée.
Le Part contient un ou plusieurs Body qui peuvent contenir une ou plusieurs poulies.
Pour la barre de progression je dois encore faire des recherches je n'ai pas encore trouvé comment positionner les composants sur la fenetre, la je n'ai rien paramétré.
Ce qui devrait etre fait par la macro
Re: Gestion d'une fenetre et des variables destinées au dessin
Désolé blonblon mais ça va être plus compliqué pour t'aider que juste revoir du code.
Qu'est ce que tu voudrais que ça fasse fonctionnellement ? (Typiquement qu'est-ce que tu entends par "superposer").
Comment est-ce que tu avais prévu ça dans ton code ? (Ce serait pas mal d'ajouter des commentaires dans la macro)
Qu'est ce que tu voudrais que ça fasse fonctionnellement ? (Typiquement qu'est-ce que tu entends par "superposer").
Comment est-ce que tu avais prévu ça dans ton code ? (Ce serait pas mal d'ajouter des commentaires dans la macro)
Re: Gestion d'une fenetre et des variables destinées au dessin
Je tente de faire ceci, mais qui n'est pas limité à trois pignons.
Mais les pignons ne se superposent pas, il y a quelque chose qui m'échappe avec la position sur l'axe Z des pignons
Mais les pignons ne se superposent pas, il y a quelque chose qui m'échappe avec la position sur l'axe Z des pignons
Re: Gestion d'une fenetre et des variables destinées au dessin
Pas simple. Quelques réflexions en vrac :
- Est-ce que ce ne serait pas mieux de gérer ça avec des extrusions Part, plutôt que des fonctions PartDesign ?
- Voire le truc ultime, ce serait de créer un nouveau type de pièce Part (du genre Gear) qui aurait comme propriétés le type de poulie, le nombre de dents, ... Ca ce serait la classe
- Dans un 1er temps pour faire simple, ce que je ferai c'est une interface graphique à 3 boutons : "Quitter", "Créer" et "Créer et continuer". Les 2 1ers boutons seraient les "Annuler" et "OK" d'aujourd'hui, le 3ème permettrait justement de créer des trains de pignons en ne fermant pas la fenêtre mais en enchainant sur les pignons précédents.
- Ce serait peut-être mieux si ta fenêtre graphique dérivait de QDockWidget -- quitte à désactiver le docking --. Ca permetttrait de continuer à pouvoir faire tourner la vue 3D pendant qu'on se sert de la macro.
C'était quoi le principe et la(les) variable(s) que tu avais prévu dans le code pour faire ça ?Mais les pignons ne se superposent pas, il y a quelque chose qui m'échappe avec la position sur l'axe Z des pignons
Re: Gestion d'une fenetre et des variables destinées au dessin
Je travaille essentiellement avec PartDesign, je maitrise mal Part, quels outils utiliser pour créer une poulie.Est-ce que ce ne serait pas mieux de gérer ça avec des extrusions Part, plutôt que des fonctions PartDesign ?
Créer un outil, j'ai consulte les sources de FcGear, c'est je pense au dessus de mes compétences.Voire le truc ultime, ce serait de créer un nouveau type de pièce Part (du genre Gear) qui aurait comme propriétés le type de poulie, le nombre de dents, ... Ca ce serait la classe
Ou trouver de la documentation QDockWidget pour FreeCad.Dans un 1er temps pour faire simple, ce que je ferai c'est une interface graphique à 3 boutons : "Quitter", "Créer" et "Créer et continuer". Les 2 1ers boutons seraient les "Annuler" et "OK" d'aujourd'hui, le 3ème permettrait justement de créer des trains de pignons en ne fermant pas la fenêtre mais en enchainant sur les pignons précédents.
Ce serait peut-être mieux si ta fenêtre graphique dérivait de QDockWidget -- quitte à désactiver le docking --. Ca permetttrait de continuer à pouvoir faire tourner la vue 3D pendant qu'on se sert de la macro.
J'ai tente de récupérer la position d'un pignon sur l'axe Z, en fait je ne récupére que sa hauteurC'était quoi le principe et la(les) variable(s) que tu avais prévu dans le code pour faire ça ?
Re: Gestion d'une fenetre et des variables destinées au dessin
Tu crées ton sketch de la même façon sauf que tu n'as pas besoin de le mapper sur quelque chose (déjà c'est plus simple). Et tu n'as pas besoin de la mettre dans un Body (encore plus simple). Tu joues éventuellement avec son "Placement" pour le positionner.
Ensuite tu fais juste une extrusion (Part Extrude) de ton sketch (ça fera grosso modo la même chose qu'un pad de PartDesign).
Et voilà c'est fini.
Autre avantage quand tu crées un 2ème, ... objet, pas besoin de s'occuper que ça touche ou pas le solide déjà existant.
Je suis d'accord que c'est un sacré boulot. Surtout que du coup tu te retrouves probablement à coder en C++.Créer un outil, j'ai consulte les sources de FcGear, c'est je pense au dessus de mes compétences.
QDockWidget n'est pas spécifique à FC. C'est simplement un type de fenêtre fourni par Qt.Ou trouver de la documentation QDockWidget pour FreeCad.
De manière ultra simplifiée, l'idée c'est juste de remplacer
Code: Select all
dialog = QtGui.QDialog()
Code: Select all
dialog = QtGui.QDockWidget()
Si tu veux une doc complète des fonctions : https://doc.qt.io/qt-5/qdockwidget-members.html
Si tu veux un exemple, tu peux regarder cette macro (notamment à partir de la ligne pointée) mais c'est un peu différent car j'avais créé une classe dérivée. Ceci dit ça ne change rien au code de mise en place de l'interface.
C'est encore un peu mystérieux. Je regarderai le code. Tu peux me donner le nom de la variable ?J'ai tente de récupérer la position d'un pignon sur l'axe Z, en fait je ne récupére que sa hauteur
Re: Gestion d'une fenetre et des variables destinées au dessin
J'ai regardé du coté de l'outil Part, j'extrude un cylindre, j'extrude une dent, je fais une soustraction boléenne, là je crée une dent.
Comment faire une répétition circulaire à partir de l'outil Part.
Comment faire une répétition circulaire à partir de l'outil Part.