[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
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.