def updateValues(self, doc):
     if not self.viewInfo.changed(doc):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(
         3, 'LineSelection: drawing %s has changed, updating values' %
         self.viewInfo.name)
     new_vi = self.viewInfo.get_up_to_date_version(doc)
     old_vi = self.viewInfo
     ref1 = old_vi.normalize_position(self.x1, self.y1)
     ref2 = old_vi.normalize_position(self.x2, self.y2)
     svg = SvgElements(
         doc.getObject(self.viewInfo.name).ViewResult, self.svg_element_tag)
     min_error = None
     for x1, y1, x2, y2 in svg.lines:
         error1 = min(norm(ref1 - new_vi.normalize_position(x1, y1)),
                      norm(ref2 - new_vi.normalize_position(x1, y1)))
         error2 = min(norm(ref1 - new_vi.normalize_position(x2, y2)),
                      norm(ref2 - new_vi.normalize_position(x2, y2)))
         error = error2 + error1
         if min_error == None or error < min_error:
             min_error = error
             self.x1, self.y1, self.x2, self.y2 = x1, y1, x2, y2
     self.viewInfo = new_vi
     return True
 def updateValues( self, doc ):
     if not self.viewInfo.changed( doc ):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(3,'LineSelection: drawing %s has changed, updating values' % self.viewInfo.name )
     new_vi = self.viewInfo.get_up_to_date_version( doc )
     old_vi = self.viewInfo
     ref1 = old_vi.normalize_position ( self.x1, self.y1 )
     ref2 = old_vi.normalize_position ( self.x2, self.y2 )
     svg = SvgElements( doc.getObject( self.viewInfo.name ).ViewResult, self.svg_element_tag)
     min_error = None
     for x1,y1,x2,y2 in svg.lines:
         error1 = min( 
             norm( ref1 - new_vi.normalize_position ( x1, y1 )), 
             norm( ref2 - new_vi.normalize_position ( x1, y1 ) ) 
             )
         error2 = min( 
             norm( ref1 - new_vi.normalize_position ( x2, y2 )), 
             norm( ref2 - new_vi.normalize_position ( x2, y2 ) ) 
             )
         error = error2 + error1
         if min_error == None or error < min_error:
             min_error = error
             self.x1, self.y1, self.x2, self.y2 = x1,y1,x2,y2
     self.viewInfo = new_vi
     return True
 def updateValues( self, doc ):
     if not self.viewInfo.changed( doc ):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(3,'PointSelection: drawing %s has changed, updating values' % self.viewInfo.name )
     new_vi = self.viewInfo.get_up_to_date_version( doc )
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position ( self.x, self.y )
     svg = SvgElements( doc.getObject( self.viewInfo.name ).ViewResult, self.svg_element_tag)
     min_error = None
     for point in svg.points:
         error = norm( pos_ref - new_vi.normalize_position ( *point ) )
         if min_error == None or error < min_error:
             min_error = error
             self.x, self.y = point
     self.viewInfo = new_vi
     return True
 def updateValues( self, doc ):
     if not self.viewInfo.changed( doc ):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(3,'textSelection: drawing %s has changed, updating values' % self.viewInfo.name )
     new_vi = self.viewInfo.get_up_to_date_version( doc )
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position ( self.svgText.x, self.svgText.y )
     drawingObj = doc.getObject( self.viewInfo.name )
     svg = SvgElements( drawingObj.ViewResult, self.svg_element_tag)
     min_error = None
     for x,y,element in svg.texts:
         error = norm( pos_ref - new_vi.normalize_position ( x,y ) )
         if min_error == None or error < min_error:
             self.svgText = SvgTextParser( element.XML[element.pStart:element.pEnd] )
     self.viewInfo = new_vi
     return True
 def updateValues( self, doc ):
     if not self.viewInfo.changed( doc ):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(3,'CircularArcSelection: drawing %s has changed, updating values' % self.viewInfo.name )
     new_vi = self.viewInfo.get_up_to_date_version( doc )
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position ( self.x, self.y )
     r_ref = self.r / old_vi.scale
     svg = SvgElements( doc.getObject( self.viewInfo.name ).ViewResult, self.svg_element_tag)
     min_error = None
     for x,y,r in svg.circles:
         error1 = norm( pos_ref - new_vi.normalize_position ( x,y ) )
         error2 = abs( log( r_ref / (r/new_vi.scale) ) )
         error = error2 + error1 #giving radius and center position equal priority ...
         if min_error == None or error < min_error:
             self.x, self.y, self.r = x,y,r
     self.viewInfo = new_vi
     return True
 def updateValues(self, doc):
     if not self.viewInfo.changed(doc):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(
         3, 'PointSelection: drawing %s has changed, updating values' %
         self.viewInfo.name)
     new_vi = self.viewInfo.get_up_to_date_version(doc)
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position(self.x, self.y)
     svg = SvgElements(
         doc.getObject(self.viewInfo.name).ViewResult, self.svg_element_tag)
     min_error = None
     for point in svg.points:
         error = norm(pos_ref - new_vi.normalize_position(*point))
         if min_error == None or error < min_error:
             min_error = error
             self.x, self.y = point
     self.viewInfo = new_vi
     return True
 def updateValues(self, doc):
     if not self.viewInfo.changed(doc):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(
         3, 'textSelection: drawing %s has changed, updating values' %
         self.viewInfo.name)
     new_vi = self.viewInfo.get_up_to_date_version(doc)
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position(self.svgText.x, self.svgText.y)
     drawingObj = doc.getObject(self.viewInfo.name)
     svg = SvgElements(drawingObj.ViewResult, self.svg_element_tag)
     min_error = None
     for x, y, element in svg.texts:
         error = norm(pos_ref - new_vi.normalize_position(x, y))
         if min_error == None or error < min_error:
             self.svgText = SvgTextParser(
                 element.XML[element.pStart:element.pEnd])
     self.viewInfo = new_vi
     return True
 def updateValues(self, doc):
     if not self.viewInfo.changed(doc):
         return False
     from recomputeDimensions import SvgElements
     from dimensioning import debugPrint
     debugPrint(
         3,
         'CircularArcSelection: drawing %s has changed, updating values' %
         self.viewInfo.name)
     new_vi = self.viewInfo.get_up_to_date_version(doc)
     old_vi = self.viewInfo
     pos_ref = old_vi.normalize_position(self.x, self.y)
     r_ref = self.r / old_vi.scale
     svg = SvgElements(
         doc.getObject(self.viewInfo.name).ViewResult, self.svg_element_tag)
     min_error = None
     for x, y, r in svg.circles:
         error1 = norm(pos_ref - new_vi.normalize_position(x, y))
         error2 = abs(log(r_ref / (r / new_vi.scale)))
         error = error2 + error1  #giving radius and center position equal priority ...
         if min_error == None or error < min_error:
             self.x, self.y, self.r = x, y, r
     self.viewInfo = new_vi
     return True
 def Activated(self):
     sel = FreeCADGui.Selection.getSelection()
     for obj in sel:
         done = False
         if obj.isDerivedFrom("Drawing::FeatureView"):
             for parent in obj.InList:
                 if parent.isDerivedFrom("Drawing::FeaturePage"):
                     pagedims = getPageDimensions(parent)
                     if pagedims:
                         viewcenter = getCenterPoint(obj)
                         if viewcenter:
                             debugPrint( 2, "current center point: %3.3f, %3.3f" % viewcenter )
                             debugPrint( 2, "page center: %3.3f, %3.3f" % (pagedims[0]/2, pagedims[1]/2) )
                             dx = pagedims[0]/2 - viewcenter[0]
                             dy = pagedims[1]/2 - viewcenter[1]
                             debugPrint( 2, "delta: %3.3f, %3.3f" % (dx, dy) )
                             FreeCAD.ActiveDocument.openTransaction("Center View")
                             obj.X = obj.X+dx
                             obj.Y = obj.Y+dy
                             FreeCAD.ActiveDocument.commitTransaction()
                             done = True
         if not done:
             FreeCAD.Console.PrintError("Unable to move view "+obj.Label+"\n")
     FreeCAD.ActiveDocument.recompute()