From efa2dfd3ca1bbcafb00563cecf225a5b2b4d6198 Mon Sep 17 00:00:00 2001 From: Rentlau Date: Wed, 16 Dec 2015 06:17:37 +0100 Subject: [PATCH] Release of 2015-12-16 : Correction bug Bounding box Addition: into "Sweeping" TAB : Beam (thanks to lorenz_l for Beam tool Macro) Will extrude a Section along a Linear Trajectory. - Select first one Section wire (Closed wire will generate volumes by default) (This Section can be a compound from sketch to realize "tube") - Select one or several wire(s) as Trajectory(ies) - Then push this button into "Object" TAB : Duplicate Make a copy of an object or a selected subObject part: - Select one or several object(s) or subobject(s) - Then push this button into "Check" TAB : Radius Check for Radius: Radius measurement for a Circle or an Arc. - Select One Circle or Arc - Then click this button --- WorkFeature/Beam/__init__.py | 0 WorkFeature/Beam/beam.py | 254 ++++++++++ WorkFeature/Doc/WF_releasesDocumentation.pdf | Bin 2655514 -> 2701728 bytes WorkFeature/Icons/WF_Beam.svg | 76 ++- WorkFeature/Icons/WF_isRadius.svg | 473 +++++++++++++++++++ WorkFeature/Icons/WF_objectCopy.svg | 381 +++++++++++++++ WorkFeature/Ui/WFGui_2015.py | 260 +++++----- WorkFeature/Ui/WFGui_2015.ui | 209 +++++--- WorkFeature/WFGui_2015.py | 260 +++++----- WorkFeature/WF_2015.py | 210 +++++++- WorkFeature/WF_ObjParCurve_2015.py | 41 +- start_WF.FCMacro | 4 + 12 files changed, 1838 insertions(+), 330 deletions(-) create mode 100644 WorkFeature/Beam/__init__.py create mode 100644 WorkFeature/Beam/beam.py create mode 100644 WorkFeature/Icons/WF_isRadius.svg create mode 100644 WorkFeature/Icons/WF_objectCopy.svg diff --git a/WorkFeature/Beam/__init__.py b/WorkFeature/Beam/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/WorkFeature/Beam/beam.py b/WorkFeature/Beam/beam.py new file mode 100644 index 0000000..c41cd0d --- /dev/null +++ b/WorkFeature/Beam/beam.py @@ -0,0 +1,254 @@ +# -*- coding: utf-8 -*- + +import os +import FreeCAD as App +import FreeCADGui as Gui +import Part + +def sketch_normal(sketch): + a = App.Vector(0, 0, 1) + return sketch.Placement.Rotation.multVec(a) + +def project_to_plane(plane_p, plane_n, p, n): + '''p + l * n = plane_p + x * plane_n''' + return p + n * (plane_n.dot(plane_p - p) / (n.dot(plane_n))) + +class Beam(): + def __init__(self, obj, profile, path, path_name): + "'''Beam: representing a straight extrusion of a profile'''" + obj.addProperty("App::PropertyString", "type", "Beam", "type of the object").type = "beam" + obj.addProperty("App::PropertyLink","profile","Beam","sketch profile of the beam").profile = profile + obj.addProperty("App::PropertyLink","path","Beam","path of the beam").path = path + obj.addProperty("App::PropertyString","path_name","Beam", "name of beam line").path_name = path_name + obj.addProperty("App::PropertyDistance", "exdent_1", "Beam", "exdent side 1").exdent_1 = "0 mm" + obj.addProperty("App::PropertyDistance", "exdent_2", "Beam", "exdent side 2").exdent_2 = "0 mm" + obj.setEditorMode("path_name", 1) + obj.Proxy = self + self.Object = obj + + + def initialize(self): + print("initialize ...") + + @property + def profile(self): + profile = Part.Face(self.Object.profile.Shape.Wires) + if profile.Area < 0: + profile = Part.Face(self.Object.profile.Shape.Wires[::-1]) + return profile + + @property + def outer_shape(self): + path, a, b, n = self.path_a_b_n + profile = Part.Face(self.profile.Wires[0]) + new_profile = self.transform_to_n(profile, self.midpoint, a - n * self.Object.exdent_1.Value, n) + return new_profile.extrude(App.Vector(b - a) + n * (self.Object.exdent_1.Value + self.Object.exdent_2.Value)) + + def attach(self, fp): + fp.Proxy.Object = fp + + def execute(self, fp): + '''Do something when doing a recomputation, this method is mandatory''' + fp.Proxy.Object = fp + path, a, b, n = self.path_a_b_n + new_profile = self.transform_to_n(self.profile, self.midpoint, a - n * fp.exdent_1.Value, n) + fp.Shape = new_profile.extrude(App.Vector(b - a) + n * (fp.exdent_1.Value + fp.exdent_2.Value)) + + def transform_to_n(self, profile, midpoint, p, n): + '''transform a profile (Shape) lying in z = 0 to p and n''' + + t = sketch_normal(self.Object.path) + n.normalize() + v = n.cross(t) + + mat2 = App.Matrix() + mat2.move(App.Vector() - midpoint) + new_profile = profile.transformGeometry(mat2) + + rot_mat = App.Matrix() + rot_mat.A11 = v.x + rot_mat.A21 = v.y + rot_mat.A31 = v.z + rot_mat.A12 = t.x + rot_mat.A22 = t.y + rot_mat.A32 = t.z + rot_mat.A13 = n.x + rot_mat.A23 = n.y + rot_mat.A33 = n.z + new_profile = new_profile.transformGeometry(rot_mat) + + mat3 = App.Matrix() + mat3.move(p) + new_profile.transformShape(mat3) + return new_profile + + @property + def midpoint(self): + profile_midpoint = filter(lambda x: isinstance(x, App.Base.Vector), self.Object.profile.Geometry) + if len(profile_midpoint) == 0 or profile_midpoint is None: + profile_midpoint = App.Vector(0, 0, 0) + else: + profile_midpoint = profile_midpoint[0] + return profile_midpoint + + @property + def path_a_b_n(self): + path = self.Object.path.Shape.getElement(self.Object.path_name) + a, b = path.Vertexes + n = b.Point - a.Point + n.normalize() + return (path, a.Point, b.Point, n) + + @property + def profile_bound_box(self): + fac = 0.3 + bb = self.Object.profile.Shape.BoundBox + xmax = bb.XMax + bb.XLength * fac + xmin = bb.XMin - bb.XLength * fac + ymax = bb.YMax + bb.YLength * fac + ymin = bb.YMin - bb.YLength * fac + pol = Part.makePolygon( + [App.Vector(xmax, ymax, 0), + App.Vector(xmax, ymin, 0), + App.Vector(xmin, ymin, 0), + App.Vector(xmin, ymax, 0), + App.Vector(xmax, ymax, 0)]) + path, a, b, n = self.path_a_b_n + return self.transform_to_n(pol, self.midpoint, a, n) + + def project_profile_bound_box(self, plane_n, plane_p): + bb = self.profile_bound_box.Vertexes + vectors = [v.Point for v in bb] + path, a, b, n = self.path_a_b_n + projected = [project_to_plane(plane_p, plane_n, v, n) for v in vectors] + projected.append(projected[0]) + pol = Part.makePolygon(projected) + return pol + + def __getstate__(self): + return None + + def __setstate__(self, state): + return None + + +class ViewProviderBeam: + def __init__(self, obj): + ''' Set this object to the proxy object of the actual view provider ''' + obj.Proxy = self + + def attach(self, vobj): + self.vobj = vobj + + def getIcon(self): + _dir = os.path.dirname(os.path.realpath(__file__)) + return(_dir + "/" + "Icons/beam.png") + + def __getstate__(self): + return None + + def __setstate__(self, state): + return None + + +def makeBeam2(): + def plot_edge(Vector_A, Vector_B, part="Part::Feature", name="Edge", grp="Work"): + if not(App.ActiveDocument.getObject( grp )): + App.ActiveDocument.addObject("App::DocumentObjectGroup", grp) + edge = App.ActiveDocument.addObject(part, name) + edge.Shape = Part.makeLine(Vector_A, Vector_B) + App.ActiveDocument.getObject( grp ).addObject(edge) + edge_User_Name = edge.Label + + return edge_User_Name, edge + + def plot_shape(Shape, part="Part::Feature", name="Shape", grp="Work"): + if not(App.ActiveDocument.getObject( grp )): + App.ActiveDocument.addObject("App::DocumentObjectGroup", grp) + shape = App.ActiveDocument.addObject(part, name) + shape.Shape = Part.Shape(Shape) + App.ActiveDocument.getObject( grp ).addObject(shape) + shape_User_Name = shape.Label + + return shape_User_Name, shape + + from FreeCAD import Base + V1 = Base.Vector(0,10,0) + V2 = Base.Vector(30,10,0) + V3 = Base.Vector(30,-10,0) + V4 = Base.Vector(0,-10,0) + + VC1 = Base.Vector(-10,0,0) + C1 = Part.Arc(V1,VC1,V4) + L0 = Part.Line(V1,V4) + S0 = Part.Shape([C1,L0]) + + v1 = App.Vector(0,0,0) + v2 = App.Vector(10,0,0) + v3 = App.Vector(0,10,0) + #profile = Part.makePolygon([v1,v2,v3,v1]) + v4 = App.Vector(0,0,100) + L1 = Part.Line(v1,v4) + S1 = Part.Shape([L1]) + + + #path = Part.makeLine(v1, v4) + App.newDocument() + + + shape_User_Name, shape = plot_shape([C1,L0], part="Part::Feature", name="profile", grp="Work") + edge_User_Name, edge = plot_edge(v1, v4, part="Part::Feature", name="path", grp="Work") + + + a=App.ActiveDocument.addObject("Part::FeaturePython","Beam") + Beam(a, shape_User_Name, edge_User_Name, "Beam") + ViewProviderBeam(a.ViewObject) + +class make_beam(object): + def __init__(self, view): + self.profile = None + self.midpoint = None + self.path = None + self.n = None + self.view = view + App.Console.PrintMessage("choose the profile\n") + Gui.Selection.clearSelection() + self.klick_event = self.view.addEventCallback("SoMouseButtonEvent", self.choose_profile) + + + def choose_profile(self, cb): + if cb["State"] == "DOWN": + sel = Gui.Selection.getSelection() + if len(sel) > 0: + self.profile = sel[0] + App.Console.PrintMessage("Profile selected !\n") + Gui.Selection.clearSelection() + self.view.removeEventCallback("SoMouseButtonEvent", self.klick_event) + self.klick_event = self.view.addEventCallback("SoMouseButtonEvent", self.choose_path) + App.Console.PrintMessage("choose path\n") + + def choose_path(self, cb): + if cb["State"] == "DOWN": + sel = Gui.Selection.getSelectionEx() + if sel: + path_sketch = sel[0].Object + path_name = sel[0].SubElementNames[0] + App.Console.PrintMessage("Path selected !\n") + self.view.removeEventCallback("SoMouseButtonEvent", self.klick_event) + + a = App.ActiveDocument.addObject("Part::FeaturePython","beam") + Beam(a, self.profile, path_sketch, path_name) + ViewProviderBeam(a.ViewObject) + App.ActiveDocument.recompute() + + + App.Console.PrintMessage("end of tube tool\n") + + +if __name__ == "__main__": + view = Gui.ActiveDocument.activeView() + selection = make_beam(view) + +# if __name__ == '__main__': +# makeBeam() + \ No newline at end of file diff --git a/WorkFeature/Doc/WF_releasesDocumentation.pdf b/WorkFeature/Doc/WF_releasesDocumentation.pdf index 9e3328cc88b89084d38f06c4ae99c79c3bb8f559..a857023a91b3c2d76707f9cc573e9576307abf33 100644 GIT binary patch delta 104223 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 delta 63136 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

f`Hh^F>d&qgV9m-Wav$> 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 R4$TCP1Z>>hhXe-L{67@&BtifH diff --git a/WorkFeature/Icons/WF_Beam.svg b/WorkFeature/Icons/WF_Beam.svg index 2cda4c0..d5f97eb 100644 --- a/WorkFeature/Icons/WF_Beam.svg +++ b/WorkFeature/Icons/WF_Beam.svg @@ -14,7 +14,7 @@ width="64" height="64" id="svg3017" - inkscape:version="0.48.5 r10040" + inkscape:version="0.91 r13725" sodipodi:docname="WF_Beam.svg" inkscape:export-filename="/home/mark/HyperbolaIcon.png" inkscape:export-xdpi="90" @@ -388,6 +388,37 @@ operator="over" result="composite2" /> + + + + + + + + @@ -417,31 +455,31 @@ id="layer1" inkscape:label="Layer1" /> + transform="matrix(0.91475345,-0.43761454,0.43761454,0.91475345,-36.379419,43.920861)" /> + transform="matrix(-0.27517775,-0.79253981,0.77893612,-0.28735762,27.462717,63.890512)" /> + sodipodi:nodetypes="scsssccccscss" + transform="matrix(-0.49449359,0.39060441,-0.62773631,-0.79469555,97.151171,40.082247)" /> + transform="matrix(0.78623928,0.64039688,-0.64039688,0.78623928,35.707732,-10.466987)" /> diff --git a/WorkFeature/Icons/WF_isRadius.svg b/WorkFeature/Icons/WF_isRadius.svg new file mode 100644 index 0000000..095a505 --- /dev/null +++ b/WorkFeature/Icons/WF_isRadius.svg @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + ? + + + R + + + + + + + + diff --git a/WorkFeature/Icons/WF_objectCopy.svg b/WorkFeature/Icons/WF_objectCopy.svg new file mode 100644 index 0000000..60db8e1 --- /dev/null +++ b/WorkFeature/Icons/WF_objectCopy.svg @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/WorkFeature/Ui/WFGui_2015.py b/WorkFeature/Ui/WFGui_2015.py index 13fb09c..075986e 100644 --- a/WorkFeature/Ui/WFGui_2015.py +++ b/WorkFeature/Ui/WFGui_2015.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'WFGui_2015.ui' # -# Created: Sat Nov 7 20:09:36 2015 -# by: PySide UI code generator 4.11.2 +# Created: Sun Dec 13 18:49:39 2015 +# by: PySide UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -636,7 +636,7 @@ class Ui_Form(object): self.scrollArea_2.setWidgetResizable(True) self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2")) self.scrollAreaWidgetContents_5 = QtGui.QWidget() - self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 259, 650)) + self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 245, 648)) self.scrollAreaWidgetContents_5.setObjectName(_fromUtf8("scrollAreaWidgetContents_5")) self.gridLayout_76 = QtGui.QGridLayout(self.scrollAreaWidgetContents_5) self.gridLayout_76.setObjectName(_fromUtf8("gridLayout_76")) @@ -1169,8 +1169,8 @@ class Ui_Form(object): self.tabWidget_7.addTab(self.tab_16, icon45, _fromUtf8("")) self.tab_17 = QtGui.QWidget() self.tab_17.setObjectName(_fromUtf8("tab_17")) - self.gridLayout_85 = QtGui.QGridLayout(self.tab_17) - self.gridLayout_85.setObjectName(_fromUtf8("gridLayout_85")) + self.gridLayout_6 = QtGui.QGridLayout(self.tab_17) + self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) self.frame_9 = QtGui.QFrame(self.tab_17) self.frame_9.setFrameShape(QtGui.QFrame.StyledPanel) self.frame_9.setFrameShadow(QtGui.QFrame.Raised) @@ -1209,11 +1209,16 @@ class Ui_Form(object): self.button_sweep.setIconSize(QtCore.QSize(32, 32)) self.button_sweep.setObjectName(_fromUtf8("button_sweep")) self.gridLayout_86.addWidget(self.button_sweep, 1, 0, 1, 1) - self.gridLayout_85.addWidget(self.frame_9, 0, 0, 1, 1) + self.gridLayout_6.addWidget(self.frame_9, 0, 0, 1, 1) spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_85.addItem(spacerItem11, 1, 0, 1, 1) + self.gridLayout_6.addItem(spacerItem11, 2, 0, 1, 1) + self.button_beam = QtGui.QPushButton(self.tab_17) icon47 = QtGui.QIcon() icon47.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Beam.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_beam.setIcon(icon47) + self.button_beam.setIconSize(QtCore.QSize(32, 32)) + self.button_beam.setObjectName(_fromUtf8("button_beam")) + self.gridLayout_6.addWidget(self.button_beam, 1, 0, 1, 1) self.tabWidget_7.addTab(self.tab_17, icon47, _fromUtf8("")) self.Plane_Tab1_3 = QtGui.QWidget() self.Plane_Tab1_3.setObjectName(_fromUtf8("Plane_Tab1_3")) @@ -1618,25 +1623,32 @@ class Ui_Form(object): self.angle_revolve.setObjectName(_fromUtf8("angle_revolve")) self.horizontalLayout_76.addWidget(self.angle_revolve) self.gridLayout_5.addLayout(self.horizontalLayout_76, 7, 0, 1, 1) - self.button_common = QtGui.QPushButton(self.Objects_Tab2_2) + self.button_copy_objects = QtGui.QPushButton(self.Objects_Tab2_2) icon67 = QtGui.QIcon() - icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_common.setIcon(icon67) + icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectCopy.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_copy_objects.setIcon(icon67) + self.button_copy_objects.setIconSize(QtCore.QSize(32, 32)) + self.button_copy_objects.setObjectName(_fromUtf8("button_copy_objects")) + self.gridLayout_5.addWidget(self.button_copy_objects, 8, 0, 1, 1) + self.button_common = QtGui.QPushButton(self.Objects_Tab2_2) + icon68 = QtGui.QIcon() + icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_common.setIcon(icon68) self.button_common.setIconSize(QtCore.QSize(32, 32)) self.button_common.setObjectName(_fromUtf8("button_common")) - self.gridLayout_5.addWidget(self.button_common, 8, 0, 1, 1) + self.gridLayout_5.addWidget(self.button_common, 9, 0, 1, 1) self.button_difference = QtGui.QPushButton(self.Objects_Tab2_2) - icon68 = QtGui.QIcon() - icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_difference.setIcon(icon68) + icon69 = QtGui.QIcon() + icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_difference.setIcon(icon69) self.button_difference.setIconSize(QtCore.QSize(32, 32)) self.button_difference.setObjectName(_fromUtf8("button_difference")) - self.gridLayout_5.addWidget(self.button_difference, 9, 0, 1, 1) + self.gridLayout_5.addWidget(self.button_difference, 10, 0, 1, 1) spacerItem14 = QtGui.QSpacerItem(17, 8, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_5.addItem(spacerItem14, 10, 0, 1, 1) - icon69 = QtGui.QIcon() - icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.Objects_Tab2_2, icon69, _fromUtf8("")) + self.gridLayout_5.addItem(spacerItem14, 11, 0, 1, 1) + icon70 = QtGui.QIcon() + icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.Objects_Tab2_2, icon70, _fromUtf8("")) self.Modif_Tab_2 = QtGui.QWidget() self.Modif_Tab_2.setObjectName(_fromUtf8("Modif_Tab_2")) self.gridLayout_94 = QtGui.QGridLayout(self.Modif_Tab_2) @@ -1654,9 +1666,9 @@ class Ui_Form(object): sizePolicy.setHeightForWidth(self.button_alignface2view.sizePolicy().hasHeightForWidth()) self.button_alignface2view.setSizePolicy(sizePolicy) self.button_alignface2view.setMaximumSize(QtCore.QSize(220, 16777215)) - icon70 = QtGui.QIcon() - icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_alignface2view.setIcon(icon70) + icon71 = QtGui.QIcon() + icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_alignface2view.setIcon(icon71) self.button_alignface2view.setIconSize(QtCore.QSize(32, 32)) self.button_alignface2view.setObjectName(_fromUtf8("button_alignface2view")) self.gridLayout_95.addWidget(self.button_alignface2view, 0, 0, 1, 1) @@ -1664,9 +1676,9 @@ class Ui_Form(object): self.horizontalLayout_78.setObjectName(_fromUtf8("horizontalLayout_78")) self.button_align_faces = QtGui.QPushButton(self.align_tab_2) self.button_align_faces.setMaximumSize(QtCore.QSize(220, 16777215)) - icon71 = QtGui.QIcon() - icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_align_faces.setIcon(icon71) + icon72 = QtGui.QIcon() + icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_align_faces.setIcon(icon72) self.button_align_faces.setIconSize(QtCore.QSize(32, 32)) self.button_align_faces.setObjectName(_fromUtf8("button_align_faces")) self.horizontalLayout_78.addWidget(self.button_align_faces) @@ -1685,9 +1697,9 @@ class Ui_Form(object): self.horizontalLayout_79.setObjectName(_fromUtf8("horizontalLayout_79")) self.button_align_edges = QtGui.QPushButton(self.align_tab_2) self.button_align_edges.setMaximumSize(QtCore.QSize(220, 16777215)) - icon72 = QtGui.QIcon() - icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_align_edges.setIcon(icon72) + icon73 = QtGui.QIcon() + icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_align_edges.setIcon(icon73) self.button_align_edges.setIconSize(QtCore.QSize(32, 32)) self.button_align_edges.setObjectName(_fromUtf8("button_align_edges")) self.horizontalLayout_79.addWidget(self.button_align_edges) @@ -1705,16 +1717,16 @@ class Ui_Form(object): spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_95.addItem(spacerItem15, 5, 0, 1, 1) self.button_joint_points = QtGui.QPushButton(self.align_tab_2) - icon73 = QtGui.QIcon() - icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_joint_points.setIcon(icon73) + icon74 = QtGui.QIcon() + icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_joint_points.setIcon(icon74) self.button_joint_points.setIconSize(QtCore.QSize(32, 32)) self.button_joint_points.setObjectName(_fromUtf8("button_joint_points")) self.gridLayout_95.addWidget(self.button_joint_points, 3, 0, 1, 1) self.button_joint_faces = QtGui.QPushButton(self.align_tab_2) - icon74 = QtGui.QIcon() - icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_joint_faces.setIcon(icon74) + icon75 = QtGui.QIcon() + icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_joint_faces.setIcon(icon75) self.button_joint_faces.setIconSize(QtCore.QSize(32, 32)) self.button_joint_faces.setObjectName(_fromUtf8("button_joint_faces")) self.gridLayout_95.addWidget(self.button_joint_faces, 4, 0, 1, 1) @@ -1884,9 +1896,9 @@ class Ui_Form(object): self.ObjRot_button_select_axis.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_axis.setObjectName(_fromUtf8("ObjRot_button_select_axis")) self.gridLayout_105.addWidget(self.ObjRot_button_select_axis, 1, 0, 1, 1) - icon75 = QtGui.QIcon() - icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_10.addTab(self.tab_18, icon75, _fromUtf8("")) + icon76 = QtGui.QIcon() + icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_10.addTab(self.tab_18, icon76, _fromUtf8("")) self.tab_19 = QtGui.QWidget() self.tab_19.setObjectName(_fromUtf8("tab_19")) self.gridLayout_106 = QtGui.QGridLayout(self.tab_19) @@ -1913,9 +1925,9 @@ class Ui_Form(object): self.ObjRot_button_select_center.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_center.setObjectName(_fromUtf8("ObjRot_button_select_center")) self.gridLayout_106.addWidget(self.ObjRot_button_select_center, 1, 0, 1, 1) - icon76 = QtGui.QIcon() - icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_10.addTab(self.tab_19, icon76, _fromUtf8("")) + icon77 = QtGui.QIcon() + icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_10.addTab(self.tab_19, icon77, _fromUtf8("")) self.gridLayout_104.addWidget(self.tabWidget_10, 1, 0, 1, 1) self.groupBox_21 = QtGui.QGroupBox(self.frame_11) self.groupBox_21.setMinimumSize(QtCore.QSize(150, 67)) @@ -1951,9 +1963,9 @@ class Ui_Form(object): self.ObjRot_button_select_angle.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_angle.setObjectName(_fromUtf8("ObjRot_button_select_angle")) self.gridLayout_109.addWidget(self.ObjRot_button_select_angle, 0, 0, 1, 1) - icon77 = QtGui.QIcon() - icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_11.addTab(self.tab_21, icon77, _fromUtf8("")) + icon78 = QtGui.QIcon() + icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_11.addTab(self.tab_21, icon78, _fromUtf8("")) self.gridLayout_107.addWidget(self.tabWidget_11, 0, 0, 1, 1) self.horizontalLayout_81 = QtGui.QHBoxLayout() self.horizontalLayout_81.setObjectName(_fromUtf8("horizontalLayout_81")) @@ -2102,9 +2114,9 @@ class Ui_Form(object): self.gridLayout_114.addLayout(self.gridLayout_117, 2, 0, 1, 1) self.gridLayout_113.addLayout(self.gridLayout_114, 2, 0, 1, 1) self.gridLayout_112.addWidget(self.groupBox_22, 0, 0, 1, 1) - icon78 = QtGui.QIcon() - icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_12.addTab(self.tab_22, icon78, _fromUtf8("")) + icon79 = QtGui.QIcon() + icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_12.addTab(self.tab_22, icon79, _fromUtf8("")) self.tab_23 = QtGui.QWidget() self.tab_23.setObjectName(_fromUtf8("tab_23")) self.gridLayout_118 = QtGui.QGridLayout(self.tab_23) @@ -2179,9 +2191,9 @@ class Ui_Form(object): self.gridLayout_120.addLayout(self.gridLayout_123, 0, 0, 1, 1) self.gridLayout_119.addLayout(self.gridLayout_120, 2, 0, 1, 1) self.gridLayout_118.addWidget(self.groupBox_23, 0, 0, 1, 1) - icon79 = QtGui.QIcon() - icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_12.addTab(self.tab_23, icon79, _fromUtf8("")) + icon80 = QtGui.QIcon() + icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_12.addTab(self.tab_23, icon80, _fromUtf8("")) self.gridLayout_111.addWidget(self.tabWidget_12, 2, 0, 1, 1) self.horizontalLayout_84 = QtGui.QHBoxLayout() self.horizontalLayout_84.setObjectName(_fromUtf8("horizontalLayout_84")) @@ -2215,65 +2227,58 @@ class Ui_Form(object): sizePolicy.setHeightForWidth(self.button_alignview.sizePolicy().hasHeightForWidth()) self.button_alignview.setSizePolicy(sizePolicy) self.button_alignview.setMaximumSize(QtCore.QSize(16777215, 16777215)) - icon80 = QtGui.QIcon() - icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_alignview.setIcon(icon80) + icon81 = QtGui.QIcon() + icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_alignview.setIcon(icon81) self.button_alignview.setIconSize(QtCore.QSize(32, 32)) self.button_alignview.setObjectName(_fromUtf8("button_alignview")) self.gridLayout_124.addWidget(self.button_alignview, 0, 0, 1, 1) spacerItem22 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_124.addItem(spacerItem22, 2, 0, 1, 1) self.button_trackcamera = QtGui.QPushButton(self.View_Tab_2) - icon81 = QtGui.QIcon() - icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_trackcamera.setIcon(icon81) + icon82 = QtGui.QIcon() + icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_trackcamera.setIcon(icon82) self.button_trackcamera.setIconSize(QtCore.QSize(32, 32)) self.button_trackcamera.setObjectName(_fromUtf8("button_trackcamera")) self.gridLayout_124.addWidget(self.button_trackcamera, 1, 0, 1, 1) - icon82 = QtGui.QIcon() - icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.View_Tab_2, icon82, _fromUtf8("")) + icon83 = QtGui.QIcon() + icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.View_Tab_2, icon83, _fromUtf8("")) self.tab_24 = QtGui.QWidget() self.tab_24.setObjectName(_fromUtf8("tab_24")) self.gridLayout_125 = QtGui.QGridLayout(self.tab_24) self.gridLayout_125.setObjectName(_fromUtf8("gridLayout_125")) - spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_125.addItem(spacerItem23, 9, 0, 1, 1) self.button_isView = QtGui.QPushButton(self.tab_24) - icon83 = QtGui.QIcon() - icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isView.setIcon(icon83) + icon84 = QtGui.QIcon() + icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isView.setIcon(icon84) self.button_isView.setIconSize(QtCore.QSize(32, 32)) self.button_isView.setObjectName(_fromUtf8("button_isView")) - self.gridLayout_125.addWidget(self.button_isView, 8, 0, 1, 1) + self.gridLayout_125.addWidget(self.button_isView, 9, 0, 1, 1) + spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_125.addItem(spacerItem23, 10, 0, 1, 1) self.button_isParallel = QtGui.QPushButton(self.tab_24) - icon84 = QtGui.QIcon() - icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isParallel.setIcon(icon84) + icon85 = QtGui.QIcon() + icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isParallel.setIcon(icon85) self.button_isParallel.setIconSize(QtCore.QSize(32, 32)) self.button_isParallel.setObjectName(_fromUtf8("button_isParallel")) self.gridLayout_125.addWidget(self.button_isParallel, 0, 0, 1, 1) self.button_isAngle = QtGui.QPushButton(self.tab_24) - icon85 = QtGui.QIcon() - icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isAngle.setIcon(icon85) + icon86 = QtGui.QIcon() + icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isAngle.setIcon(icon86) self.button_isAngle.setIconSize(QtCore.QSize(32, 32)) self.button_isAngle.setObjectName(_fromUtf8("button_isAngle")) self.gridLayout_125.addWidget(self.button_isAngle, 4, 0, 1, 1) self.button_isLength = QtGui.QPushButton(self.tab_24) - icon86 = QtGui.QIcon() - icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isLength.setIcon(icon86) + icon87 = QtGui.QIcon() + icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isLength.setIcon(icon87) self.button_isLength.setIconSize(QtCore.QSize(32, 32)) self.button_isLength.setObjectName(_fromUtf8("button_isLength")) self.gridLayout_125.addWidget(self.button_isLength, 6, 0, 1, 1) - self.button_isPerpendicular = QtGui.QPushButton(self.tab_24) - icon87 = QtGui.QIcon() - icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isPerpendicular.setIcon(icon87) - self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32)) - self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular")) - self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1) self.button_isDistance = QtGui.QPushButton(self.tab_24) icon88 = QtGui.QIcon() icon88.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_distanceBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) @@ -2281,30 +2286,44 @@ class Ui_Form(object): self.button_isDistance.setIconSize(QtCore.QSize(32, 32)) self.button_isDistance.setObjectName(_fromUtf8("button_isDistance")) self.gridLayout_125.addWidget(self.button_isDistance, 5, 0, 1, 1) - self.button_isArea = QtGui.QPushButton(self.tab_24) - icon89 = QtGui.QIcon() - icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isArea.setIcon(icon89) - self.button_isArea.setIconSize(QtCore.QSize(32, 32)) - self.button_isArea.setObjectName(_fromUtf8("button_isArea")) - self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1) self.button_isCoplanar = QtGui.QPushButton(self.tab_24) - icon90 = QtGui.QIcon() - icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isCoplanar.setIcon(icon90) + icon89 = QtGui.QIcon() + icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isCoplanar.setIcon(icon89) self.button_isCoplanar.setIconSize(QtCore.QSize(32, 32)) self.button_isCoplanar.setObjectName(_fromUtf8("button_isCoplanar")) self.gridLayout_125.addWidget(self.button_isCoplanar, 2, 0, 1, 1) - self.button_isClearance = QtGui.QPushButton(self.tab_24) + self.button_isArea = QtGui.QPushButton(self.tab_24) + icon90 = QtGui.QIcon() + icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isArea.setIcon(icon90) + self.button_isArea.setIconSize(QtCore.QSize(32, 32)) + self.button_isArea.setObjectName(_fromUtf8("button_isArea")) + self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1) + self.button_isPerpendicular = QtGui.QPushButton(self.tab_24) icon91 = QtGui.QIcon() - icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isClearance.setIcon(icon91) + icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isPerpendicular.setIcon(icon91) + self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32)) + self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular")) + self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1) + self.button_isClearance = QtGui.QPushButton(self.tab_24) + icon92 = QtGui.QIcon() + icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isClearance.setIcon(icon92) self.button_isClearance.setIconSize(QtCore.QSize(32, 32)) self.button_isClearance.setObjectName(_fromUtf8("button_isClearance")) self.gridLayout_125.addWidget(self.button_isClearance, 3, 0, 1, 1) - icon92 = QtGui.QIcon() - icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.tab_24, icon92, _fromUtf8("")) + self.button_isRadius = QtGui.QPushButton(self.tab_24) + icon93 = QtGui.QIcon() + icon93.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isRadius.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isRadius.setIcon(icon93) + self.button_isRadius.setIconSize(QtCore.QSize(32, 32)) + self.button_isRadius.setObjectName(_fromUtf8("button_isRadius")) + self.gridLayout_125.addWidget(self.button_isRadius, 8, 0, 1, 1) + icon94 = QtGui.QIcon() + icon94.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.tab_24, icon94, _fromUtf8("")) self.gridLayout_128.addWidget(self.tabWidget_7, 0, 0, 1, 1) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.gridLayout_34.addWidget(self.scrollArea, 0, 0, 1, 1) @@ -2321,7 +2340,7 @@ class Ui_Form(object): self.gridLayout_34.addLayout(self.horizontalLayout_43, 1, 0, 1, 1) self.retranslateUi(Form) - self.tabWidget_7.setCurrentIndex(4) + self.tabWidget_7.setCurrentIndex(7) self.point_loc_comboBox.setCurrentIndex(1) self.tabWidget_8.setCurrentIndex(0) self.transition_comboBox.setCurrentIndex(2) @@ -2637,7 +2656,8 @@ class Ui_Form(object): "- Second push this button\n" "\n" "NB: \n" -" - The percentage of the extension can be defined first.", None)) +" - The percentage of the extension can be defined first.\n" +" - Negative percentage will shrink the Axis", None)) self.button_extension_axis.setText(_translate("Form", "Enlarge(Axis)", None)) self.extension_axis.setToolTip(_translate("Form", "Extension of the Line in percentage of original length of the Line.\n" "If the extension is 50% it means that each side is extended with 25% length.\n" @@ -2696,7 +2716,7 @@ class Ui_Form(object): self.ParCurve_button_store_2.setText(_translate("Form", "Store", None)) self.ParCurve_button_apply_2.setToolTip(_translate("Form", "Click to visualize the curve.", None)) self.ParCurve_button_apply_2.setText(_translate("Form", "Apply", None)) - self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "2D", None)) + self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "Parametric 2D", None)) self.ParCurve_comboBox_3.setToolTip(_translate("Form", "Choose another curve from the list.", None)) self.ParCurve_button_edit_3.setToolTip(_translate("Form", "Click to access to a table where you can edit all parameters of all curves and \n" "save your custom curves.", None)) @@ -2734,7 +2754,7 @@ class Ui_Form(object): self.ParCurve_button_store_3.setText(_translate("Form", "Store", None)) self.ParCurve_button_apply_3.setToolTip(_translate("Form", "Click to visualize the curve.", None)) self.ParCurve_button_apply_3.setText(_translate("Form", "Apply", None)) - self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "3D", None)) + self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "Parametric 3D", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.Wire_Tab_2), _translate("Form", "Wire", None)) self.button_linecenter_circle.setToolTip(_translate("Form", "Select an Axis and a Point to create a Circle\n" "centered on the Point, perpendicular to the Axis \n" @@ -2807,6 +2827,14 @@ class Ui_Form(object): "# 0 (default), 1 (right corners) or 2 (rounded corners).)\n" "", None)) self.button_sweep.setText(_translate("Form", "Section Sweep", None)) + self.button_beam.setToolTip(_translate("Form", "Beam:\n" +"Will extrude a Section along a Linear Trajectory.\n" +"- Select first one Section wire (Closed wire will generate volumes by default)\n" +"(This Section can be a compound from sketch to realize \"tube\")\n" +"- Select one or several wire(s) as Trajectory(ies)\n" +"- Then push this button\n" +"", None)) + self.button_beam.setText(_translate("Form", "Beam", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_17), _translate("Form", "Sweeping", None)) self.button_click_for_plane.setToolTip(_translate("Form", "Click:\n" "Create a rectangular Plane perpendicular to the view at location of one mouse click.\n" @@ -2994,6 +3022,11 @@ class Ui_Form(object): self.button_revolve.setText(_translate("Form", "Revolve", None)) self.angle_revolve.setToolTip(_translate("Form", "Angle of the revolution in degrees.", None)) self.angle_revolve.setText(_translate("Form", "360", None)) + self.button_copy_objects.setToolTip(_translate("Form", "Duplicate:\n" +"Make a copy of an object or a selected subObject part:\n" +"- Select one or several object(s) or subobject(s)\n" +"- Then push this button", None)) + self.button_copy_objects.setText(_translate("Form", "Duplicate", None)) self.button_common.setToolTip(_translate("Form", "Compute the common parts between selected shapes.\n" "- Select at least two objects and click.\n" "\n" @@ -3287,34 +3320,39 @@ class Ui_Form(object): "Click this button\n" " ", None)) self.button_isLength.setText(_translate("Form", "Length ?", None)) - self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n" -"- Select the 2 faces/planes or 2 Edges/Lines and\n" -"Click this button\n" -"\n" -"NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) - self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None)) self.button_isDistance.setToolTip(_translate("Form", "Check for two Points distance:\n" "Distances measurement and Delta values (on main Axes) between two Points\n" "- Select the 2 Points and\n" "Click this button\n" " ", None)) self.button_isDistance.setText(_translate("Form", "Distance ?", None)) - self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n" -"Area measurement for a Plane or a set of Planes.\n" -"- Select One or several Planes and\n" -"Click this button", None)) - self.button_isArea.setText(_translate("Form", "Area ?", None)) self.button_isCoplanar.setToolTip(_translate("Form", "Check if two faces or two Edges are Coplanar:\n" "- Select the 2 faces/planes or 2 Edges/Lines and\n" "Click this button\n" "\n" "NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) self.button_isCoplanar.setText(_translate("Form", "are Coplanar ?", None)) + self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n" +"Area measurement for a Plane or a set of Planes.\n" +"- Select One or several Planes and\n" +"- Then click this button", None)) + self.button_isArea.setText(_translate("Form", "Area ?", None)) + self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n" +"- Select the 2 faces/planes or 2 Edges/Lines and\n" +"Click this button\n" +"\n" +"NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) + self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None)) self.button_isClearance.setToolTip(_translate("Form", "Check for two Objects Clearance distance:\n" "Quick measurements between parallel faces and similarly placed objects\n" "- Select the 2 Objects and\n" "Click this button", None)) self.button_isClearance.setText(_translate("Form", "Distance Clearance ?", None)) + self.button_isRadius.setToolTip(_translate("Form", "Check for Radius:\n" +"Radius measurement for a Circle or an Arc.\n" +"- Select One Circle or Arc\n" +"- Then click this button", None)) + self.button_isRadius.setText(_translate("Form", "Radius ?", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_24), _translate("Form", "Check", None)) self.button_WF_quit.setText(_translate("Form", "Close", None)) self.label_release.setText(_translate("Form", "2015", None)) diff --git a/WorkFeature/Ui/WFGui_2015.ui b/WorkFeature/Ui/WFGui_2015.ui index f3f6d99..80abcad 100644 --- a/WorkFeature/Ui/WFGui_2015.ui +++ b/WorkFeature/Ui/WFGui_2015.ui @@ -57,7 +57,7 @@ QTabWidget::West - 4 + 0 @@ -1745,7 +1745,8 @@ Extend an Axis at two extrema. - Second push this button NB: - - The percentage of the extension can be defined first. + - The percentage of the extension can be defined first. + - Negative percentage will shrink the Axis Enlarge(Axis) @@ -1908,7 +1909,7 @@ Then click on this button. - 2D + Parametric 2D @@ -2514,7 +2515,7 @@ To save your curve you need to go to "Edit". - 3D + Parametric 3D @@ -3412,7 +3413,7 @@ Then click on this button. Sweeping - + @@ -3560,7 +3561,7 @@ NB: You can change first: - + Qt::Vertical @@ -3573,6 +3574,32 @@ NB: You can change first: + + + + Beam: +Will extrude a Section along a Linear Trajectory. +- Select first one Section wire (Closed wire will generate volumes by default) +(This Section can be a compound from sketch to realize "tube") +- Select one or several wire(s) as Trajectory(ies) +- Then push this button + + + + Beam + + + + ../Icons/WF_Beam.svg../Icons/WF_Beam.svg + + + + 32 + 32 + + + + @@ -4762,6 +4789,29 @@ NB: + + + Duplicate: +Make a copy of an object or a selected subObject part: +- Select one or several object(s) or subobject(s) +- Then push this button + + + Duplicate + + + + ../Icons/WF_objectCopy.svg../Icons/WF_objectCopy.svg + + + + 32 + 32 + + + + + Compute the common parts between selected shapes. @@ -4788,7 +4838,7 @@ Original code from HighlightCommon.FCMacro - + Compute the difference parts between selected shapes. @@ -4814,7 +4864,7 @@ Original code from HighlightDifference.FCMacro - + Qt::Vertical @@ -6633,19 +6683,6 @@ ReClick with same selection, will reverse the direction. - - - Qt::Vertical - - - - 20 - 40 - - - - - Detect the position of the camera. @@ -6667,6 +6704,19 @@ by the function getCameraOrientation(). + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -6747,30 +6797,6 @@ Click this button - - - - Check if two faces or two Edges are Perpendicular: -- Select the 2 faces/planes or 2 Edges/Lines and -Click this button - -NB: You can change the tolerance in "Ori. Pref." TAB - - - are Perpendicular ? - - - - ../Icons/WF_isPerpendicular.svg../Icons/WF_isPerpendicular.svg - - - - 32 - 32 - - - - @@ -6795,29 +6821,6 @@ Click this button - - - - Check for surface Area: -Area measurement for a Plane or a set of Planes. -- Select One or several Planes and -Click this button - - - Area ? - - - - ../Icons/WF_isArea.svg../Icons/WF_isArea.svg - - - - 32 - 32 - - - - @@ -6842,6 +6845,53 @@ NB: You can change the tolerance in "Ori. Pref." TAB + + + + Check for surface Area: +Area measurement for a Plane or a set of Planes. +- Select One or several Planes and +- Then click this button + + + Area ? + + + + ../Icons/WF_isArea.svg../Icons/WF_isArea.svg + + + + 32 + 32 + + + + + + + + Check if two faces or two Edges are Perpendicular: +- Select the 2 faces/planes or 2 Edges/Lines and +Click this button + +NB: You can change the tolerance in "Ori. Pref." TAB + + + are Perpendicular ? + + + + ../Icons/WF_isPerpendicular.svg../Icons/WF_isPerpendicular.svg + + + + 32 + 32 + + + + @@ -6865,6 +6915,29 @@ Click this button + + + + Check for Radius: +Radius measurement for a Circle or an Arc. +- Select One Circle or Arc +- Then click this button + + + Radius ? + + + + ../Icons/WF_isRadius.svg../Icons/WF_isRadius.svg + + + + 32 + 32 + + + + diff --git a/WorkFeature/WFGui_2015.py b/WorkFeature/WFGui_2015.py index 13fb09c..075986e 100644 --- a/WorkFeature/WFGui_2015.py +++ b/WorkFeature/WFGui_2015.py @@ -2,8 +2,8 @@ # Form implementation generated from reading ui file 'WFGui_2015.ui' # -# Created: Sat Nov 7 20:09:36 2015 -# by: PySide UI code generator 4.11.2 +# Created: Sun Dec 13 18:49:39 2015 +# by: PySide UI code generator 4.11.3 # # WARNING! All changes made in this file will be lost! @@ -636,7 +636,7 @@ class Ui_Form(object): self.scrollArea_2.setWidgetResizable(True) self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2")) self.scrollAreaWidgetContents_5 = QtGui.QWidget() - self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 259, 650)) + self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 245, 648)) self.scrollAreaWidgetContents_5.setObjectName(_fromUtf8("scrollAreaWidgetContents_5")) self.gridLayout_76 = QtGui.QGridLayout(self.scrollAreaWidgetContents_5) self.gridLayout_76.setObjectName(_fromUtf8("gridLayout_76")) @@ -1169,8 +1169,8 @@ class Ui_Form(object): self.tabWidget_7.addTab(self.tab_16, icon45, _fromUtf8("")) self.tab_17 = QtGui.QWidget() self.tab_17.setObjectName(_fromUtf8("tab_17")) - self.gridLayout_85 = QtGui.QGridLayout(self.tab_17) - self.gridLayout_85.setObjectName(_fromUtf8("gridLayout_85")) + self.gridLayout_6 = QtGui.QGridLayout(self.tab_17) + self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) self.frame_9 = QtGui.QFrame(self.tab_17) self.frame_9.setFrameShape(QtGui.QFrame.StyledPanel) self.frame_9.setFrameShadow(QtGui.QFrame.Raised) @@ -1209,11 +1209,16 @@ class Ui_Form(object): self.button_sweep.setIconSize(QtCore.QSize(32, 32)) self.button_sweep.setObjectName(_fromUtf8("button_sweep")) self.gridLayout_86.addWidget(self.button_sweep, 1, 0, 1, 1) - self.gridLayout_85.addWidget(self.frame_9, 0, 0, 1, 1) + self.gridLayout_6.addWidget(self.frame_9, 0, 0, 1, 1) spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_85.addItem(spacerItem11, 1, 0, 1, 1) + self.gridLayout_6.addItem(spacerItem11, 2, 0, 1, 1) + self.button_beam = QtGui.QPushButton(self.tab_17) icon47 = QtGui.QIcon() icon47.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Beam.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_beam.setIcon(icon47) + self.button_beam.setIconSize(QtCore.QSize(32, 32)) + self.button_beam.setObjectName(_fromUtf8("button_beam")) + self.gridLayout_6.addWidget(self.button_beam, 1, 0, 1, 1) self.tabWidget_7.addTab(self.tab_17, icon47, _fromUtf8("")) self.Plane_Tab1_3 = QtGui.QWidget() self.Plane_Tab1_3.setObjectName(_fromUtf8("Plane_Tab1_3")) @@ -1618,25 +1623,32 @@ class Ui_Form(object): self.angle_revolve.setObjectName(_fromUtf8("angle_revolve")) self.horizontalLayout_76.addWidget(self.angle_revolve) self.gridLayout_5.addLayout(self.horizontalLayout_76, 7, 0, 1, 1) - self.button_common = QtGui.QPushButton(self.Objects_Tab2_2) + self.button_copy_objects = QtGui.QPushButton(self.Objects_Tab2_2) icon67 = QtGui.QIcon() - icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_common.setIcon(icon67) + icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectCopy.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_copy_objects.setIcon(icon67) + self.button_copy_objects.setIconSize(QtCore.QSize(32, 32)) + self.button_copy_objects.setObjectName(_fromUtf8("button_copy_objects")) + self.gridLayout_5.addWidget(self.button_copy_objects, 8, 0, 1, 1) + self.button_common = QtGui.QPushButton(self.Objects_Tab2_2) + icon68 = QtGui.QIcon() + icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_common.setIcon(icon68) self.button_common.setIconSize(QtCore.QSize(32, 32)) self.button_common.setObjectName(_fromUtf8("button_common")) - self.gridLayout_5.addWidget(self.button_common, 8, 0, 1, 1) + self.gridLayout_5.addWidget(self.button_common, 9, 0, 1, 1) self.button_difference = QtGui.QPushButton(self.Objects_Tab2_2) - icon68 = QtGui.QIcon() - icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_difference.setIcon(icon68) + icon69 = QtGui.QIcon() + icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_difference.setIcon(icon69) self.button_difference.setIconSize(QtCore.QSize(32, 32)) self.button_difference.setObjectName(_fromUtf8("button_difference")) - self.gridLayout_5.addWidget(self.button_difference, 9, 0, 1, 1) + self.gridLayout_5.addWidget(self.button_difference, 10, 0, 1, 1) spacerItem14 = QtGui.QSpacerItem(17, 8, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_5.addItem(spacerItem14, 10, 0, 1, 1) - icon69 = QtGui.QIcon() - icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.Objects_Tab2_2, icon69, _fromUtf8("")) + self.gridLayout_5.addItem(spacerItem14, 11, 0, 1, 1) + icon70 = QtGui.QIcon() + icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.Objects_Tab2_2, icon70, _fromUtf8("")) self.Modif_Tab_2 = QtGui.QWidget() self.Modif_Tab_2.setObjectName(_fromUtf8("Modif_Tab_2")) self.gridLayout_94 = QtGui.QGridLayout(self.Modif_Tab_2) @@ -1654,9 +1666,9 @@ class Ui_Form(object): sizePolicy.setHeightForWidth(self.button_alignface2view.sizePolicy().hasHeightForWidth()) self.button_alignface2view.setSizePolicy(sizePolicy) self.button_alignface2view.setMaximumSize(QtCore.QSize(220, 16777215)) - icon70 = QtGui.QIcon() - icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_alignface2view.setIcon(icon70) + icon71 = QtGui.QIcon() + icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_alignface2view.setIcon(icon71) self.button_alignface2view.setIconSize(QtCore.QSize(32, 32)) self.button_alignface2view.setObjectName(_fromUtf8("button_alignface2view")) self.gridLayout_95.addWidget(self.button_alignface2view, 0, 0, 1, 1) @@ -1664,9 +1676,9 @@ class Ui_Form(object): self.horizontalLayout_78.setObjectName(_fromUtf8("horizontalLayout_78")) self.button_align_faces = QtGui.QPushButton(self.align_tab_2) self.button_align_faces.setMaximumSize(QtCore.QSize(220, 16777215)) - icon71 = QtGui.QIcon() - icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_align_faces.setIcon(icon71) + icon72 = QtGui.QIcon() + icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_align_faces.setIcon(icon72) self.button_align_faces.setIconSize(QtCore.QSize(32, 32)) self.button_align_faces.setObjectName(_fromUtf8("button_align_faces")) self.horizontalLayout_78.addWidget(self.button_align_faces) @@ -1685,9 +1697,9 @@ class Ui_Form(object): self.horizontalLayout_79.setObjectName(_fromUtf8("horizontalLayout_79")) self.button_align_edges = QtGui.QPushButton(self.align_tab_2) self.button_align_edges.setMaximumSize(QtCore.QSize(220, 16777215)) - icon72 = QtGui.QIcon() - icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_align_edges.setIcon(icon72) + icon73 = QtGui.QIcon() + icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_align_edges.setIcon(icon73) self.button_align_edges.setIconSize(QtCore.QSize(32, 32)) self.button_align_edges.setObjectName(_fromUtf8("button_align_edges")) self.horizontalLayout_79.addWidget(self.button_align_edges) @@ -1705,16 +1717,16 @@ class Ui_Form(object): spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_95.addItem(spacerItem15, 5, 0, 1, 1) self.button_joint_points = QtGui.QPushButton(self.align_tab_2) - icon73 = QtGui.QIcon() - icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_joint_points.setIcon(icon73) + icon74 = QtGui.QIcon() + icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_joint_points.setIcon(icon74) self.button_joint_points.setIconSize(QtCore.QSize(32, 32)) self.button_joint_points.setObjectName(_fromUtf8("button_joint_points")) self.gridLayout_95.addWidget(self.button_joint_points, 3, 0, 1, 1) self.button_joint_faces = QtGui.QPushButton(self.align_tab_2) - icon74 = QtGui.QIcon() - icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_joint_faces.setIcon(icon74) + icon75 = QtGui.QIcon() + icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_joint_faces.setIcon(icon75) self.button_joint_faces.setIconSize(QtCore.QSize(32, 32)) self.button_joint_faces.setObjectName(_fromUtf8("button_joint_faces")) self.gridLayout_95.addWidget(self.button_joint_faces, 4, 0, 1, 1) @@ -1884,9 +1896,9 @@ class Ui_Form(object): self.ObjRot_button_select_axis.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_axis.setObjectName(_fromUtf8("ObjRot_button_select_axis")) self.gridLayout_105.addWidget(self.ObjRot_button_select_axis, 1, 0, 1, 1) - icon75 = QtGui.QIcon() - icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_10.addTab(self.tab_18, icon75, _fromUtf8("")) + icon76 = QtGui.QIcon() + icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_10.addTab(self.tab_18, icon76, _fromUtf8("")) self.tab_19 = QtGui.QWidget() self.tab_19.setObjectName(_fromUtf8("tab_19")) self.gridLayout_106 = QtGui.QGridLayout(self.tab_19) @@ -1913,9 +1925,9 @@ class Ui_Form(object): self.ObjRot_button_select_center.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_center.setObjectName(_fromUtf8("ObjRot_button_select_center")) self.gridLayout_106.addWidget(self.ObjRot_button_select_center, 1, 0, 1, 1) - icon76 = QtGui.QIcon() - icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_10.addTab(self.tab_19, icon76, _fromUtf8("")) + icon77 = QtGui.QIcon() + icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_10.addTab(self.tab_19, icon77, _fromUtf8("")) self.gridLayout_104.addWidget(self.tabWidget_10, 1, 0, 1, 1) self.groupBox_21 = QtGui.QGroupBox(self.frame_11) self.groupBox_21.setMinimumSize(QtCore.QSize(150, 67)) @@ -1951,9 +1963,9 @@ class Ui_Form(object): self.ObjRot_button_select_angle.setMaximumSize(QtCore.QSize(80, 16777215)) self.ObjRot_button_select_angle.setObjectName(_fromUtf8("ObjRot_button_select_angle")) self.gridLayout_109.addWidget(self.ObjRot_button_select_angle, 0, 0, 1, 1) - icon77 = QtGui.QIcon() - icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_11.addTab(self.tab_21, icon77, _fromUtf8("")) + icon78 = QtGui.QIcon() + icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_11.addTab(self.tab_21, icon78, _fromUtf8("")) self.gridLayout_107.addWidget(self.tabWidget_11, 0, 0, 1, 1) self.horizontalLayout_81 = QtGui.QHBoxLayout() self.horizontalLayout_81.setObjectName(_fromUtf8("horizontalLayout_81")) @@ -2102,9 +2114,9 @@ class Ui_Form(object): self.gridLayout_114.addLayout(self.gridLayout_117, 2, 0, 1, 1) self.gridLayout_113.addLayout(self.gridLayout_114, 2, 0, 1, 1) self.gridLayout_112.addWidget(self.groupBox_22, 0, 0, 1, 1) - icon78 = QtGui.QIcon() - icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_12.addTab(self.tab_22, icon78, _fromUtf8("")) + icon79 = QtGui.QIcon() + icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_12.addTab(self.tab_22, icon79, _fromUtf8("")) self.tab_23 = QtGui.QWidget() self.tab_23.setObjectName(_fromUtf8("tab_23")) self.gridLayout_118 = QtGui.QGridLayout(self.tab_23) @@ -2179,9 +2191,9 @@ class Ui_Form(object): self.gridLayout_120.addLayout(self.gridLayout_123, 0, 0, 1, 1) self.gridLayout_119.addLayout(self.gridLayout_120, 2, 0, 1, 1) self.gridLayout_118.addWidget(self.groupBox_23, 0, 0, 1, 1) - icon79 = QtGui.QIcon() - icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_12.addTab(self.tab_23, icon79, _fromUtf8("")) + icon80 = QtGui.QIcon() + icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_12.addTab(self.tab_23, icon80, _fromUtf8("")) self.gridLayout_111.addWidget(self.tabWidget_12, 2, 0, 1, 1) self.horizontalLayout_84 = QtGui.QHBoxLayout() self.horizontalLayout_84.setObjectName(_fromUtf8("horizontalLayout_84")) @@ -2215,65 +2227,58 @@ class Ui_Form(object): sizePolicy.setHeightForWidth(self.button_alignview.sizePolicy().hasHeightForWidth()) self.button_alignview.setSizePolicy(sizePolicy) self.button_alignview.setMaximumSize(QtCore.QSize(16777215, 16777215)) - icon80 = QtGui.QIcon() - icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_alignview.setIcon(icon80) + icon81 = QtGui.QIcon() + icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_alignview.setIcon(icon81) self.button_alignview.setIconSize(QtCore.QSize(32, 32)) self.button_alignview.setObjectName(_fromUtf8("button_alignview")) self.gridLayout_124.addWidget(self.button_alignview, 0, 0, 1, 1) spacerItem22 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.gridLayout_124.addItem(spacerItem22, 2, 0, 1, 1) self.button_trackcamera = QtGui.QPushButton(self.View_Tab_2) - icon81 = QtGui.QIcon() - icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_trackcamera.setIcon(icon81) + icon82 = QtGui.QIcon() + icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_trackcamera.setIcon(icon82) self.button_trackcamera.setIconSize(QtCore.QSize(32, 32)) self.button_trackcamera.setObjectName(_fromUtf8("button_trackcamera")) self.gridLayout_124.addWidget(self.button_trackcamera, 1, 0, 1, 1) - icon82 = QtGui.QIcon() - icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.View_Tab_2, icon82, _fromUtf8("")) + icon83 = QtGui.QIcon() + icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.View_Tab_2, icon83, _fromUtf8("")) self.tab_24 = QtGui.QWidget() self.tab_24.setObjectName(_fromUtf8("tab_24")) self.gridLayout_125 = QtGui.QGridLayout(self.tab_24) self.gridLayout_125.setObjectName(_fromUtf8("gridLayout_125")) - spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_125.addItem(spacerItem23, 9, 0, 1, 1) self.button_isView = QtGui.QPushButton(self.tab_24) - icon83 = QtGui.QIcon() - icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isView.setIcon(icon83) + icon84 = QtGui.QIcon() + icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isView.setIcon(icon84) self.button_isView.setIconSize(QtCore.QSize(32, 32)) self.button_isView.setObjectName(_fromUtf8("button_isView")) - self.gridLayout_125.addWidget(self.button_isView, 8, 0, 1, 1) + self.gridLayout_125.addWidget(self.button_isView, 9, 0, 1, 1) + spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_125.addItem(spacerItem23, 10, 0, 1, 1) self.button_isParallel = QtGui.QPushButton(self.tab_24) - icon84 = QtGui.QIcon() - icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isParallel.setIcon(icon84) + icon85 = QtGui.QIcon() + icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isParallel.setIcon(icon85) self.button_isParallel.setIconSize(QtCore.QSize(32, 32)) self.button_isParallel.setObjectName(_fromUtf8("button_isParallel")) self.gridLayout_125.addWidget(self.button_isParallel, 0, 0, 1, 1) self.button_isAngle = QtGui.QPushButton(self.tab_24) - icon85 = QtGui.QIcon() - icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isAngle.setIcon(icon85) + icon86 = QtGui.QIcon() + icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isAngle.setIcon(icon86) self.button_isAngle.setIconSize(QtCore.QSize(32, 32)) self.button_isAngle.setObjectName(_fromUtf8("button_isAngle")) self.gridLayout_125.addWidget(self.button_isAngle, 4, 0, 1, 1) self.button_isLength = QtGui.QPushButton(self.tab_24) - icon86 = QtGui.QIcon() - icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isLength.setIcon(icon86) + icon87 = QtGui.QIcon() + icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isLength.setIcon(icon87) self.button_isLength.setIconSize(QtCore.QSize(32, 32)) self.button_isLength.setObjectName(_fromUtf8("button_isLength")) self.gridLayout_125.addWidget(self.button_isLength, 6, 0, 1, 1) - self.button_isPerpendicular = QtGui.QPushButton(self.tab_24) - icon87 = QtGui.QIcon() - icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isPerpendicular.setIcon(icon87) - self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32)) - self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular")) - self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1) self.button_isDistance = QtGui.QPushButton(self.tab_24) icon88 = QtGui.QIcon() icon88.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_distanceBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) @@ -2281,30 +2286,44 @@ class Ui_Form(object): self.button_isDistance.setIconSize(QtCore.QSize(32, 32)) self.button_isDistance.setObjectName(_fromUtf8("button_isDistance")) self.gridLayout_125.addWidget(self.button_isDistance, 5, 0, 1, 1) - self.button_isArea = QtGui.QPushButton(self.tab_24) - icon89 = QtGui.QIcon() - icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isArea.setIcon(icon89) - self.button_isArea.setIconSize(QtCore.QSize(32, 32)) - self.button_isArea.setObjectName(_fromUtf8("button_isArea")) - self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1) self.button_isCoplanar = QtGui.QPushButton(self.tab_24) - icon90 = QtGui.QIcon() - icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isCoplanar.setIcon(icon90) + icon89 = QtGui.QIcon() + icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isCoplanar.setIcon(icon89) self.button_isCoplanar.setIconSize(QtCore.QSize(32, 32)) self.button_isCoplanar.setObjectName(_fromUtf8("button_isCoplanar")) self.gridLayout_125.addWidget(self.button_isCoplanar, 2, 0, 1, 1) - self.button_isClearance = QtGui.QPushButton(self.tab_24) + self.button_isArea = QtGui.QPushButton(self.tab_24) + icon90 = QtGui.QIcon() + icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isArea.setIcon(icon90) + self.button_isArea.setIconSize(QtCore.QSize(32, 32)) + self.button_isArea.setObjectName(_fromUtf8("button_isArea")) + self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1) + self.button_isPerpendicular = QtGui.QPushButton(self.tab_24) icon91 = QtGui.QIcon() - icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.button_isClearance.setIcon(icon91) + icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isPerpendicular.setIcon(icon91) + self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32)) + self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular")) + self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1) + self.button_isClearance = QtGui.QPushButton(self.tab_24) + icon92 = QtGui.QIcon() + icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isClearance.setIcon(icon92) self.button_isClearance.setIconSize(QtCore.QSize(32, 32)) self.button_isClearance.setObjectName(_fromUtf8("button_isClearance")) self.gridLayout_125.addWidget(self.button_isClearance, 3, 0, 1, 1) - icon92 = QtGui.QIcon() - icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.tabWidget_7.addTab(self.tab_24, icon92, _fromUtf8("")) + self.button_isRadius = QtGui.QPushButton(self.tab_24) + icon93 = QtGui.QIcon() + icon93.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isRadius.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.button_isRadius.setIcon(icon93) + self.button_isRadius.setIconSize(QtCore.QSize(32, 32)) + self.button_isRadius.setObjectName(_fromUtf8("button_isRadius")) + self.gridLayout_125.addWidget(self.button_isRadius, 8, 0, 1, 1) + icon94 = QtGui.QIcon() + icon94.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.tabWidget_7.addTab(self.tab_24, icon94, _fromUtf8("")) self.gridLayout_128.addWidget(self.tabWidget_7, 0, 0, 1, 1) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.gridLayout_34.addWidget(self.scrollArea, 0, 0, 1, 1) @@ -2321,7 +2340,7 @@ class Ui_Form(object): self.gridLayout_34.addLayout(self.horizontalLayout_43, 1, 0, 1, 1) self.retranslateUi(Form) - self.tabWidget_7.setCurrentIndex(4) + self.tabWidget_7.setCurrentIndex(7) self.point_loc_comboBox.setCurrentIndex(1) self.tabWidget_8.setCurrentIndex(0) self.transition_comboBox.setCurrentIndex(2) @@ -2637,7 +2656,8 @@ class Ui_Form(object): "- Second push this button\n" "\n" "NB: \n" -" - The percentage of the extension can be defined first.", None)) +" - The percentage of the extension can be defined first.\n" +" - Negative percentage will shrink the Axis", None)) self.button_extension_axis.setText(_translate("Form", "Enlarge(Axis)", None)) self.extension_axis.setToolTip(_translate("Form", "Extension of the Line in percentage of original length of the Line.\n" "If the extension is 50% it means that each side is extended with 25% length.\n" @@ -2696,7 +2716,7 @@ class Ui_Form(object): self.ParCurve_button_store_2.setText(_translate("Form", "Store", None)) self.ParCurve_button_apply_2.setToolTip(_translate("Form", "Click to visualize the curve.", None)) self.ParCurve_button_apply_2.setText(_translate("Form", "Apply", None)) - self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "2D", None)) + self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "Parametric 2D", None)) self.ParCurve_comboBox_3.setToolTip(_translate("Form", "Choose another curve from the list.", None)) self.ParCurve_button_edit_3.setToolTip(_translate("Form", "Click to access to a table where you can edit all parameters of all curves and \n" "save your custom curves.", None)) @@ -2734,7 +2754,7 @@ class Ui_Form(object): self.ParCurve_button_store_3.setText(_translate("Form", "Store", None)) self.ParCurve_button_apply_3.setToolTip(_translate("Form", "Click to visualize the curve.", None)) self.ParCurve_button_apply_3.setText(_translate("Form", "Apply", None)) - self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "3D", None)) + self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "Parametric 3D", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.Wire_Tab_2), _translate("Form", "Wire", None)) self.button_linecenter_circle.setToolTip(_translate("Form", "Select an Axis and a Point to create a Circle\n" "centered on the Point, perpendicular to the Axis \n" @@ -2807,6 +2827,14 @@ class Ui_Form(object): "# 0 (default), 1 (right corners) or 2 (rounded corners).)\n" "", None)) self.button_sweep.setText(_translate("Form", "Section Sweep", None)) + self.button_beam.setToolTip(_translate("Form", "Beam:\n" +"Will extrude a Section along a Linear Trajectory.\n" +"- Select first one Section wire (Closed wire will generate volumes by default)\n" +"(This Section can be a compound from sketch to realize \"tube\")\n" +"- Select one or several wire(s) as Trajectory(ies)\n" +"- Then push this button\n" +"", None)) + self.button_beam.setText(_translate("Form", "Beam", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_17), _translate("Form", "Sweeping", None)) self.button_click_for_plane.setToolTip(_translate("Form", "Click:\n" "Create a rectangular Plane perpendicular to the view at location of one mouse click.\n" @@ -2994,6 +3022,11 @@ class Ui_Form(object): self.button_revolve.setText(_translate("Form", "Revolve", None)) self.angle_revolve.setToolTip(_translate("Form", "Angle of the revolution in degrees.", None)) self.angle_revolve.setText(_translate("Form", "360", None)) + self.button_copy_objects.setToolTip(_translate("Form", "Duplicate:\n" +"Make a copy of an object or a selected subObject part:\n" +"- Select one or several object(s) or subobject(s)\n" +"- Then push this button", None)) + self.button_copy_objects.setText(_translate("Form", "Duplicate", None)) self.button_common.setToolTip(_translate("Form", "Compute the common parts between selected shapes.\n" "- Select at least two objects and click.\n" "\n" @@ -3287,34 +3320,39 @@ class Ui_Form(object): "Click this button\n" " ", None)) self.button_isLength.setText(_translate("Form", "Length ?", None)) - self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n" -"- Select the 2 faces/planes or 2 Edges/Lines and\n" -"Click this button\n" -"\n" -"NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) - self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None)) self.button_isDistance.setToolTip(_translate("Form", "Check for two Points distance:\n" "Distances measurement and Delta values (on main Axes) between two Points\n" "- Select the 2 Points and\n" "Click this button\n" " ", None)) self.button_isDistance.setText(_translate("Form", "Distance ?", None)) - self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n" -"Area measurement for a Plane or a set of Planes.\n" -"- Select One or several Planes and\n" -"Click this button", None)) - self.button_isArea.setText(_translate("Form", "Area ?", None)) self.button_isCoplanar.setToolTip(_translate("Form", "Check if two faces or two Edges are Coplanar:\n" "- Select the 2 faces/planes or 2 Edges/Lines and\n" "Click this button\n" "\n" "NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) self.button_isCoplanar.setText(_translate("Form", "are Coplanar ?", None)) + self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n" +"Area measurement for a Plane or a set of Planes.\n" +"- Select One or several Planes and\n" +"- Then click this button", None)) + self.button_isArea.setText(_translate("Form", "Area ?", None)) + self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n" +"- Select the 2 faces/planes or 2 Edges/Lines and\n" +"Click this button\n" +"\n" +"NB: You can change the tolerance in \"Ori. Pref.\" TAB", None)) + self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None)) self.button_isClearance.setToolTip(_translate("Form", "Check for two Objects Clearance distance:\n" "Quick measurements between parallel faces and similarly placed objects\n" "- Select the 2 Objects and\n" "Click this button", None)) self.button_isClearance.setText(_translate("Form", "Distance Clearance ?", None)) + self.button_isRadius.setToolTip(_translate("Form", "Check for Radius:\n" +"Radius measurement for a Circle or an Arc.\n" +"- Select One Circle or Arc\n" +"- Then click this button", None)) + self.button_isRadius.setText(_translate("Form", "Radius ?", None)) self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_24), _translate("Form", "Check", None)) self.button_WF_quit.setText(_translate("Form", "Close", None)) self.label_release.setText(_translate("Form", "2015", None)) diff --git a/WorkFeature/WF_2015.py b/WorkFeature/WF_2015.py index 1f9d8a1..3689398 100644 --- a/WorkFeature/WF_2015.py +++ b/WorkFeature/WF_2015.py @@ -14,6 +14,7 @@ * - Ulrich Brammer for Geodesic dome code * * - Wmayer Many Thanks for active help on testing and debbuging * * - Gaƫl Ecorchard for HighlightDifference Macro * +* - lorenz_l for Beam tool Macro * * Special thanks to Mario52 for diverse MACRO codes as FCCamera, * * cutCircle, cutWire, Delta xyz, bounding box ... * * and other diverse pieces of codes * @@ -54,7 +55,7 @@ # First two lines to be able to launch with python import sys from WorkFeature import WF_ObjParCurve_2015 -# change this by your own FreeCAD lib path import FreeCAD +# Change this by your own FreeCAD lib path to import FreeCAD if not sys.path.__contains__("/usr/lib/freecad/lib"): sys.path.append("/usr/lib/freecad/lib") @@ -64,7 +65,7 @@ from WF_Utils_2015 import * from WF_ObjParCurve_2015 import * global myRelease -myRelease = "2015_11_08" +myRelease = "2015_12_16" import os.path import time @@ -380,7 +381,7 @@ def get_typefromSelection(objectType="Edge", info=0): if info != 0: print("SubObject = " + str(SubObject)) print("SubObject.ShapeType = " + str(SubObject.ShapeType)) - if SubObject.ShapeType == "Edge": + if SubObject.ShapeType == objectType: m_found = True break if m_found: @@ -444,7 +445,6 @@ def get_InfoObjects(info=0, printError=True): ", m_objNames=" + str(m_objNames)) return m_num, m_selEx, m_objs, m_objNames - def reset_SelectedObjects(Selection, info=0): """ Reset the selection changed by Draft.rotate for example Selection is the original selection you want to reset. Must be saved before any @@ -515,7 +515,6 @@ def get_SelectedObjectsWithParent(info=0, printError=True): printError_msg("No active document !") return - def get_SelectedObjects(info=0, printError=True): """ Return selected objects as Selection = (Number_of_Points, Number_of_Edges, Number_of_Planes, @@ -717,7 +716,6 @@ def getEdgeType(edge): except: return "Unknown" - def getShapeType(subObject): try: if isinstance(subObject,Part.Edge): @@ -733,9 +731,8 @@ def getShapeType(subObject): except: return "Unknown" - def definePropOfActiveObj(): - Gui.activeDocument().activeObject().LineColor = (red, green, blue) + Gui.activeDocument().activeObject().LineColor = (1.00,0.67,0.00) Gui.activeDocument().activeObject().ShapeColor = (0.33,1.00,1.00) Gui.activeDocument().activeObject().Transparency = (50) @@ -747,7 +744,6 @@ def addObjectToGrp(obj,grp,info=0): if info != 0: print_msg("Object " + str(m_obj) + " added to Group : " + str(m_grp)) - def addObjectToGrp2(obj,grp,info=0): m_obj = obj m_grp = grp @@ -911,6 +907,7 @@ def minMaxObjectsLimits(objs,info=0): return xmax, xmin, ymax, ymin, zmax, zmin + def baseObjectPoint(obj,info=0): """ Return the base point of selected Object. """ @@ -921,7 +918,6 @@ def baseObjectPoint(obj,info=0): print_point(base,"Base of object selected is :") return base - def meanVectorsPoint(vertx,info=0): """ Return the mean point of all selected Vectors. """ @@ -955,7 +951,6 @@ def meanVectorsPoint(vertx,info=0): print_point(mean,"Mean of all vectors selected is : ") return mean - def centerBBVectorsPoint(vertx,info=0): """ Return the center point of the bounding box of all selected Vectors. """ @@ -1037,7 +1032,6 @@ def distanceBetween(A, B): except Part.OCCError: return 0.0 - def angleBetween(e1, e2): """ Return the angle (in degrees) between 2 edges. """ @@ -1636,7 +1630,6 @@ def attachPoint(*argc): if msg != 0: print_msg("argc is " + str(*argc) + " and Attach point " + str(m_attach_point) + " selected !") - def intersecPlanePlane(Plane_Normal1, Plane_Point1, Plane_Normal2, Plane_Point2, info=0): """ Return the intersection Line between two Planes. """ @@ -2047,6 +2040,9 @@ def plot_sweep(traj, section, makeSolid=True, isFrenet=True, transition=2 , part def bounding_box(grp,ori_X,ori_Y,ori_Z,length_X,length_Y,length_Z,createVol=False,info=0): """ Create a bounding box. """ + global verbose + msg=verbose + m_grp = grp m_l_X = length_X m_l_Y = length_Y @@ -6672,10 +6668,10 @@ def plot_boundingBoxes(): m_grp=m_actDoc.getObject( str(m_dir) ) # Create a solid out of the shells of a shape try: - m_s = m_obj.Shape + m_s = m_obj.Shape except: - printError_msg( "This object has no attribute 'Shape' !\nSelect another one !\n") - break + printError_msg( "This object has no attribute 'Shape' !\nSelect another one !\n") + break # Get a boundBox A bounding box is an orthographic cube which is a way to describe outer boundaries m_boundBox = m_s.BoundBox if msg != 0: @@ -7727,7 +7723,7 @@ def plot_sectionSweep(): "INCORRECT Object(s) Selection :\n" +\ "First select the wire you want as section for Section Sweep (must be closed for solid creation!)\n" +\ "Then select the second wire for the trajectory of the Sweep !" - result_msg = " : Section Sweep created !" + result_msg = " : Section Sweep created into WorkFeatures/WorkObjects!" name = "SectionSweep" part = "Part::Feature" @@ -7909,7 +7905,54 @@ def plot_sectionSweep(): except: printError_msg(error_msg) + + +def plot_sectionBeam(): + """Section Beam: + """ + import WorkFeature.Beam.beam as BM + msg=verbose + msg=1 + createFolders('WorkObjects') + error_msg =\ + "INCORRECT Object(s) Selection :\n" +\ + "First select the wire you want as section for Section Beam \n" +\ + "Then select the second wire for the strait path trajectory of the Beam !" + result_msg = " : Section Beam created into WorkFeatures/WorkObjects!" + name = "Beam" + part = "Part::FeaturePython" + + m_actDoc=App.activeDocument() + if m_actDoc.Name: + m_sel = Gui.Selection.getSelection(m_actDoc.Name) + m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name) + else: + return + + try: + m_profile = m_sel[0] + if msg != 0: + print_msg("m_profile !" + str(m_profile)) + print_msg("m_selEx !" + str(m_selEx)) + for m_path_selected in m_selEx[1:]: + m_path = m_path_selected.Object + #m_path_name = m_path_selected.SubElementNames[0] + for m_path_name in m_path_selected.SubElementNames: + if msg != 0: + print_msg("m_path !" + str(m_path)) + print_msg("m_path_name !" + str(m_path_name)) + m_beam = App.ActiveDocument.addObject(part,name) + BM.Beam(m_beam, m_profile, m_path, m_path_name) + BM.ViewProviderBeam(m_beam.ViewObject) + App.ActiveDocument.getObject( 'WorkObjects' ).addObject(m_beam) + + App.ActiveDocument.recompute() + print_msg(m_beam.Label + str(result_msg)) + except: + printError_msg(error_msg) + + def plot_sectionSweep2(): """ Beam Sweep: @@ -9306,6 +9349,7 @@ def line_length(): msg=verbose error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Line !" + m_length = None Selection = get_SelectedObjects(info=msg, printError=False) try: @@ -9337,24 +9381,73 @@ def line_length(): if msg!=0: print_msg("Distance is : " + str(m_dist)) + if hasattr(edge, 'Length'): + m_length = edge.Length + msg=\ "Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\ "End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\ "Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\ "Delta Y : "+str(abs(pos_Y1-pos_Y2))+"\n" +\ "Delta Z : "+str(abs(pos_Z1-pos_Z2))+"\n\n" +\ - "Distance : " + str(m_dist) + "Distance : " + str(m_dist)+"\n\n" + + if m_length: + msg+="Length along edge/arc : " + str(m_length) + print_gui_msg(msg) except: printError_msg(error_msg) + +def object_radius(): + """ + Check for Radius: + + """ + msg=verbose + error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Arc!" + + Selection = Gui.Selection.getSelectionEx() + + try: + result = "Radius :" + m_found = False + for m_sel in Selection: + m_name = m_sel.ObjectName + if hasattr(m_sel, 'SubObjects'): + for m_sub,m_sub_name in zip(m_sel.SubObjects,m_sel.SubElementNames): + if hasattr(m_sub, 'Curve'): + r = m_sub.Curve + if hasattr(r, 'Radius'): + m_radius = r.Radius + result += "\nObject : " + str(m_name) + "." + str(m_sub_name) + result += "\nRadius is " + str(m_radius) + m_found = True + else: + if hasattr(m_sel, 'Curve'): + r = m_sel.Curve + if hasattr(r, 'Radius'): + m_radius = r.Radius + result += "\nObject : " + str(m_name) + result += "\nRadius is " + str(m_radius) + m_found = True + + if m_found: + print_gui_msg(result) + else : + printError_msg(error_msg) + except: + printError_msg(error_msg) + + def plane_area(): """ Check for surface Area: Area measurement for a Plane or a set of Planes. - - Select One or several Planes and + - Select One or several Face(s) """ msg=verbose @@ -9745,6 +9838,82 @@ def angleAlignFaces(value): except ValueError: printError_msg("Angle must be valid number !") + +def object_copy(): + """ + Duplicate: + Make a copy of an object or a selected subObject part: + - Select one or several object(s) or subobject(s) + + Original code from Macro_ReproWire + Authors = 2015 Mario52 + """ + msg=verbose + msg=1 + + error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select at least one Object !" + + sel = Gui.Selection.getSelection() + s = Gui.Selection.getSelectionEx() + + try: + if len(sel) != 0: +# print "Object(s) : ", len(sel), " , SubObject(s) : ", len(s) + i2 = ii2 = -1 + for i in s: + i2 += 1 + ii2 = -1 + try: + FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2] + for ii in i.SubElementNames: +# print "SubObject" + ii2 += 1 + # create repro shape subObject + Part.show(FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2].copy()) + # display the info SubObject + print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", i.ObjectName ," ", ii + + a = App.ActiveDocument.ActiveObject + # Label for the repro shape + # object Name / original object Name / SubObject Name + a.Label = a.Name + " " + i.ObjectName + " " + ii + try: + # give LineColor + FreeCADGui.activeDocument().activeObject().LineColor = (1.0,0.0,0.0) + # give PointColor + FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0) + # give ShapeColor + FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0) + + except Exception: + None + except Exception: +# print "Not SubObject" + # create repro shape object + Part.show(sel[i2].Shape) + # display the info SubObject + print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", sel[i2].Name + + a = App.ActiveDocument.ActiveObject + # Label for the repro shape + # object Name / original object Name + a.Label =a.Name + " " + sel[i2].Name + + try: + # give LineColor + FreeCADGui.activeDocument().activeObject().LineColor = (1.0,0.0,0.0) + # give PointColor + FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0) + # give ShapeColor + FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0) + + except Exception: + None + else : + printError_msg(error_msg) + pass + except: + printError_msg(error_msg) def object_alignFaces(): """ @@ -10247,7 +10416,9 @@ class WorkFeatureTab(): "button_revolve" : "plot_revolution", "button_common" : "object_common", "button_difference" : "object_difference", + "button_copy_objects" : "object_copy", "button_sweep" : "plot_sectionSweep", + "button_beam" : "plot_sectionBeam", "button_alignview" : "view_align", "button_trackcamera" : "view_trackCamera", @@ -10265,6 +10436,7 @@ class WorkFeatureTab(): "button_isAngle" : "object_angle", "button_isDistance" : "points_distance", "button_isLength" : "line_length", + "button_isRadius" : "object_radius", "button_isArea" : "plane_area", "button_isView" : "camera_orientation", diff --git a/WorkFeature/WF_ObjParCurve_2015.py b/WorkFeature/WF_ObjParCurve_2015.py index f8a8e84..51592f5 100644 --- a/WorkFeature/WF_ObjParCurve_2015.py +++ b/WorkFeature/WF_ObjParCurve_2015.py @@ -94,7 +94,7 @@ class Parametric(): self.updateOptions() - def plot_matriz(self, matriz): + def plot_matriz_old(self, matriz): """ Plot the dataset with different options. """ if self.debug != 0: @@ -116,7 +116,44 @@ class Parametric(): Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) FreeCAD.ActiveDocument.recompute() - + def plot_matriz(self, matriz): + """ Plot the dataset with different options. + """ + if self.debug != 0: + print self.plot_matriz.__name__ + + doc = FreeCAD.ActiveDocument + if doc == None: + doc = FreeCAD.newDocument() + + if self.points == True: + for point in matriz: + a = Draft.makePoint(point) + FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_Point_"+str(self.name.text()) + else: + curva = Part.makePolygon(matriz) + if self.bspline == True: + a = Draft.makeBSpline(curva,closed=self.close,face=False) + FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_BSpline_"+str(self.name.text()) + if self.bezier == True: + a = Draft.makeBezCurve(curva,closed=self.close,face=False) + FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_BezCurve_"+str(self.name.text()) + if self.poly == True: + a = Draft.makeWire(curva,closed=self.close,face=False) + FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_Wire_"+str(self.name.text()) +# if self.arcs == True: +# s=Part.BSplineCurve() +# s.interpolate(matriz, True) +# s.buildFromPoles(matriz) +# #Part.show(s.toShape()) +# arcs=s.toBiArcs(0.1) +# wire=Part.Wire([Part.Edge(i) for i in arcs]) +# Part.show(wire) + if self.close == True and self.face == True: + Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) + FreeCAD.ActiveDocument.recompute() + FreeCADGui.ActiveDocument.ActiveView.fitAll() + def edit(self): """ Launch the edit panel curve. """ diff --git a/start_WF.FCMacro b/start_WF.FCMacro index 59ab6c7..bc30041 100644 --- a/start_WF.FCMacro +++ b/start_WF.FCMacro @@ -2,6 +2,10 @@ import sys import os.path +# Change this by your own FreeCAD lib path to import FreeCAD +if not sys.path.__contains__("/usr/lib/freecad/lib"): + sys.path.append("/usr/lib/freecad/lib") + try: # try import import WorkFeature.WF_2015 as WF