original
smooth
Sistema baseado em grade para projetar símbolos e fontes simples. incluindo um exemplo de fonte. Principalmente destinado a desenhos da plotter.
As descrições de símbolos são assim:
S4,9:DS6|S3DtRqS2eLp
Você pode usar espaços para separar movimentos, para que, por exemplo, escrevê -lo assim:
S4,9: DS6| S3 DtRq S2 eLp
A primeira seção (à esquerda de : é a seção info . Que atualmente contém o tamanho da grade (como integers ). Aqui a largura é 4 e a altura é 9 . Ou seja, existem 4 e 9 pontos de grade nas duas direções. Isso significa que a largura do símbolo será 3 e 8 .
Com o tempo, esta seção pode conter outras coisas. Como um comando tradutor. (Isso pode ser útil se você estiver apenas desenhando dentro de uma determinada seção da grade.)
A próxima seção é um ou mais caminhos, separados pelo símbolo do tubo | . Especificamente, o exemplo acima deve resultar nos dois caminhos da letra b :
| <-- p1
|
|/- <-- p2
| |
| |
|-/
Aqui estão alguns exemplos de definições mais complexas de símbolos:
asterisk: S3,9:M1,3DS|S3.75Dq1,0.25t1,0.25|M0.25,5Dt0.75,1q0.75,1
w: S5,9:S2D q1,4 t1,4 q1,4 t1,4
y: S4,9:S2Dq1.5,4|M3,2De1.5,4e0.5,1e
Ao desenhar um novo caminho, o cursor é sempre redefinido para a origin , que está no canto superior esquerdo. O sistema de coordenadas é girado assim:
-
|
- --o-- x+
|
y+
A partir daí, você pode executar movimentos relativos e absolutos. Depois que o comando D for inserido, o caminho começará a ser desenhado. O que significa que você pode mover o cursor para a posição antes de iniciar cada caminho.
Os seguintes comandos são permitidos:
p N t
| /
L - o - R <-- o is the current position of the cursor
/ |
e S q
Qualquer número (veja abaixo) depois que um comando de direção é interpretado como o comprimento da etapa, caso contrário, o tamanho da etapa é 1 . Você também pode usar dois números separados por uma vírgula. Por exemplo, q2.5,3 moverá o cursor dois passos e meio para a direita e três passos para baixo. Da mesma forma, p2,1/2 moverá o cursor a duas etapas para a esquerda e meio passo para cima.
Os números aceitos são inteiros: 1 , frações: 1/2 ou decimais: 3.5 . Observe que todos os decimais são convertidos em frações. Decimais são uma conveniência que permite escrever 4.5 em vez de 9/2 . No entanto, você é melhor usar 13/3 em vez de 4.33... Este último provavelmente não aumentará dentro dos limites da grade. Você também pode usar vários comandos na mesma direção, se achar mais fácil. Por exemplo R4 R1/2 .
Isso significa que, se você sair dos erros de limites, é porque você está usando um decimal que não "se adiciona" corretamente dentro da grade. Ou simplesmente porque o número resultante está fora da grade.
Os números são convertidos para flutuar antes de serem exportados para json ou svg
Os seguintes movimentos absolutos são permitidos
Mx,y para se mover para a posição x,y em relação à origin .Z Mova -se para a primeira posição do caminho desenhado. (Padrões de origin )W para mover -se para sair para o lado direito do desenho.w para se mover para o lado esquerdo do desenho.H para se mover para o topo do desenho.h para se mover para o fundo do desenho. Você pode fornecer grupos de substituição na propriedade groups da especificação json . Os nomes dos grupos devem sempre começar com um ( e terminar com a ) . Qualquer (group) em uma definição de caminho será substituído literalmente até que não haja mais ( ou ) restante na especificação do caminho. (Nota: isso significa que você pode causar loops infinitos, bem como vazamentos de memória.)
Os caminhos da fonte estão incluídos no dat/*/res.json , juntamente com SVGs para cada símbolo. As descrições brutas estão em dat/*.json .
No momento, as fontes incluídas são:
original : letras em blocosmooth : versão mais suave. Para usar esta biblioteca
python3 setup.py install --user
Você pode usar a biblioteca do seu código. consulte gridfont/__init__.py ou gridfont/writer.py para ter uma ideia. Mais documentação pode ser adicionada mais tarde, se isso parecer útil para as pessoas.
Para ver outras opções, use:
gridfont --help
Para analisar um símbolo .json arquivo como dat/font.json executa o seguinte, para gerar os resultados para o out
gridfont parse font.json out [--svg]
Se você incluir o sinalizador --svg , um SVG também será criado para cada símbolo.
Quando você tem um arquivo de símbolo analisado (tal dat/original/res.json ), você pode escrever SVGs com ele assim:
gridfont write res.json tmp.svg 'my text'
Este é um projeto que iniciei porque queria uma "fonte" simples que me permitisse desenhar facilmente glifos baseados em linha enquanto plotagem. Não sei se acabarei desenvolvendo isso muito mais, mas estou aberto a sugestões.
2 e 3 ?AZIsso é muito parecido com as fontes Hershey: https://en.wikipedia.org/wiki/hershey_fonts. Que você provavelmente deve usar, como eles já existem há algum tempo
Este método também é semelhante ao desenho no logotipo: https://en.wikipedia.org/wiki/Logo_(Programming_Language)
As definições do caminho também são semelhantes ao formato SVG (mas mais simples): https://en.wikipedia.org/wiki/scalable_vector_graphics
Se você achar isso interessante, também pode gostar de uma linguagem de embalagem radical recursiva: https://github.com/lingdong-/rrpl
Metafont (LATEX): https://en.wikipedia.org/wiki/metafont
Leonsans: https://github.com/cmiscm/leonsans