From 9c7f5499b1eaa6705c852fddb6a9439b13d52596 Mon Sep 17 00:00:00 2001 From: yorikvanhavre Date: Tue, 20 Dec 2011 00:59:26 +0000 Subject: [PATCH] + added Point command to the Draft module (danfalck) git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5326 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Mod/Draft/Draft.py | 62 +++++++++++++++++++++++++++++++++++++ src/Mod/Draft/DraftTools.py | 36 +++++++++++++++++++++ src/Mod/Draft/InitGui.py | 2 +- 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index a6e12cf7f..3627f3338 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1270,6 +1270,29 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,name="Sketch"): FreeCAD.ActiveDocument.removeObject(obj.Name) FreeCAD.ActiveDocument.recompute() return nobj + +def makePoint(X=0, Y=0, Z=0,color=(0,1,0),name = "Point", point_size= 5): + ''' make a point (at coordinates x,y,z ,color(r,g,b),point_size) + example usage: + p1 = makePoint() + p1.ViewObject.Visibility= False # make it invisible + p1.ViewObject.Visibility= True # make it visible + p1 = makePoint(-1,0,0) #make a point at -1,0,0 + p1 = makePoint(1,0,0,(1,0,0)) # color = red + p1.X = 1 #move it in x + p1.ViewObject.PointColor =(0.0,0.0,1.0) #change the color-make sure values are floats + ''' + obj=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) + _Point(obj,X,Y,Z) + _ViewProviderPoint(obj.ViewObject) + obj.X = X + obj.Y = Y + obj.Z = Z + obj.ViewObject.PointColor = (float(color[0]), float(color[1]), float(color[2])) + obj.ViewObject.PointSize = point_size + obj.ViewObject.Visibility = True + FreeCAD.ActiveDocument.recompute() + return obj #--------------------------------------------------------------------------- # Python Features definitions @@ -2294,3 +2317,42 @@ class _ViewProviderArray(_ViewProviderDraft): def claimChildren(self): return [self.Object.Base] + +class _Point: + def __init__(self, obj,x,y,z): + obj.addProperty("App::PropertyFloat","X","Point","Location").X = x + obj.addProperty("App::PropertyFloat","Y","Point","Location").Y = y + obj.addProperty("App::PropertyFloat","Z","Point","Location").Z = z + mode = 2 + obj.setEditorMode('Placement',mode) + obj.Proxy = self + self.Type = "Point" + + def execute(self, fp): + self.createGeometry(fp) + + def createGeometry(self,fp): + shape = Part.Vertex(Vector(fp.X,fp.Y,fp.Z)) + fp.Shape = shape + +class _ViewProviderPoint: + def __init__(self, obj): + obj.Proxy = self + + def onChanged(self, vp, prop): + mode = 2 + vp.setEditorMode('LineColor',mode) + vp.setEditorMode('LineWidth',mode) + vp.setEditorMode('BoundingBox',mode) + vp.setEditorMode('ControlPoints',mode) + vp.setEditorMode('Deviation',mode) + vp.setEditorMode('DiffuseColor',mode) + vp.setEditorMode('DisplayMode',mode) + vp.setEditorMode('Lighting',mode) + vp.setEditorMode('LineMaterial',mode) + vp.setEditorMode('ShapeColor',mode) + vp.setEditorMode('ShapeMaterial',mode) + vp.setEditorMode('Transparency',mode) + + def getIcon(self): + return ":/icons/Draft_Dot.svg" diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 19606fa5c..ac1610bf4 100755 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3585,6 +3585,41 @@ class Array(): FreeCAD.ActiveDocument.openTransaction("Array") Draft.makeArray(obj,Vector(1,0,0),Vector(0,1,0),2,2) FreeCAD.ActiveDocument.commitTransaction() + +class Point: + "this class will create a vertex after the user clicks a point on the screen" + + def GetResources(self): + return {'Pixmap' : 'Draft_Point', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Point", "Point"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Point", "Creates a point object")} + + def Activated(self): + self.view = FreeCADGui.ActiveDocument.ActiveView + self.stack = [] + self.point = None + # adding 2 callback functions + self.callbackClick = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.click) + self.callbackMove = self.view.addEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.move) + + def move(self,event_cb): + event = event_cb.getEvent() + mousepos = event.getPosition().getValue() + ctrl = event.wasCtrlDown() + self.point = FreeCADGui.Snapper.snap(mousepos,active=ctrl) + + def click(self,event_cb): + event = event_cb.getEvent() + if event.getState() == coin.SoMouseButtonEvent.DOWN: + if self.point: + self.stack.append(self.point) + if len(self.stack) == 1: + self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callbackClick) + self.view.removeEventCallbackPivy(coin.SoLocation2Event.getClassTypeId(),self.callbackMove) + FreeCAD.ActiveDocument.openTransaction("Create Point") + Draft.makePoint((self.stack[0][0]),(self.stack[0][1]),0.0) + FreeCAD.ActiveDocument.commitTransaction() + FreeCADGui.Snapper.off() #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults @@ -3601,6 +3636,7 @@ FreeCADGui.addCommand('Draft_Rectangle',Rectangle()) FreeCADGui.addCommand('Draft_Dimension',Dimension()) FreeCADGui.addCommand('Draft_Polygon',Polygon()) FreeCADGui.addCommand('Draft_BSpline',BSpline()) +FreeCADGui.addCommand('Draft_Point',Point()) # modification commands FreeCADGui.addCommand('Draft_Move',Move()) diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 55c178ef2..0fdf334f5 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -187,7 +187,7 @@ class DraftWorkbench (Workbench): pass self.cmdList = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc", "Draft_Polygon","Draft_Rectangle", "Draft_Text", - "Draft_Dimension", "Draft_BSpline"] + "Draft_Dimension", "Draft_BSpline","Draft_Point"] self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset", "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Edit","Draft_WireToBSpline","Draft_AddPoint",