Hi Dave.
I combined all the code you shared and added the small modification i mentioned earlier. Create a new macro and copy/paste the code in it.
Code: Select all
from PySide import QtCore, QtGui
import FreeCADGui, Part
import DraftTools, WorkingPlane
from pivy.coin import *
import FreeCAD
import math
basepoint=None
mw = FreeCADGui.getMainWindow()
class Ui_Dialog(object):
def setupUi(self, Dialog,sizes):
import FreeCAD as App
Dialog.setObjectName("Dialog")
Dialog.resize(264, 231)
self.label_x = QtGui.QLabel(Dialog)
self.label_x.setGeometry(QtCore.QRect(40, 70, 59, 14))
self.label_x.setObjectName("label_x")
self.label_y = QtGui.QLabel(Dialog)
self.label_y.setGeometry(QtCore.QRect(40, 100, 59, 14))
self.label_y.setObjectName("label_y")
self.label_z = QtGui.QLabel(Dialog)
self.label_z.setGeometry(QtCore.QRect(40, 130, 59, 14))
self.label_z.setObjectName("label_z")
self.label_d = QtGui.QLabel(Dialog)
self.label_d.setGeometry(QtCore.QRect(40, 150, 59, 14))
self.label_d.setObjectName("label_d")
self.Edit_x = QtGui.QLineEdit(Dialog)
self.Edit_x.setGeometry(QtCore.QRect(120, 60, 113, 22))
self.Edit_x.setObjectName("Edit_x")
self.Edit_x.setText(str(sizes[0]))
self.Edit_y = QtGui.QLineEdit(Dialog)
self.Edit_y.setGeometry(QtCore.QRect(120, 90, 113, 22))
self.Edit_y.setObjectName("Edit_y")
self.Edit_y.setText(str(sizes[1]))
self.Edit_z = QtGui.QLineEdit(Dialog)
self.Edit_z.setGeometry(QtCore.QRect(120, 120, 113, 22))
self.Edit_z.setObjectName("Edit_z")
self.Edit_z.setText(str(sizes[2]))
self.Edit_dist = QtGui.QLineEdit(Dialog)
self.Edit_dist.setGeometry(QtCore.QRect(120, 150, 113, 22))
self.Edit_dist.setObjectName("Edit_dist")
self.Edit_dist.setText(str(math.sqrt(sizes[0]*sizes[0]+sizes[1]*sizes[1]+sizes[2]*sizes[2])))
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(60, 20, 59, 14))
self.label.setObjectName("label")
self.getpointmode=True
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label_x.setText(QtGui.QApplication.translate("Dialog", "X Value", None, QtGui.QApplication.UnicodeUTF8))
self.label_y.setText(QtGui.QApplication.translate("Dialog", "Y Value", None, QtGui.QApplication.UnicodeUTF8))
self.label_z.setText(QtGui.QApplication.translate("Dialog", "Z Value", None, QtGui.QApplication.UnicodeUTF8))
self.label_d.setText(QtGui.QApplication.translate("Dialog", "Distance", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "Distance between points", None, QtGui.QApplication.UnicodeUTF8))
def pointHandler(val,point):
global basepoint
global mw
if val==0:
basepoint=point
else:
dx=point.x-basepoint.x
dy=point.y-basepoint.y
dz=point.z-basepoint.z
print "dx=\n",dx
print "dy=\n",dy
print "dz=\n",dz
print math.sqrt(dx*dx+dy*dy+dz*dz)
d = QtGui.QDialog(mw)
d.ui=Ui_Dialog()
d.ui.setupUi(d,[dx,dy,dz])
d.show()
class pointSnapper:
def __init__(self,val):
self.point = None
self.val=val
FreeCADGui.Snapper.getPoint(callback=self.clicked)
def clicked(self,point,extra):
self.point = point
if self.val==1:
pointHandler(0,point)
pointSnapper(2)
else:
pointHandler(1,point)
s = pointSnapper(1)
After run the macro to see what will be the result.