diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py
index 5ef8233fc1..dd7ac37c18 100644
--- a/src/Mod/AddonManager/addonmanager_workers.py
+++ b/src/Mod/AddonManager/addonmanager_workers.py
@@ -407,7 +407,7 @@ class ShowWorker(QtCore.QThread):
else:
message = "" + translate("AddonsInstaller", "This addon is already installed.") + "
"
message += desc + '
Addon repository: ' + self.repos[self.idx][1] + ''
- message += '
' + translate("AddonInstaller","Installed location")+": "+ FreeCAD.getUserAppDataDir() + os.sep + "Mod" + os.sep + repo[0]
+ message += '
' + translate("AddonInstaller","Installed location")+": "+ FreeCAD.getUserAppDataDir() + os.sep + "Mod" + os.sep + self.repos[self.idx][0]
self.repos[self.idx][2] = 2 # mark as already installed AND already checked for updates
self.addon_repos.emit(self.repos)
elif self.repos[self.idx][2] == 2:
diff --git a/src/Mod/PartDesign/App/Body.cpp b/src/Mod/PartDesign/App/Body.cpp
index b62e285f3f..448f558546 100644
--- a/src/Mod/PartDesign/App/Body.cpp
+++ b/src/Mod/PartDesign/App/Body.cpp
@@ -510,6 +510,16 @@ std::vector Body::getSubObjects(int reason) const {
App::DocumentObject *Body::getSubObject(const char *subname,
PyObject **pyObj, Base::Matrix4D *pmat, bool transform, int depth) const
{
+#if 1
+ return Part::BodyBase::getSubObject(subname,pyObj,pmat,transform,depth);
+#else
+ // The following code returns Body shape only if there is at least one
+ // child visible in the body (when show through, not show tip). The
+ // original intention is to sync visual to shape returned by
+ // Part.getShape() when the body is included in some other group. But this
+ // interfere with direct modeling using body shape. Therefore it is
+ // disabled here.
+
if(!pyObj || showTip ||
(subname && !Data::ComplexGeoData::isMappedElement(subname) && strchr(subname,'.')))
return Part::BodyBase::getSubObject(subname,pyObj,pmat,transform,depth);
@@ -525,6 +535,7 @@ App::DocumentObject *Body::getSubObject(const char *subname,
if(pmat && transform)
*pmat *= Placement.getValue().toMatrix();
return const_cast(this);
+#endif
}
void Body::onDocumentRestored()
diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
index 40051ff20f..be0adda009 100644
--- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
+++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp
@@ -3770,6 +3770,12 @@ public:
double endAngle = atanh( (((endPoint.y-centerPoint.y)*cos(phi)-(endPoint.x-centerPoint.x)*sin(phi))*a) /
(((endPoint.x-centerPoint.x)*cos(phi)+(endPoint.y-centerPoint.y)*sin(phi))*b) );
+ if (boost::math::isnan(startAngle) || boost::math::isnan(endAngle)) {
+ sketchgui->purgeHandler();
+ Base::Console().Error("Cannot create arc of hyperbola from invalid angles, try again!\n");
+ return false;
+ }
+
bool isOriginalArcCCW=true;