+ fixed more filename bugs in Draft and Arch

+ reverted last changes in Draft Snap


git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5295 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
yorikvanhavre 2011-12-13 15:07:09 +00:00
parent 95bf080066
commit 17fc4285d7
3 changed files with 45 additions and 132 deletions

View File

@ -34,7 +34,7 @@ class ArchWorkbench(Workbench):
ToolTip = "Architecture workbench" ToolTip = "Architecture workbench"
def Initialize(self): def Initialize(self):
import draftTools,draftGui,Arch_rc,Arch import DraftTools,DraftGui,Arch_rc,Arch
archtools = ["Arch_Wall","Arch_Structure","Arch_Cell", archtools = ["Arch_Wall","Arch_Structure","Arch_Cell",
"Arch_Floor","Arch_Building","Arch_Site", "Arch_Floor","Arch_Building","Arch_Site",
"Arch_Window","Arch_Axis", "Arch_Window","Arch_Axis",
@ -47,11 +47,11 @@ class ArchWorkbench(Workbench):
"Draft_Downgrade","Draft_Trimex"] "Draft_Downgrade","Draft_Trimex"]
meshtools = ["Arch_SplitMesh","Arch_MeshToShape", meshtools = ["Arch_SplitMesh","Arch_MeshToShape",
"Arch_SelectNonSolidMeshes","Arch_RemoveShape"] "Arch_SelectNonSolidMeshes","Arch_RemoveShape"]
self.appendToolbar(str(draftTools.translate("arch","Arch tools")),archtools) self.appendToolbar(str(DraftTools.translate("arch","Arch tools")),archtools)
self.appendToolbar(str(draftTools.translate("arch","Draft tools")),drafttools) 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")),str(DraftTools.translate("arch","Tools"))],meshtools)
self.appendMenu(str(draftTools.translate("arch","Architecture")),archtools) self.appendMenu(str(DraftTools.translate("arch","Architecture")),archtools)
self.appendMenu(str(draftTools.translate("arch","Draft")),drafttools) self.appendMenu(str(DraftTools.translate("arch","Draft")),drafttools)
FreeCADGui.addIconPath(":/icons") FreeCADGui.addIconPath(":/icons")
FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addLanguagePath(":/translations")
FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch")

View File

@ -25,7 +25,7 @@ __title__="FreeCAD Draft Snap tools"
__author__ = "Yorik van Havre" __author__ = "Yorik van Havre"
__url__ = "http://free-cad.sourceforge.net" __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 draftlibs import fcvec,fcgeo
from FreeCAD import Vector from FreeCAD import Vector
from pivy import coin from pivy import coin
@ -33,93 +33,6 @@ from pivy import coin
# last snapped objects, for quick intersection calculation # last snapped objects, for quick intersection calculation
lastObj = [0,0] 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): def snapPoint(target,point,cursor,ctrl=False):
''' '''
Snap function used by the Draft tools Snap function used by the Draft tools
@ -356,42 +269,42 @@ def constrainPoint (target,pt,mobile=False,sym=False):
if len(target.node) > 0: if len(target.node) > 0:
last = target.node[-1] last = target.node[-1]
dvec = point.sub(last) dvec = point.sub(last)
affinity = plane.getClosestAxis(dvec) affinity = FreeCAD.DraftWorkingPlane.getClosestAxis(dvec)
if ((target.constrain == None) or mobile): if ((target.constrain == None) or mobile):
if affinity == "x": if affinity == "x":
dv = fcvec.project(dvec,plane.u) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.u) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
l = -l 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.constrain = 0 #x direction
target.ui.xValue.setEnabled(True) target.ui.xValue.setEnabled(True)
target.ui.yValue.setEnabled(False) target.ui.yValue.setEnabled(False)
target.ui.zValue.setEnabled(False) target.ui.zValue.setEnabled(False)
target.ui.xValue.setFocus() target.ui.xValue.setFocus()
elif affinity == "y": elif affinity == "y":
dv = fcvec.project(dvec,plane.v) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.v) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.v) > 1:
l = -l 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.constrain = 1 #y direction
target.ui.xValue.setEnabled(False) target.ui.xValue.setEnabled(False)
target.ui.yValue.setEnabled(True) target.ui.yValue.setEnabled(True)
target.ui.zValue.setEnabled(False) target.ui.zValue.setEnabled(False)
target.ui.yValue.setFocus() target.ui.yValue.setFocus()
elif affinity == "z": elif affinity == "z":
dv = fcvec.project(dvec,plane.axis) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.axis) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.axis) > 1:
l = -l 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.constrain = 2 #z direction
target.ui.xValue.setEnabled(False) target.ui.xValue.setEnabled(False)
target.ui.yValue.setEnabled(False) target.ui.yValue.setEnabled(False)
@ -399,30 +312,27 @@ def constrainPoint (target,pt,mobile=False,sym=False):
target.ui.zValue.setFocus() target.ui.zValue.setFocus()
else: target.constrain = 3 else: target.constrain = 3
elif (target.constrain == 0): elif (target.constrain == 0):
dv = fcvec.project(dvec,plane.u) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.u)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.u) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
l = -l 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): elif (target.constrain == 1):
dv = fcvec.project(dvec,plane.v) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.v)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.u) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
l = -l 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): elif (target.constrain == 2):
dv = fcvec.project(dvec,plane.axis) dv = fcvec.project(dvec,FreeCAD.DraftWorkingPlane.axis)
point = last.add(dv) point = last.add(dv)
if sym: if sym:
l = dv.Length l = dv.Length
if dv.getAngle(plane.u) > 1: if dv.getAngle(FreeCAD.DraftWorkingPlane.u) > 1:
l = -l l = -l
point = last.add(plane.getGlobalCoords(Vector(l,l,l))) point = last.add(FreeCAD.DraftWorkingPlane.getGlobalCoords(Vector(l,l,l)))
return point return point
if not hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper = Snapper()

View File

@ -25,8 +25,9 @@ __title__="FreeCAD Draft Trackers"
__author__ = "Yorik van Havre" __author__ = "Yorik van Havre"
__url__ = "http://free-cad.sourceforge.net" __url__ = "http://free-cad.sourceforge.net"
import FreeCAD,FreeCADGui,math import FreeCAD,FreeCADGui,math,Draft,Part
from FreeCAD import Vector from FreeCAD import Vector
from draftlibs import fcvec,fcgeo
from pivy import coin from pivy import coin
from DraftGui import todo from DraftGui import todo
@ -97,6 +98,8 @@ class snapTracker(Tracker):
def setMarker(self,style): def setMarker(self,style):
if (style == "point"): if (style == "point"):
self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9 self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9
elif (style == "dot"):
self.marker.markerIndex = coin.SoMarkerSet.CIRCLE_FILLED_9_9
elif (style == "square"): elif (style == "square"):
self.marker.markerIndex = coin.SoMarkerSet.DIAMOND_FILLED_9_9 self.marker.markerIndex = coin.SoMarkerSet.DIAMOND_FILLED_9_9
elif (style == "circle"): elif (style == "circle"):
@ -143,8 +146,8 @@ class rectangleTracker(Tracker):
self.coords = coin.SoCoordinate3() # this is the coordinate 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]]) 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]) Tracker.__init__(self,dotted,scolor,swidth,[self.coords,line])
self.u = plane.u self.u = FreeCAD.DraftWorkingPlane.u
self.v = plane.v self.v = FreeCAD.DraftWorkingPlane.v
def setorigin(self,point): def setorigin(self,point):
"sets the base point of the rectangle" "sets the base point of the rectangle"
@ -168,7 +171,7 @@ class rectangleTracker(Tracker):
if v: if v:
self.v = v self.v = v
else: else:
norm = plane.u.cross(plane.v) norm = FreeCAD.DraftWorkingPlane.u.cross(FreeCAD.DraftWorkingPlane.v)
self.v = self.u.cross(norm) self.v = self.u.cross(norm)
def p1(self,point=None): def p1(self,point=None):
@ -331,9 +334,9 @@ class arcTracker(Tracker):
"returns the angle of a given vector" "returns the angle of a given vector"
c = self.trans.translation.getValue() c = self.trans.translation.getValue()
center = Vector(c[0],c[1],c[2]) center = Vector(c[0],c[1],c[2])
base = plane.u base = FreeCAD.DraftWorkingPlane.u
rad = pt.sub(center) rad = pt.sub(center)
return(fcvec.angle(rad,base,plane.axis)) return(fcvec.angle(rad,base,FreeCAD.DraftWorkingPlane.axis))
def getAngles(self): def getAngles(self):
"returns the start and end angles" "returns the start and end angles"
@ -357,9 +360,9 @@ class arcTracker(Tracker):
if self.circle: self.sep.removeChild(self.circle) if self.circle: self.sep.removeChild(self.circle)
self.circle = None self.circle = None
if self.endangle < self.startangle: 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: 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) buf=c.writeInventor(2,0.01)
ivin = coin.SoInput() ivin = coin.SoInput()
ivin.setBuffer(buf) ivin.setBuffer(buf)
@ -476,9 +479,9 @@ class PlaneTracker(Tracker):
def set(self,pos=None): def set(self,pos=None):
if pos: if pos:
Q = plane.getRotation().Rotation.Q Q = FreeCAD.DraftWorkingPlane.getRotation().Rotation.Q
else: else:
plm = plane.getPlacement() plm = FreeCAD.DraftWorkingPlane.getPlacement()
Q = plm.Rotation.Q Q = plm.Rotation.Q
pos = plm.Base pos = plm.Base
self.trans.translation.setValue([pos.x,pos.y,pos.z]) self.trans.translation.setValue([pos.x,pos.y,pos.z])
@ -590,21 +593,21 @@ class gridTracker(Tracker):
self.update() self.update()
def set(self): 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.trans.rotation.setValue([Q[0],Q[1],Q[2],Q[3]])
self.on() self.on()
def getClosestNode(self,point): def getClosestNode(self,point):
"returns the closest node from the given point" "returns the closest node from the given point"
# get the 2D coords. # get the 2D coords.
point = plane.projectPoint(point) point = FreeCAD.DraftWorkingPlane.projectPoint(point)
u = fcvec.project(point,plane.u) u = fcvec.project(point,FreeCAD.DraftWorkingPlane.u)
lu = u.Length lu = u.Length
if u.getAngle(plane.u) > 1.5: if u.getAngle(FreeCAD.DraftWorkingPlane.u) > 1.5:
lu = -lu lu = -lu
v = fcvec.project(point,plane.v) v = fcvec.project(point,FreeCAD.DraftWorkingPlane.v)
lv = v.Length lv = v.Length
if v.getAngle(plane.v) > 1.5: if v.getAngle(FreeCAD.DraftWorkingPlane.v) > 1.5:
lv = -lv lv = -lv
# print "u = ",u," v = ",v # print "u = ",u," v = ",v
# find nearest grid node # find nearest grid node