Makro pro vytvoření rohového dílu

From FreeCAD Documentation
Revision as of 17:59, 4 February 2014 by Honza32 (talk | contribs)
Jump to: navigation, search

32px Corner shapes wizard

Description
Toto makro je kompletní aplikace, vytvoří vyskakovací dailog pro zadání rozměrů rohového dílu, potom vytvoří objekt v dokumentu a vytvoří stránku s pohledem na díl shora, zepředu a z boku.

Author
Nicotuf
Download
None
Links
Macro Version
1.0
Date last modification
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None


Toto makro je kompletní aplikace, vytvoří vyskakovací dailog pro zadání rozměrů rohového dílu, potom vytvoří objekt v dokumentu a vytvoří stránku s pohledem na díl shora, zepředu a z boku.
Na této stránce je modifikovaná verze se změnami 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:
čeština • ‎Deutsch • ‎English • ‎español • ‎français • ‎italiano