def METHOD_NAME(self, obj):
    """This method is run when the object is created or recomputed."""
    if self.props_changed_placement_only():
        obj.positionBySupport()
        self.props_changed_clear()
        return
    import Part
    if (obj.Length.Value == 0) or (obj.Height.Value == 0):
        obj.positionBySupport()
        return
    plm = obj.Placement
    shape = None
    if hasattr(obj,"Rows") and hasattr(obj,"Columns"):
        # TODO: verify if this is needed:
        if obj.Rows > 1:
            rows = obj.Rows
        else:
            rows = 1
        if obj.Columns > 1:
            columns = obj.Columns
        else:
            columns = 1
        # TODO: till here
        if (rows > 1) or (columns > 1):
            shapes = []
            l = obj.Length.Value/columns
            h = obj.Height.Value/rows
            for i in range(columns):
                for j in range(rows):
                    p1 = App.Vector(i*l,j*h,0)
                    p2 = App.Vector(p1.x+l,p1.y,p1.z)
                    p3 = App.Vector(p1.x+l,p1.y+h,p1.z)
                    p4 = App.Vector(p1.x,p1.y+h,p1.z)
                    p = Part.makePolygon([p1,p2,p3,p4,p1])
                    if "ChamferSize" in obj.PropertiesList:
                        if obj.ChamferSize.Value != 0:
                            w = DraftGeomUtils.filletWire(p,
                                                          obj.ChamferSize.Value,
                                                          chamfer=True)
                            if w:
                                p = w
                    if "FilletRadius" in obj.PropertiesList:
                        if obj.FilletRadius.Value != 0:
                            w = DraftGeomUtils.filletWire(p,
                                                          obj.FilletRadius.Value)
                            if w:
                                p = w
                    if hasattr(obj,"MakeFace"):
                        if obj.MakeFace:
                            p = Part.Face(p)
                    shapes.append(p)
            if shapes:
                shape = Part.makeCompound(shapes)
    if not shape:
        p1 = App.Vector(0,0,0)
        p2 = App.Vector(p1.x+obj.Length.Value,
                        p1.y,
                        p1.z)
        p3 = App.Vector(p1.x+obj.Length.Value,
                        p1.y+obj.Height.Value,
                        p1.z)
        p4 = App.Vector(p1.x,
                        p1.y+obj.Height.Value,
                        p1.z)
        shape = Part.makePolygon([p1, p2, p3, p4, p1])
        if "ChamferSize" in obj.PropertiesList:
            if obj.ChamferSize.Value != 0:
                w = DraftGeomUtils.filletWire(shape,
                                              obj.ChamferSize.Value,
                                              chamfer=True)
                if w:
                    shape = w
        if "FilletRadius" in obj.PropertiesList:
            if obj.FilletRadius.Value != 0:
                w = DraftGeomUtils.filletWire(shape,
                                              obj.FilletRadius.Value)
                if w:
                    shape = w
        if hasattr(obj,"MakeFace"):
            if obj.MakeFace:
                shape = Part.Face(shape)
        else:
            shape = Part.Face(shape)
    obj.Shape = shape
    if hasattr(obj,"Area") and hasattr(shape,"Area"):
        obj.Area = shape.Area
    obj.Placement = plm
    obj.positionBySupport()
    self.props_changed_clear()