Skip to content

Commit 8be226f

Browse files
committed
Interpolate between layers and add points checkbox
This fixes #2 and fixes #3
1 parent 6cca433 commit 8be226f

File tree

1 file changed

+69
-57
lines changed

1 file changed

+69
-57
lines changed

source/lib/interpolationSlider.py

Lines changed: 69 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,35 @@ def destroy(self):
4242
def glyphUpdated(self):
4343
status = "❌"
4444

45-
currentGlyph = CurrentGlyph()
45+
glyph0 = CurrentGlyph()
46+
sourceLayer0 = currentGlyph.layer
47+
sourceLayer1 = None
48+
4649
self.referenceGlyphLayer.setPosition((currentGlyph.width + 30, 0))
4750
self.referenceGlyphLayer.clearSublayers()
4851
self.previewGlyphLayer.setPosition((currentGlyph.width + 30, 0))
4952
self.previewGlyphLayer.clearSublayers()
5053

5154
interpValue = self.controller.w.getItemValue("interpolationSlider")
5255

53-
if currentGlyph.name in self.controller.source0 and currentGlyph.name in self.controller.source1:
56+
# Check if same layer exists
57+
for layer in self.controller.source1.layers:
58+
if layer.name == sourceLayer0.name:
59+
sourceLayer1 = layer
5460

55-
glyph0 = self.controller.source0[currentGlyph.name]
56-
glyph1 = self.controller.source1[currentGlyph.name]
61+
if sourceLayer1:
62+
if glyph0.name in sourceLayer1:
63+
glyph1 = sourceLayer1[currentGlyph.name]
5764

58-
self.interpolatedGlyph = RGlyph()
59-
# Interpolate
60-
self.interpolatedGlyph.interpolate(interpValue, glyph0, glyph1)
65+
self.interpolatedGlyph = RGlyph()
66+
# Interpolate
67+
self.interpolatedGlyph.interpolate(interpValue, glyph0, glyph1)
6168

62-
if glyph0 == glyph1:
63-
status = "⚪️"
64-
elif len(self.interpolatedGlyph.contours) > 0:
65-
status = "✅"
66-
69+
if glyph0 == glyph1:
70+
status = "⚪️"
71+
elif len(self.interpolatedGlyph.contours) > 0:
72+
status = "✅"
73+
6774
self.controller.w.getItem("compatibilityText").set(f"Compatibility: {status}")
6875

6976
if not status == "❌":
@@ -83,53 +90,54 @@ def drawGlyph(self):
8390
glyphPath = self.interpolatedGlyph.getRepresentation("merz.CGPath")
8491
glyphLayer.setPath(glyphPath)
8592

86-
for contour in self.interpolatedGlyph.contours:
87-
for bPoint in contour.bPoints:
88-
inLoc = self.addPoints(bPoint.anchor, bPoint.bcpIn)
89-
outLoc = self.addPoints(bPoint.anchor, bPoint.bcpOut)
90-
91-
self.referenceGlyphLayer.appendLineSublayer(
92-
startPoint=inLoc,
93-
endPoint=bPoint.anchor,
94-
strokeWidth=.5,
95-
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
96-
)
97-
self.referenceGlyphLayer.appendLineSublayer(
98-
startPoint=bPoint.anchor,
99-
endPoint=outLoc,
100-
strokeWidth=.5,
101-
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
102-
)
103-
self.referenceGlyphLayer.appendSymbolSublayer(
104-
position=outLoc,
105-
imageSettings=dict(
106-
name="oval",
107-
size=(5, 5),
108-
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
109-
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
110-
strokeWidth=.5,
93+
if self.controller.w.getItemValue('showPointsCheckbox'):
94+
for contour in self.interpolatedGlyph.contours:
95+
for bPoint in contour.bPoints:
96+
inLoc = self.addPoints(bPoint.anchor, bPoint.bcpIn)
97+
outLoc = self.addPoints(bPoint.anchor, bPoint.bcpOut)
98+
99+
self.referenceGlyphLayer.appendLineSublayer(
100+
startPoint=inLoc,
101+
endPoint=bPoint.anchor,
102+
strokeWidth=.5,
103+
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
104+
)
105+
self.referenceGlyphLayer.appendLineSublayer(
106+
startPoint=bPoint.anchor,
107+
endPoint=outLoc,
108+
strokeWidth=.5,
109+
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
111110
)
112-
)
113-
self.referenceGlyphLayer.appendSymbolSublayer(
114-
position=inLoc,
115-
imageSettings=dict(
116-
name="oval",
117-
size=(5, 5),
118-
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
119-
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
120-
strokeWidth=.5,
111+
self.referenceGlyphLayer.appendSymbolSublayer(
112+
position=outLoc,
113+
imageSettings=dict(
114+
name="oval",
115+
size=(5, 5),
116+
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
117+
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
118+
strokeWidth=.5,
119+
)
121120
)
122-
)
123-
self.referenceGlyphLayer.appendSymbolSublayer(
124-
position=bPoint.anchor,
125-
imageSettings=dict(
126-
name="oval",
127-
size=(5, 5),
128-
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
129-
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
130-
strokeWidth=.5,
121+
self.referenceGlyphLayer.appendSymbolSublayer(
122+
position=inLoc,
123+
imageSettings=dict(
124+
name="oval",
125+
size=(5, 5),
126+
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
127+
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
128+
strokeWidth=.5,
129+
)
130+
)
131+
self.referenceGlyphLayer.appendSymbolSublayer(
132+
position=bPoint.anchor,
133+
imageSettings=dict(
134+
name="oval",
135+
size=(5, 5),
136+
fillColor=(not isDarkMode, not isDarkMode, not isDarkMode, 1),
137+
strokeColor=(isDarkMode, isDarkMode, isDarkMode, 1),
138+
strokeWidth=.5,
139+
)
131140
)
132-
)
133141

134142
def drawPreviewGlyph(self):
135143
# Draw a filled in version of the interpolated glyph
@@ -178,6 +186,7 @@ def build(self):
178186
(This is a PopUpButton. ...) @secondSourceButton
179187
Compatibility: ⚪️ @compatibilityText
180188
---
189+
[X] Show Points @showPointsCheckbox
181190
--X-- @interpolationSlider
182191
"""
183192
descriptionData = dict(
@@ -233,6 +242,9 @@ def firstSourceButtonCallback(self, sender):
233242
def secondSourceButtonCallback(self, sender):
234243
self.optionsChanged()
235244

245+
def showPointsCheckboxCallback(self, sender):
246+
postEvent(eventName)
247+
236248
def collectFonts(self):
237249
firstSourceButton = self.w.getItem("firstSourceButton")
238250
secondSourceButton = self.w.getItem("secondSourceButton")
@@ -329,4 +341,4 @@ def optionsChanged(self):
329341
debug=True
330342
)
331343

332-
InterpolationSliderInterface()
344+
OpenWindow(InterpolationSliderInterface)

0 commit comments

Comments
 (0)