Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/08/2016, à 03:59

frafa

Help moulinette pour .gcode

Bonjour,

J'ai besoin d'un coup de main pour écrire une moulinette pour faire des modifs dans un fichier .gcode  (en l’occurrence un fichier d'impression 3D)

J'ai besoin de décaler toute les couche sur l'axe des "Y" de +0.05 pour incliner la pièce

les changements de couches (en "X") sont identifiables facilement ils débutent tous par:

G92 E0
G1 X.*

il faut donc traiter chaque paragraphe (G92 E0\r\nG1 X.*) du fichier dans une boucle et ajouter 0.05 a tous les champs de la lignes du paragraphe qui contiennent "Y..."
tout le premier paragraphe on ajoute +0.05x1 aux lignes qui ont un champ "Y...+0.05x1"
tout le second paragraphe on ajoute +0.05x2 aux lignes qui ont un champ "Y...+0.05x2"
tout le troisième paragraphe on ajoute +0.05x3 aux lignes qui ont un champ "Y...+0.05x3"
etc ...

Voila ça fait des lustres que je n'ai pas codé en bash alors un coup de main est bienvenu ...

Fichier d'exemple a traiter: http://liveusb.info/tmp/125X60.gcode

Hors ligne

#2 Le 06/08/2016, à 07:08

pingouinux

Re : Help moulinette pour .gcode

Bonjour,
Essaye ceci

awk '/^G92 E0/{dy += .05}/^G1 X/{$3="Y"substr($3,2)+dy}{printf("%s\n",$0)}' 125X60.gcode

Hors ligne

#3 Le 06/08/2016, à 12:56

claudius01

Re : Help moulinette pour .gcode

Bonjour,

Sauf erreur de ma part, le "dy += .05" me chagrine car dy n'est pas initialisé ?!..
Ne serait-ce pas plutôt "dy = .05" qui fournit bien sur les 27 premières lignes du fichier à convertir:

$ awk '/^G92 E0/{dy = 0.05}/^G1 X/{$3="Y"substr($3,2)+dy}{printf("%s\n",$0)}' 125X60-Partial.gcode > 125X60-Partial-AfterPass.gcode

$ diff 125X60-Partial.gcode 125X60-Partial-AfterPass.gcode
21c21
< G1 X66.062 Y81.405 F7800.000
---
> G1 X66.062 Y81.455 F7800.000
23,27c23,27
< G1 X68.267 Y80.453 E4.04269 F1800.000
< G1 X70.000 Y80.243 E4.07372
< G1 X130.000 Y80.243 E5.14039
< G1 X132.368 Y80.641 E5.18307
< G1 X134.477 Y81.789 E5.22576 F1800.000
---
> G1 X68.267 Y80.503 E4.04269 F1800.000
> G1 X70.000 Y80.293 E4.07372
> G1 X130.000 Y80.293 E5.14039
> G1 X132.368 Y80.691 E5.18307
> G1 X134.477 Y81.839 E5.22576 F1800.000

Dernière modification par claudius01 (Le 06/08/2016, à 13:28)

Hors ligne

#4 Le 06/08/2016, à 13:30

frafa

Re : Help moulinette pour .gcode

Bonjour,
Yes 2 pros de awk !!!
Merci a vous décidément awk ca le fait bien smile

reste un truc qui ne va pas, il faut au premier paragraphe traiter tous les champs Y et les incrémenter de +.05
votre solution incrémente tous les champs Y... de +.05

hors j'ai besoin de:
au premier paragraphe il faut incrémenter tous les champs Y... de 0.05
au second paragraphe il faut incrémenter tous les champs Y... du double 0.05x2
au troisieme paragraphe il faut incrémenter tous les champs Y... du triple 0.05x3
etc

Hors ligne

#5 Le 06/08/2016, à 13:56

claudius01

Re : Help moulinette pour .gcode

En fait la solution de pingouinux est correcte, mais j'aurai bien mis un BEGIN { dy=0.0 } car sur ma plate-forme "dy" est initialisé à n'importe quoi ?..
Si pingouinux est d'accord et toujours sur les quelques 40 premières lignes (3 blocs G92 E0 avec notamment le 1er sans définition de Y):

$ awk 'BEGIN {dy = 0.0}/^G92 E0/{dy += 0.05}/^G1 X/{$3="Y"substr($3,2)+dy}{printf("%s\n",$0)}' 125X60-Partial.gcode > 125X60-Partial-AfterPass.gcode

$ diff 125X60-Partial.gcode 125X60-Partial-AfterPass.gcode 
21c21
< G1 X66.062 Y81.405 F7800.000
---
> G1 X66.062 Y81.505 F7800.000
23,27c23,27
< G1 X68.267 Y80.453 E4.04269 F1800.000
< G1 X70.000 Y80.243 E4.07372
< G1 X130.000 Y80.243 E5.14039
< G1 X132.368 Y80.641 E5.18307
< G1 X134.477 Y81.789 E5.22576 F1800.000
---
> G1 X68.267 Y80.553 E4.04269 F1800.000
> G1 X70.000 Y80.343 E4.07372
> G1 X130.000 Y80.343 E5.14039
> G1 X132.368 Y80.741 E5.18307
> G1 X134.477 Y81.889 E5.22576 F1800.000
30c30
< G1 X129.800 Y212.300 F7800.000
---
> G1 X129.800 Y212.45 F7800.000
32,33c32,33
< G1 X70.200 Y212.300 E4.84895 F1800.000
< G1 X70.200 Y87.700 E6.62377
---
> G1 X70.200 Y212.45 E4.84895 F1800.000
> G1 X70.200 Y87.85 E6.62377
37c37
< G1 X129.800 Y212.300 F7800.000
---
> G1 X129.800 Y212.5 F7800.000
39,40c39,40
< G1 X70.200 Y212.300 E4.84895 F1800.000
< G1 X70.200 Y87.700 E6.62377
---
> G1 X70.200 Y212.5 E4.84895 F1800.000
> G1 X70.200 Y87.9 E6.62377

Hors ligne

#6 Le 06/08/2016, à 14:23

pingouinux

Re : Help moulinette pour .gcode

frafra #4 a écrit :

hors j'ai besoin de:
au premier paragraphe il faut incrémenter tous les champs Y... de 0.05
au second paragraphe il faut incrémenter tous les champs Y... du double 0.05x2
au troisieme paragraphe il faut incrémenter tous les champs Y... du triple 0.05x3
etc

D'après mes tests, c'est ce que fait ma commande en #2 (et celle de claudius01 en #5). Ou alors, je n'ai pas compris la demande.

clausius #5 a écrit :

mais j'aurai bien mis un BEGIN { dy=0.0 } car sur ma plate-forme "dy" est initialisé à n'importe quoi ?

Ça ne mange pas de pain, mais ce n'est normalement pas nécessaire. Voici un extrait de man gawk, rubrique Variable Typing And Conversion

Uninitialized variables have the numeric value 0 and the string value "" (the null,  or  empty, string).

Hors ligne