diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index dc14da7c4..b130f7812 100755 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -34,7 +34,7 @@ class ArchWorkbench(Workbench): ToolTip = "Architecture workbench" def Initialize(self): - import draftTools,draftGui,Arch_rc,Arch + import DraftTools,DraftGui,Arch_rc,Arch archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Axis", @@ -47,11 +47,11 @@ class ArchWorkbench(Workbench): "Draft_Downgrade","Draft_Trimex"] meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape"] - self.appendToolbar(str(draftTools.translate("arch","Arch tools")),archtools) - self.appendToolbar(str(draftTools.translate("arch","Draft tools")),drafttools) - self.appendMenu([str(draftTools.translate("arch","Architecture")),str(draftTools.translate("arch","Tools"))],meshtools) - self.appendMenu(str(draftTools.translate("arch","Architecture")),archtools) - self.appendMenu(str(draftTools.translate("arch","Draft")),drafttools) + self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),archtools) + self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),drafttools) + self.appendMenu([str(DraftTools.translate("arch","Architecture")),str(DraftTools.translate("arch","Tools"))],meshtools) + self.appendMenu(str(DraftTools.translate("arch","Architecture")),archtools) + self.appendMenu(str(DraftTools.translate("arch","Draft")),drafttools) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index ab253d110..008d6ca48 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -25,100 +25,13 @@ __title__="FreeCAD Draft Snap tools" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD, FreeCADGui, math, Draft, DraftTrackers +import FreeCAD, FreeCADGui, math, Draft, DraftTrackers, Part from draftlibs import fcvec,fcgeo from FreeCAD import Vector from pivy import coin # last snapped objects, for quick intersection calculation lastObj = [0,0] - -class Snapper: - """Snapper(maxedges=0): creates a Snapper object. maxedges is the - maximum number of edges an object must have to be considered for snapping. - Keep 0 for no limit.""" - - def __init__(self,maxedges=0): - - self.lastObj = [None,None] - self.maxEdges = maxedges - # at module init, still no 3D view available - self.tracker = None - self.extLine = None - - # the snapmarker has "point","circle" and "square" available styles - self.mk = {'extension':'circle', - 'parallel':'circle'} - - def getScreenDist(self,dist,cursor): - "returns a 3D distance from a screen pixels distance" - if cursor: - p1 = FreeCADGui.ActiveDocument.ActiveView.getPoint(cursor) - p2 = FreeCADGui.ActiveDocument.ActiveView.getPoint((cursor[0]+dist,cursor[1])) - return (p2.sub(p1)).Length - else: - return dist - - def snap(self,point,screenpos=None,force=False,pointset=[]): - """snap(point,screenpos=None,force=False,pointset=[]): point is the current point to snap, - screenpos is the position of the mouse cursor, force is to force snapping even if outside of - the snapping radius, pointset is an optional list of points you can pass, that - """ - - if not self.tracker: - self.tracker = DraftTrackers.snapTracker() - if not self.extLine: - self.extLine = DraftTrackers.lineTracker(dotted=True) - - originalPoint = Vector(point) - self.tracker.off() - self.extLine.off() - - # checking if alwaySnap setting is on - oldForce = False - if Draft.getParam("alwaysSnap"): - oldForce = force - force = True - - # getting current snap Radius - radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos) - - # checking if parallel to one of the edges of the last objects - point = self.snapToExtensions(point,pointset) - - def snapToExtensions(self,point,pointset): - "snaps the given point to extension or parallel line to last object" - for o in [self.lastObj[1],self.lastObj[0]]: - if o: - ob = FreeCAD.ActiveDocument.getObject(o) - if ob: - edges = ob.Shape.Edges - if (not self.maxEdges) or (len(edges) < self.maxEdges): - for e in edges: - if isinstance(e.Curve,Part.Line): - np = getPerpendicular(e,point) - if (np.sub(point)).Length < radius: - self.tracker.setCoords(np) - self.tracker.setMarker(self.mk['extension']) - self.tracker.on() - self.extLine.p1(e.Vertexes[0].Point) - self.extLine.p2(np) - self.extLine.on() - point = np - else: - if pointset: - last = pointset[-1] - de = Part.Line(last,last.add(fcgeo.vec(e))).toShape() - np = getPerpendicular(de,point) - if (np.sub(point)).Length < radius: - self.tracker.setCoords(np) - self.tracker.setMarker(self.mk['parallel']) - self.tracker.on() - point = np - return point - - -# old functions ################################################################## def snapPoint(target,point,cursor,ctrl=False): ''' @@ -356,42 +269,42 @@ def constrainPoint (target,pt,mobile=False,sym=False): if len(target.node) > 0: last = target.node[-1] dvec = point.sub(last) - affinity = plane.getClosestAxis(dvec) + affinity = FreeCAD.DraftWorkingPlane.getClosestAxis(dvec) if ((target.constrain == None) or mobile): if affinity == "x": - dv = fcvec.project(dvec,plane.u) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.u) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) target.constrain = 0 #x direction target.ui.xValue.setEnabled(True) target.ui.yValue.setEnabled(False) target.ui.zValue.setEnabled(False) target.ui.xValue.setFocus() elif affinity == "y": - dv = fcvec.project(dvec,plane.v) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.v) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.v) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) target.constrain = 1 #y direction target.ui.xValue.setEnabled(False) target.ui.yValue.setEnabled(True) target.ui.zValue.setEnabled(False) target.ui.yValue.setFocus() elif affinity == "z": - dv = fcvec.project(dvec,plane.axis) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.axis) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.axis) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) target.constrain = 2 #z direction target.ui.xValue.setEnabled(False) target.ui.yValue.setEnabled(False) @@ -399,30 +312,27 @@ def constrainPoint (target,pt,mobile=False,sym=False): target.ui.zValue.setFocus() else: target.constrain = 3 elif (target.constrain == 0): - dv = fcvec.project(dvec,plane.u) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.u) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) elif (target.constrain == 1): - dv = fcvec.project(dvec,plane.v) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.u) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) elif (target.constrain == 2): - dv = fcvec.project(dvec,plane.axis) + dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis) point = last.add(dv) if sym: l = dv.Length - if dv.getAngle(plane.u) > 1: + if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1: l = -l - point = last.add(plane.getGlobalCoords(Vector(l,l,l))) + point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l))) return point - -if not hasattr(FreeCADGui,"Snapper"): - FreeCADGui.Snapper = Snapper() diff --git a/src/Mod/Draft/DraftTrackers.py b/src/Mod/Draft/DraftTrackers.py index 792c3350b..da064ffd9 100644 --- a/src/Mod/Draft/DraftTrackers.py +++ b/src/Mod/Draft/DraftTrackers.py @@ -25,8 +25,9 @@ __title__="FreeCAD Draft Trackers" __author__ = "Yorik van Havre" __url__ = "http://free-cad.sourceforge.net" -import FreeCAD,FreeCADGui,math +import FreeCAD,FreeCADGui,math,Draft,Part from FreeCAD import Vector +from draftlibs import fcvec,fcgeo from pivy import coin from DraftGui import todo @@ -97,6 +98,8 @@ class snapTracker(Tracker): def setMarker(self,style): if (style == "point"): self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9 + elif (style == "dot"): + self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9 elif (style == "square"): self.marker.markerIndex = coin.SoMarkerSet.DIAMOND_FILLED_9_9 elif (style == "circle"): @@ -143,8 +146,8 @@ class rectangleTracker(Tracker): self.coords = coin.SoCoordinate3() # this is the coordinate self.coords.point.setValues(0,50,[[0,0,0],[2,0,0],[2,2,0],[0,2,0],[0,0,0]]) Tracker.__init__(self,dotted,scolor,swidth,[self.coords,line]) - self.u = plane.u - self.v = plane.v + self.u = FreeCAD.DraftWorkingPlane.u + self.v = FreeCAD.DraftWorkingPlane.v def setorigin(self,point): "sets the base point of the rectangle" @@ -168,7 +171,7 @@ class rectangleTracker(Tracker): if v: self.v = v else: - norm = plane.u.cross(plane.v) + norm = FreeCAD.DraftWorkingPlane.u.cross(FreeCAD.DraftWorkingPlane.v) self.v = self.u.cross(norm) def p1(self,point=None): @@ -331,9 +334,9 @@ class arcTracker(Tracker): "returns the angle of a given vector" c = self.trans.translation.getValue() center = Vector(c[0],c[1],c[2]) - base = plane.u + base = FreeCAD.DraftWorkingPlane.u rad = pt.sub(center) - return(fcvec.angle(rad,base,plane.axis)) + return(fcvec.angle(rad,base,FreeCAD.DraftWorkingPlane.axis)) def getAngles(self): "returns the start and end angles" @@ -357,9 +360,9 @@ class arcTracker(Tracker): if self.circle: self.sep.removeChild(self.circle) self.circle = None if self.endangle < self.startangle: - c = Part.makeCircle(1,Vector(0,0,0),plane.axis,self.endangle,self.startangle) + c = Part.makeCircle(1,Vector(0,0,0),FreeCAD.DraftWorkingPlane.axis,self.endangle,self.startangle) else: - c = Part.makeCircle(1,Vector(0,0,0),plane.axis,self.startangle,self.endangle) + c = Part.makeCircle(1,Vector(0,0,0),FreeCAD.DraftWorkingPlane.axis,self.startangle,self.endangle) buf=c.writeInventor(2,0.01) ivin = coin.SoInput() ivin.setBuffer(buf) @@ -476,9 +479,9 @@ class PlaneTracker(Tracker): def set(self,pos=None): if pos: - Q = plane.getRotation().Rotation.Q + Q = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q else: - plm = plane.getPlacement() + plm = FreeCAD.DraftWorkingPlane.getPlacement() Q = plm.Rotation.Q pos = plm.Base self.trans.translation.setValue([pos.x,pos.y,pos.z]) @@ -590,21 +593,21 @@ class gridTracker(Tracker): self.update() def set(self): - Q = plane.getRotation().Rotation.Q + Q = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q self.trans.rotation.setValue([Q[0],Q[1],Q[2],Q[3]]) self.on() def getClosestNode(self,point): "returns the closest node from the given point" # get the 2D coords. - point = plane.projectPoint(point) - u = fcvec.project(point,plane.u) + point = FreeCAD.DraftWorkingPlane.projectPoint(point) + u = fcvec.project(point,FreeCAD.DraftWorkingPlane.u) lu = u.Length - if u.getAngle(plane.u) > 1.5: + if u.getAngle(FreeCAD.DraftWorkingPlane.u) > 1.5: lu = -lu - v = fcvec.project(point,plane.v) + v = fcvec.project(point,FreeCAD.DraftWorkingPlane.v) lv = v.Length - if v.getAngle(plane.v) > 1.5: + if v.getAngle(FreeCAD.DraftWorkingPlane.v) > 1.5: lv = -lv # print "u = ",u," v = ",v # find nearest grid node