Test to create Slab Object.
Code: Select all
"""
Slabs.py
"""
import Part,Draft
import FreeCAD, ArchComponent
from FreeCAD import Base , Vector
from math import cos,sin,radians
class Slab(ArchComponent.Component):
def __init__(self,obj):
ArchComponent.Component.__init__(self,obj)
self.Type = "Slab"
obj.addProperty("App::PropertyLength", "Length", "Slab", "The length of this slab")
obj.addProperty("App::PropertyLength", "Width", "Slab", "The Width of this slab")
obj.addProperty("App::PropertyLength", "Thickness", "Slab", "The Thickness of this slab")
obj.addProperty("App::PropertyFloatList", "OffSet", "Slab", "The List of offset of this slab")
def execute(self,obj):
tu = FreeCAD.Units.parseQuantity
pl = obj.Placement
S = min( obj.Length , obj.Width)
L = max( obj.Length , obj.Width)
t = obj.Thickness
#offSet = [tu('100mm'),tu('100mm'),tu('100mm'),tu('100mm')]
offSet = [tu( '%fmm'%obj.OffSet[0] ) , tu('%fmm'%obj.OffSet[1]),
tu('%fmm'%obj.OffSet[2]),tu('%fmm'%obj.OffSet[3]) ]
shapes =[]
concrete = Part.makeBox(obj.Length-offSet[0]-offSet[2],obj.Width-offSet[1]-offSet[3],obj.Thickness,
FreeCAD.Vector(offSet[3] ,offSet[2] , -obj.Thickness) )
shapes.append (concrete)
shapes.append ( Part.Line( FreeCAD.Vector(offSet[3],offSet[2],0) ,
FreeCAD.Vector(obj.Length-offSet[1] ,obj.Width-offSet[0],0) ).toShape() )
shapes.append ( Part.Line( FreeCAD.Vector(offSet[3],obj.Width-offSet[0],0) ,
FreeCAD.Vector(obj.Length-offSet[1] ,offSet[2] ,0) ).toShape() )
shapes.append ( Part.makeCylinder ( 200 , 4 , Vector(obj.Length/2 , obj.Width/2,3 ) ) )
slabGeom = Part.Compound(shapes)
pl = obj.Placement
slabGeom.Placement = pl
obj.Shape = slabGeom
def makeSlab(length=1000, width=1000 , thickness=80):
doc = FreeCAD.activeDocument()
if doc == None:
doc = FreeCAD.newDocument()
obj=doc.addObject("Part::FeaturePython","Slab") #add object to document
Slab(obj)
obj.Length = length
obj.Width = width
obj.Thickness = thickness
obj.OffSet = [100,100,100,100]
obj.Label = "Slab"
obj.Role = "Slab"
obj.ViewObject.Proxy=0
return obj
if __name__ == "__main__":
TestFlag = 2
if TestFlag==1:
slab01 = makeSlab(4000,4000,100)
if TestFlag==2:
slab01 = makeSlab(4000,4000,100)
slab02 = makeSlab(4000,4000,100)
slab02.Placement.Base.x+= 4000
slab03 = makeSlab(4000,4000,100)
slab03.Placement.Base.y+= 4000
slab04 = makeSlab(2000,4000,100)
slab04.Placement.Base.x+= 4000
slab04.Placement.Base.y+= 4000
slab05 = makeSlab(2000,1500,100)
slab05.Placement.Base.x+= 4000 +2000
slab05.Placement.Base.y+= 4000 +4000-1500
slab06 = makeSlab(2000,4000-1500,100)
slab06.Placement.Base.x+= 4000 +2000
slab06.Placement.Base.y+= 4000
FreeCAD.ActiveDocument.recompute()