Parallelepiped.py

Go to the documentation of this file.
00001 """
00002 An example for a high-level cutsom feature object to form a full-parametric parallelepiped.
00003 
00004 ***************************************************************************
00005 *   Copyright (c) 2011 Werner Mayer <wmayer[at]users.sourceforge.net>     *
00006 *                                                                         *
00007 *   This file is part of the FreeCAD CAx development system.              *
00008 *                                                                         *
00009 *   This program is free software; you can redistribute it and/or modify  *
00010 *   it under the terms of the GNU General Public License (GPL)            *
00011 *   as published by the Free Software Foundation; either version 2 of     *
00012 *   the License, or (at your option) any later version.                   *
00013 *   for detail see the LICENCE text file.                                 *
00014 *                                                                         *
00015 *   FreeCAD is distributed in the hope that it will be useful,            *
00016 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00017 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00018 *   GNU Library General Public License for more details.                  *
00019 *                                                                         *
00020 *   You should have received a copy of the GNU Library General Public     *
00021 *   License along with FreeCAD; if not, write to the Free Software        *
00022 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
00023 *   USA                                                                   *
00024 *                                                                         *
00025 ***************************************************************************
00026 """
00027 
00028 __author__ = "Werner Mayer <wmayer@users.sourceforge.net>"
00029 
00030 import FreeCAD, Part, math
00031 from FreeCAD import Base
00032 
00033 class Parallelepiped:
00034         def __init__(self, obj):
00035                 ''' Add the properties: Length, Edges, Radius, Height '''
00036                 obj.addProperty("App::PropertyVector","A","Parallelepiped","Vector").A=Base.Vector(1,0,0)
00037                 obj.addProperty("App::PropertyVector","B","Parallelepiped","Vector").B=Base.Vector(0,1,0)
00038                 obj.addProperty("App::PropertyVector","C","Parallelepiped","Vector").C=Base.Vector(0,0,1)
00039                 obj.Proxy = self
00040 
00041         def onChanged(self, fp, prop):
00042                 if prop == "A" or prop == "B" or prop == "C":
00043                         self.execute(fp)
00044 
00045         def execute(self, fp):
00046                 a = fp.A
00047                 b = fp.B
00048                 c = fp.C
00049 
00050                 m=Base.Matrix()
00051                 m.A11=a.x
00052                 m.A12=a.y
00053                 m.A13=a.z
00054                 m.A21=b.x
00055                 m.A22=b.y
00056                 m.A23=b.z
00057                 m.A31=c.x
00058                 m.A32=c.y
00059                 m.A33=c.z
00060                 box = Part.makeBox(1,1,1)
00061                 fp.Shape = box.transformGeometry(m)
00062 
00063 class BoxCylinder:
00064         def __init__(self, obj):
00065                 obj.addProperty("App::PropertyFloat","Length","BoxCylinder","Length").Length=10.0
00066                 obj.addProperty("App::PropertyFloat","Width","BoxCylinder","Width").Width=10.0
00067                 obj.addProperty("App::PropertyLink","Source","BoxCylinder","Source").Source=None
00068                 obj.Proxy = self
00069 
00070         def onChanged(self, fp, prop):
00071                 if prop == "Length" or prop == "Width":
00072                         self.execute(fp)
00073 
00074         def execute(self, fp):
00075                 FreeCAD.Console.PrintMessage(str(fp.Source)+"\n")
00076                 if fp.Source is None:
00077                         return
00078                 r = fp.Source.Radius
00079                 l = fp.Length
00080                 w = fp.Width
00081                 h = 2*r+10
00082                 fp.Shape = Part.makeBox(l,w,h)
00083 
00084 def makeParallelepiped():
00085         doc = FreeCAD.activeDocument()
00086         if doc == None:
00087                 doc = FreeCAD.newDocument()
00088         obj=doc.addObject("Part::FeaturePython","Parallelepiped")
00089         obj.Label = "Parallelepiped"
00090         Parallelepiped(obj)
00091         obj.ViewObject.Proxy=0
00092 
00093 
00094 def makeBoxCylinder():
00095         doc = FreeCAD.activeDocument()
00096         if doc == None:
00097                 doc = FreeCAD.newDocument()
00098         cyl=doc.addObject("Part::Cylinder","Cylinder")
00099         cyl.Radius=16.0
00100         cyl.Height=800.0
00101         obj=doc.addObject("Part::FeaturePython","Box")
00102         BoxCylinder(obj)
00103         obj.Source=cyl
00104         obj.Length=800.0
00105         obj.Width=600.0
00106         obj.ViewObject.Proxy=0
00107         doc.recompute()

Generated on Wed Nov 23 19:00:25 2011 for FreeCAD by  doxygen 1.6.1