Add Draft workbench to .pre-commit-config (#24664)
* Add Draft workbench to .pre-commit-config * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -96,11 +96,11 @@ class TaskPanelCircularArray:
|
||||
self.fuse = params.get_param("Draft_array_fuse")
|
||||
self.use_link = params.get_param("Draft_array_Link")
|
||||
|
||||
self.form.input_c_x.setProperty('rawValue', self.center.x)
|
||||
self.form.input_c_y.setProperty('rawValue', self.center.y)
|
||||
self.form.input_c_z.setProperty('rawValue', self.center.z)
|
||||
self.form.spinbox_r_distance.setProperty('rawValue', self.r_distance)
|
||||
self.form.spinbox_tan_distance.setProperty('rawValue', self.tan_distance)
|
||||
self.form.input_c_x.setProperty("rawValue", self.center.x)
|
||||
self.form.input_c_y.setProperty("rawValue", self.center.y)
|
||||
self.form.input_c_z.setProperty("rawValue", self.center.z)
|
||||
self.form.spinbox_r_distance.setProperty("rawValue", self.r_distance)
|
||||
self.form.spinbox_tan_distance.setProperty("rawValue", self.tan_distance)
|
||||
self.form.spinbox_number.setValue(self.number)
|
||||
self.form.spinbox_symmetry.setValue(self.symmetry)
|
||||
self.form.checkbox_fuse.setChecked(self.fuse)
|
||||
@@ -129,75 +129,77 @@ class TaskPanelCircularArray:
|
||||
self.form.button_reset.clicked.connect(self.reset_point)
|
||||
|
||||
# When the checkbox changes, change the internal value
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
self.form.checkbox_fuse.checkStateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.checkStateChanged.connect(self.set_link)
|
||||
else: # Qt version < 6.7.0
|
||||
else: # Qt version < 6.7.0
|
||||
self.form.checkbox_fuse.stateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.stateChanged.connect(self.set_link)
|
||||
|
||||
|
||||
def accept(self):
|
||||
"""Execute when clicking the OK button or Enter key."""
|
||||
self.selection = Gui.Selection.getSelection()
|
||||
|
||||
(self.r_distance,
|
||||
self.tan_distance) = self.get_distances()
|
||||
(self.r_distance, self.tan_distance) = self.get_distances()
|
||||
|
||||
(self.number,
|
||||
self.symmetry) = self.get_number_symmetry()
|
||||
(self.number, self.symmetry) = self.get_number_symmetry()
|
||||
|
||||
self.axis = self.get_axis()
|
||||
self.center = self.get_center()
|
||||
|
||||
self.valid_input = self.validate_input(self.selection,
|
||||
self.r_distance,
|
||||
self.tan_distance,
|
||||
self.number,
|
||||
self.symmetry,
|
||||
self.axis,
|
||||
self.center)
|
||||
self.valid_input = self.validate_input(
|
||||
self.selection,
|
||||
self.r_distance,
|
||||
self.tan_distance,
|
||||
self.number,
|
||||
self.symmetry,
|
||||
self.axis,
|
||||
self.center,
|
||||
)
|
||||
if self.valid_input:
|
||||
self.create_object()
|
||||
# The internal function already displays messages
|
||||
self.finish()
|
||||
|
||||
def validate_input(self, selection,
|
||||
r_distance, tan_distance,
|
||||
number, symmetry,
|
||||
axis, center):
|
||||
def validate_input(self, selection, r_distance, tan_distance, number, symmetry, axis, center):
|
||||
"""Check that the input is valid.
|
||||
|
||||
Some values may not need to be checked because
|
||||
the interface may not allow one to input wrong data.
|
||||
"""
|
||||
if not selection:
|
||||
_err(translate("draft","At least 1 element must be selected"))
|
||||
_err(translate("draft", "At least 1 element must be selected"))
|
||||
return False
|
||||
|
||||
if number < 2:
|
||||
_err(translate("draft","Number of layers must be at least 2"))
|
||||
_err(translate("draft", "Number of layers must be at least 2"))
|
||||
return False
|
||||
|
||||
# TODO: this should handle multiple objects.
|
||||
# Each of the elements of the selection should be tested.
|
||||
obj = selection[0]
|
||||
if obj.isDerivedFrom("App::FeaturePython"):
|
||||
_err(translate("draft","Selection is not suitable for array"))
|
||||
_err(translate("draft","Object:") + " {}".format(selection[0].Label))
|
||||
_err(translate("draft", "Selection is not suitable for array"))
|
||||
_err(translate("draft", "Object:") + " {}".format(selection[0].Label))
|
||||
return False
|
||||
|
||||
if r_distance == 0:
|
||||
_wrn(translate("draft","Radial distance is zero. Resulting array may not look correct."))
|
||||
_wrn(
|
||||
translate("draft", "Radial distance is zero. Resulting array may not look correct.")
|
||||
)
|
||||
elif r_distance < 0:
|
||||
_wrn(translate("draft","Radial distance is negative. It is made positive to proceed."))
|
||||
_wrn(translate("draft", "Radial distance is negative. It is made positive to proceed."))
|
||||
self.r_distance = abs(r_distance)
|
||||
|
||||
if tan_distance == 0:
|
||||
_err(translate("draft","Tangential distance cannot be 0"))
|
||||
_err(translate("draft", "Tangential distance cannot be 0"))
|
||||
return False
|
||||
elif tan_distance < 0:
|
||||
_wrn(translate("draft","Tangential distance is negative. It is made positive to proceed."))
|
||||
_wrn(
|
||||
translate(
|
||||
"draft", "Tangential distance is negative. It is made positive to proceed."
|
||||
)
|
||||
)
|
||||
self.tan_distance = abs(tan_distance)
|
||||
|
||||
# The other arguments are not tested but they should be present.
|
||||
@@ -246,22 +248,23 @@ class TaskPanelCircularArray:
|
||||
_cmd += "use_link=" + str(self.use_link)
|
||||
_cmd += ")"
|
||||
|
||||
Gui.addModule('Draft')
|
||||
Gui.addModule("Draft")
|
||||
|
||||
_cmd_list = ["_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()"]
|
||||
_cmd_list = [
|
||||
"_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()",
|
||||
]
|
||||
|
||||
# We commit the command list through the parent command
|
||||
self.source_command.commit(translate("draft","Create Circular Array"), _cmd_list)
|
||||
self.source_command.commit(translate("draft", "Create Circular Array"), _cmd_list)
|
||||
|
||||
def get_distances(self):
|
||||
"""Get the distance parameters from the widgets."""
|
||||
r_d_str = self.form.spinbox_r_distance.text()
|
||||
tan_d_str = self.form.spinbox_tan_distance.text()
|
||||
return (U.Quantity(r_d_str).Value,
|
||||
U.Quantity(tan_d_str).Value)
|
||||
return (U.Quantity(r_d_str).Value, U.Quantity(tan_d_str).Value)
|
||||
|
||||
def get_number_symmetry(self):
|
||||
"""Get the number and symmetry parameters from the widgets."""
|
||||
@@ -274,9 +277,9 @@ class TaskPanelCircularArray:
|
||||
c_x_str = self.form.input_c_x.text()
|
||||
c_y_str = self.form.input_c_y.text()
|
||||
c_z_str = self.form.input_c_z.text()
|
||||
center = App.Vector(U.Quantity(c_x_str).Value,
|
||||
U.Quantity(c_y_str).Value,
|
||||
U.Quantity(c_z_str).Value)
|
||||
center = App.Vector(
|
||||
U.Quantity(c_x_str).Value, U.Quantity(c_y_str).Value, U.Quantity(c_z_str).Value
|
||||
)
|
||||
return center
|
||||
|
||||
def get_axis(self):
|
||||
@@ -289,9 +292,9 @@ class TaskPanelCircularArray:
|
||||
|
||||
def reset_point(self):
|
||||
"""Reset the center point to the original distance."""
|
||||
self.form.input_c_x.setProperty('rawValue', 0)
|
||||
self.form.input_c_y.setProperty('rawValue', 0)
|
||||
self.form.input_c_z.setProperty('rawValue', 0)
|
||||
self.form.input_c_x.setProperty("rawValue", 0)
|
||||
self.form.input_c_y.setProperty("rawValue", 0)
|
||||
self.form.input_c_z.setProperty("rawValue", 0)
|
||||
|
||||
self.center = self.get_center()
|
||||
|
||||
@@ -301,7 +304,7 @@ class TaskPanelCircularArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Fuse:") + " {}".format(state))
|
||||
_msg(translate("draft", "Fuse:") + " {}".format(state))
|
||||
|
||||
def set_fuse(self):
|
||||
"""Execute as a callback when the fuse checkbox changes."""
|
||||
@@ -314,14 +317,13 @@ class TaskPanelCircularArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Create Link array:") + " {}".format(state))
|
||||
_msg(translate("draft", "Create Link array:") + " {}".format(state))
|
||||
|
||||
def set_link(self):
|
||||
"""Execute as a callback when the link checkbox changes."""
|
||||
self.use_link = self.form.checkbox_link.isChecked()
|
||||
params.set_param("Draft_array_Link", self.use_link)
|
||||
|
||||
|
||||
def print_messages(self):
|
||||
"""Print messages about the operation."""
|
||||
if len(self.selection) == 1:
|
||||
@@ -331,15 +333,15 @@ class TaskPanelCircularArray:
|
||||
# For example, it could take the shapes of all objects,
|
||||
# make a compound and then use it as input for the array function.
|
||||
sel_obj = self.selection[0]
|
||||
_msg(translate("draft","Object:") + " {}".format(sel_obj.Label))
|
||||
_msg(translate("draft","Radial distance:") + " {}".format(self.r_distance))
|
||||
_msg(translate("draft","Tangential distance:") + " {}".format(self.tan_distance))
|
||||
_msg(translate("draft","Number of concentric circles:") + " {}".format(self.number))
|
||||
_msg(translate("draft","Symmetry parameter:") + " {}".format(self.symmetry))
|
||||
_msg(translate("draft","Center of rotation:")
|
||||
+ " ({0}, {1}, {2})".format(self.center.x,
|
||||
self.center.y,
|
||||
self.center.z))
|
||||
_msg(translate("draft", "Object:") + " {}".format(sel_obj.Label))
|
||||
_msg(translate("draft", "Radial distance:") + " {}".format(self.r_distance))
|
||||
_msg(translate("draft", "Tangential distance:") + " {}".format(self.tan_distance))
|
||||
_msg(translate("draft", "Number of concentric circles:") + " {}".format(self.number))
|
||||
_msg(translate("draft", "Symmetry parameter:") + " {}".format(self.symmetry))
|
||||
_msg(
|
||||
translate("draft", "Center of rotation:")
|
||||
+ " ({0}, {1}, {2})".format(self.center.x, self.center.y, self.center.z)
|
||||
)
|
||||
self.print_fuse_state(self.fuse)
|
||||
self.print_link_state(self.use_link)
|
||||
|
||||
@@ -380,24 +382,24 @@ class TaskPanelCircularArray:
|
||||
# sby = self.form.spinbox_c_y
|
||||
# sbz = self.form.spinbox_c_z
|
||||
if d_p:
|
||||
if self.mask in ('y', 'z'):
|
||||
if self.mask in ("y", "z"):
|
||||
# sbx.setText(displayExternal(d_p.x, None, 'Length'))
|
||||
self.form.input_c_x.setProperty('rawValue', d_p.x)
|
||||
self.form.input_c_x.setProperty("rawValue", d_p.x)
|
||||
else:
|
||||
# sbx.setText(displayExternal(d_p.x, None, 'Length'))
|
||||
self.form.input_c_x.setProperty('rawValue', d_p.x)
|
||||
if self.mask in ('x', 'z'):
|
||||
self.form.input_c_x.setProperty("rawValue", d_p.x)
|
||||
if self.mask in ("x", "z"):
|
||||
# sby.setText(displayExternal(d_p.y, None, 'Length'))
|
||||
self.form.input_c_y.setProperty('rawValue', d_p.y)
|
||||
self.form.input_c_y.setProperty("rawValue", d_p.y)
|
||||
else:
|
||||
# sby.setText(displayExternal(d_p.y, None, 'Length'))
|
||||
self.form.input_c_y.setProperty('rawValue', d_p.y)
|
||||
if self.mask in ('x', 'y'):
|
||||
self.form.input_c_y.setProperty("rawValue", d_p.y)
|
||||
if self.mask in ("x", "y"):
|
||||
# sbz.setText(displayExternal(d_p.z, None, 'Length'))
|
||||
self.form.input_c_z.setProperty('rawValue', d_p.z)
|
||||
self.form.input_c_z.setProperty("rawValue", d_p.z)
|
||||
else:
|
||||
# sbz.setText(displayExternal(d_p.z, None, 'Length'))
|
||||
self.form.input_c_z.setProperty('rawValue', d_p.z)
|
||||
self.form.input_c_z.setProperty("rawValue", d_p.z)
|
||||
|
||||
if plane:
|
||||
pass
|
||||
@@ -452,4 +454,5 @@ class TaskPanelCircularArray:
|
||||
# Runs the parent command to complete the call
|
||||
self.source_command.completed()
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -94,17 +94,17 @@ class TaskPanelOrthoArray:
|
||||
self.v_y = App.Vector(0, start_y, 0)
|
||||
self.v_z = App.Vector(0, 0, start_z)
|
||||
|
||||
self.form.input_X_x.setProperty('rawValue', self.v_x.x)
|
||||
self.form.input_X_y.setProperty('rawValue', self.v_x.y)
|
||||
self.form.input_X_z.setProperty('rawValue', self.v_x.z)
|
||||
self.form.input_X_x.setProperty("rawValue", self.v_x.x)
|
||||
self.form.input_X_y.setProperty("rawValue", self.v_x.y)
|
||||
self.form.input_X_z.setProperty("rawValue", self.v_x.z)
|
||||
|
||||
self.form.input_Y_x.setProperty('rawValue', self.v_y.x)
|
||||
self.form.input_Y_y.setProperty('rawValue', self.v_y.y)
|
||||
self.form.input_Y_z.setProperty('rawValue', self.v_y.z)
|
||||
self.form.input_Y_x.setProperty("rawValue", self.v_y.x)
|
||||
self.form.input_Y_y.setProperty("rawValue", self.v_y.y)
|
||||
self.form.input_Y_z.setProperty("rawValue", self.v_y.z)
|
||||
|
||||
self.form.input_Z_x.setProperty('rawValue', self.v_z.x)
|
||||
self.form.input_Z_y.setProperty('rawValue', self.v_z.y)
|
||||
self.form.input_Z_z.setProperty('rawValue', self.v_z.z)
|
||||
self.form.input_Z_x.setProperty("rawValue", self.v_z.x)
|
||||
self.form.input_Z_y.setProperty("rawValue", self.v_z.y)
|
||||
self.form.input_Z_z.setProperty("rawValue", self.v_z.z)
|
||||
|
||||
self.n_x = params.get_param("XNumOfElements", "Mod/Draft/OrthoArrayLinearMode")
|
||||
self.n_y = params.get_param("YNumOfElements", "Mod/Draft/OrthoArrayLinearMode")
|
||||
@@ -154,10 +154,10 @@ class TaskPanelOrthoArray:
|
||||
self.form.button_reset_Z.clicked.connect(lambda: self.reset_v("Z"))
|
||||
|
||||
# When the checkbox changes, change the internal value
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
self.form.checkbox_fuse.checkStateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.checkStateChanged.connect(self.set_link)
|
||||
else: # Qt version < 6.7.0
|
||||
else: # Qt version < 6.7.0
|
||||
self.form.checkbox_fuse.stateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.stateChanged.connect(self.set_link)
|
||||
|
||||
@@ -167,71 +167,72 @@ class TaskPanelOrthoArray:
|
||||
self.form.radiobutton_y_axis.clicked.connect(lambda: self.set_active_axis("Y"))
|
||||
self.form.radiobutton_z_axis.clicked.connect(lambda: self.set_active_axis("Z"))
|
||||
|
||||
|
||||
def accept(self):
|
||||
"""Execute when clicking the OK button or Enter key."""
|
||||
self.selection = Gui.Selection.getSelection()
|
||||
|
||||
(self.v_x,
|
||||
self.v_y,
|
||||
self.v_z) = self.get_intervals()
|
||||
(self.v_x, self.v_y, self.v_z) = self.get_intervals()
|
||||
|
||||
(self.n_x,
|
||||
self.n_y,
|
||||
self.n_z) = self.get_numbers()
|
||||
(self.n_x, self.n_y, self.n_z) = self.get_numbers()
|
||||
|
||||
self.valid_input = self.validate_input(self.selection,
|
||||
self.v_x, self.v_y, self.v_z,
|
||||
self.n_x, self.n_y, self.n_z)
|
||||
self.valid_input = self.validate_input(
|
||||
self.selection, self.v_x, self.v_y, self.v_z, self.n_x, self.n_y, self.n_z
|
||||
)
|
||||
if self.valid_input:
|
||||
axis_values = {
|
||||
'X': (self.v_x.x, self.n_x),
|
||||
'Y': (self.v_y.y, self.n_y),
|
||||
'Z': (self.v_z.z, self.n_z),
|
||||
"X": (self.v_x.x, self.n_x),
|
||||
"Y": (self.v_y.y, self.n_y),
|
||||
"Z": (self.v_z.z, self.n_z),
|
||||
}
|
||||
|
||||
values = axis_values.get(self.active_axis)
|
||||
if values is not None:
|
||||
interval, num_elements = values
|
||||
# Set interval
|
||||
params.set_param(f"{self.active_axis}Interval", interval, "Mod/Draft/OrthoArrayLinearMode")
|
||||
params.set_param(
|
||||
f"{self.active_axis}Interval", interval, "Mod/Draft/OrthoArrayLinearMode"
|
||||
)
|
||||
# Set number of elements
|
||||
params.set_param(f"{self.active_axis}NumOfElements", num_elements, "Mod/Draft/OrthoArrayLinearMode")
|
||||
params.set_param(
|
||||
f"{self.active_axis}NumOfElements",
|
||||
num_elements,
|
||||
"Mod/Draft/OrthoArrayLinearMode",
|
||||
)
|
||||
|
||||
self.create_object()
|
||||
# The internal function already displays messages
|
||||
self.finish()
|
||||
|
||||
def validate_input(self, selection,
|
||||
v_x, v_y, v_z,
|
||||
n_x, n_y, n_z):
|
||||
def validate_input(self, selection, v_x, v_y, v_z, n_x, n_y, n_z):
|
||||
"""Check that the input is valid.
|
||||
|
||||
Some values may not need to be checked because
|
||||
the interface may not allow one to input wrong data.
|
||||
"""
|
||||
if not selection:
|
||||
_err(translate("draft","At least 1 element must be selected"))
|
||||
_err(translate("draft", "At least 1 element must be selected"))
|
||||
return False
|
||||
|
||||
if n_x < 1 or n_y < 1 or n_z < 1:
|
||||
_err(translate("draft","Number of elements must be at least 1"))
|
||||
_err(translate("draft", "Number of elements must be at least 1"))
|
||||
return False
|
||||
|
||||
# TODO: this should handle multiple objects.
|
||||
# Each of the elements of the selection should be tested.
|
||||
obj = selection[0]
|
||||
if obj.isDerivedFrom("App::FeaturePython"):
|
||||
_err(translate("draft","Selection is not suitable for array"))
|
||||
_err(translate("draft","Object:") + " {0} ({1})".format(obj.Label, obj.TypeId))
|
||||
_err(translate("draft", "Selection is not suitable for array"))
|
||||
_err(translate("draft", "Object:") + " {0} ({1})".format(obj.Label, obj.TypeId))
|
||||
return False
|
||||
|
||||
# we should not ever do this but maybe a sanity check here?
|
||||
if self.linear_mode:
|
||||
if not (self.form.radiobutton_x_axis.isChecked() or
|
||||
self.form.radiobutton_y_axis.isChecked() or
|
||||
self.form.radiobutton_z_axis.isChecked()):
|
||||
_err(translate("draft","In linear mode, at least 1 axis must be selected"))
|
||||
if not (
|
||||
self.form.radiobutton_x_axis.isChecked()
|
||||
or self.form.radiobutton_y_axis.isChecked()
|
||||
or self.form.radiobutton_z_axis.isChecked()
|
||||
):
|
||||
_err(translate("draft", "In linear mode, at least 1 axis must be selected"))
|
||||
return False
|
||||
|
||||
# The other arguments are not tested but they should be present.
|
||||
@@ -293,44 +294,48 @@ class TaskPanelOrthoArray:
|
||||
_cmd += "use_link=" + str(self.use_link)
|
||||
_cmd += ")"
|
||||
|
||||
Gui.addModule('Draft')
|
||||
Gui.addModule("Draft")
|
||||
|
||||
_cmd_list = ["_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()"]
|
||||
_cmd_list = [
|
||||
"_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()",
|
||||
]
|
||||
|
||||
# We commit the command list through the parent command
|
||||
self.source_command.commit(translate("draft","Create Orthogonal Array"), _cmd_list)
|
||||
self.source_command.commit(translate("draft", "Create Orthogonal Array"), _cmd_list)
|
||||
|
||||
def get_numbers(self):
|
||||
"""Get the number of elements from the widgets."""
|
||||
return (self.form.spinbox_n_X.value(),
|
||||
self.form.spinbox_n_Y.value(),
|
||||
self.form.spinbox_n_Z.value())
|
||||
return (
|
||||
self.form.spinbox_n_X.value(),
|
||||
self.form.spinbox_n_Y.value(),
|
||||
self.form.spinbox_n_Z.value(),
|
||||
)
|
||||
|
||||
def get_intervals(self):
|
||||
"""Get the interval vectors from the widgets."""
|
||||
v_x_x_str = self.form.input_X_x.text()
|
||||
v_x_y_str = self.form.input_X_y.text()
|
||||
v_x_z_str = self.form.input_X_z.text()
|
||||
v_x = App.Vector(U.Quantity(v_x_x_str).Value,
|
||||
U.Quantity(v_x_y_str).Value,
|
||||
U.Quantity(v_x_z_str).Value)
|
||||
v_x = App.Vector(
|
||||
U.Quantity(v_x_x_str).Value, U.Quantity(v_x_y_str).Value, U.Quantity(v_x_z_str).Value
|
||||
)
|
||||
|
||||
v_y_x_str = self.form.input_Y_x.text()
|
||||
v_y_y_str = self.form.input_Y_y.text()
|
||||
v_y_z_str = self.form.input_Y_z.text()
|
||||
v_y = App.Vector(U.Quantity(v_y_x_str).Value,
|
||||
U.Quantity(v_y_y_str).Value,
|
||||
U.Quantity(v_y_z_str).Value)
|
||||
v_y = App.Vector(
|
||||
U.Quantity(v_y_x_str).Value, U.Quantity(v_y_y_str).Value, U.Quantity(v_y_z_str).Value
|
||||
)
|
||||
|
||||
v_z_x_str = self.form.input_Z_x.text()
|
||||
v_z_y_str = self.form.input_Z_y.text()
|
||||
v_z_z_str = self.form.input_Z_z.text()
|
||||
v_z = App.Vector(U.Quantity(v_z_x_str).Value,
|
||||
U.Quantity(v_z_y_str).Value,
|
||||
U.Quantity(v_z_z_str).Value)
|
||||
v_z = App.Vector(
|
||||
U.Quantity(v_z_x_str).Value, U.Quantity(v_z_y_str).Value, U.Quantity(v_z_z_str).Value
|
||||
)
|
||||
return v_x, v_y, v_z
|
||||
|
||||
def reset_v(self, interval):
|
||||
@@ -343,19 +348,19 @@ class TaskPanelOrthoArray:
|
||||
for that direction.
|
||||
"""
|
||||
if interval == "X":
|
||||
self.form.input_X_x.setProperty('rawValue', 100)
|
||||
self.form.input_X_y.setProperty('rawValue', 0)
|
||||
self.form.input_X_z.setProperty('rawValue', 0)
|
||||
self.form.input_X_x.setProperty("rawValue", 100)
|
||||
self.form.input_X_y.setProperty("rawValue", 0)
|
||||
self.form.input_X_z.setProperty("rawValue", 0)
|
||||
self.v_x, self.v_y, self.v_z = self.get_intervals()
|
||||
elif interval == "Y":
|
||||
self.form.input_Y_x.setProperty('rawValue', 0)
|
||||
self.form.input_Y_y.setProperty('rawValue', 100)
|
||||
self.form.input_Y_z.setProperty('rawValue', 0)
|
||||
self.form.input_Y_x.setProperty("rawValue", 0)
|
||||
self.form.input_Y_y.setProperty("rawValue", 100)
|
||||
self.form.input_Y_z.setProperty("rawValue", 0)
|
||||
self.v_x, self.v_y, self.v_z = self.get_intervals()
|
||||
elif interval == "Z":
|
||||
self.form.input_Z_x.setProperty('rawValue', 0)
|
||||
self.form.input_Z_y.setProperty('rawValue', 0)
|
||||
self.form.input_Z_z.setProperty('rawValue', 100)
|
||||
self.form.input_Z_x.setProperty("rawValue", 0)
|
||||
self.form.input_Z_y.setProperty("rawValue", 0)
|
||||
self.form.input_Z_z.setProperty("rawValue", 100)
|
||||
self.v_x, self.v_y, self.v_z = self.get_intervals()
|
||||
|
||||
def print_fuse_state(self, fuse):
|
||||
@@ -364,7 +369,7 @@ class TaskPanelOrthoArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Fuse:") + " {}".format(state))
|
||||
_msg(translate("draft", "Fuse:") + " {}".format(state))
|
||||
|
||||
def set_fuse(self):
|
||||
"""Execute as a callback when the fuse checkbox changes."""
|
||||
@@ -377,7 +382,7 @@ class TaskPanelOrthoArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Create link array:") + " {}".format(state))
|
||||
_msg(translate("draft", "Create link array:") + " {}".format(state))
|
||||
|
||||
def set_link(self):
|
||||
"""Execute as a callback when the link checkbox changes."""
|
||||
@@ -393,23 +398,23 @@ class TaskPanelOrthoArray:
|
||||
# For example, it could take the shapes of all objects,
|
||||
# make a compound and then use it as input for the array function.
|
||||
sel_obj = self.selection[0]
|
||||
_msg(translate("draft","Object:") + " {}".format(sel_obj.Label))
|
||||
_msg(translate("draft", "Object:") + " {}".format(sel_obj.Label))
|
||||
|
||||
_msg(translate("draft","Number of X elements:") + " {}".format(self.n_x))
|
||||
_msg(translate("draft","Interval X:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_x.x,
|
||||
self.v_x.y,
|
||||
self.v_x.z))
|
||||
_msg(translate("draft","Number of Y elements:") + " {}".format(self.n_y))
|
||||
_msg(translate("draft","Interval Y:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_y.x,
|
||||
self.v_y.y,
|
||||
self.v_y.z))
|
||||
_msg(translate("draft","Number of Z elements:") + " {}".format(self.n_z))
|
||||
_msg(translate("draft","Interval Z:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_z.x,
|
||||
self.v_z.y,
|
||||
self.v_z.z))
|
||||
_msg(translate("draft", "Number of X elements:") + " {}".format(self.n_x))
|
||||
_msg(
|
||||
translate("draft", "Interval X:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_x.x, self.v_x.y, self.v_x.z)
|
||||
)
|
||||
_msg(translate("draft", "Number of Y elements:") + " {}".format(self.n_y))
|
||||
_msg(
|
||||
translate("draft", "Interval Y:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_y.x, self.v_y.y, self.v_y.z)
|
||||
)
|
||||
_msg(translate("draft", "Number of Z elements:") + " {}".format(self.n_z))
|
||||
_msg(
|
||||
translate("draft", "Interval Z:")
|
||||
+ " ({0}, {1}, {2})".format(self.v_z.x, self.v_z.y, self.v_z.z)
|
||||
)
|
||||
self.print_fuse_state(self.fuse)
|
||||
self.print_link_state(self.use_link)
|
||||
|
||||
@@ -421,7 +426,7 @@ class TaskPanelOrthoArray:
|
||||
"""Toggle between Linear mode and Orthogonal mode."""
|
||||
self.linear_mode = self.form.button_linear_mode.isChecked()
|
||||
self.toggle_axis_radiobuttons(self.linear_mode)
|
||||
params.set_param("LinearModeOn" , self.linear_mode, "Mod/Draft/OrthoArrayLinearMode")
|
||||
params.set_param("LinearModeOn", self.linear_mode, "Mod/Draft/OrthoArrayLinearMode")
|
||||
|
||||
if self.linear_mode:
|
||||
self.form.button_linear_mode.setText(translate("draft", "Switch to Ortho Mode"))
|
||||
@@ -446,7 +451,7 @@ class TaskPanelOrthoArray:
|
||||
case "Z":
|
||||
title = translate("draft", "Z-Axis")
|
||||
self.form.group_linearmode.setTitle(title)
|
||||
else: # ortho mode
|
||||
else: # ortho mode
|
||||
self.form.button_linear_mode.setText(translate("draft", "Switch to Linear Mode"))
|
||||
|
||||
# For ortho mode we're showing back default groupboxes and we reparent everything
|
||||
@@ -458,9 +463,11 @@ class TaskPanelOrthoArray:
|
||||
|
||||
def toggle_axis_radiobuttons(self, show):
|
||||
"""Show or hide the axis radio buttons."""
|
||||
for radiobutton in [self.form.radiobutton_x_axis,
|
||||
self.form.radiobutton_y_axis,
|
||||
self.form.radiobutton_z_axis]:
|
||||
for radiobutton in [
|
||||
self.form.radiobutton_x_axis,
|
||||
self.form.radiobutton_y_axis,
|
||||
self.form.radiobutton_z_axis,
|
||||
]:
|
||||
radiobutton.setVisible(show)
|
||||
|
||||
def set_active_axis(self, axis):
|
||||
@@ -483,7 +490,6 @@ class TaskPanelOrthoArray:
|
||||
title = translate("draft", "Z-Axis")
|
||||
self.form.group_linearmode.setTitle(title)
|
||||
|
||||
|
||||
def update_axis_ui(self):
|
||||
"""Update the UI to reflect the current axis selection."""
|
||||
# Make sure only one axis is selected
|
||||
@@ -494,9 +500,9 @@ class TaskPanelOrthoArray:
|
||||
def _get_axis_widgets(self, axis):
|
||||
"""Get all widgets for a specific axis."""
|
||||
return {
|
||||
'spinbox_elements': getattr(self.form, f"spinbox_n_{axis}", None),
|
||||
'spinbox_interval': getattr(self.form, f"input_{axis}_{axis.lower()}", None),
|
||||
'button_reset': getattr(self.form, f"button_reset_{axis}", None)
|
||||
"spinbox_elements": getattr(self.form, f"spinbox_n_{axis}", None),
|
||||
"spinbox_interval": getattr(self.form, f"input_{axis}_{axis.lower()}", None),
|
||||
"button_reset": getattr(self.form, f"button_reset_{axis}", None),
|
||||
}
|
||||
|
||||
def _clear_linear_mode_layout(self):
|
||||
@@ -525,8 +531,8 @@ class TaskPanelOrthoArray:
|
||||
|
||||
# Add widgets to layout
|
||||
widget_pairs = [
|
||||
(label_elements, widgets['spinbox_elements']),
|
||||
(label_interval, widgets['spinbox_interval'])
|
||||
(label_elements, widgets["spinbox_elements"]),
|
||||
(label_interval, widgets["spinbox_interval"]),
|
||||
]
|
||||
|
||||
for row_index, (label, widget) in enumerate(widget_pairs):
|
||||
@@ -536,8 +542,8 @@ class TaskPanelOrthoArray:
|
||||
group_layout.addWidget(widget, row_index, 1)
|
||||
|
||||
# Add reset button spanning both columns
|
||||
widgets['button_reset'].setParent(self.form.group_linearmode)
|
||||
group_layout.addWidget(widgets['button_reset'], 2, 0, 1, 2)
|
||||
widgets["button_reset"].setParent(self.form.group_linearmode)
|
||||
group_layout.addWidget(widgets["button_reset"], 2, 0, 1, 2)
|
||||
|
||||
def _restore_axis_to_ortho_layout(self, axis, row_index):
|
||||
"""Restore widgets for a specific axis back to their original Ortho layout positions."""
|
||||
@@ -545,16 +551,16 @@ class TaskPanelOrthoArray:
|
||||
|
||||
# Restore spinbox elements to grid layout
|
||||
grid_number_layout = self.form.findChild(QtWidgets.QGridLayout, "grid_number")
|
||||
grid_number_layout.addWidget(widgets['spinbox_elements'], row_index, 1)
|
||||
grid_number_layout.addWidget(widgets["spinbox_elements"], row_index, 1)
|
||||
|
||||
# Restore interval input to its axis-specific inner grid layout
|
||||
inner_grid_layout = self.form.findChild(QtWidgets.QGridLayout, f"grid_{axis}")
|
||||
inner_grid_layout.addWidget(widgets['spinbox_interval'], row_index, 1)
|
||||
inner_grid_layout.addWidget(widgets["spinbox_interval"], row_index, 1)
|
||||
|
||||
# Restore reset button to its axis group
|
||||
group_box = self.form.findChild(QtWidgets.QGroupBox, f"group_{axis}")
|
||||
group_axis_layout = group_box.layout()
|
||||
group_axis_layout.addWidget(widgets['button_reset'], 1, 0)
|
||||
group_axis_layout.addWidget(widgets["button_reset"], 1, 0)
|
||||
|
||||
def _setup_ortho_mode_layout(self):
|
||||
"""Restore all widgets back to their original Ortho mode layout positions."""
|
||||
@@ -592,4 +598,5 @@ class TaskPanelOrthoArray:
|
||||
# Runs the parent command to complete the call
|
||||
self.source_command.completed()
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -91,10 +91,10 @@ class TaskPanelPolarArray:
|
||||
self.fuse = params.get_param("Draft_array_fuse")
|
||||
self.use_link = params.get_param("Draft_array_Link")
|
||||
|
||||
self.form.input_c_x.setProperty('rawValue', self.center.x)
|
||||
self.form.input_c_y.setProperty('rawValue', self.center.y)
|
||||
self.form.input_c_z.setProperty('rawValue', self.center.z)
|
||||
self.form.spinbox_angle.setProperty('rawValue', self.angle)
|
||||
self.form.input_c_x.setProperty("rawValue", self.center.x)
|
||||
self.form.input_c_y.setProperty("rawValue", self.center.y)
|
||||
self.form.input_c_z.setProperty("rawValue", self.center.z)
|
||||
self.form.spinbox_angle.setProperty("rawValue", self.angle)
|
||||
self.form.spinbox_number.setValue(self.number)
|
||||
self.form.checkbox_fuse.setChecked(self.fuse)
|
||||
self.form.checkbox_link.setChecked(self.use_link)
|
||||
@@ -122,61 +122,63 @@ class TaskPanelPolarArray:
|
||||
self.form.button_reset.clicked.connect(self.reset_point)
|
||||
|
||||
# When the checkbox changes, change the internal value
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
if hasattr(self.form.checkbox_fuse, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
self.form.checkbox_fuse.checkStateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.checkStateChanged.connect(self.set_link)
|
||||
else: # Qt version < 6.7.0
|
||||
else: # Qt version < 6.7.0
|
||||
self.form.checkbox_fuse.stateChanged.connect(self.set_fuse)
|
||||
self.form.checkbox_link.stateChanged.connect(self.set_link)
|
||||
|
||||
|
||||
def accept(self):
|
||||
"""Execute when clicking the OK button or Enter key."""
|
||||
self.selection = Gui.Selection.getSelection()
|
||||
|
||||
(self.number,
|
||||
self.angle) = self.get_number_angle()
|
||||
(self.number, self.angle) = self.get_number_angle()
|
||||
|
||||
self.center = self.get_center()
|
||||
|
||||
self.valid_input = self.validate_input(self.selection,
|
||||
self.number,
|
||||
self.angle,
|
||||
self.center)
|
||||
self.valid_input = self.validate_input(self.selection, self.number, self.angle, self.center)
|
||||
if self.valid_input:
|
||||
self.create_object()
|
||||
# The internal function already displays messages
|
||||
# self.print_messages()
|
||||
self.finish()
|
||||
|
||||
def validate_input(self, selection,
|
||||
number, angle, center):
|
||||
def validate_input(self, selection, number, angle, center):
|
||||
"""Check that the input is valid.
|
||||
|
||||
Some values may not need to be checked because
|
||||
the interface may not allow one to input wrong data.
|
||||
"""
|
||||
if not selection:
|
||||
_err(translate("draft","At least 1 element must be selected"))
|
||||
_err(translate("draft", "At least 1 element must be selected"))
|
||||
return False
|
||||
|
||||
# TODO: this should handle multiple objects.
|
||||
# Each of the elements of the selection should be tested.
|
||||
obj = selection[0]
|
||||
if obj.isDerivedFrom("App::FeaturePython"):
|
||||
_err(translate("draft","Selection is not suitable for array"))
|
||||
_err(translate("draft","Object:") + " {}".format(selection[0].Label))
|
||||
_err(translate("draft", "Selection is not suitable for array"))
|
||||
_err(translate("draft", "Object:") + " {}".format(selection[0].Label))
|
||||
return False
|
||||
|
||||
if number < 2:
|
||||
_err(translate("draft","Number of elements must be at least 2"))
|
||||
_err(translate("draft", "Number of elements must be at least 2"))
|
||||
return False
|
||||
|
||||
if angle > 360:
|
||||
_wrn(translate("draft","The angle is above 360 degrees. It is set to this value to proceed."))
|
||||
_wrn(
|
||||
translate(
|
||||
"draft", "The angle is above 360 degrees. It is set to this value to proceed."
|
||||
)
|
||||
)
|
||||
self.angle = 360
|
||||
elif angle < -360:
|
||||
_wrn(translate("draft","The angle is below -360 degrees. It is set to this value to proceed."))
|
||||
_wrn(
|
||||
translate(
|
||||
"draft", "The angle is below -360 degrees. It is set to this value to proceed."
|
||||
)
|
||||
)
|
||||
self.angle = -360
|
||||
|
||||
# The other arguments are not tested but they should be present.
|
||||
@@ -220,15 +222,17 @@ class TaskPanelPolarArray:
|
||||
_cmd += "use_link=" + str(self.use_link)
|
||||
_cmd += ")"
|
||||
|
||||
Gui.addModule('Draft')
|
||||
Gui.addModule("Draft")
|
||||
|
||||
_cmd_list = ["_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()"]
|
||||
_cmd_list = [
|
||||
"_obj_ = " + _cmd,
|
||||
"_obj_.Fuse = " + str(self.fuse),
|
||||
"Draft.autogroup(_obj_)",
|
||||
"App.ActiveDocument.recompute()",
|
||||
]
|
||||
|
||||
# We commit the command list through the parent command
|
||||
self.source_command.commit(translate("draft","Create Polar Array"), _cmd_list)
|
||||
self.source_command.commit(translate("draft", "Create Polar Array"), _cmd_list)
|
||||
|
||||
def get_number_angle(self):
|
||||
"""Get the number and angle parameters from the widgets."""
|
||||
@@ -243,16 +247,16 @@ class TaskPanelPolarArray:
|
||||
c_x_str = self.form.input_c_x.text()
|
||||
c_y_str = self.form.input_c_y.text()
|
||||
c_z_str = self.form.input_c_z.text()
|
||||
center = App.Vector(U.Quantity(c_x_str).Value,
|
||||
U.Quantity(c_y_str).Value,
|
||||
U.Quantity(c_z_str).Value)
|
||||
center = App.Vector(
|
||||
U.Quantity(c_x_str).Value, U.Quantity(c_y_str).Value, U.Quantity(c_z_str).Value
|
||||
)
|
||||
return center
|
||||
|
||||
def reset_point(self):
|
||||
"""Reset the center point to the original distance."""
|
||||
self.form.input_c_x.setProperty('rawValue', 0)
|
||||
self.form.input_c_y.setProperty('rawValue', 0)
|
||||
self.form.input_c_z.setProperty('rawValue', 0)
|
||||
self.form.input_c_x.setProperty("rawValue", 0)
|
||||
self.form.input_c_y.setProperty("rawValue", 0)
|
||||
self.form.input_c_z.setProperty("rawValue", 0)
|
||||
|
||||
self.center = self.get_center()
|
||||
|
||||
@@ -262,7 +266,7 @@ class TaskPanelPolarArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Fuse:") + " {}".format(state))
|
||||
_msg(translate("draft", "Fuse:") + " {}".format(state))
|
||||
|
||||
def set_fuse(self):
|
||||
"""Execute as a callback when the fuse checkbox changes."""
|
||||
@@ -275,7 +279,7 @@ class TaskPanelPolarArray:
|
||||
state = self.tr_true
|
||||
else:
|
||||
state = self.tr_false
|
||||
_msg(translate("draft","Create link array:") + " {}".format(state))
|
||||
_msg(translate("draft", "Create link array:") + " {}".format(state))
|
||||
|
||||
def set_link(self):
|
||||
"""Execute as a callback when the link checkbox changes."""
|
||||
@@ -291,13 +295,13 @@ class TaskPanelPolarArray:
|
||||
# For example, it could take the shapes of all objects,
|
||||
# make a compound and then use it as input for the array function.
|
||||
sel_obj = self.selection[0]
|
||||
_msg(translate("draft","Object:") + " {}".format(sel_obj.Label))
|
||||
_msg(translate("draft","Number of elements:") + " {}".format(self.number))
|
||||
_msg(translate("draft","Polar angle:") + " {}".format(self.angle))
|
||||
_msg(translate("draft","Center of rotation:")
|
||||
+ " ({0}, {1}, {2})".format(self.center.x,
|
||||
self.center.y,
|
||||
self.center.z))
|
||||
_msg(translate("draft", "Object:") + " {}".format(sel_obj.Label))
|
||||
_msg(translate("draft", "Number of elements:") + " {}".format(self.number))
|
||||
_msg(translate("draft", "Polar angle:") + " {}".format(self.angle))
|
||||
_msg(
|
||||
translate("draft", "Center of rotation:")
|
||||
+ " ({0}, {1}, {2})".format(self.center.x, self.center.y, self.center.z)
|
||||
)
|
||||
self.print_fuse_state(self.fuse)
|
||||
self.print_link_state(self.use_link)
|
||||
|
||||
@@ -338,24 +342,24 @@ class TaskPanelPolarArray:
|
||||
# sby = self.form.spinbox_c_y
|
||||
# sbz = self.form.spinbox_c_z
|
||||
if dp:
|
||||
if self.mask in ('y', 'z'):
|
||||
if self.mask in ("y", "z"):
|
||||
# sbx.setText(displayExternal(dp.x, None, 'Length'))
|
||||
self.form.input_c_x.setProperty('rawValue', dp.x)
|
||||
self.form.input_c_x.setProperty("rawValue", dp.x)
|
||||
else:
|
||||
# sbx.setText(displayExternal(dp.x, None, 'Length'))
|
||||
self.form.input_c_x.setProperty('rawValue', dp.x)
|
||||
if self.mask in ('x', 'z'):
|
||||
self.form.input_c_x.setProperty("rawValue", dp.x)
|
||||
if self.mask in ("x", "z"):
|
||||
# sby.setText(displayExternal(dp.y, None, 'Length'))
|
||||
self.form.input_c_y.setProperty('rawValue', dp.y)
|
||||
self.form.input_c_y.setProperty("rawValue", dp.y)
|
||||
else:
|
||||
# sby.setText(displayExternal(dp.y, None, 'Length'))
|
||||
self.form.input_c_y.setProperty('rawValue', dp.y)
|
||||
if self.mask in ('x', 'y'):
|
||||
self.form.input_c_y.setProperty("rawValue", dp.y)
|
||||
if self.mask in ("x", "y"):
|
||||
# sbz.setText(displayExternal(dp.z, None, 'Length'))
|
||||
self.form.input_c_z.setProperty('rawValue', dp.z)
|
||||
self.form.input_c_z.setProperty("rawValue", dp.z)
|
||||
else:
|
||||
# sbz.setText(displayExternal(dp.z, None, 'Length'))
|
||||
self.form.input_c_z.setProperty('rawValue', dp.z)
|
||||
self.form.input_c_z.setProperty("rawValue", dp.z)
|
||||
|
||||
if plane:
|
||||
pass
|
||||
@@ -410,4 +414,5 @@ class TaskPanelPolarArray:
|
||||
# Runs the parent command to complete the call
|
||||
self.source_command.completed()
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -57,32 +57,32 @@ class ScaleTaskPanel:
|
||||
self.xValue.setRange(-1000000.0, 1000000.0)
|
||||
self.xValue.setDecimals(decimals)
|
||||
self.xValue.setValue(1)
|
||||
layout.addWidget(self.xValue,0,1,1,1)
|
||||
layout.addWidget(self.xValue, 0, 1, 1, 1)
|
||||
self.yLabel = QtWidgets.QLabel()
|
||||
self.yLabel.setText(translate("Draft", "Y-factor"))
|
||||
layout.addWidget(self.yLabel,1,0,1,1)
|
||||
layout.addWidget(self.yLabel, 1, 0, 1, 1)
|
||||
self.yValue = QtWidgets.QDoubleSpinBox()
|
||||
self.yValue.setRange(-1000000.0, 1000000.0)
|
||||
self.yValue.setDecimals(decimals)
|
||||
self.yValue.setValue(1)
|
||||
layout.addWidget(self.yValue,1,1,1,1)
|
||||
layout.addWidget(self.yValue, 1, 1, 1, 1)
|
||||
self.zLabel = QtWidgets.QLabel()
|
||||
self.zLabel.setText(translate("Draft", "Z-factor"))
|
||||
layout.addWidget(self.zLabel,2,0,1,1)
|
||||
layout.addWidget(self.zLabel, 2, 0, 1, 1)
|
||||
self.zValue = QtWidgets.QDoubleSpinBox()
|
||||
self.zValue.setRange(-1000000.0, 1000000.0)
|
||||
self.zValue.setDecimals(decimals)
|
||||
self.zValue.setValue(1)
|
||||
layout.addWidget(self.zValue,2,1,1,1)
|
||||
layout.addWidget(self.zValue, 2, 1, 1, 1)
|
||||
self.lock = QtWidgets.QCheckBox()
|
||||
self.lock.setText(translate("Draft", "Uniform scaling"))
|
||||
self.lock.setChecked(params.get_param("ScaleUniform"))
|
||||
layout.addWidget(self.lock,3,0,1,2)
|
||||
layout.addWidget(self.lock, 3, 0, 1, 2)
|
||||
|
||||
QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue)
|
||||
QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue)
|
||||
QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue)
|
||||
QtCore.QObject.connect(self.lock,QtCore.SIGNAL("toggled(bool)"),self.setLock)
|
||||
QtCore.QObject.connect(self.xValue, QtCore.SIGNAL("valueChanged(double)"), self.setValue)
|
||||
QtCore.QObject.connect(self.yValue, QtCore.SIGNAL("valueChanged(double)"), self.setValue)
|
||||
QtCore.QObject.connect(self.zValue, QtCore.SIGNAL("valueChanged(double)"), self.setValue)
|
||||
QtCore.QObject.connect(self.lock, QtCore.SIGNAL("toggled(bool)"), self.setLock)
|
||||
|
||||
if self.__class__.__name__ != "ScaleTaskPanelEdit":
|
||||
# ScaleRelative option removed in v1.1 as it does not work properly:
|
||||
@@ -93,24 +93,26 @@ class ScaleTaskPanel:
|
||||
self.isCopy = QtWidgets.QCheckBox()
|
||||
self.isCopy.setText(translate("Draft", "Copy"))
|
||||
self.isCopy.setChecked(params.get_param("ScaleCopy"))
|
||||
layout.addWidget(self.isCopy,5,0,1,2)
|
||||
layout.addWidget(self.isCopy, 5, 0, 1, 2)
|
||||
self.isSubelementMode = QtWidgets.QCheckBox()
|
||||
self.isSubelementMode.setText(translate("Draft", "Modify subelements"))
|
||||
self.isSubelementMode.setChecked(params.get_param("SubelementMode"))
|
||||
layout.addWidget(self.isSubelementMode,6,0,1,2)
|
||||
layout.addWidget(self.isSubelementMode, 6, 0, 1, 2)
|
||||
self.isClone = QtWidgets.QCheckBox()
|
||||
self.isClone.setText(translate("Draft", "Create a clone"))
|
||||
self.isClone.setChecked(params.get_param("ScaleClone"))
|
||||
layout.addWidget(self.isClone,7,0,1,2)
|
||||
layout.addWidget(self.isClone, 7, 0, 1, 2)
|
||||
self.pickrefButton = QtWidgets.QPushButton()
|
||||
self.pickrefButton.setText(translate("Draft", "Pick From/To Points"))
|
||||
layout.addWidget(self.pickrefButton,8,0,1,2)
|
||||
layout.addWidget(self.pickrefButton, 8, 0, 1, 2)
|
||||
|
||||
# QtCore.QObject.connect(self.relative,QtCore.SIGNAL("toggled(bool)"),self.setRelative)
|
||||
QtCore.QObject.connect(self.isCopy,QtCore.SIGNAL("toggled(bool)"),self.setCopy)
|
||||
QtCore.QObject.connect(self.isSubelementMode,QtCore.SIGNAL("toggled(bool)"),self.setSubelementMode)
|
||||
QtCore.QObject.connect(self.isClone,QtCore.SIGNAL("toggled(bool)"),self.setClone)
|
||||
QtCore.QObject.connect(self.pickrefButton,QtCore.SIGNAL("clicked()"),self.pickRef)
|
||||
QtCore.QObject.connect(self.isCopy, QtCore.SIGNAL("toggled(bool)"), self.setCopy)
|
||||
QtCore.QObject.connect(
|
||||
self.isSubelementMode, QtCore.SIGNAL("toggled(bool)"), self.setSubelementMode
|
||||
)
|
||||
QtCore.QObject.connect(self.isClone, QtCore.SIGNAL("toggled(bool)"), self.setClone)
|
||||
QtCore.QObject.connect(self.pickrefButton, QtCore.SIGNAL("clicked()"), self.pickRef)
|
||||
|
||||
def setValue(self, val=None):
|
||||
"""Set the value of the scale factors."""
|
||||
@@ -226,7 +228,7 @@ class ScaleTaskPanelEdit(ScaleTaskPanel):
|
||||
mtx = mtx * self.global_place.Matrix.inverse()
|
||||
|
||||
delta = self.global_place.inverse().Rotation.multVec(self.global_place.Base)
|
||||
delta = -App.Vector(delta.x*x, delta.y*y, delta.z*z)
|
||||
delta = -App.Vector(delta.x * x, delta.y * y, delta.z * z)
|
||||
delta = self.global_place.multVec(delta)
|
||||
|
||||
self.ghost.setMatrix(mtx)
|
||||
@@ -266,4 +268,5 @@ class ScaleTaskPanelEdit(ScaleTaskPanel):
|
||||
Gui.Control.closeDialog()
|
||||
return None
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -53,4 +53,5 @@ class SelectPlaneTaskPanel:
|
||||
"""Execute to set the standard buttons."""
|
||||
return QtWidgets.QDialogButtonBox.Close
|
||||
|
||||
|
||||
## @}
|
||||
|
||||
@@ -86,9 +86,9 @@ class ShapeStringTaskPanel:
|
||||
self.form.sbX.valueChanged.connect(self.set_point_x)
|
||||
self.form.sbY.valueChanged.connect(self.set_point_y)
|
||||
self.form.sbZ.valueChanged.connect(self.set_point_z)
|
||||
if hasattr(self.form.cbGlobalMode, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
if hasattr(self.form.cbGlobalMode, "checkStateChanged"): # Qt version >= 6.7.0
|
||||
self.form.cbGlobalMode.checkStateChanged.connect(self.set_global_mode)
|
||||
else: # Qt version < 6.7.0
|
||||
else: # Qt version < 6.7.0
|
||||
self.form.cbGlobalMode.stateChanged.connect(self.set_global_mode)
|
||||
self.form.pbReset.clicked.connect(self.reset_point)
|
||||
self.form.sbHeight.valueChanged.connect(self.set_height)
|
||||
@@ -132,7 +132,7 @@ class ShapeStringTaskPanel:
|
||||
self.display_point_active = False
|
||||
|
||||
def escape_string(self, string):
|
||||
return string.replace("\\", "\\\\").replace("\"", "\\\"")
|
||||
return string.replace("\\", "\\\\").replace('"', '\\"')
|
||||
|
||||
def platform_win_dialog(self, flag):
|
||||
"""Handle the type of dialog depending on the platform."""
|
||||
@@ -207,10 +207,7 @@ class ShapeStringTaskPanel:
|
||||
Gui.HintManager.hide()
|
||||
else:
|
||||
Gui.HintManager.show(
|
||||
Gui.InputHint(
|
||||
translate("draft", "%1 pick point"),
|
||||
Gui.UserInput.MouseLeft
|
||||
)
|
||||
Gui.InputHint(translate("draft", "%1 pick point"), Gui.UserInput.MouseLeft)
|
||||
)
|
||||
|
||||
|
||||
@@ -232,20 +229,22 @@ class ShapeStringTaskPanelCmd(ShapeStringTaskPanel):
|
||||
Gui.addModule("Draft")
|
||||
Gui.addModule("WorkingPlane")
|
||||
cmd = "Draft.make_shapestring("
|
||||
cmd += "String=\"" + self.escape_string(self.text) + "\", "
|
||||
cmd += "FontFile=\"" + self.escape_string(self.font_file) + "\", "
|
||||
cmd += 'String="' + self.escape_string(self.text) + '", '
|
||||
cmd += 'FontFile="' + self.escape_string(self.font_file) + '", '
|
||||
cmd += "Size=" + str(self.height) + ", "
|
||||
cmd += "Tracking=0.0"
|
||||
cmd += ")"
|
||||
self.sourceCmd.commit(
|
||||
translate("draft", "Create ShapeString"),
|
||||
["ss = " + cmd,
|
||||
"pl = FreeCAD.Placement()",
|
||||
"pl.Base = " + toString(self.point),
|
||||
"pl.Rotation = WorkingPlane.get_working_plane().get_placement().Rotation",
|
||||
"ss.Placement = pl",
|
||||
"Draft.autogroup(ss)",
|
||||
"FreeCAD.ActiveDocument.recompute()"]
|
||||
[
|
||||
"ss = " + cmd,
|
||||
"pl = FreeCAD.Placement()",
|
||||
"pl.Base = " + toString(self.point),
|
||||
"pl.Rotation = WorkingPlane.get_working_plane().get_placement().Rotation",
|
||||
"ss.Placement = pl",
|
||||
"Draft.autogroup(ss)",
|
||||
"FreeCAD.ActiveDocument.recompute()",
|
||||
],
|
||||
)
|
||||
|
||||
def reject(self):
|
||||
@@ -269,9 +268,9 @@ class ShapeStringTaskPanelEdit(ShapeStringTaskPanel):
|
||||
|
||||
def accept(self):
|
||||
|
||||
Gui.doCommand("ss = FreeCAD.ActiveDocument.getObject(\"" + self.obj.Name + "\")")
|
||||
Gui.doCommand("ss.String=\"" + self.escape_string(self.text) + "\"")
|
||||
Gui.doCommand("ss.FontFile=\"" + self.escape_string(self.font_file) + "\"")
|
||||
Gui.doCommand('ss = FreeCAD.ActiveDocument.getObject("' + self.obj.Name + '")')
|
||||
Gui.doCommand('ss.String="' + self.escape_string(self.text) + '"')
|
||||
Gui.doCommand('ss.FontFile="' + self.escape_string(self.font_file) + '"')
|
||||
Gui.doCommand("ss.Size=" + str(self.height))
|
||||
Gui.doCommand("ss.Placement.Base=" + toString(self.point))
|
||||
Gui.doCommand("FreeCAD.ActiveDocument.recompute()")
|
||||
|
||||
Reference in New Issue
Block a user