Add PropertyIntegerSet and some classes to FEM

This commit is contained in:
jriegel
2013-02-24 21:57:35 +01:00
parent af67612d7f
commit 5f43ef1a2a
15 changed files with 881 additions and 1 deletions

View File

@@ -50,6 +50,16 @@ SET(Mod_SRCS
SET(Fem_SRCS
FemMeshObject.cpp
FemMeshObject.h
FemSetObject.cpp
FemSetObject.h
FemSetNodesObject.cpp
FemSetNodesObject.h
FemSetElementsObject.cpp
FemSetElementsObject.h
FemSetFacesObject.cpp
FemSetFacesObject.h
FemSetGeometryObject.cpp
FemSetGeometryObject.h
FemMesh.cpp
FemMesh.h
FemMeshProperty.cpp

View File

@@ -0,0 +1,59 @@
/***************************************************************************
* 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 "FemSetElementsObject.h"
#include <App/DocumentObjectPy.h>
using namespace Fem;
using namespace App;
PROPERTY_SOURCE(Fem::FemSetElementsObject, Fem::FemSetObject)
FemSetElementsObject::FemSetElementsObject()
{
}
FemSetElementsObject::~FemSetElementsObject()
{
}
short FemSetElementsObject::mustExecute(void) const
{
return 0;
}
PyObject *FemSetElementsObject::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);
}

View File

@@ -0,0 +1,59 @@
/***************************************************************************
* 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_FemSetElementsObjec_H
#define Fem_FemSetElementsObjec_H
#include <App/DocumentObject.h>
#include <App/PropertyStandard.h>
#include "FemSetObject.h"
namespace Fem
{
class AppFemExport FemSetElementsObject : public FemSetObject
{
PROPERTY_HEADER(Fem::FemSetElementsObject);
public:
/// Constructor
FemSetElementsObject(void);
virtual ~FemSetElementsObject();
/// 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_FemSetElementsObjec_H

View File

@@ -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 "FemSetFacesObject.h"
#include <App/DocumentObjectPy.h>
#include <Base/Placement.h>
using namespace Fem;
using namespace App;
PROPERTY_SOURCE(Fem::FemSetFacesObject, Fem::FemSetObject)
FemSetFacesObject::FemSetFacesObject()
{
}
FemSetFacesObject::~FemSetFacesObject()
{
}
short FemSetFacesObject::mustExecute(void) const
{
return 0;
}
PyObject *FemSetFacesObject::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);
}

View File

@@ -0,0 +1,59 @@
/***************************************************************************
* 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_FemSetFacesObject_H
#define Fem_FemSetFacesObject_H
#include <App/DocumentObject.h>
#include <App/PropertyStandard.h>
#include "FemSetObject.h"
namespace Fem
{
class AppFemExport FemSetFacesObject : public FemSetObject
{
PROPERTY_HEADER(Fem::FemSetFacesObject);
public:
/// Constructor
FemSetFacesObject(void);
virtual ~FemSetFacesObject();
/// 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_FemSetFacesObject_H

View File

@@ -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 "FemSetGeometryObject.h"
#include <App/DocumentObjectPy.h>
#include <Base/Placement.h>
using namespace Fem;
using namespace App;
PROPERTY_SOURCE(Fem::FemSetGeometryObject, Fem::FemSetObject)
FemSetGeometryObject::FemSetGeometryObject()
{
}
FemSetGeometryObject::~FemSetGeometryObject()
{
}
short FemSetGeometryObject::mustExecute(void) const
{
return 0;
}
PyObject *FemSetGeometryObject::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);
}

View File

@@ -0,0 +1,59 @@
/***************************************************************************
* 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_FemSetGeometryObject_H
#define Fem_FemSetGeometryObject_H
#include <App/DocumentObject.h>
#include <App/PropertyStandard.h>
#include "FemSetObject.h"
namespace Fem
{
class AppFemExport FemSetGeometryObject : public FemSetObject
{
PROPERTY_HEADER(Fem::FemSetGeometryObject);
public:
/// Constructor
FemSetGeometryObject(void);
virtual ~FemSetGeometryObject();
/// 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_FemSetGeometryObject_H

View File

@@ -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 "FemSetNodesObject.h"
#include <App/DocumentObjectPy.h>
#include <Base/Placement.h>
using namespace Fem;
using namespace App;
PROPERTY_SOURCE(Fem::FemSetNodesObject, Fem::FemSetObject)
FemSetNodesObject::FemSetNodesObject()
{
ADD_PROPERTY_TYPE(Nodes,(), "Node indexes",Prop_None,"Nodes belonging to the NodesSet");
}
FemSetNodesObject::~FemSetNodesObject()
{
}
short FemSetNodesObject::mustExecute(void) const
{
return 0;
}
PyObject *FemSetNodesObject::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);
}

View File

@@ -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_FemSetNodesObject_H
#define Fem_FemSetNodesObject_H
#include <App/DocumentObject.h>
#include <App/PropertyStandard.h>
#include "FemSetObject.h"
namespace Fem
{
class AppFemExport FemSetNodesObject : public FemSetObject
{
PROPERTY_HEADER(Fem::FemSetNodesObject);
public:
/// Constructor
FemSetNodesObject(void);
virtual ~FemSetNodesObject();
App::PropertyIntegerSet Nodes;
/// 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_FemSetNodesObject_H

View File

@@ -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 "FemSetObject.h"
#include <App/DocumentObjectPy.h>
#include <Base/Placement.h>
using namespace Fem;
using namespace App;
PROPERTY_SOURCE(Fem::FemSetObject, App::DocumentObject)
FemSetObject::FemSetObject()
{
}
FemSetObject::~FemSetObject()
{
}
short FemSetObject::mustExecute(void) const
{
return 0;
}
PyObject *FemSetObject::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);
}

View File

@@ -0,0 +1,59 @@
/***************************************************************************
* 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_FemSetObject_H
#define Fem_FemSetObject_H
#include <App/DocumentObject.h>
#include <App/PropertyStandard.h>
#include "FemSetObject.h"
namespace Fem
{
class AppFemExport FemSetObject : public App::DocumentObject
{
PROPERTY_HEADER(Fem::FemSetObject);
public:
/// Constructor
FemSetObject(void);
virtual ~FemSetObject();
/// 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_FemSetObject_H

View File

@@ -72,6 +72,103 @@ bool CmdFemCreateFromShape::isActive(void)
}
//DEF_STD_CMD_A(CmdFemDefineNodesSet);
//
//
//void DefineNodesCallback(void * ud, SoEventCallback * n)
//{
// // show the wait cursor because this could take quite some time
// Gui::WaitCursor wc;
//
// // When this callback function is invoked we must in either case leave the edit mode
// Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(n->getUserData());
// view->setEditing(false);
// view->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), clipMeshCallback,ud);
// n->setHandled();
//
// SbBool clip_inner;
// std::vector<SbVec2f> clPoly = view->getGLPolygon(&clip_inner);
// if (clPoly.size() < 3)
// return;
// if (clPoly.front() != clPoly.back())
// clPoly.push_back(clPoly.front());
//
// std::vector<Gui::ViewProvider*> views = view->getViewProvidersOfType(ViewProviderMesh::getClassTypeId());
// if (!views.empty()) {
// Gui::Application::Instance->activeDocument()->openCommand("Cut");
// for (std::vector<Gui::ViewProvider*>::iterator it = views.begin(); it != views.end(); ++it) {
// ViewProviderMesh* that = static_cast<ViewProviderMesh*>(*it);
// if (that->getEditingMode() > -1) {
// that->finishEditing();
// that->cutMesh(clPoly, *view, clip_inner);
// }
// }
//
// Gui::Application::Instance->activeDocument()->commitCommand();
//
// view->render();
// }
//}
//
//
//
//CmdMeshPolyCut::CmdMeshPolyCut()
// : Command("Mesh_PolyCut")
//{
// sAppModule = "Mesh";
// sGroup = QT_TR_NOOP("Mesh");
// sMenuText = QT_TR_NOOP("Cut mesh");
// sToolTipText = QT_TR_NOOP("Cuts a mesh with a picked polygon");
// sWhatsThis = "Mesh_PolyCut";
// sStatusTip = QT_TR_NOOP("Cuts a mesh with a picked polygon");
// sPixmap = "mesh_cut";
//}
//
//void CmdMeshPolyCut::activated(int iMsg)
//{
// std::vector<App::DocumentObject*> docObj = Gui::Selection().getObjectsOfType(Mesh::Feature::getClassTypeId());
// for (std::vector<App::DocumentObject*>::iterator it = docObj.begin(); it != docObj.end(); ++it) {
// if (it == docObj.begin()) {
// Gui::Document* doc = getActiveGuiDocument();
// Gui::MDIView* view = doc->getActiveView();
// if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
// Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer();
// viewer->setEditing(true);
// viewer->startSelection(Gui::View3DInventorViewer::Clip);
// viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), MeshGui::ViewProviderMeshFaceSet::clipMeshCallback);
// }
// else {
// return;
// }
// }
//
// Gui::ViewProvider* pVP = getActiveGuiDocument()->getViewProvider(*it);
// if (pVP->isVisible())
// pVP->startEditing();
// }
//}
//
//bool CmdMeshPolyCut::isActive(void)
//{
// // Check for the selected mesh feature (all Mesh types)
// if (getSelection().countObjectsOfType(Mesh::Feature::getClassTypeId()) == 0)
// return false;
//
// Gui::MDIView* view = Gui::getMainWindow()->activeWindow();
// if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) {
// Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer();
// return !viewer->isEditing();
// }
//
// return false;
//}
//--------------------------------------------------------------------------------------
void CreateFemCommands(void)
{
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();

View File

@@ -170,7 +170,7 @@ ViewProviderFemMesh::ViewProviderFemMesh()
ADD_PROPERTY(PointColor,(mat.diffuseColor));
ADD_PROPERTY(PointSize,(2.0f));
PointSize.setConstraints(&floatRange);
ADD_PROPERTY(LineWidth,(4.0f));
ADD_PROPERTY(LineWidth,(2.0f));
LineWidth.setConstraints(&floatRange);
ADD_PROPERTY(BackfaceCulling,(true));