Merge branch 'master' of https://github.com/mdkus/FreeCAD
This commit is contained in:
@@ -706,10 +706,17 @@ void DocumentRecoveryCleaner::clearDirectory(const QFileInfo& dir)
|
||||
void DocumentRecoveryCleaner::subtractFiles(QStringList& files)
|
||||
{
|
||||
if (!ignoreFiles.isEmpty() && !files.isEmpty()) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5,14,0)
|
||||
auto set1 = QSet<QString>(files.begin(), files.end());
|
||||
auto set2 = QSet<QString>(ignoreFiles.begin(), ignoreFiles.end());
|
||||
set1.subtract(set2);
|
||||
files = QList<QString>(set1.begin(), set1.end());
|
||||
#else
|
||||
QSet<QString> set1 = files.toSet();
|
||||
QSet<QString> set2 = ignoreFiles.toSet();
|
||||
set1.subtract(set2);
|
||||
files = set1.toList();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ Returns Compound of Wires. Deprecated - use makeOffset2D instead.
|
||||
</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="makeEvolved" Const="true" Keyword="true">
|
||||
<Documentation>
|
||||
<UserDocu>Profile along the spine</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="getUVNodes" Const="true">
|
||||
<Documentation>
|
||||
<UserDocu>Get the list of (u,v) nodes of the tessellation
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
# include <GeomLProp_SLProps.hxx>
|
||||
# include <BRep_Tool.hxx>
|
||||
#endif // _PreComp
|
||||
#include <BRepOffsetAPI_MakeEvolved.hxx>
|
||||
|
||||
#include <Base/VectorPy.h>
|
||||
#include <Base/GeometryPyCXX.h>
|
||||
@@ -99,6 +100,10 @@
|
||||
|
||||
using namespace Part;
|
||||
|
||||
namespace Part {
|
||||
extern Py::Object shape2pyshape(const TopoDS_Shape &shape);
|
||||
}
|
||||
|
||||
// returns a string which represent the object e.g. when printed in python
|
||||
std::string TopoShapeFacePy::representation(void) const
|
||||
{
|
||||
@@ -438,6 +443,66 @@ PyObject* TopoShapeFacePy::makeOffset(PyObject *args)
|
||||
return new TopoShapePy(new TopoShape(mkOffset.Shape()));
|
||||
}
|
||||
|
||||
/*
|
||||
import PartEnums
|
||||
v = App.Vector
|
||||
profile = Part.makePolygon([v(0.,0.,0.), v(-60.,-60.,-100.), v(-60.,-60.,-140.)])
|
||||
spine = Part.Face(Part.makePolygon([v(0.,0.,0.), v(100.,0.,0.), v(100.,100.,0.), v(0.,100.,0.), v(0.,0.,0.)]))
|
||||
evolve = spine.makeEvolved(Profile=profile, Join=PartEnums.JoinType.Arc)
|
||||
*/
|
||||
PyObject* TopoShapeFacePy::makeEvolved(PyObject *args, PyObject *kwds)
|
||||
{
|
||||
PyObject* Profile;
|
||||
PyObject* AxeProf = Py_True;
|
||||
PyObject* Solid = Py_False;
|
||||
PyObject* ProfOnSpine = Py_False;
|
||||
int JoinType = int(GeomAbs_Arc);
|
||||
double Tolerance = 0.0000001;
|
||||
|
||||
static char* kwds_evolve[] = {"Profile", "Join", "AxeProf", "Solid", "ProfOnSpine", "Tolerance", nullptr};
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|iO!O!O!d", kwds_evolve,
|
||||
&TopoShapeWirePy::Type, &Profile, &JoinType,
|
||||
&PyBool_Type, &AxeProf, &PyBool_Type, &Solid,
|
||||
&PyBool_Type, &ProfOnSpine, &Tolerance))
|
||||
return nullptr;
|
||||
|
||||
const TopoDS_Face& spine = TopoDS::Face(getTopoShapePtr()->getShape());
|
||||
BRepBuilderAPI_FindPlane findPlane(spine);
|
||||
if (!findPlane.Found()) {
|
||||
PyErr_SetString(PartExceptionOCCError, "No planar face");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const TopoDS_Wire& profile = TopoDS::Wire(static_cast<TopoShapeWirePy*>(Profile)->getTopoShapePtr()->getShape());
|
||||
|
||||
GeomAbs_JoinType joinType;
|
||||
switch (JoinType) {
|
||||
case GeomAbs_Tangent:
|
||||
joinType = GeomAbs_Tangent;
|
||||
break;
|
||||
case GeomAbs_Intersection:
|
||||
joinType = GeomAbs_Intersection;
|
||||
break;
|
||||
default:
|
||||
joinType = GeomAbs_Arc;
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
BRepOffsetAPI_MakeEvolved evolved(spine, profile, joinType,
|
||||
PyObject_IsTrue(AxeProf) ? Standard_True : Standard_False,
|
||||
PyObject_IsTrue(Solid) ? Standard_True : Standard_False,
|
||||
PyObject_IsTrue(ProfOnSpine) ? Standard_True : Standard_False,
|
||||
Tolerance);
|
||||
TopoDS_Shape shape = evolved.Shape();
|
||||
return Py::new_reference_to(shape2pyshape(shape));
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
PyErr_SetString(PartExceptionOCCError, e.GetMessageString());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* TopoShapeFacePy::valueAt(PyObject *args)
|
||||
{
|
||||
double u,v;
|
||||
|
||||
@@ -58,6 +58,11 @@ Transition can be 0 (default), 1 (right corners) or 2 (rounded corners).
|
||||
</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="makeEvolved" Const="true" Keyword="true">
|
||||
<Documentation>
|
||||
<UserDocu>Profile along the spine</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="approximate" Const="true" Keyword="true">
|
||||
<Documentation>
|
||||
<UserDocu>Approximate B-Spline-curve from this wire
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
# include <GCPnts_QuasiUniformAbscissa.hxx>
|
||||
# include <GCPnts_QuasiUniformDeflection.hxx>
|
||||
#endif
|
||||
#include <BRepOffsetAPI_MakeEvolved.hxx>
|
||||
|
||||
#include <Base/VectorPy.h>
|
||||
#include <Base/GeometryPyCXX.h>
|
||||
@@ -307,6 +308,66 @@ PyObject* TopoShapeWirePy::makePipeShell(PyObject *args)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
import PartEnums
|
||||
v = App.Vector
|
||||
profile = Part.makePolygon([v(0.,0.,0.), v(-60.,-60.,-100.), v(-60.,-60.,-140.)])
|
||||
spine = Part.makePolygon([v(0.,0.,0.), v(100.,0.,0.), v(100.,100.,0.), v(0.,100.,0.), v(0.,0.,0.)])
|
||||
evolve = spine.makeEvolved(Profile=profile, Join=PartEnums.JoinType.Arc)
|
||||
*/
|
||||
PyObject* TopoShapeWirePy::makeEvolved(PyObject *args, PyObject *kwds)
|
||||
{
|
||||
PyObject* Profile;
|
||||
PyObject* AxeProf = Py_True;
|
||||
PyObject* Solid = Py_False;
|
||||
PyObject* ProfOnSpine = Py_False;
|
||||
int JoinType = int(GeomAbs_Arc);
|
||||
double Tolerance = 0.0000001;
|
||||
|
||||
static char* kwds_evolve[] = {"Profile", "Join", "AxeProf", "Solid", "ProfOnSpine", "Tolerance", nullptr};
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|iO!O!O!d", kwds_evolve,
|
||||
&TopoShapeWirePy::Type, &Profile, &JoinType,
|
||||
&PyBool_Type, &AxeProf, &PyBool_Type, &Solid,
|
||||
&PyBool_Type, &ProfOnSpine, &Tolerance))
|
||||
return nullptr;
|
||||
|
||||
const TopoDS_Wire& spine = TopoDS::Wire(getTopoShapePtr()->getShape());
|
||||
BRepBuilderAPI_FindPlane findPlane(spine);
|
||||
if (!findPlane.Found()) {
|
||||
PyErr_SetString(PartExceptionOCCError, "No planar wire");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const TopoDS_Wire& profile = TopoDS::Wire(static_cast<TopoShapeWirePy*>(Profile)->getTopoShapePtr()->getShape());
|
||||
|
||||
GeomAbs_JoinType joinType;
|
||||
switch (JoinType) {
|
||||
case GeomAbs_Tangent:
|
||||
joinType = GeomAbs_Tangent;
|
||||
break;
|
||||
case GeomAbs_Intersection:
|
||||
joinType = GeomAbs_Intersection;
|
||||
break;
|
||||
default:
|
||||
joinType = GeomAbs_Arc;
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
BRepOffsetAPI_MakeEvolved evolved(spine, profile, joinType,
|
||||
PyObject_IsTrue(AxeProf) ? Standard_True : Standard_False,
|
||||
PyObject_IsTrue(Solid) ? Standard_True : Standard_False,
|
||||
PyObject_IsTrue(ProfOnSpine) ? Standard_True : Standard_False,
|
||||
Tolerance);
|
||||
TopoDS_Shape shape = evolved.Shape();
|
||||
return Py::new_reference_to(shape2pyshape(shape));
|
||||
}
|
||||
catch (Standard_Failure& e) {
|
||||
PyErr_SetString(PartExceptionOCCError, e.GetMessageString());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
PyObject* TopoShapeWirePy::makeHomogenousWires(PyObject *args)
|
||||
{
|
||||
PyObject* wire;
|
||||
|
||||
@@ -8,6 +8,7 @@ set(Part_Scripts
|
||||
Init.py
|
||||
JoinFeatures.py
|
||||
MakeBottle.py
|
||||
PartEnums.py
|
||||
TestPartApp.py
|
||||
)
|
||||
|
||||
|
||||
65
src/Mod/Part/PartEnums.py
Normal file
65
src/Mod/Part/PartEnums.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# ***************************************************************************
|
||||
# * *
|
||||
# * Copyright (c) 2021 Werner Mayer <wmayer[at]users.sourceforge.net> *
|
||||
# * *
|
||||
# * This program is free software; you can redistribute it and/or modify *
|
||||
# * it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
# * as published by the Free Software Foundation; either version 2 of *
|
||||
# * the License, or (at your option) any later version. *
|
||||
# * for detail see the LICENCE text file. *
|
||||
# * *
|
||||
# * This program 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 program; if not, write to the Free Software *
|
||||
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
|
||||
__title__ = "PartEnums module"
|
||||
__author__ = "Werner Mayer"
|
||||
__url__ = "http://www.freecadweb.org"
|
||||
__doc__ = "Enum types"
|
||||
|
||||
from enum import IntEnum
|
||||
|
||||
class JoinType(IntEnum):
|
||||
Arc = 0
|
||||
Tangent = 1
|
||||
Intersection = 2
|
||||
|
||||
class Shape(IntEnum):
|
||||
C0 = 0
|
||||
G1 = 1
|
||||
C1 = 2
|
||||
G2 = 3
|
||||
C2 = 4
|
||||
C3 = 5
|
||||
CN = 6
|
||||
|
||||
class FillingStyle(IntEnum):
|
||||
StretchStyle = 0
|
||||
CoonsStyle = 1
|
||||
CurvedStyle = 2
|
||||
|
||||
class Orientation(IntEnum):
|
||||
FORWARD = 0
|
||||
REVERSED = 1
|
||||
INTERNAL = 2
|
||||
EXTERNAL = 3
|
||||
|
||||
class ShapeEnum(IntEnum):
|
||||
COMPOUND = 0
|
||||
COMPSOLID = 1
|
||||
SOLID = 2
|
||||
SHELL= 3
|
||||
FACE = 4
|
||||
WIRE = 5
|
||||
EDGE = 6
|
||||
VERTEX = 7
|
||||
SHAPE = 8
|
||||
|
||||
Reference in New Issue
Block a user