pas tout a fait, ici il faut le nom du document et pas un objet document
Code: Select all
importAirfoilDAT.insert(filename, monDocument.Name)
Code: Select all
importAirfoilDAT.insert(filename, monDocument.Name)
Code: Select all
monDocument = App.newDocument(self.s1.text()) # utiliser une variable et utilisez la dans votre code
et
importAirfoilDAT.insert(filename,monDocument.Name)
Code: Select all
App.getDocument("Sans_nom").removeObject("DWire")
FreeCAD.getDocument("Sans_nom").getObject("BSpline").MakeFace = False
App.getDocument("Sans_nom").recompute()
Code: Select all
FreeCAD.getDocument("Sans_nom").getObject("BSpline").MakeFace = False
Code: Select all
FreeCAD.getDocument(monDocument.Name).getObject("BSpline").MakeFace = False
# ou avec la variable FreeCAD.getDocument(self.s1.text()).getObject("BSpline").MakeFace = False
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
#
#source WEB --- https://aero-modelisme.com/conception-avion-dessiner-profil-d-aile-logiciel-de-dessin-gratuit/
#
# # # #
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(self.s1.text()) # 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,monDocument.Name)
Gui.SendMsgToActiveView("ViewFit")
if self.radio1.isChecked():
#if True:
try:
# This produces a scaled Airfoil with a DWire
scalefactor=float(self.s2.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():
####
# desactive le tray pour voir ou se situe l'erreur
# try:
####
# This produces a scaled Airfoil with a BSpline
scalefactor=float(self.s2.text())
print scalefactor
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(monDocument.Name).removeObject("DWire")
# le document n'est plus "Sans_nom# FreeCAD.getDocument("Sans_nom").getObject("BSpline").MakeFace = False
#################### le document avec son nom
FreeCAD.getDocument(monDocument.Name).getObject("BSpline").MakeFace = False
# ou avec la variable FreeCAD.getDocument(self.s1.text()).getObject("BSpline").MakeFace = False
####################
# ici monDocument est un objet App.getDocument(monDocument).recompute()
#################### le document avec son nom
App.getDocument(monDocument.Name).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
####################
Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True)
FreeCAD.ActiveDocument.recompute()
# FreeCAD.Console.PrintMessage(str(points[-1])+"\r\n")
#### desactive le except pour voir ou se situe l'erreur
# except:
# FreeCAD.Console.PrintError("Error, not a valid .dat file\n")
#
# self.close()
####
self.close() # ligne a effacer apres restutution dee tray ... except
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(u"Nom du tronçon") # ici nom du document !!
la.addWidget(t1)
self.s1 = QtGui.QLineEdit()
la.addWidget(self.s1)
t2 = QtGui.QLabel("Corde Emplanture")
la.addWidget(t2)
self.s2 = QtGui.QLineEdit()
la.addWidget(self.s2)
t3 = QtGui.QLabel("Corde Saumon")
la.addWidget(t3)
self.s3 = QtGui.QLineEdit()
la.addWidget(self.s3)
t4 = QtGui.QLabel("Envergure")
la.addWidget(t4)
self.s4 = QtGui.QLineEdit()
la.addWidget(self.s4)
# 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
### -*- 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
#
#source WEB --- https://aero-modelisme.com/conception-avion-dessiner-profil-d-aile-logiciel-de-dessin-gratuit/
#
# # # #
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
##################################################################################
# mis en bas de la page et cree le test avant d'aller a la procedure principale
#version=FreeCAD.Version()[:2]
#
#if version <> ['0', '17']:
# FreeCAD.Console.PrintMessage(str("erreur")) # ici on va fermer le programme
# reply = QtGui.QMessageBox.information(None,"",u"La macro nécessite FreeCAD 0.17")
## close() #ici il y a une erreur
#print(version)
##################################################################################
# change de place et mis a la ligne 47 a l'interieur de la procedure
#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
filename, filefilter = QtGui.QFileDialog.getOpenFileName(QtGui.qApp.activeWindow(),'Open An Airfoil File',u'C:/Users/Acer/Documents/PreDim/PredimRC_V2.58f/dat/','*.dat')
Gui.activateWorkbench("PartDesignWorkbench")
# App.newDocument("Sans_nom")
#####################################
monDocument = App.newDocument(self.s1.text()) # 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,monDocument.Name)
Gui.SendMsgToActiveView("ViewFit")
if self.radio1.isChecked():
#if True:
try:
# This produces a scaled Airfoil with a DWire
scalefactor=float(self.s2.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():
####
# desactive le tray pour voir ou se situe l'erreur
# try:
####
# This produces a scaled Airfoil with a BSpline
scalefactor=float(self.s2.text())
print scalefactor
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(monDocument.Name).removeObject("DWire")
# le document n'est plus "Sans_nom# FreeCAD.getDocument("Sans_nom").getObject("BSpline").MakeFace = False
#################### le document avec son nom
FreeCAD.getDocument(monDocument.Name).getObject("BSpline").MakeFace = False
# ou avec la variable FreeCAD.getDocument(self.s1.text()).getObject("BSpline").MakeFace = False
####################
# ici monDocument est un objet App.getDocument(monDocument).recompute()
#################### le document avec son nom
App.getDocument(monDocument.Name).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
####################
Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True)
FreeCAD.ActiveDocument.recompute()
# FreeCAD.Console.PrintMessage(str(points[-1])+"\r\n")
#### desactive le except pour voir ou se situe l'erreur
# except:
# FreeCAD.Console.PrintError("Error, not a valid .dat file\n")
#
# self.close()
####
# FreeCAD.Console.PrintMessage(str(version)+"\r\n")
self.close() # ligne a effacer apres restitution des tray ... except
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(u"Nom du tronçon") # ici nom du document !!
la.addWidget(t1)
self.s1 = QtGui.QLineEdit()
la.addWidget(self.s1)
t2 = QtGui.QLabel("Corde Emplanture")
la.addWidget(t2)
self.s2 = QtGui.QLineEdit()
la.addWidget(self.s2)
t3 = QtGui.QLabel("Corde Saumon")
la.addWidget(t3)
self.s3 = QtGui.QLineEdit()
la.addWidget(self.s3)
t4 = QtGui.QLabel("Envergure")
la.addWidget(t4)
self.s4 = QtGui.QLineEdit()
la.addWidget(self.s4)
# 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=FreeCAD.Version()[:2]
if version <> ['0', '17']:
# FreeCAD.Console.PrintMessage(str("erreur" + "\n")) # ici on va fermer le programme
FreeCAD.Console.PrintError(str("erreur" + "\n")) # ici on va fermer le programme affiche en rouge "PrintError" il y a aussi "PrintWarning"... Critical, NoIcon, Question, Information
#https://www.freecadweb.org/wiki/Macro_MessageBox/fr
reply = QtGui.QMessageBox.information(None,"",u"La macro nécessite FreeCAD 0.17")
# self.close() #ici il y a une erreur PS:l'erreur etait due au self qui doit etre defini dans la "def xxx(self)", init....self.maVariable
else:
p()
Code: Select all
Traceback (most recent call last):
File "C:/Users/Default/AppData/Roaming/FreeCAD/airfoil.FCMacro", line 223, in <module>
App.closeDocument(App.ActiveDocument(None))
<type 'exceptions.TypeError'>: 'App.Document' object is not callable
erreur