+ 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"
|
||||
|
||||
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")
|
||||
|
|
|
@ -25,7 +25,7 @@ __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
|
||||
|
@ -33,93 +33,6 @@ 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):
|
||||
'''
|
||||
Snap function used by the Draft tools
|
||||
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user