Skip to content

Commit

Permalink
Merge branch 'master' of github.com:FreeCAD/FreeCAD into PD-list-sele…
Browse files Browse the repository at this point in the history
…ction

- also spread the event handling
  • Loading branch information
donovaly committed Feb 17, 2020
2 parents b9d24b8 + 757cfce commit d4be4a0
Show file tree
Hide file tree
Showing 37 changed files with 1,238 additions and 1,193 deletions.
Expand Up @@ -14,7 +14,7 @@ macro(SetGlobalCompilerAndLinkerSettings)
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)

# check for mips64 platform
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips64")
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "mips64")
message(STATUS "Architecture: mips64")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mxgot")
endif()
Expand Down
8 changes: 8 additions & 0 deletions src/Base/QuantityPy.xml
Expand Up @@ -48,6 +48,14 @@ Quantity(string) -- arbitrary mixture of numbers and chars defining a Quantity
</UserDocu>
</Documentation>
</Methode>
<Methode Name="__round__" Const="true">
<Documentation>
<UserDocu>
Return the Integral closest to x, rounding half toward even.
When an argument is passed, work like built-in round(x, ndigits).
</UserDocu>
</Documentation>
</Methode>
<Attribute Name="Value" ReadOnly="false">
<Documentation>
<UserDocu>Numeric Value of the Quantity (in internal system mm,kg,s)</UserDocu>
Expand Down
11 changes: 11 additions & 0 deletions src/Base/QuantityPyImp.cpp
Expand Up @@ -205,6 +205,17 @@ PyObject* QuantityPy::getValueAs(PyObject *args)
return new QuantityPy(new Quantity(quant));
}

PyObject * QuantityPy::__round__ (PyObject *args)
{
double val= getQuantityPtr()->getValue();
Unit unit = getQuantityPtr()->getUnit();
Py::Float flt(val);
Py::Callable func(flt.getAttr("__round__"));
double rnd = static_cast<double>(Py::Float(func.apply(args)));

return new QuantityPy(new Quantity(rnd, unit));
}

PyObject * QuantityPy::number_float_handler (PyObject *self)
{
if (!PyObject_TypeCheck(self, &(QuantityPy::Type))) {
Expand Down
5 changes: 3 additions & 2 deletions src/Mod/Fem/femguiobjects/_TaskPanelFemSolverControl.py
Expand Up @@ -37,8 +37,9 @@
_UPDATE_INTERVAL = 50
_REPORT_TITLE = "Run Report"
_REPORT_ERR = (
"Failed to run. Please try again after all"
"of the following errors are resolved.")
"Failed to run. Please try again after all "
"of the following errors are resolved."
)


class ControlTaskPanel(QtCore.QObject):
Expand Down
Expand Up @@ -68,7 +68,7 @@ def __init__(self, obj):
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElectrostaticPotential.ui")
self._initParamWidget()
self.form = [self._refWidget, self._paramWidget]
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
self._mesh = femutils.get_single_member(analysis, "Fem::FemMeshObject")
self._part = None
if self._mesh is not None:
Expand Down
Expand Up @@ -69,7 +69,7 @@ def __init__(self, obj):
)
self._initParamWidget()
self.form = [self._refWidget, self._paramWidget]
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
self._mesh = femutils.get_single_member(analysis, "Fem::FemMeshObject")
self._part = None
if self._mesh is not None:
Expand Down
Expand Up @@ -65,7 +65,7 @@ def __init__(self, obj):
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/InitialFlowVelocity.ui")
self._initParamWidget()
self.form = [self._paramWidget]
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
self._mesh = femutils.get_single_member(analysis, "Fem::FemMeshObject")
self._part = None
if self._mesh is not None:
Expand Down
Expand Up @@ -514,7 +514,7 @@ def calculate(self):
yacc.parse(input="UserDefinedFormula={0}".format(userdefined_eq), lexer=lexer)
UserDefinedFormula = tokrules.names["UserDefinedFormula"].tolist()
tokrules.names = {}
#UserDefinedFormula = eval(userdefined_eq).tolist()
# UserDefinedFormula = eval(userdefined_eq).tolist()

if UserDefinedFormula:
self.result_obj.UserDefined = UserDefinedFormula
Expand Down
4 changes: 2 additions & 2 deletions src/Mod/Fem/femobjects/_FemResultMechanical.py
Expand Up @@ -303,8 +303,8 @@ def onChanged(self, obj, prop):

def onDocumentRestored(self, obj):
# migrate old result objects, because property "StressValues"
# was renamed to "vonMises" wirh commit 8b68ab7
if hasattr(obj, "StressValues") == True:
# was renamed to "vonMises" in commit 8b68ab7
if hasattr(obj, "StressValues") is True:
obj.addProperty(
"App::PropertyFloatList",
"vonMises",
Expand Down
18 changes: 1 addition & 17 deletions src/Mod/Fem/femsolver/calculix/tasks.py
Expand Up @@ -40,9 +40,6 @@
from .. import settings
from . import writer

if FreeCAD.GuiUp:
from PySide import QtGui


_inputFileName = None

Expand All @@ -64,7 +61,7 @@ def run(self):
w = writer.FemInputWriterCcx(
self.analysis,
self.solver,
c.mesh,
femutils.get_mesh_to_solve(self.analysis)[0], # pre check has been done already
c.materials_linear,
c.materials_nonlinear,
c.constraints_fixed,
Expand Down Expand Up @@ -170,19 +167,6 @@ class _Container(object):
def __init__(self, analysis):
self.analysis = analysis

# get mesh
mesh, message = femutils.get_mesh_to_solve(self.analysis)
if mesh is not None:
self.mesh = mesh
else:
if FreeCAD.GuiUp:
QtGui.QMessageBox.critical(
None,
"Missing prerequisite",
message
)
raise Exception(message + "\n")

# get member
# materials
std_mats = self.get_several_member(
Expand Down
2 changes: 1 addition & 1 deletion src/Mod/Fem/femsolver/elmer/equations/equation.py
Expand Up @@ -75,7 +75,7 @@ def __init__(self, obj):
self.form = self._refWidget
else:
self.form = [self.refWidget, propWidget]
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
self._mesh = femutils.get_single_member(analysis, "Fem::FemMeshObject")
self._part = self._mesh.Part if self._mesh is not None else None
self._partVisible = None
Expand Down
2 changes: 1 addition & 1 deletion src/Mod/Fem/femsolver/elmer/writer.py
Expand Up @@ -93,7 +93,7 @@ def getConstant(name, dimension):
class Writer(object):

def __init__(self, solver, directory, testmode=False):
self.analysis = femutils.findAnalysisOfMember(solver)
self.analysis = solver.getParentGroup()
self.solver = solver
self.directory = directory
self.testmode = testmode
Expand Down
17 changes: 14 additions & 3 deletions src/Mod/Fem/femsolver/run.py
Expand Up @@ -146,6 +146,17 @@ def run_fem_solver(solver, working_dir=None):
machine.target = RESULTS
machine.start()
machine.join() # wait for the machine to finish.
if machine.failed is True:
App.Console.PrintError("Machine failed to run.\n")
from .report import displayLog
displayLog(machine.report)
if App.GuiUp:
error_message = (
"Failed to run. Please try again after all "
"of the following errors are resolved."
)
from .report import display
display(machine.report, "Run Report", error_message)


def getMachine(solver, path=None):
Expand Down Expand Up @@ -288,7 +299,7 @@ def __init__(self):

@property
def analysis(self):
return femutils.findAnalysisOfMember(self.solver)
return self.solver.getParentGroup()


class Machine(BaseTask):
Expand Down Expand Up @@ -517,7 +528,7 @@ def _checkEquation(self, obj):
_machines[o].reset()

def _checkSolver(self, obj):
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
for m in iter(_machines.values()):
if analysis == m.analysis and obj == m.solver:
m.reset()
Expand All @@ -535,7 +546,7 @@ def _checkAnalysis(self, obj):

def _checkModel(self, obj):
if self._partOfModel(obj):
analysis = femutils.findAnalysisOfMember(obj)
analysis = obj.getParentGroup()
if analysis is not None:
self._resetAll(analysis)

Expand Down
18 changes: 1 addition & 17 deletions src/Mod/Fem/femsolver/z88/tasks.py
Expand Up @@ -38,9 +38,6 @@
from .. import settings
from . import writer

if FreeCAD.GuiUp:
from PySide import QtGui


class Check(run.Check):

Expand All @@ -58,7 +55,7 @@ def run(self):
w = writer.FemInputWriterZ88(
self.analysis,
self.solver,
c.mesh,
femutils.get_mesh_to_solve(self.analysis)[0], # pre check has been done already
c.materials_linear,
c.materials_nonlinear,
c.constraints_fixed,
Expand Down Expand Up @@ -155,19 +152,6 @@ class _Container(object):
def __init__(self, analysis):
self.analysis = analysis

# get mesh
mesh, message = femutils.get_mesh_to_solve(self.analysis)
if mesh is not None:
self.mesh = mesh
else:
if FreeCAD.GuiUp:
QtGui.QMessageBox.critical(
None,
"Missing prerequisite",
message
)
raise Exception(message + "\n")

# get member, empty lists are not supported by z88
# materials
self.materials_linear = self.get_several_member(
Expand Down
29 changes: 0 additions & 29 deletions src/Mod/Fem/femtools/femutils.py
Expand Up @@ -66,35 +66,6 @@ def createObject(doc, name, proxy, viewProxy=None):
return obj


def findAnalysisOfMember(member):
""" Find Analysis the *member* belongs to.
:param member: a document object
:returns:
If a analysis that contains *member* can be found a reference is returned.
If no such object exists in the document of *member*, ``None`` is returned.
"""
if member is None:
raise ValueError("Member must not be None")
for obj in member.Document.Objects:
if obj.isDerivedFrom("Fem::FemAnalysis"):
if member in obj.Group:
return obj
if _searchGroups(member, obj.Group):
return obj
return None


def _searchGroups(member, objs):
for o in objs:
if o == member:
return True
if hasattr(o, "Group"):
return _searchGroups(member, o.Group)
return False


def get_member(analysis, t):
""" Return list of all members of *analysis* of type *t*.
Expand Down

0 comments on commit d4be4a0

Please sign in to comment.