Macro Image Scaling/it

Descrizione
Macro per scalare disegni, grafici, schemi, modelli e immagini 2D simili nell'ambiente Immagine. Funziona per figure importate come immagini planari nello spazio 3D.

Notare: Per le foto di oggetti o immagini coinvolgenti oggetti giacenti a distanze diverse dal punto di vista,, si deve tenere presente l'effetto di Parallasse (distorsione dovuta a "differenza nella posizione apparente di un oggetto osservato lungo due diverse linee di vista"). Nello schema seguente i 2 oggetti blu sono complanari con il piano perpendicolare al punto di vista dell'utente e possono essere scalati:



Nella seconda figura, gli oggetti rossi e verdi non sono complanari con i 2 oggetti blu e quindi non possono essere scalati. Inoltre, con un solo punto di vista dell'utente non si può stabilire con certezza che l'oggetto rosso è complanare con 1 oggetto blu:



Uso

 * avviare la Macro - appare un dialogo
 * cliccare nell'immagine sui due punti di cui si conosce la vera distanza
 * Selezionare il piano dell'immagine nella vista ad albero
 * Inserire in mm la vera distanza tra i punti nel campo di testo del dialogo e fare clic su OK
 * L'immagine viene ridimensionata e il dialogo si chiude.

Script
QtGui.QDialogButtonBox.Ok)      self.buttonBox.setObjectName(_fromUtf8("buttonBox"))        self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(False)        self.label = QtGui.QLabel(Dialog)        self.label.setGeometry(QtCore.QRect(30, 10, 66, 17))        self.label.setObjectName(_fromUtf8("label"))        self.lineEdit = QtGui.QLineEdit(Dialog)        self.lineEdit.setGeometry(QtCore.QRect(100, 10, 113, 29))        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))        self.label1 = QtGui.QLabel(Dialog)        self.label1.setGeometry(QtCore.QRect(20, 45, 260, 17))        self.label1.setObjectName(_fromUtf8("label1"))        self.retranslateUi(Dialog)        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted")), self.accept)        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected")), self.reject)        QtCore.QMetaObject.connectSlotsByName(Dialog) self.tracker = DraftTrackers.lineTracker(scolor=(1,0,0)) self.tracker.raiseTracker self.tracker.on       self.dialog.show

def retranslateUi(self, Dialog): Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) self.label.setText(_translate("Dialog", "Distance", None)) self.label1.setText(_translate("Dialog", "Select first point", None)) def accept(self): sel = FreeCADGui.Selection.getSelection try: locale=QtCore.QLocale.system d, ok = locale.toFloat(self.lineEdit.text) if not ok: raise ValueError s=d/self.distance sel[0].XSize.Value=sel[0].XSize.Value*s sel[0].YSize.Value=sel[0].YSize.Value*s FreeCAD.Console.PrintMessage("Scale="+str(s)) self.tracker.off self.tracker.finalize self.dialog.hide except ValueError, ZeroDivisionError: self.label1.setText(_translate("Dialog", "Enter distance ", None)) return except IndexError, AttributeError: self.label1.setText(_translate("Dialog", "Select ImagePlane ", None)) return def reject(self): self.stack=[] self.view.removeEventCallbackPivy(pvy.SoMouseButtonEvent.getClassTypeId,self.callback) self.view.removeEventCallbackPivy(pvy.SoLocation2Event.getClassTypeId,self.callmouse) self.tracker.off self.tracker.finalize self.dialog.hide def getmousepoint(self, event_cb): event = event_cb.getEvent if len(self.stack)==1: pos = event.getPosition point = self.view.getPoint(pos[0],pos[1]) self.tracker.p2(point) def getpoint(self,event_cb): event = event_cb.getEvent if event.getState == pvy.SoMouseButtonEvent.DOWN: pos = event.getPosition point = self.view.getPoint(pos[0],pos[1]) self.stack.append(point) self.label1.setText(_translate("Dialog", "Select second point", None)) if len(self.stack)==1: self.tracker.p1(point) elif len(self.stack) == 2: self.distance=distance(self.stack[0], self.stack[1]) self.tracker.p2(point) self.view.removeEventCallbackPivy(pvy.SoMouseButtonEvent.getClassTypeId,self.callback) self.view.removeEventCallbackPivy(pvy.SoLocation2Event.getClassTypeId,self.callmouse) self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(True) self.label1.setText(_translate("Dialog", "Select Image Plane and type distance", None)) d = QtGui.QWidget ui = Ui_Dialog ui.setupUi(d)
 * 1) Init

Link

 * [La discussione nel forum]
 * [Download zip diretto]
 * [Movie created by microelly2]