Unit mismatch error in FreeCAD 0.20
Posted: Wed Jun 29, 2022 3:56 pm
Hello,
I encountered a strange error in FreeCAD 0.20.
Assume that you have four points (Draft.Point objects), labelled as P1, P2, P3 and P4, with units in mm. I have an expression in the form of a Python string to evaluate, let us call it expression. To evaluate this expression, we can use
This provides the correct value in FreeCAD 0.19, but not in FreeCAD 0.20 (git hash 68e3376), the latter throwing an exception:
What makes the situation stranger is that when I run my script containing this expression using the PyCharm IDE (the Python interpreter coming from the extracted AppImage), I do not get this error.
Do you have any ideas why this happens and how I could further narrow down the cause of the error?
The error can be reproduced with the code below.
I encountered a strange error in FreeCAD 0.20.
Assume that you have four points (Draft.Point objects), labelled as P1, P2, P3 and P4, with units in mm. I have an expression in the form of a Python string to evaluate, let us call it expression. To evaluate this expression, we can use
Code: Select all
P1.evalExpression(expression)
Code: Select all
ArithmeticError: Quantity::operator +(): Unit mismatch in plus operation
Do you have any ideas why this happens and how I could further narrow down the cause of the error?
The error can be reproduced with the code below.
Code: Select all
import FreeCAD as App
import Draft
P1 = Draft.make_point(App.Vector(-74.924, 2.875, 160.36))
P1.Label = 'P1'
P2 = Draft.make_point(App.Vector(-10.965, 11.594, 160.36))
P2.Label = 'P2'
P3 = Draft.make_point(App.Vector(-7.391, -50.421, 160.36))
P3.Label = 'P3'
P4 = Draft.make_point(App.Vector(54.302, 5.066, 160.36))
P4.Label = 'P4'
App.ActiveDocument.recompute()
expression = 'P3.X + (-10)*-(((P3.Y + 1.5*(sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2))*((P1.Y) - (P3.Y)) / sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2)) - (P3.Y)) / sqrt(((P3.X + 1.5*(sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2))*((P1.X) - (P3.X)) / sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2)) - (P3.X))^2 + ((P3.Y + 1.5*(sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2))*((P1.Y) - (P3.Y)) / sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2)) - (P3.Y))^2 + ((P3.Z + 1.5*(sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2))*((P1.Z) - (P3.Z)) / sqrt(((P1.X) - (P3.X))^2 + ((P1.Y) - (P3.Y))^2 + ((P1.Z) - (P3.Z))^2)) - (P3.Z))^2))'
P1.evalExpression(expression)