Skip to content

Commit

Permalink
splitCurves: add extra options
Browse files Browse the repository at this point in the history
  • Loading branch information
tomate44 committed Aug 3, 2020
1 parent cd0b9ab commit e680e0a
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 173 deletions.
164 changes: 0 additions & 164 deletions freecad/Curves/splitCurves.py

This file was deleted.

49 changes: 40 additions & 9 deletions freecad/Curves/splitCurves_2.py
Expand Up @@ -15,10 +15,13 @@
import Part
from freecad.Curves import _utils
from freecad.Curves import ICONPATH
from freecad.Curves.nurbs_tools import knotSeqNormalize

from pivy import coin
from freecad.Curves import graphics
from freecad.Curves import manipulators


TOOL_ICON = os.path.join(ICONPATH, 'splitcurve.svg')
#debug = _utils.debug
debug = _utils.doNothing
Expand All @@ -29,17 +32,25 @@ def __init__(self, obj, e):
obj.Proxy = self
obj.addProperty("App::PropertyLinkSub",
"Source",
"Split",
"Base",
"Edge to split").Source = e
obj.addProperty("App::PropertyStringList",
"Values",
"Split",
"List of splitting locations\n% and units are allowed\nNegative values are computed from edge end")
#obj.addProperty("App::PropertyFloatList",
#"Parameters",
#"Split",
#"Parameter list")
#obj.setEditorMode("Parameters",2)
obj.addProperty("App::PropertyLinkList",
"CuttingObjects",
"Split",
"List of objects that cut the curve")
obj.addProperty("App::PropertyDistance",
"Distance",
"Split",
"Expression-ready distance value")
obj.addProperty("App::PropertyFloatList",
"NormalizedParameters",
"Output",
"Normalized parameters list")
obj.setEditorMode("NormalizedParameters",2)

def getShape(self, fp):
if fp.Source is None:
Expand Down Expand Up @@ -76,6 +87,7 @@ def parse_value(self, edge, v):
par = edge.Curve.parameterAtDistance(num_val, edge.FirstParameter)
if par > edge.FirstParameter and par < edge.LastParameter:
return par, t
return None, None

def parse_values(self, edge, values):
#edge = self.getShape(fp, "Source", "Edge")
Expand All @@ -84,7 +96,8 @@ def parse_values(self, edge, values):
parameters = []
for v in values:
par, t = self.parse_value(edge, v)
parameters.append(par)
if par:
parameters.append(par)
parameters.sort()
return parameters

Expand All @@ -103,15 +116,32 @@ def onChanged(self, fp, prop):

def execute(self, obj):
e, w = self.getShape(obj)
params = []
if not isinstance(e, Part.Edge):
return
val = []
if hasattr(obj, "Values"):
params = self.parse_values(e, obj.Values)
val = obj.Values
if hasattr(obj, "Distance"):
val.append(obj.Distance.toStr())

params = []
if val:
params = self.parse_values(e, val)
if hasattr(obj, "CuttingObjects"):
for o in obj.CuttingObjects:
d, pts, info = e.distToShape(o.Shape)
if info[0][0] == 'Edge':
debug('adding param : {}'.format(info[0][2]))
params.append(info[0][2])

if params == []:
if w:
obj.Shape = obj.Source[0].Shape
else:
obj.Shape = e
return

params.sort()
if params[0] > e.FirstParameter:
params.insert(0, e.FirstParameter)
if params[-1] < e.LastParameter:
Expand Down Expand Up @@ -155,6 +185,7 @@ def execute(self, obj):
w = Part.Wire(se[0])
if w.isValid():
obj.Shape = w
obj.NormalizedParameters = knotSeqNormalize(params)
else:
FreeCAD.Console.PrintError("Split curve : Invalid Wire !")
obj.Shape = e
Expand Down

0 comments on commit e680e0a

Please sign in to comment.