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()