From 1816f88575bad5b3dd623a298e720ebf83e52632 Mon Sep 17 00:00:00 2001 From: Michael Georg Hansen Date: Wed, 17 Dec 2014 21:56:02 +0100 Subject: [PATCH] Reuse projection settings from an existing view when creating new draft views. Select a draft object and a view on a drawing page, then the view created for the draft object will have the same projection settings as the selected view. --- src/Mod/Draft/Draft.py | 29 ++++++++++++++++++++++------- src/Mod/Draft/DraftTools.py | 8 +++++++- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 422bed2bb..ddffd2d7f 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -2154,7 +2154,7 @@ def getrgb(color,testbw=True): col = "#000000" return col -def makeDrawingView(obj,page,lwmod=None,tmod=None): +def makeDrawingView(obj,page,lwmod=None,tmod=None,otherProjection=None): ''' makeDrawingView(object,page,[lwmod,tmod]) - adds a View of the given object to the given page. lwmod modifies lineweights (in percent), tmod modifies text heights @@ -2174,12 +2174,27 @@ def makeDrawingView(obj,page,lwmod=None,tmod=None): viewobj = FreeCAD.ActiveDocument.addObject("Drawing::FeatureViewPython","View"+obj.Name) _DrawingView(viewobj) page.addObject(viewobj) - if hasattr(page.ViewObject,"HintScale"): - viewobj.Scale = page.ViewObject.HintScale - if hasattr(page.ViewObject,"HintOffsetX"): - viewobj.X = page.ViewObject.HintOffsetX - if hasattr(page.ViewObject,"HintOffsetY"): - viewobj.Y = page.ViewObject.HintOffsetY + if (otherProjection): + FreeCAD.Console.PrintWarning("using otherProjection") + if hasattr(otherProjection,"Scale"): + FreeCAD.Console.PrintWarning(otherProjection.Scale) + viewobj.Scale = otherProjection.Scale + if hasattr(otherProjection,"X"): + viewobj.X = otherProjection.X + if hasattr(otherProjection,"Y"): + viewobj.Y = otherProjection.Y + if hasattr(otherProjection,"Rotation"): + viewobj.Rotation = otherProjection.Rotation + if hasattr(otherProjection,"Direction"): + FreeCAD.Console.PrintWarning(otherProjection.Direction) + viewobj.Direction = otherProjection.Direction + else: + if hasattr(page.ViewObject,"HintScale"): + viewobj.Scale = page.ViewObject.HintScale + if hasattr(page.ViewObject,"HintOffsetX"): + viewobj.X = page.ViewObject.HintOffsetX + if hasattr(page.ViewObject,"HintOffsetY"): + viewobj.Y = page.ViewObject.HintOffsetY viewobj.Source = obj if lwmod: viewobj.LineweightModifier = lwmod if tmod: viewobj.TextModifier = tmod diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 211da2552..a4cf5cf0c 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3150,6 +3150,12 @@ class Drawing(Modifier): self.page = obj if not self.page: self.page = self.createDefaultPage() + otherProjection = None + for obj in sel: + FreeCAD.Console.PrintWarning(obj) + if obj.isDerivedFrom("Drawing::FeatureView"): + otherProjection = obj + FreeCAD.Console.PrintWarning(otherProjection) sel.reverse() for obj in sel: if obj.ViewObject.isVisible(): @@ -3158,7 +3164,7 @@ class Drawing(Modifier): #oldobj = self.page.getObject(name) #if oldobj: # self.doc.removeObject(oldobj.Name) - Draft.makeDrawingView(obj,self.page) + Draft.makeDrawingView(obj,self.page,None,None,otherProjection) self.doc.recompute() def createDefaultPage(self):