Arch: Updates related to the PlaneGui class (#11153)

Related issue:
#5603.
This commit is contained in:
Roy-043
2023-10-23 18:42:20 +02:00
committed by GitHub
parent 26d748587b
commit 3a396e1ed3
12 changed files with 75 additions and 82 deletions

View File

@@ -301,9 +301,10 @@ class CommandBuildingPart:
ss += "]"
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create BuildingPart"))
FreeCADGui.addModule("Arch")
FreeCADGui.doCommand("obj = Arch.makeBuildingPart("+ss+")")
FreeCADGui.addModule("Draft")
FreeCADGui.doCommand("obj.Placement = FreeCAD.DraftWorkingPlane.getPlacement()")
FreeCADGui.addModule("WorkingPlane")
FreeCADGui.doCommand("obj = Arch.makeBuildingPart("+ss+")")
FreeCADGui.doCommand("obj.Placement = WorkingPlane.get_working_plane().get_placement()")
FreeCADGui.doCommand("Draft.autogroup(obj)")
FreeCAD.ActiveDocument.commitTransaction()
FreeCAD.ActiveDocument.recompute()
@@ -963,30 +964,22 @@ class ViewProviderBuildingPart:
FreeCADGui.Selection.clearSelection()
def setWorkingPlane(self,restore=False):
vobj = self.Object.ViewObject
if hasattr(self,"Object") and hasattr(FreeCAD,"DraftWorkingPlane"):
import FreeCADGui
autoclip = False
if hasattr(self.Object.ViewObject,"AutoCutView"):
autoclip = self.Object.ViewObject.AutoCutView
if restore:
FreeCAD.DraftWorkingPlane.restore()
if autoclip:
self.Object.ViewObject.CutView = False
else:
FreeCAD.DraftWorkingPlane.save()
FreeCADGui.runCommand("Draft_SelectPlane")
if autoclip:
self.Object.ViewObject.CutView = True
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.setGrid()
if hasattr(FreeCADGui,"draftToolBar"):
if restore and hasattr(self,"wptext"):
FreeCADGui.draftToolBar.wplabel.setText(self.wptext)
else:
self.wptext = FreeCADGui.draftToolBar.wplabel.text()
FreeCADGui.draftToolBar.wplabel.setText(self.Object.Label)
FreeCAD.DraftWorkingPlane.lastBuildingPart = self.Object.Name
import WorkingPlane
wp = WorkingPlane.get_working_plane(update=False)
autoclip = False
if hasattr(vobj,"AutoCutView"):
autoclip = vobj.AutoCutView
if restore:
if wp.label.rstrip("*") == self.Object.Label:
wp._previous()
if autoclip:
vobj.CutView = False
else:
wp.align_to_selection()
if autoclip:
vobj.CutView = True
def writeCamera(self):

View File

@@ -124,8 +124,8 @@ class CommandArchCurtainWall:
else:
# interactive line drawing
self.points = []
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
import WorkingPlane
WorkingPlane.get_working_plane()
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.getPoint(callback=self.getPoint)

View File

@@ -46,8 +46,9 @@ __url__ = "http://www.freecad.org"
def getPlanWithLine(line):
"""Function to make a plane along Normal plan"""
import Part
plan = FreeCAD.DraftWorkingPlane
w = plan.getNormal()
import WorkingPlane
plan = WorkingPlane.get_working_plane()
w = plan.axis
part = Part.Shape(line)
out = part.extrude(w)
return out

View File

@@ -583,8 +583,8 @@ class Nester:
# flatten the polygon on the XY plane
wp = WorkingPlane.plane()
wp.alignToPointAndAxis(face.CenterOfMass,face.normalAt(0,0))
wp = WorkingPlane.PlaneBase()
wp.align_to_point_and_axis(face.CenterOfMass,face.normalAt(0,0))
pverts = []
for v in verts:
vx = DraftVecUtils.project(v,wp.u)

View File

@@ -165,9 +165,9 @@ class CommandPanel:
return
# interactive mode
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
import WorkingPlane
WorkingPlane.get_working_plane()
self.points = []
self.tracker = DraftTrackers.boxTracker()
self.tracker.width(self.Width)
@@ -434,8 +434,6 @@ class _Panel(ArchComponent.Component):
if self.clone(obj):
return
import Part #, DraftGeomUtils
layers = []
length = 0
width = 0

View File

@@ -74,7 +74,8 @@ def makeSectionPlane(objectslist=None,name=None):
for o in Draft.get_group_contents(objectslist):
if hasattr(o,"Shape") and hasattr(o.Shape,"BoundBox"):
bb.add(o.Shape.BoundBox)
obj.Placement = FreeCAD.DraftWorkingPlane.getPlacement()
import WorkingPlane
obj.Placement = WorkingPlane.get_working_plane().get_placement()
obj.Placement.Base = bb.Center
if FreeCAD.GuiUp:
margin = bb.XLength*0.1
@@ -391,13 +392,13 @@ def getSVG(source,
svgcache = ''
# render using the Arch Vector Renderer
import ArchVRM, WorkingPlane
wp = WorkingPlane.plane()
wp = WorkingPlane.PlaneBase()
pl = FreeCAD.Placement(source.Placement)
if source.ViewObject and hasattr(source.ViewObject,"CutMargin"):
mv = pl.multVec(FreeCAD.Vector(0,0,1))
mv.multiply(source.ViewObject.CutMargin)
pl.move(mv)
wp.setFromPlacement(pl)
wp.align_to_placement(pl)
#wp.inverse()
render = ArchVRM.Renderer()
render.setWorkingPlane(wp)
@@ -748,9 +749,9 @@ def getCoinSVG(cutplane,objs,cameradata=None,linewidth=0.2,singleface=False,face
factor = None
trans = None
import WorkingPlane
wp = WorkingPlane.plane()
wp.alignToPointAndAxis_SVG(Vector(0,0,0),cutplane.normalAt(0,0),0)
p = wp.getLocalCoords(markervec)
wp = WorkingPlane.PlaneBase()
wp.align_to_point_and_axis_svg(Vector(0,0,0),cutplane.normalAt(0,0),0)
p = wp.get_local_coords(markervec)
orlength = FreeCAD.Vector(p.x,p.y,0).Length
marker = re.findall("<line x1=.*?stroke=\"\#ffffff\".*?\/>",svg)
if marker:
@@ -763,7 +764,7 @@ def getCoinSVG(cutplane,objs,cameradata=None,linewidth=0.2,singleface=False,face
p2 = FreeCAD.Vector(x2,y2,0)
factor = orlength/p2.sub(p1).Length
if factor:
orig = wp.getLocalCoords(FreeCAD.Vector(boundbox.XMin,boundbox.YMin,boundbox.ZMin))
orig = wp.get_local_coords(FreeCAD.Vector(boundbox.XMin,boundbox.YMin,boundbox.ZMin))
orig = FreeCAD.Vector(orig.x,-orig.y,0)
scaledp1 = FreeCAD.Vector(p1.x*factor,p1.y*factor,0)
trans = orig.sub(scaledp1)

View File

@@ -170,9 +170,8 @@ def placeAlongEdge(p1,p2,horizontal=False):
pl = FreeCAD.Placement()
pl.Base = p1
up = FreeCAD.Vector(0,0,1)
if hasattr(FreeCAD,"DraftWorkingPlane"):
up = FreeCAD.DraftWorkingPlane.axis
import WorkingPlane
up = WorkingPlane.get_working_plane(update=False).axis
zaxis = p2.sub(p1)
yaxis = up.cross(zaxis)
if yaxis.Length > 0:
@@ -290,6 +289,7 @@ class _CommandStructure:
self.bpoint = None
self.bmode = False
self.precastvalues = None
self.wp = None
sel = FreeCADGui.Selection.getSelection()
if sel:
st = Draft.getObjectsOfType(sel,"Structure")
@@ -309,15 +309,15 @@ class _CommandStructure:
return
# interactive mode
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
import WorkingPlane
self.wp = WorkingPlane.get_working_plane()
self.points = []
self.tracker = DraftTrackers.boxTracker()
self.tracker.width(self.Width)
self.tracker.height(self.Height)
self.tracker.length(self.Length)
self.tracker.setRotation(FreeCAD.DraftWorkingPlane.getRotation().Rotation)
self.tracker.setRotation(self.wp.get_placement().Rotation)
self.tracker.on()
self.precast = ArchPrecast._PrecastTaskPanel()
self.dents = ArchPrecast._DentsTaskPanel()
@@ -344,6 +344,7 @@ class _CommandStructure:
horiz = True # determines the type of rotation to apply to the final object
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Structure"))
FreeCADGui.addModule("Arch")
FreeCADGui.addModule("WorkingPlane")
if self.Profile is not None:
try: # try to update latest precast values - fails if dialog has been destroyed already
self.precastvalues = self.precast.getValues()
@@ -361,8 +362,7 @@ class _CommandStructure:
delta = FreeCAD.Vector(0,0-self.Width/2,0)
else:
delta = FreeCAD.Vector(-self.Length/2,-self.Width/2,0)
if hasattr(FreeCAD,"DraftWorkingPlane"):
delta = FreeCAD.DraftWorkingPlane.getRotation().multVec(delta)
delta = self.wp.get_global_coords(delta,as_vector=True)
point = point.add(delta)
if self.bpoint:
self.bpoint = self.bpoint.add(delta)
@@ -396,7 +396,8 @@ class _CommandStructure:
FreeCADGui.doCommand('s.Placement = Arch.placeAlongEdge('+DraftVecUtils.toString(self.bpoint)+","+DraftVecUtils.toString(point)+","+str(horiz)+")")
else:
FreeCADGui.doCommand('s.Placement.Base = '+DraftVecUtils.toString(point))
FreeCADGui.doCommand('s.Placement.Rotation = s.Placement.Rotation.multiply(FreeCAD.DraftWorkingPlane.getRotation().Rotation)')
FreeCADGui.doCommand('wp = WorkingPlane.get_working_plane()')
FreeCADGui.doCommand('s.Placement.Rotation = s.Placement.Rotation.multiply(wp.get_placement().Rotation)')
FreeCADGui.addModule("Draft")
FreeCADGui.doCommand("Draft.autogroup(s)")
@@ -543,16 +544,14 @@ class _CommandStructure:
delta = Vector(0,0,self.Height/2)
else:
delta = Vector(self.Length/2,0,0)
if hasattr(FreeCAD,"DraftWorkingPlane"):
delta = FreeCAD.DraftWorkingPlane.getRotation().multVec(delta)
delta = self.wp.get_global_coords(delta,as_vector=True)
if self.modec.isChecked():
self.tracker.pos(point.add(delta))
self.tracker.on()
else:
if self.bpoint:
delta = Vector(0,0,-self.Height/2)
if hasattr(FreeCAD,"DraftWorkingPlane"):
delta = FreeCAD.DraftWorkingPlane.getRotation().multVec(delta)
delta = self.wp.get_global_coords(delta,as_vector=True)
self.tracker.update([self.bpoint.add(delta),point.add(delta)])
self.tracker.on()
l = (point.sub(self.bpoint)).Length

View File

@@ -105,8 +105,8 @@ class CommandArchTruss:
else:
# interactive line drawing
self.points = []
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
import WorkingPlane
WorkingPlane.get_working_plane()
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.getPoint(callback=self.getPoint)

View File

@@ -65,7 +65,7 @@ class Renderer:
self.wp = wp
else:
import WorkingPlane
self.wp = WorkingPlane.plane()
self.wp = WorkingPlane.PlaneBase()
if DEBUG: print("Renderer initialized on " + str(self.wp))
@@ -92,7 +92,7 @@ class Renderer:
def setWorkingPlane(self,wp):
"sets a Draft WorkingPlane or Placement for this renderer"
if isinstance(wp,FreeCAD.Placement):
self.wp.setFromPlacement(wp)
self.wp.align_to_placement(wp)
else:
self.wp = wp
if DEBUG: print("Renderer set on " + str(self.wp))
@@ -198,7 +198,7 @@ class Renderer:
for e in edges:
v = e.Vertexes[0].Point
#print(v)
v = self.wp.getLocalCoords(v)
v = self.wp.get_local_coords(v)
verts.append(v)
verts.append(verts[0])
if len(verts) > 2:
@@ -211,7 +211,7 @@ class Renderer:
return None
else:
# restoring flipped normals
vnorm = self.wp.getLocalCoords(norm)
vnorm = self.wp.get_local_coords(norm)
if vnorm.getAngle(sh.normalAt(0,0)) > 1:
sh.reverse()
#print("VRM: projectFace end: ",len(sh.Vertexes)," verts")
@@ -220,8 +220,8 @@ class Renderer:
def projectEdge(self,edge):
"projects a single edge on the WP"
if len(edge.Vertexes) > 1:
v1 = self.wp.getLocalCoords(edge.Vertexes[0].Point)
v2 = self.wp.getLocalCoords(edge.Vertexes[-1].Point)
v1 = self.wp.get_local_coords(edge.Vertexes[0].Point)
v2 = self.wp.get_local_coords(edge.Vertexes[-1].Point)
return Part.LineSegment(v1,v2).toShape()
return edge
@@ -293,7 +293,7 @@ class Renderer:
# http://paulbourke.net/geometry/insidepoly/
count = 0
p = self.wp.getLocalCoords(vert.Point)
p = self.wp.get_local_coords(vert.Point)
for e in face[0].Edges:
p1 = e.Vertexes[0].Point
p2 = e.Vertexes[-1].Point

View File

@@ -316,6 +316,7 @@ class _CommandWall:
sel = FreeCADGui.Selection.getSelectionEx()
done = False
self.existing = []
self.wp = None
if sel:
# automatic mode
@@ -345,9 +346,9 @@ class _CommandWall:
# interactive mode
self.points = []
import WorkingPlane
self.wp = WorkingPlane.get_working_plane()
self.tracker = DraftTrackers.boxTracker()
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
FreeCADGui.Snapper.getPoint(callback=self.getPoint,
extradlg=self.taskbox(),
title=translate("Arch","First point of wall")+":")
@@ -386,8 +387,8 @@ class _CommandWall:
elif len(self.points) == 2:
import Part
l = Part.LineSegment(FreeCAD.DraftWorkingPlane.getLocalCoords(self.points[0]),
FreeCAD.DraftWorkingPlane.getLocalCoords(self.points[1]))
l = Part.LineSegment(self.wp.get_local_coords(self.points[0]),
self.wp.get_local_coords(self.points[1]))
self.tracker.finalize()
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Wall"))
FreeCADGui.addModule("Arch")
@@ -431,6 +432,8 @@ class _CommandWall:
"""
FreeCADGui.addModule("Draft")
FreeCADGui.addModule("WorkingPlane")
FreeCADGui.doCommand("wp = WorkingPlane.get_working_plane()")
if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch").GetBool("WallSketches",True):
# Use ArchSketch if SketchArch add-on is present
try:
@@ -439,13 +442,13 @@ class _CommandWall:
FreeCADGui.doCommand('base=ArchSketchObject.makeArchSketch()')
except:
FreeCADGui.doCommand('base=FreeCAD.ActiveDocument.addObject("Sketcher::SketchObject","WallTrace")')
FreeCADGui.doCommand('base.Placement = FreeCAD.DraftWorkingPlane.getPlacement()')
FreeCADGui.doCommand('base.Placement = wp.get_placement()')
FreeCADGui.doCommand('base.addGeometry(trace)')
else:
FreeCADGui.doCommand('base=Draft.makeLine(trace)')
FreeCADGui.doCommand('FreeCAD.ActiveDocument.recompute()')
FreeCADGui.doCommand('wall = Arch.makeWall(base,width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")')
FreeCADGui.doCommand('wall.Normal = FreeCAD.DraftWorkingPlane.getNormal()')
FreeCADGui.doCommand('wall.Normal = wp.axis')
if self.MultiMat:
FreeCADGui.doCommand("wall.Material = FreeCAD.ActiveDocument."+self.MultiMat.Name)
FreeCADGui.doCommand("Draft.autogroup(wall)")
@@ -467,7 +470,7 @@ class _CommandWall:
if FreeCADGui.Control.activeDialog():
b = self.points[0]
n = FreeCAD.DraftWorkingPlane.axis
n = self.wp.axis
bv = point.sub(b)
dv = bv.cross(n)
dv = DraftVecUtils.scaleTo(dv,self.Width/2)

View File

@@ -186,6 +186,7 @@ class _CommandWindow:
self.Include = True
self.baseFace = None
self.wparams = ["Width","Height","H1","H2","H3","W1","W2","O1","O2"]
self.wp = None
# autobuild mode
if FreeCADGui.Selection.getSelectionEx():
@@ -235,8 +236,8 @@ class _CommandWindow:
return
# interactive mode
if hasattr(FreeCAD,"DraftWorkingPlane"):
FreeCAD.DraftWorkingPlane.setup()
import WorkingPlane
self.wp = WorkingPlane.get_working_plane()
self.tracker = DraftTrackers.boxTracker()
self.tracker.length(self.Width)
@@ -274,8 +275,8 @@ class _CommandWindow:
point = point.add(FreeCAD.Vector(0,0,self.Sill))
FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Window"))
FreeCADGui.doCommand("import math, FreeCAD, Arch, DraftGeomUtils")
FreeCADGui.doCommand("wp = FreeCAD.DraftWorkingPlane")
FreeCADGui.doCommand("import math, FreeCAD, Arch, DraftGeomUtils, WorkingPlane")
FreeCADGui.doCommand("wp = WorkingPlane.get_working_plane()")
if self.baseFace is not None:
FreeCADGui.doCommand("face = FreeCAD.ActiveDocument." + self.baseFace[0].Name + ".Shape.Faces[" + str(self.baseFace[1]) + "]")
@@ -342,9 +343,8 @@ class _CommandWindow:
delta = FreeCAD.Vector(self.Width/2,self.Thickness/2,self.Height/2)
delta = delta.add(FreeCAD.Vector(0,0,self.Sill))
wp = FreeCAD.DraftWorkingPlane
if self.baseFace is None:
rot = FreeCAD.Rotation(wp.u,wp.v,-wp.axis,"XZY")
rot = FreeCAD.Rotation(self.wp.u,self.wp.v,-self.wp.axis,"XZY")
self.tracker.setRotation(rot)
if info:
if "Face" in info['Component']:
@@ -353,7 +353,7 @@ class _CommandWindow:
self.baseFace = [o,int(info['Component'][4:])-1]
#print("switching to ",o.Label," face ",self.baseFace[1])
f = o.Shape.Faces[self.baseFace[1]]
p = DraftGeomUtils.placement_from_face(f,vec_z=wp.axis,rotated=True)
p = DraftGeomUtils.placement_from_face(f,vec_z=self.wp.axis,rotated=True)
rot = p.Rotation
self.tracker.setRotation(rot)
r = self.tracker.trans.rotation.getValue().getValue()

View File

@@ -714,9 +714,7 @@ def getRotation(entity):
w = FreeCAD.Vector(entity.Axis3.DirectionRatios)
except AttributeError:
return FreeCAD.Rotation()
import WorkingPlane
p = WorkingPlane.plane(u=u, v=v, w=w)
return p.getRotation().Rotation
return FreeCAD.Rotation(u, v, w, "ZYX")
def getPlacement(entity,scaling=1000):