IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Récupération de données dans un fichier stl


Sujet :

MATLAB

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Récupération de données dans un fichier stl
    Bonjour,
    Je travail sur un fichier .txt, issu d'un fichier d'un modeleur CAO (type : CATIA, NX5), j'ai fais une importation de ce fichier en .stl au format ascii. Donc je suis en présence d'un fichier qui se présente sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    solid CUBE
       facet normal -1.000000e+000 0.000000e+000 0.000000e+000
          outer loop
             vertex 0.000000e+000 0.000000e+000 6.000000e+001
             vertex 0.000000e+000 4.000000e+001 6.000000e+001
             vertex 0.000000e+000 0.000000e+000 0.000000e+000
          endloop
       endfacet
       facet normal -1.000000e+000 0.000000e+000 0.000000e+000
          outer loop
             vertex 0.000000e+000 0.000000e+000 0.000000e+000
             vertex 0.000000e+000 4.000000e+001 6.000000e+001
             vertex 0.000000e+000 4.000000e+001 0.000000e+000
          endloop
       endfacet
    endsolid
    Je voudrais récupérer les coordonnées de chaque vertex dans le même ordre que dans mon fichier et les insérer dans une matrice [n,3], pour obtenir quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    0   0   60
    0  40   60
    0   0    0
    0   0    0
    0  40   60
    0  40    0
    J'ai essayé plusieurs fonction, fopen puis ensuite fscanf, textscan, j'ai essayé de supprimer tous les caractères en gardant seulement les nombres, mais rien n'abouti. J'ai également essayé la fonction importdata en définissant un headliner = 3 mais je n'arrive que à récupérer mes trois premier vertex. Peut être une boucle sur impordata pour définir headliner =a avec for a = 3:7:inf mais je ne maitrise pas du tout les boucles.
    J'espère que j'ai été assez claire dans mon explication et qu'une personne pourra m'aider.
    Je vous remercie par avance.

    ps: Je travail sur Matlab r2007b, que je découvre complètement, J'apprends beaucoup de chose grâce à ce forum.Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    A = textread('data.stl','%s','delimiter','\n');
     
    idx = strncmp('vertex',A,6);
    A(~idx) = [];
    A = strrep(A,'vertex','');
     
    vertices = sscanf([A{:}],'%f %f %f',[3,inf]).';

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Je vous remercie, c'est exactement cela que je cherchais à faire. La fonction strcmp était la clef manquante à mon raisonnement.
    Cependant je ne comprend pas bien la ligne suivante:

    A(~idx) = [];

    Plus particulièrement le '~'. Enfin il me reste encore du pain sur la planche...

    Et encore MERCI pour votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 922
    Points
    52 922
    Par défaut
    Citation Envoyé par crismans Voir le message
    A(~idx) = [];

    Plus particulièrement le '~'. Enfin il me reste encore du pain sur la planche...
    Voir la : Qu'est-ce que l'indexage logique ?

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/01/2008, 17h32
  2. récupération de données dans un fichier texte
    Par capucine1983 dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2007, 01h16
  3. problème récupération de données dans des fichiers .DAT
    Par indymontpellier dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/04/2006, 08h54
  4. Réponses: 16
    Dernier message: 10/11/2005, 22h10
  5. Réponses: 6
    Dernier message: 23/10/2005, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo