Section_D: Polygone, opérations paramétrées

Description

[Version avec image de capture qui remplace celle du 05.03.2018]

Bonjour,

Avant la paramétrisation de constructions, nous allons d'abord introduire la notion de paramétrage sur les deux opérations principales: la translation et la rotation.

Comme les coordonnées des points, les paramètres sont définis en les lisant dans la fenêtre "PolyEdit".
Chaque ligne significative commence par '_', directement suivi d'un nom, puis d'une valeur.

Par exemple, pour une translation, placez le texte suivant dans PolyEdit:
_trlX 50
_trlY -10
, puis ► {WinEdit} ► << params ► {Opération} ► Translation [trlX,trlY].

La "gestion" des paramètres se fait dans Param.h:
struct Param {
  Param *nxt;
  char *name;
  double val;
  char str[64]; 

  char *Write() {sprintf_s(str,"_%s %9.3f\r\n",name,val); return str;}
};

struct ParamList {
  Param *last=0;

  void Append(const char *nom,double v) {
    size_t n=1+strlen(nom);
    Param *p=new Param();
    p->name=new char[n]; strcpy_s(p->name,n,nom); p->val=v;
    if (last) {p->nxt=last->nxt; last->nxt=p;} else p->nxt=p;
    last=p;
  }
  Param *GetParam(const char *nom) {
    Param *p=last;
    if (p) do {p=p->nxt; 
      if (strcmp(nom,p->name)==0) return p;
    } while (p!=last);
    return 0;
  }
  void Clear() {
    Param *p=last,*q;
    if (p) do {q=p; p=p->nxt; delete q->name; delete q;} while (p!=last);
    last=0;
  }
  void ReadParams(char *z) {
    char nom[48];
    double v;
    for (uint i=0; z[i]; ++i)
      if (z[i++]=='_') {
        sscanf_s(z+i,"%31s %lf",nom,48,&v);
        Param *p=GetParam(nom);
        if (p) p->val=v; else Append(nom,v);
        while ((z[i])&&(z[i]!='n')) ++i;
      }
  }
  void WriteParamList(std::string &str) {
    str.clear();
    if (last==0) return;
    Param *p=last;
    do {p=p->nxt; str.append(p->Write());} while (p!=last);
  }
  Param *UseParam(const char *nom) {
    Param *p=GetParam(nom);
    if (p==0) {Append(nom,NAN); return last;} else return p;
  }
};
Elle sera adaptée ou étendue au fur et à mesure des besoins.

Pour lister les paramètres déjà définis (et donc actifs): ► {WinEdit} ► >> params.

Pour chaque opération qui nécessite des paramètres, le menu correspondant (sous {Opérations}) indique entre crochets ... [...] les noms des paramètres utilisés.
Ces arguments sont alors affichés dans la fenêtre PolyEdit.
Si l'un ou l'autre de ces paramètres n'est pas (encore) défini, la valeur nan (Not-a-Number) nous invite à la remplacer par une valeur correspondant au paramètre (puis de relire ces paramètre avec << params sous {WinEdit}).

Le prochain article sur la paramétrisation de constructions sera un peu retardée car en la développant, j'ai remarqué qu'il valait mieux compléter chacune de ces construction d'un petit schéma qui explique la signification des paramètres.

Edition et compilation des fichiers sources (Voir VisualStudioExpress.jpg):
J'utilise la version gratuite de MS Visual Studio Express car il suffit de réaliser les étapes suivantes:
► New Projet
► Visual C++ ► General ► Empty Projet
- Donner le nom du projet.
- Ajouter le fichier Polygone.cpp dans Sources Files.

Les fichiers d'entête *.h et les autres fichiers tels que Menu.cpp et Polygone.txt n'ont pas besoin d'être ajoutés dans la solution.
Mais pour pouvoir les "travailler", on peut simplement les glisser dans la fenêtre principale de MS VSExpress.
(Voir VisualStudioExpress.jpg dans le Zip)

Bonne lecture ...

Liens

CodeS-SourceS: Section_A: Polygone (caractéristiques géométriques)
CodeS-SourceS: Section_B: Polygone en cycle de segments
CodeS-SourceS: Section_C: Polygone avec symétries

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.