From 33faa4010149b967f8fcbb659d227c5b06acd3fd Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 20 Jun 2013 21:21:35 -0300 Subject: [PATCH] 0001078: Draft now snaps to center of polygons and cylinders --- src/Mod/Draft/DraftGeomUtils.py | 2 ++ src/Mod/Draft/DraftSnap.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index 1ae0d693f..1f81d6ed3 100755 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -301,6 +301,8 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F if dirVec.dot(arc.Curve.Axis) != 0 : toPlane = Vector(arc.Curve.Axis) ; toPlane.normalize() d = pt1.dot(toPlane) + if not d: + return [] dToPlane = center.sub(pt1).dot(toPlane) toPlane = Vector(pt1) toPlane.scale(dToPlane/d,dToPlane/d,dToPlane/d) diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 685bce591..9f5d98202 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -269,6 +269,9 @@ class Snapper: snaps.append([b,'endpoint',b]) elif obj.isDerivedFrom("Part::Feature"): + if Draft.getType(obj) == "Polygon": + snaps.extend(self.snapToPolygon(obj)) + if (not self.maxEdges) or (len(obj.Edges) <= self.maxEdges): if "Edge" in comp: # we are snapping to an edge @@ -650,6 +653,19 @@ class Snapper: for p in pt: snaps.append([p,'intersection',p]) return snaps + + def snapToPolygon(self,obj): + "returns a list of polygon center snap locations" + snaps = [] + c = obj.Placement.Base + for edge in obj.Shape.Edges: + p1 = edge.Vertexes[0].Point + p2 = edge.Vertexes[-1].Point + v1 = p1.add((p2-p1).scale(.25,.25,.25)) + v2 = p1.add((p2-p1).scale(.75,.75,.75)) + snaps.append([v1,'center',c]) + snaps.append([v2,'center',c]) + return snaps def snapToVertex(self,info,active=False): p = Vector(info['x'],info['y'],info['z'])