From feeb053e18bb2d6a2b5364bb16c97467dcda9e58 Mon Sep 17 00:00:00 2001 From: jriegel Date: Wed, 27 Nov 2013 20:13:57 +0100 Subject: [PATCH] Objects for Results of FEM analysis --- src/App/PropertyGeo.h | 2 + src/App/PropertyStandard.h | 2 + src/App/PropertyUnits.cpp | 12 +++++- src/App/PropertyUnits.h | 2 + src/Mod/Fem/App/AppFem.cpp | 8 ++++ src/Mod/Fem/App/CMakeLists.txt | 16 +++++++- src/Mod/Fem/App/FemResultObject.cpp | 61 +++++++++++++++++++++++++++ src/Mod/Fem/App/FemResultObject.h | 64 +++++++++++++++++++++++++++++ src/Mod/Fem/App/FemResultValue.cpp | 60 +++++++++++++++++++++++++++ src/Mod/Fem/App/FemResultValue.h | 63 ++++++++++++++++++++++++++++ src/Mod/Fem/App/FemResultVector.cpp | 60 +++++++++++++++++++++++++++ src/Mod/Fem/App/FemResultVector.h | 61 +++++++++++++++++++++++++++ 12 files changed, 407 insertions(+), 4 deletions(-) create mode 100644 src/Mod/Fem/App/FemResultObject.cpp create mode 100644 src/Mod/Fem/App/FemResultObject.h create mode 100644 src/Mod/Fem/App/FemResultValue.cpp create mode 100644 src/Mod/Fem/App/FemResultValue.h create mode 100644 src/Mod/Fem/App/FemResultVector.cpp create mode 100644 src/Mod/Fem/App/FemResultVector.h diff --git a/src/App/PropertyGeo.h b/src/App/PropertyGeo.h index 9aa9ac178fb3..a42b84e441dc 100644 --- a/src/App/PropertyGeo.h +++ b/src/App/PropertyGeo.h @@ -136,6 +136,8 @@ class AppExport PropertyVectorList: public PropertyLists void setValues (const std::vector& values); + void setValue (void){}; + const std::vector &getValues(void) const { return _lValueList; } diff --git a/src/App/PropertyStandard.h b/src/App/PropertyStandard.h index d7cafc6d42a0..340dc74e74fa 100644 --- a/src/App/PropertyStandard.h +++ b/src/App/PropertyStandard.h @@ -523,6 +523,8 @@ class AppExport PropertyFloatList: public PropertyLists /** Sets the property */ void setValue(double); + + void setValue (void){}; /// index operator double operator[] (const int idx) const {return _lValueList.operator[] (idx);} diff --git a/src/App/PropertyUnits.cpp b/src/App/PropertyUnits.cpp index 668fd2bebfbd..6a4ca6d942da 100644 --- a/src/App/PropertyUnits.cpp +++ b/src/App/PropertyUnits.cpp @@ -60,6 +60,14 @@ Base::Quantity PropertyQuantity::getQuantityValue(void) const return Quantity( _dValue,_Unit); } +void PropertyQuantity::setValue(const Base::Quantity &quant) +{ + aboutToSetValue(); + _dValue = quant.getValue(); + _Unit = quant.getUnit(); + hasSetValue(); +} + const char* PropertyQuantity::getEditorName(void) const { @@ -90,14 +98,14 @@ void PropertyQuantity::setPyObject(PyObject *value) Unit unit = quant.getUnit(); if(unit.isEmpty()){ - setValue(quant.getValue()); + PropertyFloat::setValue(quant.getValue()); return; } if (unit != _Unit) throw Base::Exception("Not matching Unit!"); - setValue(quant.getValue()); + PropertyFloat::setValue(quant.getValue()); } //************************************************************************** diff --git a/src/App/PropertyUnits.h b/src/App/PropertyUnits.h index c550fef39534..cd3400156348 100644 --- a/src/App/PropertyUnits.h +++ b/src/App/PropertyUnits.h @@ -54,6 +54,8 @@ class AppExport PropertyQuantity : public PropertyFloat PropertyQuantity(void){} virtual ~PropertyQuantity(){} + void setValue(const Base::Quantity& quant); + Base::Quantity getQuantityValue(void) const; virtual const char* getEditorName(void) const; diff --git a/src/Mod/Fem/App/AppFem.cpp b/src/Mod/Fem/App/AppFem.cpp index 5df3e2e7976c..d3efd4b41b2c 100755 --- a/src/Mod/Fem/App/AppFem.cpp +++ b/src/Mod/Fem/App/AppFem.cpp @@ -50,6 +50,10 @@ #include "FemConstraintGear.h" #include "FemConstraintPulley.h" +#include "FemResultObject.h" +#include "FemResultValue.h" +#include "FemResultVector.h" + extern struct PyMethodDef Fem_methods[]; PyDoc_STRVAR(module_Fem_doc, @@ -133,6 +137,10 @@ void AppFemExport initFem() Fem::ConstraintForce ::init(); Fem::ConstraintGear ::init(); Fem::ConstraintPulley ::init(); + + Fem::FemResultObject ::init(); + Fem::FemResultValue ::init(); + Fem::FemResultVector ::init(); } } // extern "C" diff --git a/src/Mod/Fem/App/CMakeLists.txt b/src/Mod/Fem/App/CMakeLists.txt index 944cca71dfb9..84f0e302dced 100755 --- a/src/Mod/Fem/App/CMakeLists.txt +++ b/src/Mod/Fem/App/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/3rdParty/ANN/include ${Boost_INCLUDE_DIRS} + ${QT_INCLUDE_DIR} ${OCC_INCLUDE_DIR} ${PYTHON_INCLUDE_PATH} ${ZLIB_INCLUDE_DIR} @@ -73,6 +74,10 @@ SET(FemBase_SRCS FemAnalysis.h FemMesh.cpp FemMesh.h + FemResultObject.cpp + FemResultObject.h + FemConstraint.cpp + FemConstraint.h FemMeshProperty.cpp FemMeshProperty.h ) @@ -94,8 +99,6 @@ SET(FemSet_SRCS SOURCE_GROUP("Set objects" FILES ${FemSet_SRCS}) SET(FemConstraints_SRCS - FemConstraint.cpp - FemConstraint.h FemConstraintBearing.h FemConstraintBearing.cpp FemConstraintFixed.cpp @@ -109,10 +112,19 @@ SET(FemConstraints_SRCS ) SOURCE_GROUP("Constraints" FILES ${FemConstraints_SRCS}) +SET(FemResult_SRCS + FemResultValue.cpp + FemResultValue.h + FemResultVector.cpp + FemResultVector.h + ) +SOURCE_GROUP("ResultObjects" FILES ${FemResult_SRCS}) + SET(Fem_SRCS ${FemBase_SRCS} ${FemSet_SRCS} ${FemConstraints_SRCS} + ${FemResult_SRCS} ${Mod_SRCS} ${Python_SRCS} ) diff --git a/src/Mod/Fem/App/FemResultObject.cpp b/src/Mod/Fem/App/FemResultObject.cpp new file mode 100644 index 000000000000..9903573ee3d6 --- /dev/null +++ b/src/Mod/Fem/App/FemResultObject.cpp @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#ifndef _PreComp_ +#endif + +#include "FemResultObject.h" +#include + +using namespace Fem; +using namespace App; + +PROPERTY_SOURCE(Fem::FemResultObject, App::DocumentObject) + + +FemResultObject::FemResultObject() +{ + ADD_PROPERTY_TYPE(DataType,(""), "General",Prop_None,"Type identifier of the result data"); + ADD_PROPERTY_TYPE(Unit,(Base::Quantity()), "General",Prop_None,"Unit of the data"); +} + +FemResultObject::~FemResultObject() +{ +} + +short FemResultObject::mustExecute(void) const +{ + return 0; +} + +PyObject *FemResultObject::getPyObject() +{ + if (PythonObject.is(Py::_None())){ + // ref counter is set to 1 + PythonObject = Py::Object(new DocumentObjectPy(this),true); + } + return Py::new_reference_to(PythonObject); +} + diff --git a/src/Mod/Fem/App/FemResultObject.h b/src/Mod/Fem/App/FemResultObject.h new file mode 100644 index 000000000000..4d9df252a62a --- /dev/null +++ b/src/Mod/Fem/App/FemResultObject.h @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef Fem_FemResultObject_H +#define Fem_FemResultObject_H + +#include +#include +#include "FemResultObject.h" + +namespace Fem +{ +/// Father of all result data in a Fem Analysis +class AppFemExport FemResultObject : public App::DocumentObject +{ + PROPERTY_HEADER(Fem::FemResultObject); + +public: + /// Constructor + FemResultObject(void); + virtual ~FemResultObject(); + + /// Data type specifier of the data stored in this object + App::PropertyString DataType; + /// Unit and factor of the values + App::PropertyQuantity Unit; + + /// returns the type name of the ViewProvider + //virtual const char* getViewProviderName(void) const { + // return "FemGui::ViewProviderFemSet"; + //} + virtual App::DocumentObjectExecReturn *execute(void) { + return App::DocumentObject::StdReturn; + } + virtual short mustExecute(void) const; + virtual PyObject *getPyObject(void); + + +}; + +} //namespace Fem + + +#endif // Fem_FemResultObject_H diff --git a/src/Mod/Fem/App/FemResultValue.cpp b/src/Mod/Fem/App/FemResultValue.cpp new file mode 100644 index 000000000000..7375c35a7ccf --- /dev/null +++ b/src/Mod/Fem/App/FemResultValue.cpp @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#ifndef _PreComp_ +#endif + +#include "FemResultValue.h" +#include + +using namespace Fem; +using namespace App; + +PROPERTY_SOURCE(Fem::FemResultValue, App::DocumentObject) + + +FemResultValue::FemResultValue() +{ + ADD_PROPERTY_TYPE(Values,(0), "Fem",Prop_None,"List of values"); +} + +FemResultValue::~FemResultValue() +{ +} + +short FemResultValue::mustExecute(void) const +{ + return 0; +} + +PyObject *FemResultValue::getPyObject() +{ + if (PythonObject.is(Py::_None())){ + // ref counter is set to 1 + PythonObject = Py::Object(new DocumentObjectPy(this),true); + } + return Py::new_reference_to(PythonObject); +} + diff --git a/src/Mod/Fem/App/FemResultValue.h b/src/Mod/Fem/App/FemResultValue.h new file mode 100644 index 000000000000..d798169d7163 --- /dev/null +++ b/src/Mod/Fem/App/FemResultValue.h @@ -0,0 +1,63 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef Fem_FemResultValue_H +#define Fem_FemResultValue_H + + +#include + +#include "FemResultObject.h" + +namespace Fem +{ +/// Father of all result data in a Fem Analysis +class AppFemExport FemResultValue : public Fem::FemResultObject +{ + PROPERTY_HEADER(Fem::FemResultValue); + +public: + /// Constructor + FemResultValue(void); + virtual ~FemResultValue(); + + /// List of values + App::PropertyFloatList Values; + + /// returns the type name of the ViewProvider + //virtual const char* getViewProviderName(void) const { + // return "FemGui::ViewProviderFemSet"; + //} + virtual App::DocumentObjectExecReturn *execute(void) { + return App::DocumentObject::StdReturn; + } + virtual short mustExecute(void) const; + virtual PyObject *getPyObject(void); + + +}; + +} //namespace Fem + + +#endif // Fem_FemResultValue_H diff --git a/src/Mod/Fem/App/FemResultVector.cpp b/src/Mod/Fem/App/FemResultVector.cpp new file mode 100644 index 000000000000..deb99bc873c5 --- /dev/null +++ b/src/Mod/Fem/App/FemResultVector.cpp @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#ifndef _PreComp_ +#endif + +#include "FemResultVector.h" +#include + +using namespace Fem; +using namespace App; + +PROPERTY_SOURCE(Fem::FemResultVector, App::DocumentObject) + + +FemResultVector::FemResultVector() +{ + ADD_PROPERTY_TYPE(Values,(), "Fem",Prop_None,"Vector values"); +} + +FemResultVector::~FemResultVector() +{ +} + +short FemResultVector::mustExecute(void) const +{ + return 0; +} + +PyObject *FemResultVector::getPyObject() +{ + if (PythonObject.is(Py::_None())){ + // ref counter is set to 1 + PythonObject = Py::Object(new DocumentObjectPy(this),true); + } + return Py::new_reference_to(PythonObject); +} + diff --git a/src/Mod/Fem/App/FemResultVector.h b/src/Mod/Fem/App/FemResultVector.h new file mode 100644 index 000000000000..1595bf1339de --- /dev/null +++ b/src/Mod/Fem/App/FemResultVector.h @@ -0,0 +1,61 @@ +/*************************************************************************** + * Copyright (c) 2013 Jürgen Riegel (FreeCAD@juergen-riegel.net) * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef Fem_FemResultVector_H +#define Fem_FemResultVector_H + +#include +#include "FemResultObject.h" + +namespace Fem +{ +/// Father of all result data in a Fem Analysis +class AppFemExport FemResultVector : public Fem::FemResultObject +{ + PROPERTY_HEADER(Fem::FemResultVector); + +public: + /// Constructor + FemResultVector(void); + virtual ~FemResultVector(); + + /// Data type specifier of the data stored in this object + App::PropertyVectorList Values; + + /// returns the type name of the ViewProvider + //virtual const char* getViewProviderName(void) const { + // return "FemGui::ViewProviderFemSet"; + //} + virtual App::DocumentObjectExecReturn *execute(void) { + return App::DocumentObject::StdReturn; + } + virtual short mustExecute(void) const; + virtual PyObject *getPyObject(void); + + +}; + +} //namespace Fem + + +#endif // Fem_FemResultVector_H