add MaxDegree setting to Part.Loft

This commit is contained in:
tomate44
2017-09-16 16:36:28 +02:00
committed by wmayer
parent 2db155a0c2
commit f335d1f10d
5 changed files with 16 additions and 7 deletions

View File

@@ -363,7 +363,7 @@ public:
"makeSweepSurface(edge(path),edge(profile),[float]) -- Create a profile along a path."
);
add_varargs_method("makeLoft",&Module::makeLoft,
"makeLoft(list of wires,[solid=False,ruled=False,closed=False]) -- Create a loft shape."
"makeLoft(list of wires,[solid=False,ruled=False,closed=False,maxDegree=5]) -- Create a loft shape."
);
add_varargs_method("makeWireString",&Module::makeWireString,
"makeWireString(string,fontdir,fontfile,height,[track]) -- Make list of wires in the form of a string's characters."
@@ -1517,10 +1517,12 @@ private:
PyObject *psolid=Py_False;
PyObject *pruled=Py_False;
PyObject *pclosed=Py_False;
if (!PyArg_ParseTuple(args.ptr(), "O|O!O!O!", &pcObj,
int degMax = 5;
if (!PyArg_ParseTuple(args.ptr(), "O|O!O!O!i", &pcObj,
&(PyBool_Type), &psolid,
&(PyBool_Type), &pruled,
&(PyBool_Type), &pclosed)) {
&(PyBool_Type), &pclosed,
&degMax)) {
throw Py::Exception();
}
@@ -1539,7 +1541,7 @@ private:
Standard_Boolean anIsSolid = PyObject_IsTrue(psolid) ? Standard_True : Standard_False;
Standard_Boolean anIsRuled = PyObject_IsTrue(pruled) ? Standard_True : Standard_False;
Standard_Boolean anIsClosed = PyObject_IsTrue(pclosed) ? Standard_True : Standard_False;
TopoDS_Shape aResult = myShape.makeLoft(profiles, anIsSolid, anIsRuled,anIsClosed);
TopoDS_Shape aResult = myShape.makeLoft(profiles, anIsSolid, anIsRuled, anIsClosed, degMax);
return Py::asObject(new TopoShapePy(new TopoShape(aResult)));
#endif
}

View File

@@ -265,6 +265,7 @@ Loft::Loft()
ADD_PROPERTY_TYPE(Solid,(false),"Loft",App::Prop_None,"Create solid");
ADD_PROPERTY_TYPE(Ruled,(false),"Loft",App::Prop_None,"Ruled surface");
ADD_PROPERTY_TYPE(Closed,(false),"Loft",App::Prop_None,"Close Last to First Profile");
ADD_PROPERTY_TYPE(MaxDegree,(5),"Loft",App::Prop_None,"Maximum Degree");
}
short Loft::mustExecute() const
@@ -277,6 +278,8 @@ short Loft::mustExecute() const
return 1;
if (Closed.isTouched())
return 1;
if (MaxDegree.isTouched())
return 1;
return 0;
}
@@ -334,9 +337,10 @@ App::DocumentObjectExecReturn *Loft::execute(void)
Standard_Boolean isSolid = Solid.getValue() ? Standard_True : Standard_False;
Standard_Boolean isRuled = Ruled.getValue() ? Standard_True : Standard_False;
Standard_Boolean isClosed = Closed.getValue() ? Standard_True : Standard_False;
int degMax = MaxDegree.getValue();
TopoShape myShape;
this->Shape.setValue(myShape.makeLoft(profiles, isSolid, isRuled,isClosed));
this->Shape.setValue(myShape.makeLoft(profiles, isSolid, isRuled, isClosed, degMax));
return App::DocumentObject::StdReturn;
}
catch (Standard_Failure& e) {

View File

@@ -73,6 +73,7 @@ public:
App::PropertyBool Solid;
App::PropertyBool Ruled;
App::PropertyBool Closed;
App::PropertyInteger MaxDegree;
/** @name methods override feature */
//@{

View File

@@ -2089,10 +2089,12 @@ TopoDS_Shape TopoShape::makeThread(Standard_Real pitch,
TopoDS_Shape TopoShape::makeLoft(const TopTools_ListOfShape& profiles,
Standard_Boolean isSolid,
Standard_Boolean isRuled,
Standard_Boolean isClosed) const
Standard_Boolean isClosed,
Standard_Integer MaxDegree) const
{
// http://opencascade.blogspot.com/2010/01/surface-modeling-part5.html
BRepOffsetAPI_ThruSections aGenerator (isSolid,isRuled);
aGenerator.SetMaxDegree(MaxDegree);
TopTools_ListIteratorOfListOfShape it;
int countShapes = 0;

View File

@@ -208,7 +208,7 @@ public:
TopoDS_Shape makeThread(Standard_Real pitch, Standard_Real depth,
Standard_Real height, Standard_Real radius) const;
TopoDS_Shape makeLoft(const TopTools_ListOfShape& profiles, Standard_Boolean isSolid,
Standard_Boolean isRuled, Standard_Boolean isClosed = Standard_False) const;
Standard_Boolean isRuled, Standard_Boolean isClosed = Standard_False, Standard_Integer MaxDegree = 5) const;
TopoDS_Shape makeOffsetShape(double offset, double tol,
bool intersection = false, bool selfInter = false,
short offsetMode = 0, short join = 0, bool fill = false) const;