Import transparent and IFC4 colours

This commit is contained in:
Dion Moult
2020-01-27 11:39:36 +11:00
committed by Yorik van Havre
parent 647f3c0f4b
commit 5da9197bc5
2 changed files with 17 additions and 4 deletions

View File

@@ -799,9 +799,12 @@ def insert(filename,docname,skip=[],only=[],root=None,preferences=None):
# color
if FreeCAD.GuiUp and (pid in colors) and hasattr(obj.ViewObject,"ShapeColor"):
if FreeCAD.GuiUp and (pid in colors) and colors[pid]:
# if preferences['DEBUG']: print(" setting color: ",int(colors[pid][0]*255),"/",int(colors[pid][1]*255),"/",int(colors[pid][2]*255))
obj.ViewObject.ShapeColor = colors[pid]
if hasattr(obj.ViewObject,"ShapeColor"):
obj.ViewObject.ShapeColor = tuple(colors[pid][0:3])
if hasattr(obj.ViewObject,"Transparency"):
obj.ViewObject.Transparency = colors[pid][3]
# if preferences['DEBUG'] is on, recompute after each shape
if preferences['DEBUG']: FreeCAD.ActiveDocument.recompute()

View File

@@ -347,6 +347,7 @@ def getColorFromStyledItem(styled_item):
return None
rgb_color = None
transparency = None
# print(styled_item)
# The IfcStyledItem holds presentation style information for products,
@@ -370,7 +371,11 @@ def getColorFromStyledItem(styled_item):
# never seen an ifc with more than one Styles in IfcStyledItem
else:
# get the IfcPresentationStyleAssignment, there should only be one, see above
assign_style = styled_item.Styles[0]
if styled_item.Styles[0].is_a('IfcPresentationStyleAssignment'):
assign_style = styled_item.Styles[0]
else:
# IfcPresentationStyleAssignment is deprecated in IFC4.
assign_style = styled_item
# print(assign_style) # IfcPresentationStyleAssignment
# IfcPresentationStyleAssignment can hold various kinde and count of styles
@@ -380,6 +385,10 @@ def getColorFromStyledItem(styled_item):
# print(assign_style.Styles[0].Styles[0]) # IfcSurfaceStyleRendering
rgb_color = assign_style.Styles[0].Styles[0].SurfaceColour # IfcColourRgb
# print(rgb_color)
if assign_style.Styles[0].Styles[0].is_a('IfcSurfaceStyleShading') \
and hasattr(assign_style.Styles[0].Styles[0], 'Transparency') \
and assign_style.Styles[0].Styles[0].Transparency:
transparency = assign_style.Styles[0].Styles[0].Transparency * 100
elif assign_style.Styles[0].is_a("IfcCurveStyle"):
if (
len(assign_style.Styles) == 2
@@ -398,7 +407,8 @@ def getColorFromStyledItem(styled_item):
rgb_color = assign_style.Styles[0].CurveColour
if rgb_color is not None:
col = rgb_color.Red, rgb_color.Green, rgb_color.Blue
col = [rgb_color.Red, rgb_color.Green, rgb_color.Blue]
col.append(int(transparency) if transparency else 0)
# print(col)
else:
col = None