Arch: Fixed display of axis bubbles and texts on DXF export and Techdraw pages

This commit is contained in:
Yorik van Havre
2021-12-16 15:55:58 +01:00
parent b1beadd2e9
commit 568dbcea9e
3 changed files with 80 additions and 94 deletions

View File

@@ -684,55 +684,32 @@ def get_svg(obj,
if App.GuiUp:
vobj = obj.ViewObject
lorig = lstyle
fn = obj.ViewObject.FontName
fill = 'none'
rad = vobj.BubbleSize.Value/2
n = 0
for e in obj.Shape.Edges:
lstyle = lorig
svg += get_path(obj, plane,
fill, pathdata, stroke, linewidth, lstyle,
fill_opacity=None,
edges=[e])
lstyle = "none"
pos = ["Start"]
if hasattr(vobj, "BubblePosition"):
if vobj.BubblePosition == "Both":
pos = ["Start", "End"]
else:
pos = [vobj.BubblePosition]
for p in pos:
if p == "Start":
p1 = e.Vertexes[0].Point
p2 = e.Vertexes[1].Point
else:
p1 = e.Vertexes[1].Point
p2 = e.Vertexes[0].Point
dv = p2.sub(p1)
dv.normalize()
center = p2.add(dv.scale(rad, rad, rad))
for t in obj.ViewObject.Proxy.getTextData():
pos = t[1].add(App.Vector(0,-fontsize/2,0))
svg += svgtext.get_text(plane, techdraw,
tstroke, fontsize, fn,
0.0, pos, t[0],
1.0, "center")
for b in obj.ViewObject.Proxy.getShapeData():
if hasattr(b,"Curve") and isinstance(b.Curve,Part.Circle):
svg += get_circle(plane,
fill, stroke, linewidth, lstyle,
Part.makeCircle(rad, center))
if (hasattr(vobj.Proxy, "bubbletexts")
and len(vobj.Proxy.bubbletexts) >= n):
bubb = vobj.Proxy.bubbletexts
svg += '<text '
svg += 'fill="{}" '.format(stroke)
svg += 'font-size="{}" '.format(rad)
svg += 'style="text-anchor:middle;'
svg += 'text-align:center;'
svg += 'font-family: sans;" '
svg += 'transform="'
svg += 'translate({},{}) '.format(center.x + rad/4.0,
center.y - rad/3.0)
svg += 'scale(1,-1)"> '
svg += '<tspan>'
svg += bubb[n].string.getValues()[0]
svg += '</tspan>\n'
svg += '</text>\n'
n += 1
lstyle = lorig
fill, stroke, linewidth, "none",
b)
else:
sfill = stroke
svg += get_path(obj, plane,
sfill, pathdata, stroke, linewidth, "none",
fill_opacity=None,
edges=b.Edges)
elif utils.get_type(obj) == "Pipe":
fill = stroke

View File

@@ -806,7 +806,7 @@ def placementFromDXFOCS(ent):
# http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-7941.htm
# Arbitrary Axis Algorithm
# http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-793d.htm#WSc30cd3d5faa8f6d81cb25f1ffb755717d-7ff5
# Riferimenti dell'algoritmo dell'asse arbitrario in italiano
# Riferimenti dell'algoritmo dell'asse arbitrario in italiano
# http://docs.autodesk.com/ACD/2011/ITA/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-7941.htm
# http://docs.autodesk.com/ACD/2011/ITA/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-793d.htm#WSc30cd3d5faa8f6d81cb25f1ffb755717d-7ff5
if (draftWPlane.axis == FreeCAD.Vector(1.0, 0.0, 0.0)):
@@ -825,7 +825,7 @@ def placementFromDXFOCS(ent):
draftWPlane.v.normalize()
draftWPlane.position = Vector(0.0, 0.0, 0.0)
draftWPlane.weak = False
pl = FreeCAD.Placement()
pl = draftWPlane.getPlacement()
if ((ent.type == "lwpolyline") or (ent.type == "polyline")):
@@ -3666,7 +3666,7 @@ def export(objectslist, filename, nospline=False, lwPoly=False):
# other cases, treat objects one by one
dxf = dxfLibrary.Drawing()
# add global variables
if hasattr(dxf,"header"):
if hasattr(dxf,"header"):
dxf.header.append(" 9\n$DIMTXT\n 40\n"+str(Draft.getParam("textheight", 20))+"\n")
for ob in exportLayers:
if ob.Label != "0": # dxflibrary already creates it
@@ -3732,7 +3732,7 @@ def export(objectslist, filename, nospline=False, lwPoly=False):
p2 = obj.Placement.multVec(App.Vector(_v))
_h = vobj.Proxy.header.translation.getValue().getValue()
lspc = FreeCAD.Vector(_h)
p1 = p2 + lspc
p1 = p2 + lspc
dxf.append(dxfLibrary.Text(t1, p1, height=f1,
color=getACI(ob, text=True),
style='STANDARD',
@@ -3752,56 +3752,43 @@ def export(objectslist, filename, nospline=False, lwPoly=False):
if not axes:
continue
for ax in axes:
dxf.append(dxfLibrary.Line([tuple(ax[0]),
tuple(ax[1])],
color=getACI(ob),
layer=getStrGroup(ob)))
p = ax[1]
h = 1
if FreeCAD.GuiUp:
vobj = ob.ViewObject
rad = vobj.BubbleSize.Value/2
n = 0
pos = ["Start"]
if hasattr(vobj, "BubblePosition"):
if vobj.BubblePosition == "Both":
pos = ["Start", "End"]
else:
pos = [vobj.BubblePosition]
for p in pos:
if p == "Start":
p1 = ax[0]
p2 = ax[1]
else:
p1 = ax[1]
p2 = ax[0]
dv = p2.sub(p1)
dv.normalize()
center = p2.add(dv.scale(rad, rad, rad))
h = float(ob.ViewObject.FontSize)
dxf.append(dxfLibrary.Circle(center,
rad,
color=getACI(ob),
layer=getStrGroup(ob)))
dxf.append(dxfLibrary.Text(ax[2],
center,
alignment=center,
height=h,
justifyhor=1,
justifyver=2,
color=getACI(ob),
style='STANDARD',
layer=getStrGroup(ob)))
else:
dxf.append(dxfLibrary.Text(ax[2],
p,
alignment=p,
dxf.append(dxfLibrary.Line([ax[0],
ax[1]],
color=getACI(ob),
layer=getStrGroup(ob)))
h = 1
if FreeCAD.GuiUp:
vobj = ob.ViewObject
h = float(ob.ViewObject.FontSize)
for text in vobj.Proxy.getTextData():
pos = text[1].add(FreeCAD.Vector(-h/2,-h/2,0))
dxf.append(dxfLibrary.Text(text[0],
pos,
height=h,
justifyhor=1,
justifyver=2,
color=getACI(ob),
style='STANDARD',
layer=getStrGroup(ob)))
for shape in vobj.Proxy.getShapeData():
if hasattr(shape,"Curve") and isinstance(shape.Curve,Part.Circle):
dxf.append(dxfLibrary.Circle(shape.Curve.Center,
shape.Curve.Radius,
color=getACI(ob),
layer=getStrGroup(ob)))
else:
if lwPoly:
points = [(v.Point.x, v.Point.y, v.Point.z, None, None, 0.0) for v in shape.Vertexes]
dxf.append(dxfLibrary.LwPolyLine(points,
[0.0, 0.0],
1,
color=getACI(ob),
layer=getGroup(ob)))
else:
points = [((v.Point.x, v.Point.y, v.Point.z), None, [None, None], 0.0) for v in shape.Vertexes]
dxf.append(dxfLibrary.PolyLine(points,
[0.0, 0.0, 0.0],
1,
color=getACI(ob),
layer=getGroup(ob)))
elif ob.isDerivedFrom("Part::Feature"):
tess = None