Fix for [#36599] Freestyle: Line thickness modifier with certain blend types incorrectly calculated.
The inner/outer thickness values were separately blended by Multiply, Divide and other binary operators, which resulted in the wrong thickness values reported in the issue. The operations must be applied to the sum of the inner and outer thickness values. Also the Minimum and Maximum operators were not properly implemented (one of the two operands were ignored by mistake).
This commit is contained in:
parent
9ccf84926d
commit
91e5189c90
@ -78,11 +78,11 @@ class ScalarBlendModifier(StrokeShader):
|
||||
elif self.__blend == 'DIFFERENCE':
|
||||
v1 = facm * v1 + fac * abs(v1 - v2)
|
||||
elif self.__blend == 'MININUM':
|
||||
tmp = fac * v1
|
||||
tmp = fac * v2
|
||||
if v1 > tmp:
|
||||
v1 = tmp
|
||||
elif self.__blend == 'MAXIMUM':
|
||||
tmp = fac * v1
|
||||
tmp = fac * v2
|
||||
if v1 < tmp:
|
||||
v1 = tmp
|
||||
else:
|
||||
@ -142,18 +142,19 @@ class ThicknessBlenderMixIn(ThicknessModifierMixIn):
|
||||
self.__ratio = ratio
|
||||
|
||||
def blend_thickness(self, outer, inner, v):
|
||||
v = self.blend(outer + inner, v)
|
||||
if self.__position == 'CENTER':
|
||||
outer = self.blend(outer, v / 2)
|
||||
inner = self.blend(inner, v / 2)
|
||||
outer = v * 0.5
|
||||
inner = v - outer
|
||||
elif self.__position == 'INSIDE':
|
||||
outer = self.blend(outer, 0)
|
||||
inner = self.blend(inner, v)
|
||||
outer = 0
|
||||
inner = v
|
||||
elif self.__position == 'OUTSIDE':
|
||||
outer = self.blend(outer, v)
|
||||
inner = self.blend(inner, 0)
|
||||
outer = v
|
||||
inner = 0
|
||||
elif self.__position == 'RELATIVE':
|
||||
outer = self.blend(outer, v * self.__ratio)
|
||||
inner = self.blend(inner, v * (1 - self.__ratio))
|
||||
outer = v * self.__ratio
|
||||
inner = v - outer
|
||||
else:
|
||||
raise ValueError("unknown thickness position: " + self.__position)
|
||||
return outer, inner
|
||||
@ -168,8 +169,8 @@ class BaseThicknessShader(StrokeShader, ThicknessModifierMixIn):
|
||||
StrokeShader.__init__(self)
|
||||
ThicknessModifierMixIn.__init__(self)
|
||||
if position == 'CENTER':
|
||||
self.__outer = thickness / 2
|
||||
self.__inner = thickness / 2
|
||||
self.__outer = thickness * 0.5
|
||||
self.__inner = thickness - self.__outer
|
||||
elif position == 'INSIDE':
|
||||
self.__outer = 0
|
||||
self.__inner = thickness
|
||||
@ -178,7 +179,7 @@ class BaseThicknessShader(StrokeShader, ThicknessModifierMixIn):
|
||||
self.__inner = 0
|
||||
elif position == 'RELATIVE':
|
||||
self.__outer = thickness * ratio
|
||||
self.__inner = thickness * (1 - ratio)
|
||||
self.__inner = thickness - self.__outer
|
||||
else:
|
||||
raise ValueError("unknown thickness position: " + self.position)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user