diff --git a/src/Mod/Draft/draftguitools/gui_pointarray.py b/src/Mod/Draft/draftguitools/gui_pointarray.py index c93eb3af1c..659a15e597 100644 --- a/src/Mod/Draft/draftguitools/gui_pointarray.py +++ b/src/Mod/Draft/draftguitools/gui_pointarray.py @@ -111,12 +111,14 @@ class PointArray(gui_base_original.Modifier): else: base_object = sel[0].Object point_object = sel[1].Object + extra = None Gui.addModule('Draft') _cmd = "Draft.make_point_array" _cmd += "(" _cmd += "App.ActiveDocument." + base_object.Name + ", " _cmd += "App.ActiveDocument." + point_object.Name + ", " + _cmd += "extra=" + str(extra) _cmd += ")" _cmd_list = ["_obj_ = " + _cmd, diff --git a/src/Mod/Draft/draftmake/make_pointarray.py b/src/Mod/Draft/draftmake/make_pointarray.py index d490afdb11..3335f6d76f 100644 --- a/src/Mod/Draft/draftmake/make_pointarray.py +++ b/src/Mod/Draft/draftmake/make_pointarray.py @@ -45,7 +45,7 @@ if App.GuiUp: from draftviewproviders.view_array import ViewProviderDraftArray -def make_point_array(base_object, point_object): +def make_point_array(base_object, point_object, extra=None): """Make a Draft PointArray object. Distribute copies of a `base_object` in the points @@ -81,6 +81,13 @@ def make_point_array(base_object, point_object): behaves essentially the same as a `Part::Compound`. It must contain at least a point or vertex object. + extra: Base::Placement, Base::Vector3, or Base::Rotation, optional + It defaults to `None`. + If it is provided, it is an additional placement that is applied + to each copy of the array. + The input could be a full placement, just a vector indicating + the additional translation, or just a rotation. + Returns ------- Part::FeaturePython @@ -126,10 +133,30 @@ def make_point_array(base_object, point_object): "'Geometry', 'Links', or 'Components'.")) return None + _msg("extra: {}".format(extra)) + if not extra: + extra = App.Placement() + try: + utils.type_check([(extra, (App.Placement, + App.Vector, + App.Rotation))], + name=_name) + except TypeError: + _err(_tr("Wrong input: must be a placement, a vector, " + "or a rotation.")) + return None + + # Convert the vector or rotation to a full placement + if isinstance(extra, App.Vector): + extra = App.Placement(extra, App.Rotation()) + elif isinstance(extra, App.Rotation): + extra = App.Placement(App.Vector(), extra) + new_obj = doc.addObject("Part::FeaturePython", "PointArray") PointArray(new_obj) new_obj.Base = base_object - new_obj.PointList = point_object + new_obj.PointObject = point_object + new_obj.ExtraPlacement = extra if App.GuiUp: ViewProviderDraftArray(new_obj.ViewObject)