Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
How to improve speed of drawing? Very slow scene view.
-
Since variation axes work by interpolation between a few reference glyphs, you can reproduce that using a paused animation.
See the not very clean
https://gist.github.com/54b80f4fa31365d18ef6e05ed0a98bc9This works with your original glyphs very nicely, just select the two endpoints. It could be extended where you select which pair to interpolate with, and thats what i started trying.... however the issue seems to be that when you get different weights from CTfont, they are constructed differently... so interpolating ends up jumbling the letter in between. I selected an example where it does work, but it fails for other letters or font weights.
wherever you got your original paths, you just need the 5 or whatever reference glyphs, and then you'd have to modify this a little to adjust toValue and fromValue, along with the relative distance between those values as the layer timeOffset.
-
@JonB said:
however the issue seems to be that when you get different weights from CTfont, they are constructed differently...
If you're trying to do this with some fonts installed on the iPad they probably won't be compatible. The paths need have the same node count and path direction. Here is my sample font with 1 weight axis:
https://www.dropbox.com/s/cbeqxxuk9dg8jz1/PanvariaGX.ttf?dl=0
I included all the code necessary to run the example with your interpolation method:
https://gist.github.com/0e93006203c034a98522601644aff013
This works very well.
I understand that from here it is not very far to use the actual font file? -
https://gist.github.com/8fe4aa269b15a7071633e256456786ca
Here is an improved method, using KeyFrame animations.
Basically, you set up 5 or whatever refernces, add to a PathAnimation, and then provide the interpolation value (0..len(glyphs)).i have not tried installing your font yet. Might try UIFont.fontWithName_size_traits_(). or maybe need o set up fondDescriptor.
-
Can you please confirm if your iOS devices are 32 or 64 bit?
-
https://gist.github.com/c8b993ac42ede2574dc9f7cc26ebb1f4
and here is a version that uses your font file, and cleans things up a bit.I am on 32 bit -- ccc, is this crashing for you? If so, on what line? I think I got typedefs correct but I may have missed a few
-
Unfortunately @JonB I confirm that it crashes on 64 bit.
-
Which line is crashing? Do you have the fault handler installed?
-
https://gist.github.com/7a73b8c3abab4dc502ef2314574c6744
For some reason I was missing a slew of definitions. Try this one on 64bit...
-
@JonB i get "No method found for mutableCopy" on line 80
-
https://gist.github.com/80660624600c28c8e7812b15e0652568
How about this one.... -
@JonB this one raises the exception from line 15
-
can you paste the full traceback? Also, did you place the Panvaria.ttf file in the same folder? I probably should have mentioned that!
-
@JonB yes, i have the file in the same folder.
Traceback (most recent call last): File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 144, in <module> [glyphs_list, variation_values]=setupGlyphs(size=512,letter='e') File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 78, in setupGlyphs basefont = c.CGFontCreateWithDataProvider(provider); File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 15, in errcheck raise Exception('{} returned void pointer with args\n{}'.format(func.__name__,args)) Exception: CGFontCreateWithDataProvider returned void pointer with args (6242820560,)```
-
added a little extra diagnostics, and tried passing provider as objcinstancee.
https://gist.github.com/b4c3e011e768320753e3c54405c56380 -
@JonB here's the traceback
Traceback (most recent call last): File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 148, in <module> [glyphs_list, variation_values]=setupGlyphs(size=512,letter='e') File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 82, in setupGlyphs basefont = c.CGFontCreateWithDataProvider(provider); File "/private/var/mobile/Containers/Shared/AppGroup/2CB744A3-0F69-40E1-A5F1-95E464DBFC21/Pythonista3/Documents/PythonistaGit/VF/64bit.py", line 15, in errcheck raise Exception('{} returned void pointer with args\n{}'.format(func.__name__,args)) Exception: CGFontCreateWithDataProvider returned void pointer with args (<b'__NSCFType': <CGDataProvider 0x17418b530>>,)```
-
How did yoy get the ttf into the device? i think this is saying the font file is invalid.
This version downloads the font directly
https://gist.github.com/7a766eb282c71bf7d27bd13fb4926482 -
@JonB there was indeed something wrong with the file. this script just crashes the app. is there a method to catch errors on crash?
-
@dgelessus has a pythonista_startup repo that installs a fault handler and uncaught exception handler which write to a fault log, so you can see which line (for segfaults and the like) or an objc stack trace in the case of objc errors (which often include a helpful message)
https://github.com/dgelessus/pythonista_startup
See the readme, there are several scripts here, personally I just use the enable_faulthandler one.
You could also set a breakpoint by long pressing in the debugger, and just keep single stepping until the crash happens.
-
https://gist.github.com/38a5434b4ebd28775dab08d181a00771
Here is a version that logs all cdll calls to glyphlog.txt. if you can post that someplace, we can see exactly what is crashing. -
@JonB thank you for hints on debugging, definetely helpful.
Here's the error log: https://gist.github.com/5bac67b24317b5e5b4badc06bee1b1c5