Como converter preenchimento de objeto em linhas finas?

7

Estou tentando encontrar uma maneira de converter um objeto sólido preenchido em milhões (mais ou menos) de linhas? por exemplo: Preenchimento de objeto em linhas

Posso usar qualquer ferramenta, mas o ideal é que eu queira saída no formato SVG (não é necessário)

Visualização ampliada: insira a descrição da imagem aqui

MV
fonte

Respostas:

10

Esta é uma solução parcial para o Inkscape. Outra resposta para o Illustrator mostra como é possível usar o efeito Rabisco de maneira não aleatória e obter o preenchimento em zigue-zague de linha reta desejado e o resultado precisa apenas de pequenas correções manuais (= lacuna é preenchida se a forma for complexa)

O Inkscape não tem esse efeito. Ele tem um efeito Path que gera preenchimentos de hachura grossa, mas o resultado é muito grosseiro. Em teoria, poderia fazer o mesmo que o Rabisco do Illustrator, mas simplesmente não possui a capacidade de ajuste e precisão necessárias.

O questionador deu um comentário em uma dica: existe uma extensão de terceiros por um fabricante de plotadora (= EggBot) que pode gerar alguns padrões de preenchimento semelhantes. Eu os pulo porque não os tenho. Tentei obtê-los, mas a instalação foi interrompida porque meu Inkscape não está instalado de maneira padrão.

Se sua forma for verticalmente simétrica, de modo que a metade superior possa ser apresentada nas coordenadas XY como Y = f (x), em que f é uma fórmula escrita com funções e operadores matemáticos do Python, você pode plotar o preenchimento em zigue-zague com a extensão Function Plotter do Inkscape. Como exemplo, verificamos seu círculo.

Devo trapacear um pouco, porque a fórmula exata para uma curva triangular em zigue-zague é complexa. Precisa de aritmética de módulo complicada. Não sei como escrevê-lo com as funções do Python. Um programador competente provavelmente poderia dizer isso em um segundo.

Mas o Python tem algumas coisas matemáticas elementares conhecidas como o seno, pi e squareroot. Eu os uso, porque a curva resultante pode ser convertida em linhas retas posteriormente.

insira a descrição da imagem aqui

A visualização com zoom alto mostra que na verdade é uma curva suave:

insira a descrição da imagem aqui

Para fazê-lo desenhar um quadrado e ir para Extensões> Render> Function Plotter. Eu selecionei o quadrado que apresenta x e y varia de -1 a +1.

A função é retirada da eletrônica. É seno modulado em amplitude (sem portadora!). A parte do envelope sqrt (1-x * x) é um semicírculo. O último número 40 define que há 40 ciclos completos da curva senoidal, isto é, 40 picos superior e inferior. Ele definiu o total de 161 nós no aproximado. Há um nó em cada cruzamento e pico zero.

Se você quiser mais, digamos 100 ciclos completos, altere 40 para 100 e 161 para 401.

Se alguém converte todos os nós em pontos de canto, ele obtém a forma triangular sem cálculos. Caminho de modificação da extensão> Achatar Bezier faz o trabalho. Aqui está um exemplo de achatamento:

insira a descrição da imagem aqui

Você deve aplicar o Flatten e, em seguida, selecione todos os nós da linha zero, exceto o mais à esquerda e o mais à direita com a ferramenta none e pressione DEL. Em seguida, aplainar novamente e pronto - apenas linhas retas, sem nós extras:

insira a descrição da imagem aqui

Salve-o como SVG simples para eliminar todas as partes do Inkscape (não deve haver nenhuma porque o resultado é um caminho, ele não possui funções).

Eu acho que o método de plotagem de funções não é prático, então eu tento outra coisa. Se linhas paralelas retas forem aceitas como preenchimento (= sem zigue-zague), é possível agrupar várias linhas e definir uma máscara de recorte ou dividir as linhas destrutivamente com uma forma

O Inkscape tem várias maneiras de criar várias linhas retas

  • clonagem lado a lado (deve ser vinculado novamente se desejar dividir as linhas)
  • Efeito de caminho Interpolar subcaminhos
  • Extensão gerada a partir de Caminho> Interpolar

O terceiro método é mais simples. Ele gera as linhas intermediárias como um grupo:

insira a descrição da imagem aqui

As linhas devem ser desagrupadas e combinadas (Caminho> Combinar) para mantê-las seguramente como um objeto. Os grupos são facilmente corrompidos porque seus membros ainda podem ser selecionados de forma independente. Além disso, muitas operações de caminho não funcionam com grupos, elas precisam de caminhos únicos ou caminhos combinados.

A próxima imagem mostra o resultado quando uma forma é colocada nas linhas e Objeto> Clipe> Conjunto é aplicado:

insira a descrição da imagem aqui

O recorte pode ser retirado a qualquer momento, as peças originais estão intactas, apenas parcialmente ocultas. Não há como encaixar nada no fim aparente da linha, porque não há nó. Para isso, as linhas devem ser divididas destrutivamente ou nenhum recorte deve ser feito. O encaixe na interseção do caminho funciona muito bem no Inkscape.

Podemos utilizar o snap desenhando o ziguezague triangular com a caneta:

insira a descrição da imagem aqui

O ziguezague azul é feito com a caneta clicando apenas em um clique por um ponto de passagem. Demorou cerca de um minuto. O ziguezague azul é um caminho único independente.

insira a descrição da imagem aqui

Se for perturbador o fato de metade dos segmentos de linha s serem verticais e a outra metade estar inclinada, ela será corrigida girando as linhas antes de desenhar o zigue-zague.

Surge uma pergunta "Se alguém dividir as linhas, por exemplo, com Path> Cut path, as peças podem ser combinadas de alguma maneira automaticamente, não uma por uma, em zigue-zague. Na teoria, SIM. Mas existem dificuldades que tornam o resultado inseguro.

Inicialmente, dividimos as linhas com a mesma curva preta. Uma forma superior realmente divide as linhas subjacentes se elas forem combinadas (Caminho> Combinar). Os remanescentes podem ser selecionados e removidos facilmente usando a ferramenta de seleção normal no modo "selecionar se for tocado" (= Alt + Arrastar):

insira a descrição da imagem aqui

Em seguida, podemos selecionar os nós da extremidade inferior de todas as linhas e tentar a função do nó Unir os nós selecionados. Infelizmente, o resultado é inesperado:

insira a descrição da imagem aqui

Todas as operações de conexão final de união de nós, quando agrupadas, selecionam o pedido imprevisivelmente. As conexões devem ser feitas uma a uma. É muito mais fácil desenhar o ziguezague com a caneta, como mostrado acima.

user287001
fonte
Surpreendentemente perfeito, eu faço o trabalho como por exemplo e apenas a saída perfeita que eu queria, apenas um problema: se a forma de saída necessária for retangular ou irregular!
MV
Você pode usar o efeito rabisco no ilustrador que faz uma maneira melhor trabalho do que você descreve
joojaa
@ user287001 Agradecemos milhões pela atenção e atenção. Faz o trabalho! No entanto, apenas para adicionar outra dica, o EggBot >> Hatch Fill também pode ser usado, mas é necessário unir linhas para fazer com que as linhas em zigue-zague sejam patten.
MV
@joojaa Obrigado pela resposta, mas o efeito rabisco é aleatório e não tem um caminho único, que é necessário.
MV
@MV você pode editar as configurações para remover a aleatoriedade. E você pode então juntar as lacunas errantes.
Joojaa
5

O efeito de rabisco do Illustrator faz muito o que você está pedindo

Basta aplicar rabisco no preenchimento do caminho. Em seguida, ajuste as configurações de rabisco para ter 0 variação.

insira a descrição da imagem aqui

Então, como esse é um efeito ao vivo, você precisa expandi-lo com Objeto → Expandir Aparência

insira a descrição da imagem aqui

Agora, o Scribble mede a distância entre os pontos de propagação um pouco diferente do seu exemplo. Isso pode ou não ser um problema, não sendo descrito com tanta precisão na configuração do problema.

joojaa
fonte
Uau, só agora eu aprendi sobre as configurações de Rabisco, um grande obrigado :-)
MT
0

Se você encontrar uma maneira de descrever matematicamente o envelope da sua forma, poderá multiplicar a função por sinum curto período. Para o exemplo do disco, sin(100*x) * sqrt(1 - x**2)parece funcionar bem:

insira a descrição da imagem aqui

Aqui está um exemplo ao vivo , no qual você pode alterar os parâmetros com controles deslizantes.

É possível plotar uma função como SVG no gnuplot , matplotlib ou neste site .

Eric Duminil
fonte