From a723ec4b81ac666b418ac315182a96cc7392884a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 4 Sep 2014 15:57:59 -0300 Subject: [PATCH] Draft: Allow sticky fonts in ShapeString --- src/Mod/Draft/Draft.py | 65 ++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 7db5a166cc14..31d23bc1b69b 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -4889,7 +4889,11 @@ def execute(self, obj): for char in CharList: CharFaces = [] for CWire in char: - f = Part.Face(CWire) + try: + f = Part.Face(CWire) + except: + # allow sticky characters with no face + f = CWire if f: CharFaces.append(f) # whitespace (ex: ' ') has no faces. This breaks OpenSCAD2Dgeom... @@ -4913,33 +4917,46 @@ def makeFaces(self, wireChar): compEdges = compEdges.connectEdgesToWires() fixedwire.append(compEdges.Wires[0]) wirelist = fixedwire - sep_wirelist = [] + stick = False while len(wirelist) > 0: wire2Face = [wirelist[0]] - face = Part.Face(wirelist[0]) - for w in wirelist[1:]: - p = w.Vertexes[0].Point - u,v = face.Surface.parameter(p) - if face.isPartOfDomain(u,v): - f = Part.Face(w) - if face.Orientation == f.Orientation: - if f.Surface.Axis * face.Surface.Axis < 0: - w.reverse() + try: + face = Part.Face(wirelist[0]) + except: + stick = True + wirelist = [] + else: + for w in wirelist[1:]: + p = w.Vertexes[0].Point + u,v = face.Surface.parameter(p) + if face.isPartOfDomain(u,v): + try: + f = Part.Face(w) + except: + stick = True + wirelist = [] + else: + if face.Orientation == f.Orientation: + if f.Surface.Axis * face.Surface.Axis < 0: + w.reverse() + else: + if f.Surface.Axis * face.Surface.Axis > 0: + w.reverse() + wire2Face.append(w) else: - if f.Surface.Axis * face.Surface.Axis > 0: - w.reverse() - wire2Face.append(w) - else: - sep_wirelist.append(w) - wirelist = sep_wirelist - sep_wirelist = [] - face = Part.Face(wire2Face) - face.validate() - if face.Surface.Axis.z < 0.0: - face.reverse() - compFaces.append(face) - ret = Part.Compound(compFaces) + sep_wirelist.append(w) + wirelist = sep_wirelist + sep_wirelist = [] + face = Part.Face(wire2Face) + face.validate() + if face.Surface.Axis.z < 0.0: + face.reverse() + compFaces.append(face) + if stick: + ret = Part.Compound(fixedwire) + elif compFaces: + ret = Part.Compound(compFaces) return ret def makeGlyph(self, facelist):