diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c7209ae7b..a4fbcf982 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -516,38 +516,52 @@ def makeText(stringslist,point=Vector(0,0,0),screen=False): def makeCopy(obj): '''makeCopy(object): returns an exact copy of an object''' - newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) if getType(obj) == "Rectangle": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _Rectangle(newobj) _ViewProviderRectangle(newobj.ViewObject) elif getType(obj) == "Wire": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _Wire(newobj) _ViewProviderWire(newobj.ViewObject) elif getType(obj) == "Circle": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _Circle(newobj) _ViewProviderCircle(newobj.ViewObject) elif getType(obj) == "Polygon": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _Polygon(newobj) _ViewProviderPolygon(newobj.ViewObject) elif getType(obj) == "BSpline": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _BSpline(newobj) _ViewProviderBSpline(newobj.ViewObject) elif getType(obj) == "Block": + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) _Block(newobj) _ViewProviderDraftPart(newobj.ViewObject) elif getType(obj) == "Structure": - import Arch - Arch._Structure(newobj) - Arch._ViewProviderStructure(newobj.ViewObject) + import ArchStructure + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) + ArchStructure._Structure(newobj) + ArchStructure._ViewProviderStructure(newobj.ViewObject) elif getType(obj) == "Wall": - import Arch - Arch._Wall(newobj) - Arch._ViewProviderWall(newobj.ViewObject) + import ArchWall + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) + ArchWall._Wall(newobj) + ArchWall._ViewProviderWall(newobj.ViewObject) elif getType(obj) == "Window": - import Arch - Arch._Window(newobj) - Arch._ViewProviderWindow(newobj.ViewObject) + import ArchWindow + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) + ArchWindow._Window(newobj) + Archwindow._ViewProviderWindow(newobj.ViewObject) + elif getType(obj) == "Cell": + import ArchCell + newobj = FreeCAD.ActiveDocument.addObject(obj.Type,getRealName(obj.Name)) + ArchCell._Cell(newobj) + ArchCell._ViewProviderCell(newobj.ViewObject) elif obj.isDerivedFrom("Part::Feature"): + newobj = FreeCAD.ActiveDocument.addObject("Part::Feature",getRealName(obj.Name)) newobj.Shape = obj.Shape else: print "Error: Object type cannot be copied" diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 3469772fd..74b9eaff6 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -658,16 +658,17 @@ class Snapper: def click(event_cb): event = event_cb.getEvent() - if event.getState() == coin.SoMouseButtonEvent.DOWN: - self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) - self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) - FreeCADGui.Snapper.off() - self.ui.offUi() - if self.trackLine: - self.trackLine.off() - if callback: - callback(self.pt) - self.pt = None + if event.getButton() == 1: + if event.getState() == coin.SoMouseButtonEvent.DOWN: + self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) + self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) + FreeCADGui.Snapper.off() + self.ui.offUi() + if self.trackLine: + self.trackLine.off() + if callback: + callback(self.pt) + self.pt = None def cancel(): self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index b564749b1..65bbd96c4 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -486,15 +486,12 @@ class Line(Creator): def wipe(self): "removes all previous segments and starts from last point" if len(self.node) > 1: - print "nullifying" # self.obj.Shape.nullify() - for some reason this fails self.obj.ViewObject.Visibility = False self.node = [self.node[-1]] - print "setting trackers" self.linetrack.p1(self.node[0]) self.planetrack.set(self.node[0]) msg(translate("draft", "Pick next point:\n")) - print "done" def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when valid x, y, and z have been entered there" diff --git a/src/Mod/Draft/WorkingPlane.py b/src/Mod/Draft/WorkingPlane.py index 8cece2db6..9aa384f5e 100644 --- a/src/Mod/Draft/WorkingPlane.py +++ b/src/Mod/Draft/WorkingPlane.py @@ -232,13 +232,16 @@ class plane: def getPlacementFromPoints(points): "returns a placement from a list of 3 or 4 vectors" pl = plane() - pl.position = points[0] - pl.u = (points[1].sub(points[0]).normalize()) - pl.v = (points[2].sub(points[0]).normalize()) - if len(points) == 4: - pl.axis = (points[3].sub(points[0]).normalize()) - else: - pl.axis = ((pl.u).cross(pl.v)).normalize() + try: + pl.position = points[0] + pl.u = (points[1].sub(points[0]).normalize()) + pl.v = (points[2].sub(points[0]).normalize()) + if len(points) == 4: + pl.axis = (points[3].sub(points[0]).normalize()) + else: + pl.axis = ((pl.u).cross(pl.v)).normalize() + except: + pass p = pl.getPlacement() del pl return p