+ 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:
parent
95bf080066
commit
17fc4285d7
|
@ -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")
|
||||||
|
|
|
@ -25,100 +25,13 @@ __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
|
||||||
|
|
||||||
# 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):
|
||||||
'''
|
'''
|
||||||
|
@ -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()
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user