/* * The Npic library and tools * * Copyright (C) 2003 Edouard Thiel * * This program is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ /* DO NOT EDIT !!! Generated by npic-templa from "npic-mask.ct" */ /* * npic-mask.c - 01/10/2008 * */ #include void ShowUsage () { printf ( "npic-mask - Create a mask, set vectors and properties.\n" "Usage:\n" " npic-mask -h | -help | --help : print help\n" " npic-mask m1 actions ...\n" "\n" "m1 : mask file in " NPIC_KNOWN_MASK_EXT " format\n" "\n" "actions:\n" " -create -2l|-2d|-3l|-3d|-4l|-4d|-5l|-5d|-6l|-6d : create a new empty mask\n" " 2,3,4,5,6 = dimension ; l = signed int32 ; d = double.\n" " -dist|-med|-conv : add property Nature: Distance or MedialAxis\n" " or Convolution.\n" " -wd|-sed|-fed|-ced : add property DistanceType: Weighted or\n" " SquaredEuclidean or FloorEuclidean or CeilEuclidean.\n" " -vec r:s:t:z:y:x:h | s:t:z:y:x:h | t:z:y:x:h | z:y:x:h | y:x:h : \n" " insert vector and value h depending of the mask dimension.\n" " -ghalf : add property AddSym: GSymToHalfMask\n" " keep small file, symmetries will be added after reading.\n" " -comphalf : compute half mask by G-symmetries\n" " insert all symmetries in the file, give large file.\n" " -print : print mask to stdout\n" "\n" ); } void ArgcExit (int argc, int n) { if (argc < n) { fprintf (stderr, "ERROR: %d argument(s) missing, " "type \"npic-mask -h\" to get help.\n", n-argc); exit (1); } } void ArgShift (int *argc, char **argv[], int n) { *argc -= n; *argv += n; } void CheckMask (Npic_mask **m1, char *name) { if (*m1 != NULL) return; printf ("Loading mask file \"%s\" ... \n", name); *m1 = NpicReadMask (name); if (*m1 == NULL) exit (1); } int main (int argc, char *argv[]) { Npic_mask *m1 = NULL; char *name; int modified = 0; ArgcExit (argc, 2); if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "-help") == 0 || strcmp (argv[1], "--help") == 0) { ShowUsage (); exit (0); } name = argv[1]; ArgShift (&argc, &argv, 1); while (argc > 1) { if (strcmp (argv[1], "-create") == 0) { ArgcExit (argc, 3); if (m1 != NULL) { fprintf (stderr, "ERROR: -create: mask already exists\n"); exit (1); } if (strcmp (argv[2], "-2l") == 0) m1 = NpicCreateMask (NPIC_MASK_2L); else if (strcmp (argv[2], "-2d") == 0) m1 = NpicCreateMask (NPIC_MASK_2D); else if (strcmp (argv[2], "-3l") == 0) m1 = NpicCreateMask (NPIC_MASK_3L); else if (strcmp (argv[2], "-3d") == 0) m1 = NpicCreateMask (NPIC_MASK_3D); else if (strcmp (argv[2], "-4l") == 0) m1 = NpicCreateMask (NPIC_MASK_4L); else if (strcmp (argv[2], "-4d") == 0) m1 = NpicCreateMask (NPIC_MASK_4D); else if (strcmp (argv[2], "-5l") == 0) m1 = NpicCreateMask (NPIC_MASK_5L); else if (strcmp (argv[2], "-5d") == 0) m1 = NpicCreateMask (NPIC_MASK_5D); else if (strcmp (argv[2], "-6l") == 0) m1 = NpicCreateMask (NPIC_MASK_6L); else if (strcmp (argv[2], "-6d") == 0) m1 = NpicCreateMask (NPIC_MASK_6D); else { fprintf (stderr, "ERROR: -create: -2l|-2d|-3l|-3d|-4l|-4d|-5l|-5d|-6l|-6d expected\n"); exit (1); } printf ("Creating mask of type %s ...\n", argv[2]); ArgShift (&argc, &argv, 2); modified = 1; } else if (strcmp (argv[1], "-dist") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"Nature: Distance\" ...\n"); NpicMaskAddProp (m1, "Nature", "Distance"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-med") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"Nature: MedialAxis\" ...\n"); NpicMaskAddProp (m1, "Nature", "MedialAxis"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-conv") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"Nature: Convolution\" ...\n"); NpicMaskAddProp (m1, "Nature", "Convolution"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-wd") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"DistanceType: Weighted\" ...\n"); NpicMaskAddProp (m1, "DistanceType", "Weighted"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-sed") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"DistanceType: SquaredEuclidean\" ...\n"); NpicMaskAddProp (m1, "DistanceType", "SquaredEuclidean"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-fed") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"DistanceType: FloorEuclidean\" ...\n"); NpicMaskAddProp (m1, "DistanceType", "FloorEuclidean"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-ced") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"DistanceType: CeilEuclidean\" ...\n"); NpicMaskAddProp (m1, "DistanceType", "CeilEuclidean"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-ghalf") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Adding property \"AddSym: GSymToHalfMask\" ...\n"); NpicMaskAddProp (m1, "AddSym", "GSymToHalfMask"); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-comphalf") == 0) { Npic_mask *m2; ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Computing half mask by G-symmetries ...\n"); m2 = NpicCompHalfMask (m1); if (m2 == NULL) exit (1); NpicMaskCopyProps (m2, m1); NpicMaskAddProp (m2, "AddSym", "None"); NpicDestroyMask (m1); m1 = m2; printf ("Number of vector: %d\n", m1->gen.nb); ArgShift (&argc, &argv, 1); modified = 1; } else if (strcmp (argv[1], "-vec") == 0) { int r, s, t, z, y, x; Npic_l hl; Npic_d hd; ArgcExit (argc, 3); CheckMask (&m1, name); switch (m1->type) { case NPIC_MASK_2L : if (sscanf (argv[2], "%d:%d:%" NPIC_PL "", &y, &x, &hl) == 2+1) { printf ("Inserting ( %d , %d ; %" NPIC_PL " ) ...\n", y, x, hl); NpicMaskInsert_2l (m1, y, x, hl); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_2D : if (sscanf (argv[2], "%d:%d:%lf", &y, &x, &hd) == 2+1) { printf ("Inserting ( %d , %d ; %lf ) ...\n", y, x, hd); NpicMaskInsert_2d (m1, y, x, hd); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_3L : if (sscanf (argv[2], "%d:%d:%d:%" NPIC_PL "", &z, &y, &x, &hl) == 3+1) { printf ("Inserting ( %d , %d , %d ; %" NPIC_PL " ) ...\n", z, y, x, hl); NpicMaskInsert_3l (m1, z, y, x, hl); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_3D : if (sscanf (argv[2], "%d:%d:%d:%lf", &z, &y, &x, &hd) == 3+1) { printf ("Inserting ( %d , %d , %d ; %lf ) ...\n", z, y, x, hd); NpicMaskInsert_3d (m1, z, y, x, hd); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_4L : if (sscanf (argv[2], "%d:%d:%d:%d:%" NPIC_PL "", &t, &z, &y, &x, &hl) == 4+1) { printf ("Inserting ( %d , %d , %d , %d ; %" NPIC_PL " ) ...\n", t, z, y, x, hl); NpicMaskInsert_4l (m1, t, z, y, x, hl); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_4D : if (sscanf (argv[2], "%d:%d:%d:%d:%lf", &t, &z, &y, &x, &hd) == 4+1) { printf ("Inserting ( %d , %d , %d , %d ; %lf ) ...\n", t, z, y, x, hd); NpicMaskInsert_4d (m1, t, z, y, x, hd); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_5L : if (sscanf (argv[2], "%d:%d:%d:%d:%d:%" NPIC_PL "", &s, &t, &z, &y, &x, &hl) == 5+1) { printf ("Inserting ( %d , %d , %d , %d , %d ; %" NPIC_PL " ) ...\n", s, t, z, y, x, hl); NpicMaskInsert_5l (m1, s, t, z, y, x, hl); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_5D : if (sscanf (argv[2], "%d:%d:%d:%d:%d:%lf", &s, &t, &z, &y, &x, &hd) == 5+1) { printf ("Inserting ( %d , %d , %d , %d , %d ; %lf ) ...\n", s, t, z, y, x, hd); NpicMaskInsert_5d (m1, s, t, z, y, x, hd); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_6L : if (sscanf (argv[2], "%d:%d:%d:%d:%d:%d:%" NPIC_PL "", &r, &s, &t, &z, &y, &x, &hl) == 6+1) { printf ("Inserting ( %d , %d , %d , %d , %d , %d ; %" NPIC_PL " ) ...\n", r, s, t, z, y, x, hl); NpicMaskInsert_6l (m1, r, s, t, z, y, x, hl); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; case NPIC_MASK_6D : if (sscanf (argv[2], "%d:%d:%d:%d:%d:%d:%lf", &r, &s, &t, &z, &y, &x, &hd) == 6+1) { printf ("Inserting ( %d , %d , %d , %d , %d , %d ; %lf ) ...\n", r, s, t, z, y, x, hd); NpicMaskInsert_6d (m1, r, s, t, z, y, x, hd); } else { fprintf (stderr, "ERROR: -vec \"%s\" has bad format\n", argv[2]); exit (1); } break; } ArgShift (&argc, &argv, 2); modified = 1; } else if (strcmp (argv[1], "-print") == 0) { ArgcExit (argc, 2); CheckMask (&m1, name); printf ("Printing mask:\n"); NpicPrintMask (m1); ArgShift (&argc, &argv, 1); } else { fprintf (stderr, "ERROR: unknown argument \"%s\", " "type \"npic-mask -h\" to get help.\n", argv[1]); exit (1); } } if (m1 != NULL && modified) { printf ("Saving mask file \"%s\" ... \n", name); NpicWriteMask (m1, name); } exit (0); }