Outils d'utilisateurs

Outils du Site


machines:decoupe_laser:tsf

Le format de fichier TSF

Travail en cours sur l'analyse du format Trotec Spool File (TSF) pour voir s'il ne serait pas possible de le générer à la mano, voir avec un plugin inkscape.

Format du fichier :

<!-- Version: 9.4.2.1034>
<!-- PrintingApplication: inkscape.exe>
<BegGroup: Header>
<ProcessMode: Standard>
<Size: 10.00;10.00>
<MaterialGroup: Standard>
<MaterialName: Standard>
<JobName: bbb_sq10>
<JobNumber: 2>
<Resolution: 500>
<Cutline: none>
<EndGroup: Header>

:OK: Le format est assez lisible à première vue :

  • ProcessMode : Type de gravure
    • Standard : type standard − l'image est convertie en monochrome tramée − pas de paramtrage specifique
    • Relief : Mode relief − l'image est en 256 niveaux de gris (8bits) tramés − pas de parametrage spécifique
    • Layer : Mode couche, l'image est en 256 niveaux de gris (8bits) tramés
      • <LayerParameter: 5;0.000> : paramétrage du mode couche − 5 : Nombre de couches − 0.000 : Ajustement
    • Stamp : Mode tampon − l'image est monochrome tramée comme pour le mode standard
      • <StampShoulder: flat> : paramétrage des bord du tampon − flat / medium / steep
  • Size : taille en millimètres du dessin
  • MaterialGroup: Nom du groupe de matériau utilisé (doit être défini dans JobControl sinon il utilisera 'Standard')
  • MaterialName: Nom du matériau utilisé (doit être défini dans JobControl sinon il utilisera 'Standard')
  • JobName: Nom du job tel qu'il apparaîtra dans la file d'attente
  • JobNumber: Position du job dans la fil d'attente
  • Resolution : résolution den DPI de l'image (utilisé pour le bmp destiné à la gravure mais aussi pour les système de coordonnées des polygones de découpe il semble)
  • Cultine : (c'est une option dans les réglages d'impression qui permet de découper le contour du job (sur jobControl on vois un trait noir)
    • none ⇒ ne découpe pas le contour extérieur de la page du job
    • circular = découpe un cercle inscrit dans la 'page' de découpe
    • rectangular : découpe autour de la 'page' (rectangle) de découpe
    • optimized : essaye de découper autour de ce qui est gravé à priori pas top sur mon essai
  • <RotaryAttachment: 3.18> : Argument facultatif : apparait lorsque l'on selectionne l'option tourne cylindre − 3.18 est le dimaètre du tourne cylindre

:TODO: Jouer avec les différents réglages du driver trotec lorsque l'on imprime à partir d'inkscape pour voir ce que cela donne dans le tsf

Image BMP

<BegGroup: Bitmap>
<STBmp: 0;0>BMÊ^U^@^@^@^@^@^@>^@^@^@(^@^@^@Å^@^@^@Å^@^@^@^A^@^A^@.......<EOBmp>
<EndGroup: Bitmap>
  • Gros bloc binaire qui semble contenir … un BMP (au format windows puisqu commencant par BM ⇒https://fr.wikipedia.org/wiki/Windows_bitmap) en bichromie à la résolution indiquée dans le header
  • Après test de copie dans un fichier il s'ouvre tres bien avec n'importe quel editeur d'image… reste plus qu'a arriver a en generer un du meme type
  • premier test de génération à moitié concluant avec gimp, on retrouve bien l'image mais dans le mauvais sens et avec de mauvaises couleurs : regarder plus en detail la map des couleurs etc dans le BMP
  • il semble qu'en fait les image sont en miroir vertical dans les tsf
  • passer par l’intermédiaire d'un pbm pour générer le bmp permet d'avoir les bonnes couleurs, (et faire in -flip permet de l'avoir dans le bon sens)
  • Infos sur les BMP contenu et la possibilité d'en généréer manuellement
    • :OK: Le bmp est soit en monochrome soit en 256 niveaux de gris(8bit) en fonction du mode de gravure (cf ci dessus).
    • :OK: Le bmp est tête en bas (flip)
    • :OK: Il est possible de générer des images BMP monochrome qui fonctionnent avec image magick
    • :TODO: essayer de générer des images en 8bits pour les modes couches et relief

:NOTE: Pour les modes couches et relief l'image bms est encodée sur 8bits(256couleurs) mais est en fait tramée sur 16 couleurs

:OK: Conversion d'une image png en bitmap N&B de façon assez brute (avec un flip sinon à l'envers dans JobControl): <code>convert image_source.png -flip pbm:- | ppm2bmp > image_nb.bmp</code> en fait pas besoin de passer par ppbm cf ci dessous

Quelques exemple de generation d'images monochromes (modes standard et tampon) avec tramage sympa grâce à imagemagick

  • convert reverserd2.png -flip -remap pattern:gray50 -monochrome reversed23.bmp : fonctionne mais trammage pas top
  • convert reverserd2.png -flip -colorspace Gray -ordered-dither o8x8 -monochrome reversed25.bmp : tramage régulier mais plutot sympa
  • convert reverserd2.png -flip -colorspace Gray -ordered-dither h4x4a -monochrome reversed25.bmp : tramage régulier un peu plus grossier que le précédent mais en diagonale rend pas mal en visuel

Polygones

<BegGroup: DrawCommands>
<DrawPolygon: 5;255;0;0;0;0;196;0;196;196;0;196;0;0>
<DrawPolygon: 2;255;0;0;0;0;196;196>
<DrawPolygon: 2;0;0;255;196;0;0;196>
<EndGroup: DrawCommands>
  • :OK: Partie découpe on a bien des polygones à couper devraient pourvoir se générer la la main \o/
  • Structure :
    • nombre de points ;
    • couleur : R;G;B;
    • points du polygone séparés par des ; x1;y1;y2;y2;x3;y3…
  • Les coordonnées semblent être en points et donc dépendent de la résolution : ici 196points = 10mm@500dpi

:TODO: Faire des truc un peu plus compliqué dans inkscape et voir ce qui sort.

:TODO: Générer des trucs un peu plus compliqué “à la main” et voir ce qui se passe ;)

Fichier généré

  • Premier fichier tsf généré “a la main” dans vi avec la conversion png⇒bmp décrite plus haut: 1 carré découpé de 10mm avec un logo fablab+texte gravé reversed.tsf.tar

Trucs utiles lors de l'analyse des BMP :

http://www.daubnet.com/en/file-format-bmp Description format BMP http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=15846

Petit script d'analyse des entêtes bmp pour comparer l'image qui vient de trotec et ce que je génère:

bmp_header_extractor.py
import os,struct,sys
 
if len(sys.argv) != 2:
  print 'Usage:python viewer.py bmpfile'
  exit(1)
 
filename = sys.argv[1]
 
header_keys = ('signature','file size','reserved','reserved','data offset','size','width','height','planes','bitCount','compression','image size','XpixelsPerM','YpixelsPerM','ColorUsed','ColorImportant')
header_fmt = '=2sihhiiiihhiiiiii'
palette_fmt = 'BBBB'*256
 
f = open(filename,'rb')
 
#read header
print '----Header----'
s_header = f.read(54)
for k,it in zip(header_keys,struct.unpack(header_fmt,s_header)):
  print "%s : %s" %(k,it)
 
#read palette
print '----palette----'
s_palette = f.read(1024)
palette = struct.unpack(palette_fmt,s_palette)
i = 0
while i < len(palette):
  print palette[i:i+4]
  i += 4

,

Pistes idées, liens pour un plugin inkscape

machines/decoupe_laser/tsf.txt · Dernière modification: 2021/04/01 16:26 par admin