Macro Corner shapes wizard/es: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 2: Line 2:


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.<br />
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.<br />
There is a [https://sourceforge.net/apps/mediawiki/free-cad/index.php?title=Macro_Corner_shapes_wizard/update| modified version] with changes GUI.
There is a [http://www.freecadweb.org/wiki/index.php?title=Macro_Corner_shapes_wizard/update| modified version] with changes GUI.





Revision as of 17:12, 1 January 2014

File:Text-x-python Corner shapes wizard

Description
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.

Author: Nicotuf
Author
Nicotuf
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
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()