Draft: fix regression in Pattern display (Refactor texture handling in view_base.py)

This commit is contained in:
Roy-043
2026-01-01 14:04:27 +01:00
committed by GitHub
parent 21e7fa1e8b
commit 34441b8101

View File

@@ -283,52 +283,52 @@ class ViewProviderDraft(object):
"""
# treatment of patterns and image textures
if prop in ("TextureImage", "Pattern", "ShapeAppearance"):
if hasattr(self.Object, "Shape"):
if self.Object.Shape.Faces:
path = None
if hasattr(vobj, "TextureImage"):
if vobj.TextureImage:
path = vobj.TextureImage
if not path:
if hasattr(vobj, "Pattern"):
if str(vobj.Pattern) in utils.svg_patterns():
path = utils.svg_patterns()[vobj.Pattern][1]
else:
path = "None"
if path and vobj.RootNode:
switch = gui_utils.find_coin_node(vobj.RootNode, coin.SoSwitch)
if switch is not None:
if switch.getChildren().getLength() > 0:
innodes = switch.getChild(0).getChildren().getLength()
if innodes > 2:
r = switch.getChild(0).getChild(innodes - 1)
i = QtCore.QFileInfo(path)
if self.texture:
r.removeChild(self.texture)
self.texture = None
if self.texcoords:
r.removeChild(self.texcoords)
self.texcoords = None
if i.exists():
size = None
if ".SVG" in path.upper():
size = params.get_param("HatchPatternResolution")
if not size:
size = 128
im = gui_utils.load_texture(path, size)
if im:
self.texture = coin.SoTexture2()
self.texture.image = im
r.insertChild(self.texture, 1)
if size:
s = 1
if hasattr(vobj, "PatternSize"):
if vobj.PatternSize:
s = vobj.PatternSize
self.texcoords = coin.SoTextureCoordinatePlane()
self.texcoords.directionS.setValue(s, 0, 0)
self.texcoords.directionT.setValue(0, s, 0)
r.insertChild(self.texcoords, 2)
if hasattr(self.Object, "Shape") and self.Object.Shape.Faces:
path = None
if hasattr(vobj, "TextureImage"):
if vobj.TextureImage:
path = vobj.TextureImage
if not path:
if hasattr(vobj, "Pattern"):
if str(vobj.Pattern) in utils.svg_patterns():
path = utils.svg_patterns()[vobj.Pattern][1]
else:
path = "None"
if path and vobj.RootNode:
switch = gui_utils.find_coin_node(vobj.RootNode, coin.SoSwitch)
if switch is not None and switch.getChildren().getLength() > 0:
flat_lines_node = switch.getChild(0)
# Get the Shaded sub-node of the Flat Lines node. The name in
# Std_SceneInspector is "Shaded", but the actual name is "FlatRoot")
shaded_node = gui_utils.find_coin_node_by_name(flat_lines_node, "FlatRoot")
if shaded_node is not None:
i = QtCore.QFileInfo(path)
if self.texture:
shaded_node.removeChild(self.texture)
self.texture = None
if self.texcoords:
shaded_node.removeChild(self.texcoords)
self.texcoords = None
if i.exists():
size = None
if ".SVG" in path.upper():
size = params.get_param("HatchPatternResolution")
if not size:
size = 128
im = gui_utils.load_texture(path, size)
if im:
self.texture = coin.SoTexture2()
self.texture.image = im
shaded_node.insertChild(self.texture, 1)
if size:
s = 1
if hasattr(vobj, "PatternSize"):
if vobj.PatternSize:
s = vobj.PatternSize
self.texcoords = coin.SoTextureCoordinatePlane()
self.texcoords.directionS.setValue(s, 0, 0)
self.texcoords.directionT.setValue(0, s, 0)
shaded_node.insertChild(self.texcoords, 2)
elif prop == "PatternSize":
if hasattr(self, "texcoords"):
if self.texcoords: