
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5055 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
#! python
|
|
# -*- coding: utf-8 -*-
|
|
# (c) 2010 Werner Mayer LGPL
|
|
|
|
"""
|
|
An example for a high-level cutsom feature object to make a so called "radial copy".
|
|
"""
|
|
__author__ = "Werner Mayer <wmayer@users.sourceforge.net>"
|
|
|
|
import FreeCAD, FreeCADGui, Part, math
|
|
from PyQt4 import QtGui
|
|
from FreeCAD import Base
|
|
|
|
def makeCopy(shape, radius, angle):
|
|
mat = Base.Matrix()
|
|
mat.rotateZ(math.radians(angle))
|
|
step = int(360.0 / angle)
|
|
shape = shape.copy()
|
|
shape.translate((radius, 0, 0))
|
|
comp = shape.copy()
|
|
for i in range(step):
|
|
shape.transformShape(mat)
|
|
comp = comp.fuse(shape)
|
|
return comp
|
|
|
|
|
|
class RadialCopy:
|
|
def __init__(self, obj):
|
|
obj.addProperty("App::PropertyLength","Radius","","Radius").Radius=10.0
|
|
obj.addProperty("App::PropertyLength","Angle" ,"","Angle").Angle=20.0
|
|
obj.addProperty("App::PropertyLink","Source" ,"","Source shape").Source=None
|
|
obj.Proxy = self
|
|
|
|
# def onChanged(self, fp, prop):
|
|
# if prop == "Angle" or prop == "Radius":
|
|
# self.execute(fp)
|
|
|
|
def execute(self, fp):
|
|
shape = fp.Source.Shape
|
|
radius = fp.Radius
|
|
angle = fp.Angle
|
|
fp.Shape = makeCopy(shape, radius, angle)
|
|
|
|
def makeRadialCopy():
|
|
sel = FreeCADGui.Selection.getSelection()
|
|
try:
|
|
sel = sel[0]
|
|
shape = sel.Shape
|
|
name = sel.Label
|
|
except:
|
|
QtGui.QMessageBox.critical(None,"Wrong selection","Please select a shape object")
|
|
#raise Exception("Nothing selected")
|
|
else:
|
|
doc = sel.Document
|
|
rc = doc.addObject("Part::FeaturePython","RadialCopy")
|
|
rc.Label = name+"(Radial Copy)"
|
|
RadialCopy(rc)
|
|
rc.Source = sel
|
|
rc.ViewObject.Proxy=0
|
|
|