Macro Corner shapes wizard

From FreeCAD Documentation
Revision as of 17:21, 1 January 2014 by Renatorivo (talk | contribs) (Created page with "{{Macro/fr|Icon=Text-x-python|Name=Corner shapes wizard|Name/fr=Corner shapes wizard|Description=Cette macro est une application complète, il ouvre une boîte de dialogue dem...")

File:Text-x-python Corner shapes wizard

Description
Cette macro est une application complète, il ouvre une boîte de dialogue demandant les dimensions angulaires de votre pièce, puis crée l'objet dans le document, et, crée une page avec les vues, de dessus, de face et latérale de la pièce.

Auteur: Nicotuf
Auteur
Nicotuf
Téléchargement
None
Liens
Version Macro
1.0
Dernière modification
None
Version(s) FreeCAD
None
Raccourci clavier
None
Voir aussi
None

This macro is a complete application, it pops up a dialog asking for the dimensions of your corner piece, then creates the object in the document and creates a page view with top, front and lateral views of the piece.
There is a modified version with changes GUI.


    # -*- coding:utf-8 -*-
 
    #####################################
    # Importation de fonctions externes :
 
    #from os import *
    import FreeCAD, FreeCADGui, Part, Draft, math, MeshPart, Mesh, Drawing
    from PyQt4 import QtGui,QtCore
    from FreeCAD import Base
    App=FreeCAD
    Gui=FreeCADGui
 
    ##################################
    # Défnition Class :
 
    class Corniere:
       def __init__(self, obj):
          obj.addProperty("App::PropertyLength","L1","Corniere","Largeur 1").L1=20.0
          obj.addProperty("App::PropertyLength","L2","Corniere","Largeur 2").L2=20.0
          obj.addProperty("App::PropertyLength","e1","Corniere","Epaisseur 1").e1=2.0
          #obj.addProperty("App::PropertyLength","e2","Corniere","Epaisseur 2").e2=2.0
          obj.addProperty("App::PropertyLength","Longueur","Corniere","Longueur").Longueur=200.0
          obj.Proxy = self
 
       def execute(self, fp):
          P1=Base.Vector(fp.e1,fp.e1,0)
          S1=Part.makeBox(fp.L1,fp.L2,fp.Longueur)
          S2=Part.makeBox(fp.L1-fp.e1,fp.L2-fp.e1,fp.Longueur,P1)
          fp.Shape=S1.cut(S2)   
 
    ##################################
    # Défnition locale de fonctions :
 
 
    def proceed():
       QtGui.qApp.setOverrideCursor(QtCore.Qt.WaitCursor)
 
       if FreeCAD.ActiveDocument==None:
          FreeCAD.newDocument("Corniere")
 
       oldDocumentObjects=App.ActiveDocument.Objects
 
       try:
          QL1 = float(l1.text())   
          QL2 = float(l2.text())
          Qe = float(l3.text())
          QLongueur = float(l4.text())
       except:
          FreeCAD.Console.PrintError("Wrong input! Only numbers allowed...\n")
 
       Cor=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Corniere")
       Corniere(Cor)
       Cor.ViewObject.Proxy=0
       Cor.L1=QL1
       Cor.L2=QL2
       Cor.e1=Qe
       Cor.Longueur=QLongueur
 
       App.ActiveDocument.recompute()
       Gui.SendMsgToActiveView("ViewFit")
 
       QtGui.qApp.restoreOverrideCursor()
       
       Plan(Cor)
       
       dialog.hide()
 
    def hide():
 
       dialog.hide()
 
    def Plan(obj):
 
       ObjetProjete=obj.Shape
 
       TailleX=ObjetProjete.BoundBox.XLength
       TailleY=ObjetProjete.BoundBox.YLength
       TailleZ=ObjetProjete.BoundBox.ZLength
 
       page = App.activeDocument().addObject('Drawing::FeaturePage','Page')
       page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'   
       vueprofil = App.activeDocument().addObject('Drawing::FeatureViewPart','VueProfil')
       vueprofil.Source = obj
       vueprofil.Direction = (0.0,0.0,1.0)
       vueprofil.Scale = 1.0
       vueprofil.X = 50.0
       vueprofil.Y = 50.0
       page.addObject(vueprofil)
 
       vuegauche = App.activeDocument().addObject('Drawing::FeatureViewPart','Vuegauche')
       vuegauche.Source = obj
       vuegauche.Direction = (-1.0,0.0,0.0)
       vuegauche.ShowHiddenLines = True
       vuegauche.Scale = 1.0
       vuegauche.Rotation = 180.0
       vuegauche.X = 50.0+TailleX/2+TailleX
       vuegauche.Y = 50.0
       page.addObject(vuegauche)
 
       vuedessus = App.activeDocument().addObject('Drawing::FeatureViewPart','Vuedessus')
       vuedessus.Source = obj
       vuedessus.Direction = (0.0,-1.0,0.0)
       vuedessus.ShowHiddenLines = True
       vuedessus.Scale = 1.0
       vuedessus.Rotation = 180.0
       vuedessus.X = 50.0+TailleX/2+TailleX
       vuedessus.Y = 50.0+TailleX/2+TailleY+TailleX
       page.addObject(vuedessus)
 
       vueiso = App.activeDocument().addObject('Drawing::FeatureViewPart','VueIso')
       vueiso.Source = obj
       vueiso.Direction = (-1.0,-1.0,0.5)
       vueiso.Scale = 1.0
       vueiso.ShowSmoothLines = True
       vueiso.X = TailleZ+TailleX/2
       vueiso.Y = 7*TailleZ+3*TailleY
       page.addObject(vueiso)
       
 
       App.activeDocument().recompute()
 
       PageFile = open(page.PageResult,'r')
       OutFile = open('temp.svg','w')
       OutFile.write(PageFile.read())
       del OutFile,PageFile
       
 
    dialog = QtGui.QDialog()
    dialog.resize(200,200)
    dialog.setWindowTitle("Corniere")
    la = QtGui.QVBoxLayout(dialog)
 
    e1 = QtGui.QLabel("Dimensions de la corniere")
    commentFont=QtGui.QFont("Arial",10,True)
    e1.setFont(commentFont)
    la.addWidget(e1)
 
    t1 = QtGui.QLabel("L1")
    la.addWidget(t1)
    l1 = QtGui.QLineEdit()
    l1.setText("20")
    la.addWidget(l1)
 
    t2 = QtGui.QLabel("L2")
    la.addWidget(t2)
    l2 = QtGui.QLineEdit()
    l2.setText("20")
    la.addWidget(l2)
 
    t3 = QtGui.QLabel("e")
    la.addWidget(t3)
    l3 = QtGui.QLineEdit()
    l3.setText("2")
    la.addWidget(l3)
 
    t4 = QtGui.QLabel("Longueur")
    la.addWidget(t4)
    l4 = QtGui.QLineEdit()
    l4.setText("300")
    la.addWidget(l4)
 
    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()"), hide)
    QtCore.QMetaObject.connectSlotsByName(dialog)
    dialog.show()
Other languages: