diff --git a/src/App/ObjectIdentifier.cpp b/src/App/ObjectIdentifier.cpp index 1dc41b800c..22b9c03191 100644 --- a/src/App/ObjectIdentifier.cpp +++ b/src/App/ObjectIdentifier.cpp @@ -1725,7 +1725,7 @@ Py::Object ObjectIdentifier::access(const ResolveResults &result, else if(lastObj) { const char *attr = components[idx].getName().c_str(); auto prop = lastObj->getPropertyByName(attr); - if(!prop && pyobj.hasAttr(attr)) + if(!prop && !pyobj.hasAttr(attr)) attr = nullptr; setPropDep(lastObj,prop,attr); lastObj = nullptr; diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py index e2dc6272ad..34ce03d0f2 100644 --- a/src/Mod/Test/Document.py +++ b/src/Mod/Test/Document.py @@ -1632,6 +1632,12 @@ class DocumentExpressionCases(unittest.TestCase): FreeCAD.closeDocument(self.Doc.Name) self.Doc = FreeCAD.openDocument(SaveName) + def testCyclicDependencyOnPlacement(self): + obj = self.Doc.addObject("App::FeaturePython","Python") + obj.addProperty("App::PropertyPlacement", "Placement") + obj.setExpression('.Placement.Base.x', '.Placement.Base.y + 10mm') + with self.assertRaises(RuntimeError): + obj.setExpression('.Placement.Base.y', '.Placement.Base.x + 10mm') def tearDown(self): #closing doc