Macro Airfoil Import & Scale/cs

Popis
Toto makro při spuštění nejprve poskytne uživateli souborový prohlížeč, který vyhledá a vybere textový soubor profilu dat .dat. Po zvolení se zadá délka akordů a po stisknutí tlačítka OK se vytvoří správně měřítko profilu. K dispozici jsou zde dvě verze. Verze 1.5 by měla pracovat na verzích FreeCADu, 0.13 stabilních i všech verzích 0.14. Verze 2 by měla být použita pouze s verzemi FreeCAD rovnajícími se nebo vyššími než 0.14 3077 a bude fungovat nejlépe s verzemi vytvořenými s verzemi OCE / OCC verze 6.7 nebo vyšší.

See also Common Airfoil Data Import



Vyberte soubor
Spuštění makra nejprve zobrazí uživateli prohlížeč souborů, který vám umožní vybrat požadovaný soubor datového souboru. Projděte si, kam jste uložili soubor profilu, vyberte jej a stiskněte Otevřít.



Zadejte délku chordu
Po výběru souboru profilu se objeví nové dialogové okno s žádostí o délku akordů. Může být zadána libovolná délka, v milimetrech. Po zadání požadované délky vytvoří makro předběžný vodič (DWire) podle bodů popsaných v dříve vybraném souboru profilu .dat v měřítku, které jste zadali pro délku akordy.



Křídlový profil, správně měřítko, by nyní měl být ve vašem projektu připraven k použití.

Jak používat - verze 2
Volba souboru je stejná jako verze 1.5. S verzí 2 máte nyní možnost mít buď výsledný profil vytvořený pomocí DWire nebo Basic Spline (BSpline). Stejně jako u verze 1.5 zadáte požadovanou délku. Dále můžete vybrat, který typ fólie chcete. Stačí kliknout na přepínač BSpline nebo nechat jako výchozí DWire.



Latest
The latest version of the macro is to be found at AirfoilImportAndScale.FCMacro but the easiest way to install this macro is through the Addon Manager.

Version 1.5
Macro_Airfoil_Import_&_Scale.FCMacro

Úprava výchozího výběru
Pokud si přejete, aby vaše importované a zmenšené profilové lišty byly vytvořeny s BSplines spíše než s DWires, Marco může být předem nastaven na Bspline. To se provádí úpravou řádku -

- a změnu -

Poznámka k tomuto je obsažena v textu makra.

Version 2

 * 1) AIRFOIL IMPORT & SCALE v2.
 * 2) Imports and scales an Airfoil in the form of a Draft Wire (DWire) or Basic Spline (BSpline)
 * 3) For FreeCAD Versions = or > 0.14 Revision 3077
 * 4) Works best with OCC/OCE = or > 6.7
 * 1) Imports and scales an Airfoil in the form of a Draft Wire (DWire) or Basic Spline (BSpline)
 * 2) For FreeCAD Versions = or > 0.14 Revision 3077
 * 3) Works best with OCC/OCE = or > 6.7
 * 1) Works best with OCC/OCE = or > 6.7
 * 1) 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


 * 1) Select .dat airfoil data file to be imported

filename = QtGui.QFileDialog.getOpenFileName(QtGui.qApp.activeWindow,'Open An Airfoil File','*.dat')

class p:

def proceed(self): if self.radio1.isChecked: try: # This produces a scaled Airfoil with a DWire

scalefactor=float(self.s1.text) f1=str(filename) importAirfoilDAT.insert(f1,"Unnamed") Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True) except: 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) f1=str(filename) importAirfoilDAT.insert(f1,"Unnamed") points = FreeCAD.ActiveDocument.ActiveObject.Points Draft.makeBSpline(points, closed=True) Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True) App.getDocument("Unnamed").removeObject("DWire")

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("Chord Length") la.addWidget(t1) self.s1 = QtGui.QLineEdit la.addWidget(self.s1)

# 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

Version 2.1
Updated by mangtronix to use PySide instead of PyQt (used in older versions of FreeCAD) from PySide import QtCore, QtGui from PySide.QtGui import QLineEdit, QRadioButton import FreeCAD, FreeCADGui, Draft import importAirfoilDAT filename, filefilter = QtGui.QFileDialog.getOpenFileName(QtGui.qApp.activeWindow,'Open An Airfoil File','*.dat')
 * 1) AIRFOIL IMPORT & SCALE v2.1
 * 2) Imports and scales an Airfoil in the form of a Draft Wire (DWire) or Basic Spline (BSpline)
 * 3) For FreeCAD Versions = or > 0.14 Revision 3703
 * 4) Works best with OCC/OCE = or > 6.7
 * 1) Imports and scales an Airfoil in the form of a Draft Wire (DWire) or Basic Spline (BSpline)
 * 2) For FreeCAD Versions = or > 0.14 Revision 3703
 * 3) Works best with OCC/OCE = or > 6.7
 * 1) Works best with OCC/OCE = or > 6.7
 * 1) Works best with OCC/OCE = or > 6.7
 * 1) Select .dat airfoil data file to be imported
 * 1) PySide returns a tuple (filename, filter) instead of just a string like in PyQt

class p: def proceed(self): global filename if self.radio1.isChecked: #if True: try: # This produces a scaled Airfoil with a DWire scalefactor=float(self.s1.text) f1=str(filename) importAirfoilDAT.insert(f1,"Unnamed") 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) f1=str(filename) importAirfoilDAT.insert(f1,"Unnamed") points = FreeCAD.ActiveDocument.ActiveObject.Points Draft.makeBSpline(points, closed=True) Draft.scale(App.ActiveDocument.ActiveObject,delta=App.Vector(scalefactor,scalefactor,scalefactor),center=App.Vector(0,0,0),legacy=True) App.getDocument("Unnamed").removeObject("DWire") 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("Chord Length") la.addWidget(t1) self.s1 = QtGui.QLineEdit la.addWidget(self.s1) # 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

Odkaz
Diskuse o Forum

UIUC Applied Aerodynamics Group Departement of Aerospace Engineering