diff --git a/ARFrames.py b/ARFrames.py index 8e7bd09..cf71103 100644 --- a/ARFrames.py +++ b/ARFrames.py @@ -161,7 +161,7 @@ class ViewProviderFrame(object): pl = fp.getPropertyByName("Placement") self.transform.translation = (pl.Base.x, pl.Base.y, - pl.Base.Z) + pl.Base.z) self.transform.rotation = pl.Rotation.Q def getDisplayModes(self, vobj): @@ -309,7 +309,7 @@ class FeatureFramePanel: else: FreeCAD.Console.PrintError("Multipart selection not available.") self.reject() - + if not selected.HasSubObjects: FreeCAD.Console.PrintError("Part selected not feature.") self.reject() @@ -356,7 +356,6 @@ class FeatureFramePanel: QtCore.QObject.connect(self.form.ChoicesBox, QtCore.SIGNAL("currentIndexChanged(QString)"), self.choiceChanged) - # Setting up relevant illustrations self.scenes = {} for choice in self.choices: sc = QtGui.QGraphicsScene() @@ -376,9 +375,12 @@ class FeatureFramePanel: "PointOnSurface": PointOnSurfacePanel, "Center": CenterPanel, "PointOnCenterline": PointOnCenterlinePanel} - new_panel = paneldict[sel_choice](self.selected, self.so_desc) + pan = paneldict[sel_choice](self.selected, self.so_desc) FreeCADGui.Control.closeDialog() - FreeCADGui.Control.showDialog(new_panel) + # The dialog is actually closed after the accept function has + # completed. So we need to use a delayed task to open the new dialog: + QtCore.QTimer.singleShot(0, + lambda: FreeCADGui.Control.showDialog(pan)) def reject(self): FreeCADGui.Control.closeDialog() diff --git a/ARTools.py b/ARTools.py index 3ddc5b7..8d9de03 100644 --- a/ARTools.py +++ b/ARTools.py @@ -393,7 +393,9 @@ def exportPartInfoAndFeaturesDialogue(): appendFeatureFrames(unique_selected[0], ofile) if len(unique_selected) > 1: FreeCAD.Console.PrintWarning("Multi-part export not yet supported.\n") - FreeCAD.Console.PrintMessage("Feature frames of " + str(unique_selected[0].Label) + " exported to " + str(ofile) + "\n") + FreeCAD.Console.PrintMessage("Feature frames of " + + str(unique_selected[0].Label) + + " exported to " + str(ofile) + "\n") ################################################################### @@ -419,7 +421,7 @@ def getPrimitiveInfo(prim_type, subobj, scale=1e-3): d["radius"] = scale*subobj.Curve.Radius d["center"] = vector2list(subobj.Curve.Center, scale) d["axis"] = vector2list(subobj.Curve.Axis, scale=1) - d["paramerrange"] = subobj.ParameterRange + d["parameterrange"] = subobj.ParameterRange elif prim_type == "ArcOfEllipse": d["center"] = vector2list(subobj.Curve.Center, scale) d["axis"] = vector2list(subobj.Curve.Axis, scale=1) @@ -446,7 +448,7 @@ def getPrimitiveInfo(prim_type, subobj, scale=1e-3): d["radius"] = scale*subobj.Curve.Radius d["center"] = vector2list(subobj.Curve.Center, scale) d["axis"] = vector2list(subobj.Curve.Axis, scale=1) - d["paramerrange"] = subobj.ParameterRange + d["parameterrange"] = subobj.ParameterRange elif prim_type == "Ellipse": d["center"] = vector2list(subobj.Curve.Center, scale) d["axis"] = vector2list(subobj.Curve.Axis, scale=1) @@ -459,17 +461,28 @@ def getPrimitiveInfo(prim_type, subobj, scale=1e-3): d["center"] = vector2list(subobj.Curve.Center, scale) d["majorradius"] = scale*subobj.Curve.MajorRadius d["minorradius"] = scale*subobj.Curve.MinorRadius - d["parameterrange"] = subobj.ParameterRange + d["parameterrange"] = subobj.ParameterRange elif prim_type == "Parabola": d["anglexu"] = subobj.Curve.AngleXU d["axis"] = vector2list(subobj.Curve.Axis, scale=1) d["center"] = vector2list(subobj.Curve.Center, scale) d["focal"] = scale*subobj.Curve.Focal elif prim_type == "Line": - if not subobj.Curve.Infinite: - d["startpoint"] = vector2list(subobj.Curve.StartPoint) - d["endpoint"] = vector2list(subobj.Curve.EndPoint) - d["infinite"] = subobj.Curve.Infinite + if int(FreeCAD.Version()[1]) > 16: + sp = subobj.valueAt(subobj.FirstParameter) + ep = subobj.valueAt(subobj.LastParameter) + d["startpoint"] = vector2list(sp) + d["endpoint"] = vector2list + else: + if not hasattr(subobj.Curve, "Infinite"): + d["startpoint"] = vector2list(subobj.Curve.StartPoint) + d["endpoint"] = vector2list(subobj.Curve.EndPoint) + if hasattr(subobj.Curve, "Infinite"): + if subobj.Curve.Infinite: + d["infinite"] = subobj.Curve.Infinite + else: + d["startpoint"] = vector2list(subobj.Curve.StartPoint) + d["endpoint"] = vector2list(subobj.Curve.EndPoint) elif prim_type == "BSplineSurface": FreeCAD.Console.PrintWarning("getPrimitiveInfo of BSpline incomplete.") elif prim_type == "BezierSurface": diff --git a/README.md b/README.md index 824ae35..c2a8c49 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,17 @@ Annotation for robotics bench. A FreeCAD workbench for annotating frames of interest, exporting these w.r.t. the part frame, and exporting part information. # Installation instructions -This workbench uses freecad 0.16 so far. +This workbench supports versions of FreeCAD>0.16. -0. If you're on ubuntu 14.04, you have to run: `sudo add-apt-reposityory ppa:freecad-maintainers/freecad-stable` then `sudo apt-get update`, -1. Install FreeCAD -`sudo apt-get install Freecad` -2. Custom workbenches are located in `.FreeCAD/Mod/` under your home directory +1. [Install FreeCAD](https://www.freecadweb.org/wiki/Installing) +2. If you're not on Ubuntu follow the [workbench installation instructions](https://www.freecadweb.org/wiki/How_to_install_additional_workbenches) or you can do the following on Ubuntu. +3. Custom workbenches are located in `.FreeCAD/Mod/` under your home directory `cd ~/.FreeCAD/Mod/` 3. Either - Clone the repository there - - symlink the cloned repo in there + - symlink the cloned repo in there (`ln -s ./ARBench ~/.FreeCAD/ARBench`) 4. Start the workbench by - 1. Run FreeCAD + 1. Running FreeCAD 2. Open a STEP file 3. Open the `ARBench` workbench