Skip to content

Commit

Permalink
ArchSectionPlane: Add properties for the line color and the fill color
Browse files Browse the repository at this point in the history
* Both properties are automatically added to old section planes
  with the help of onDocumentRestored.
* A bit of style clean up to improve the readability of touched code lines.
  • Loading branch information
simsiem authored and yorikvanhavre committed Apr 23, 2017
1 parent 9633c94 commit 99247f5
Showing 1 changed file with 68 additions and 23 deletions.
91 changes: 68 additions & 23 deletions src/Mod/Arch/ArchSectionPlane.py
Expand Up @@ -128,13 +128,19 @@ def getCutShapes(objs,section,showHidden):
return shapes,hshapes,sshapes,cutface,cutvolume,invcutvolume


def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=False,scale=1,linewidth=1,fontsize=1,techdraw=False,rotation=0):
"""getSVG(section,[allOn,renderMode,showHidden,showFill,scale,linewidth,fontsize]) :
def getSVG(section, renderMode="Wireframe", allOn=False, showHidden=False, scale=1, rotation=0, linewidth=1, lineColor=(0.0,0.0,0.0), fontsize=1, showFill=False, fillColor=(0.8,0.8,0.8), techdraw=False):
"""getSVG(section, [renderMode, allOn, showHidden, scale, rotation,
linewidth, lineColor, fontsize, showFill, fillColor, techdraw]):
returns an SVG fragment from an Arch section plane. If
allOn is True, all cut objects are shown, regardless if they are visible or not.
renderMode can be Wireframe (default) or Solid to use the Arch solid renderer. If
showHidden is True, the hidden geometry above the section plane is shown in dashed line.
If showFill is True, the cut areas get filled with a pattern"""
If showFill is True, the cut areas get filled with a pattern.
lineColor -- Color of lines for the renderMode "Wireframe".
fillColor -- If showFill is True and renderMode is "Wireframe",
the cut areas are filled with fillColor.
"""

if not section.Objects:
return ""
Expand Down Expand Up @@ -196,15 +202,17 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
shapes,hshapes,sshapes,cutface,cutvolume,invcutvolume = getCutShapes(objs,section,showHidden)
if shapes:
baseshape = Part.makeCompound(shapes)
style = {'stroke-width': 'LWPlaceholder'}
style = {'stroke': Draft.getrgb(lineColor),
'stroke-width': 'LWPlaceholder'}
svgf = Drawing.projectToSVG(
baseshape, direction,
hStyle=style, h0Style=style, h1Style=style,
vStyle=style, v0Style=style, v1Style=style)
svg += svgf
if hshapes:
hshapes = Part.makeCompound(hshapes)
style = {'stroke-width': 'LWPlaceholder',
style = {'stroke': Draft.getrgb(lineColor),
'stroke-width': 'LWPlaceholder',
'stroke-dasharray': 'DAPlaceholder'}
svgh = Drawing.projectToSVG(
hshapes, direction,
Expand All @@ -220,11 +228,14 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
if s.Edges:
#f = Draft.getSVG(s,direction=direction.negative(),linewidth=0,fillstyle="sectionfill",color=(0,0,0))
# temporarily disabling fill patterns
f = Draft.getSVG(s,direction=direction.negative(),linewidth=0,fillstyle="#aaaaaa",color=(0,0,0))
f = Draft.getSVG(s, direction=direction.negative(), linewidth=0,
fillstyle=Draft.getrgb(fillColor),
color=lineColor)
svgs += f
svgs += "</g>\n"
sshapes = Part.makeCompound(sshapes)
style = {'stroke-width': 'SWPlaceholder'}
style = {'stroke': Draft.getrgb(lineColor),
'stroke-width': 'SWPlaceholder'}
svgs += Drawing.projectToSVG(
sshapes, direction,
hStyle=style, h0Style=style, h1Style=style,
Expand All @@ -242,7 +253,9 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
if not techdraw:
svg += '<g transform="scale(1,-1)">'
for d in drafts:
svg += Draft.getSVG(d,scale=scale,linewidth=linewidth*yt,fontsize=fontsize,direction=direction,techdraw=techdraw,rotation=rotation)
svg += Draft.getSVG(d, scale=scale, linewidth=linewidth*yt, fontsize=fontsize,
direction=direction, color=lineColor, techdraw=techdraw,
rotation=rotation)
if not techdraw:
svg += '</g>'
# filter out spaces not cut by the section plane
Expand All @@ -252,7 +265,9 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
if not techdraw:
svg += '<g transform="scale(1,-1)">'
for s in spaces:
svg += Draft.getSVG(s,scale=scale,linewidth=linewidth*yt,fontsize=fontsize,direction=direction,techdraw=techdraw,rotation=rotation)
svg += Draft.getSVG(s, scale=scale, linewidth=linewidth*yt, fontsize=fontsize,
direction=direction, color=lineColor, techdraw=techdraw,
rotation=rotation)
if not techdraw:
svg += '</g>'
# add additional edge symbols from windows
Expand All @@ -279,7 +294,10 @@ def getSVG(section,allOn=False,renderMode="Wireframe",showHidden=False,showFill=
if not techdraw:
svg += '<g transform="scale(1,-1)">'
for s in sh:
svg += Draft.getSVG(s,scale=scale,linewidth=linewidth*yt,fontsize=fontsize,fillstyle="none",direction=direction,techdraw=techdraw,rotation=rotation)
svg += Draft.getSVG(s, scale=scale, linewidth=linewidth*yt,
fontsize=fontsize, fillstyle="none",
direction=direction, color=lineColor,
techdraw=techdraw, rotation=rotation)
if not techdraw:
svg += '</g>'

Expand Down Expand Up @@ -570,13 +588,21 @@ def doubleClicked(self,vobj):

class _ArchDrawingView:
def __init__(self, obj):
obj.addProperty("App::PropertyLink","Source","Base",QT_TRANSLATE_NOOP("App::Property","The linked object"))
obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing view",QT_TRANSLATE_NOOP("App::Property","The rendering mode to use"))
obj.addProperty("App::PropertyBool","ShowCut","Drawing view",QT_TRANSLATE_NOOP("App::Property","If cut geometry is shown or not"))
obj.addProperty("App::PropertyBool","ShowFill","Drawing view",QT_TRANSLATE_NOOP("App::Property","If cut geometry is filled or not"))
obj.addProperty("App::PropertyFloat","LineWidth","Drawing view",QT_TRANSLATE_NOOP("App::Property","The line width of the rendered objects"))
obj.addProperty("App::PropertyLength","FontSize","Drawing view",QT_TRANSLATE_NOOP("App::Property","The size of the texts inside this object"))
obj.addProperty("App::PropertyBool","AlwaysOn","Drawing view",QT_TRANSLATE_NOOP("App::Property","If checked, source objects are displayed regardless of being visible in the 3D model"))
obj.addProperty("App::PropertyLink", "Source", "Base",
QT_TRANSLATE_NOOP("App::Property","The linked object"))
obj.addProperty("App::PropertyEnumeration", "RenderingMode", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","The rendering mode to use"))
obj.addProperty("App::PropertyBool", "ShowCut", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","If cut geometry is shown or not"))
obj.addProperty("App::PropertyBool", "ShowFill", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","If cut geometry is filled or not"))
obj.addProperty("App::PropertyFloat", "LineWidth", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","The line width of the rendered objects"))
obj.addProperty("App::PropertyLength", "FontSize", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","The size of the texts inside this object"))
obj.addProperty("App::PropertyBool", "AlwaysOn", "Drawing view",
QT_TRANSLATE_NOOP("App::Property","If checked, source objects are displayed regardless of being visible in the 3D model"))
self.initProperties(obj)
obj.RenderingMode = ["Solid","Wireframe"]
obj.RenderingMode = "Wireframe"
obj.LineWidth = 0.35
Expand All @@ -585,14 +611,29 @@ def __init__(self, obj):
self.Type = "ArchSectionView"
obj.FontSize = 12

def initProperties(self, obj):
'''Creates and initializes the feature's properties if they do not yet exist.'''
if not hasattr(obj, "LineColor"):
obj.addProperty("App::PropertyColor", "LineColor", "Drawing view",
QT_TRANSLATE_NOOP("App::Property", "The line color of the projected objects"))
if not hasattr(obj, "FillColor"):
obj.addProperty("App::PropertyColor", "FillColor", "Drawing view",
QT_TRANSLATE_NOOP("App::Property", "The color of the cut faces (if turned on)"))
obj.FillColor = (0.8, 0.8, 0.8)

def execute(self, obj):
if hasattr(obj,"Source"):
if obj.Source:
if hasattr(obj,"AlwaysOn"):
a = obj.AlwaysOn
else:
a = False
svgbody = getSVG(obj.Source,a,obj.RenderingMode,obj.ShowCut,obj.ShowFill,obj.Scale,obj.LineWidth,obj.FontSize)
svgbody = getSVG(section=obj.Source,
renderMode=obj.RenderingMode,
allOn=getattr(obj, 'AlwaysOn', False),
showHidden=obj.ShowCut,
scale=obj.Scale,
linewidth=obj.LineWidth,
lineColor=obj.LineColor,
fontsize=obj.FontSize,
showFill=obj.ShowFill,
fillColor=obj.FillColor)
if svgbody:
result = '<g id="' + obj.Name + '"'
result += ' transform="'
Expand All @@ -603,7 +644,11 @@ def execute(self, obj):
result += svgbody
result += '</g>\n'
obj.ViewResult = result


def onDocumentRestored(self, obj):
# Fixes properties of old files to match them with the current set of properties.
self.initProperties(obj)

def __getstate__(self):
return self.Type

Expand Down

0 comments on commit 99247f5

Please sign in to comment.