Difficultes pour modifier la macro airfoil import vers freecad 0.17
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Difficultes pour modifier la macro airfoil import vers freecad 0.17
OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.13344 (Git)
Build type: Release
Branch: master
Hash: 404452d6ee925b9c5504b58b65c7934e411bbe62
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.1.0
Locale: French/France (fr_FR)
Bonsoir je cherche à modifier le code de la macro airfoil import prévu pour la version 0.16, si je lance la macro sur la version 0.17 après avoir fait nouveau et part un nouveau fichier unnamed est crée, j'ai le code de airfoil et j'ai le code de la console crée en faisant un import, je ne comprend pas trop ou et quoi insérer du code a modifier.
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.13344 (Git)
Build type: Release
Branch: master
Hash: 404452d6ee925b9c5504b58b65c7934e411bbe62
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.1.0
Locale: French/France (fr_FR)
Bonsoir je cherche à modifier le code de la macro airfoil import prévu pour la version 0.16, si je lance la macro sur la version 0.17 après avoir fait nouveau et part un nouveau fichier unnamed est crée, j'ai le code de airfoil et j'ai le code de la console crée en faisant un import, je ne comprend pas trop ou et quoi insérer du code a modifier.
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Ce code minimal fonctionne, je ne sais pas encore comment l'integrer
Gui.activateWorkbench("PartDesignWorkbench")
App.newDocument("Sans nom")
App.setActiveDocument("Sans_nom")
App.ActiveDocument=App.getDocument("Sans_nom")
Gui.ActiveDocument=Gui.getDocument("Sans_nom")
App.activeDocument().Tip = App.activeDocument().addObject('App::Part','Part')
App.activeDocument().Part.Label = 'Part'
Gui.activeView().setActiveObject('part', App.activeDocument().Part)
App.ActiveDocument.recompute()
App.activeDocument().addObject('PartDesign::Body','Body')
import PartDesignGui
Gui.activeView().setActiveObject('pdbody', App.activeDocument().Body)
Gui.Selection.clearSelection()
Gui.Selection.addSelection(App.ActiveDocument.Body)
App.activeDocument().Part.addObject(App.ActiveDocument.Body)
App.ActiveDocument.recompute()
import importAirfoilDAT
importAirfoilDAT.insert(u"C:/Users/Acer/Documents/PreDim/PredimRC_V2.58f/dat/AG03.dat","Sans_nom")
Gui.SendMsgToActiveView("ViewFit")
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
J'ai commencé à modifier pour la version 0.17, je crée le part et le body.
avec la courbe splines si on veut que le profil soit respecté il faut modifier closed et make face, par contre la courbe n'est pas fermée il suffit pour cela de joindre deux points par un ligne mais je ne sais pas récupérer les deux points a joindre, j'ai vu que la variable points renvoyait un tableau de vertex dans ce tableau il me faudrait récupérer la premiére et la derniére coordonnées je n'y suis pas arrivé
le fichier
avec la courbe splines si on veut que le profil soit respecté il faut modifier closed et make face, par contre la courbe n'est pas fermée il suffit pour cela de joindre deux points par un ligne mais je ne sais pas récupérer les deux points a joindre, j'ai vu que la variable points renvoyait un tableau de vertex dans ce tableau il me faudrait récupérer la premiére et la derniére coordonnées je n'y suis pas arrivé
le fichier
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
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.
My macros on Gist.github here complete macros Wiki and forum.
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Merci mario52
Je vais regarder et essayer de récupérer les coordonnées des points.
Je vais regarder et essayer de récupérer les coordonnées des points.
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Je n'arrive pas à récupérer les coordonnées
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Bonjour
pour la première coordonnée du tableau faites
pour la dernière coordonnée,
(en admettant que le tableau s'appelle points[])
mario
pour la première coordonnée du tableau faites
Code: Select all
points[0]
Code: Select all
points[-1]
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.
My macros on Gist.github here complete macros Wiki and forum.
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Merci mario52
Grace à toi j'ai réussi à tracer ma ligne et à la redimensionner, par contre je n'arrive pas à fusionner le Bspline et la Ligne par code alors que cela fonctionne manuellement.
Je poste le code, pour tester il n'est utile que de renseigner la première ligne Corde Emplanture et le bouton Make BSpline, les autres données ne sont pas utilisées dans le code pour l'instant.
Le code
Grace à toi j'ai réussi à tracer ma ligne et à la redimensionner, par contre je n'arrive pas à fusionner le Bspline et la Ligne par code alors que cela fonctionne manuellement.
Je poste le code, pour tester il n'est utile que de renseigner la première ligne Corde Emplanture et le bouton Make BSpline, les autres données ne sont pas utilisées dans le code pour l'instant.
Le code
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Bonjour
votre code modifié
pour upgrade il faut un tableau:
mario
votre code modifié
Code: Select all
### -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# # # #
#
# AIRFOIL IMPORT & SCALE v2.1
#
# Imports and scales an Airfoil in the form of a Draft Wire (DWire) or Basic Spline (BSpline)
#
# For FreeCAD Versions = 0.17
#
# Works best with OCC/OCE = or > 6.7
#
# # # #
from PySide import QtCore, QtGui
from PySide.QtGui import QLineEdit, QRadioButton
import FreeCAD, FreeCADGui, Draft
import importAirfoilDAT
import PartDesignGui
# Select .dat airfoil data file to be imported
# PySide returns a tuple (filename, filter) instead of just a string like in PyQt
filename, filefilter = QtGui.QFileDialog.getOpenFileName(QtGui.qApp.activeWindow(),'Open An Airfoil File',u'C:/Users/Acer/Documents/PreDim/PredimRC_V2.58f/dat/','*.dat')
class p():
def proceed(self):
global filename
Gui.activateWorkbench("PartDesignWorkbench")
# App.newDocument("Sans_nom")
#####################################
monDocument = App.newDocument("Sans_nom") # utiliser une variable et utilisez la dans votre code
#####################################
# App.setActiveDocument("Sans_nom")
# App.ActiveDocument=App.getDocument("Sans_nom")
# Gui.ActiveDocument=Gui.getDocument("Sans_nom")
# App.activeDocument().Tip = App.activeDocument().addObject('App::Part','Part')
#####################################
monDocument.Tip = App.activeDocument().addObject('App::Part','Part') # exemple d'utilisation de la variable "monDocument"
monDocument.Part.Label = 'Part'
#####################################
# App.activeDocument().Part.Label = 'Part'
Gui.activeView().setActiveObject('part', App.activeDocument().Part)
App.ActiveDocument.recompute()
App.activeDocument().addObject('PartDesign::Body','Body')
Gui.activeView().setActiveObject('pdbody', App.activeDocument().Body)
Gui.Selection.clearSelection()
Gui.Selection.addSelection(App.ActiveDocument.Body)
App.activeDocument().Part.addObject(App.ActiveDocument.Body)
App.ActiveDocument.recompute()
importAirfoilDAT.insert(filename,"Sans_nom")
Gui.SendMsgToActiveView("ViewFit")
if self.radio1.isChecked():
#if True:
try:
# This produces a scaled Airfoil with a DWire
scalefactor=float(self.s1.text())
Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True)
except Exception, e:
FreeCAD.Console.PrintError("Error, not a valid .dat file\n")
self.close()
if self.radio2.isChecked():
try:
# This produces a scaled Airfoil with a BSpline
scalefactor=float(self.s1.text())
points = FreeCAD.ActiveDocument.ActiveObject.Points
Draft.makeBSpline(points, closed=False)
# Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True)
#################### utilisation d'une variable pour l'utiliser plus bas dans "Upgrade"
maSpline = Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True)
####################
App.getDocument("Sans_nom").removeObject("DWire")
FreeCAD.getDocument("Sans_nom").getObject("BSpline").MakeFace = False
App.getDocument("Sans_nom").recompute()
points=[FreeCAD.Vector(points[-1]*scalefactor),FreeCAD.Vector(points[0]*scalefactor)]
line = Draft.makeWire(points,closed=False,face=True,support=None)
Draft.autogroup(line)
# Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True)
#################### utilisation de upgade donnee dans le wiki et mycircle se trouve dans un tableau
#https://www.freecadweb.org/wiki/Draft_Upgrade/fr
#import Draft
#mycircle = Draft.makeCircle(2)
#face1 = Draft.upgrade([mycircle],True)
Draft.upgrade([maSpline, line],delete=True) # donc ici un tableau avec nos deux variables ... ou plus
####################
FreeCAD.ActiveDocument.recompute()
# FreeCAD.Console.PrintMessage(str(points[-1])+"\r\n")
except:
FreeCAD.Console.PrintError("Error, not a valid .dat file\n")
self.close()
def close(self):
self.dialog.hide()
def __init__(self):
self.dialog = None
self.s1 = None
# Make dialog box and get the scale size
self.dialog = QtGui.QDialog()
self.dialog.resize(350,100)
self.dialog.setWindowTitle("Airfoil Import & Scale")
la = QtGui.QVBoxLayout(self.dialog)
t1 = QtGui.QLabel("Corde Emplanture")
la.addWidget(t1)
self.s1 = QtGui.QLineEdit()
la.addWidget(self.s1)
t2 = QtGui.QLabel("Corde Saumon")
la.addWidget(t2)
self.s2 = QtGui.QLineEdit()
la.addWidget(self.s2)
t3 = QtGui.QLabel("Envergure")
la.addWidget(t3)
self.s3 = QtGui.QLineEdit()
la.addWidget(self.s3)
# Add radio buttons to select between DWire and BSpline
self.radio1 = QRadioButton("Make DWire")
self.radio2 = QRadioButton("Make BSpline")
# set default to DWire & make radio buttons - Change self.radio1.setChecked(True) to
# self.radio2.setChecked(True) to set BSpline as default
self.radio1.setChecked(True)
la.addWidget(self.radio1)
la.addWidget(self.radio2)
# Add OK / Cancel buttons
okbox = QtGui.QDialogButtonBox(self.dialog)
okbox.setOrientation(QtCore.Qt.Horizontal)
okbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
la.addWidget(okbox)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("accepted()"), self.proceed)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("rejected()"), self.close)
QtCore.QMetaObject.connectSlotsByName(self.dialog)
self.dialog.show()
self.dialog.exec_()
p()
Code: Select all
Draft.upgrade([maSpline, line],delete=True)
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.
My macros on Gist.github here complete macros Wiki and forum.
Re: Difficultes pour modifier la macro airfoil import vers freecad 0.17
Merci mario52
J'ai encore appris quelque chose, je ne connaissais pas le tableau d'objets.
Si je comprend bien dans la ligne je peux dans la ligne remplacer par et cela partout dans le programme.
J'ai encore appris quelque chose, je ne connaissais pas le tableau d'objets.
Si je comprend bien dans la ligne
Code: Select all
monDocument = App.newDocument("Sans_nom") # utiliser une variable et utilisez la dans votre code
Code: Select all
importAirfoilDAT.insert(filename,"Sans_nom")
Code: Select all
importAirfoilDAT.insert(filename monDocument )