Bonjour,
Cette extension du logiciel "Section: Polygones" permet d'ajouter un chanfrein symétrique sur un sommet sélectionné.
A l'aide du bouton de droite de la souris, on choisit le sommet de manière interactive, c'est-à-dire directement sur le dessin du polygone. Il sera affiché par un point rouge.
Actuellement, on va utiliser la notion de cotation selon le schéma 2 de "Schémas de cotation de chanfreins.jpg" du Zip.
(Ce fichier peut aussi être obtenu à l'aide du lien "Creo Parametric: Schémas de cotation de chanfreins" ci-dessous)
Adaptation des codes:
LRESULT CALLBACK Wpro(HWND hw,UINT m,WPARAM wP,LPARAM lP) {
// ...
switch(m) {
// ...
case WM_RBUTTONDOWN: if (poly.Select(GET_X_LPARAM(lP),GET_Y_LPARAM(lP),&tf))
InvalidateRect(hw,0,0); return 0;
//...
case WM_COMMAND: switch(wP) {
// ...
case MChf: { // Chanfrein
if (poly.sel==0) return 0;
Param *c=prmL.UseParam("Chf");
if (_finite(c->val)) poly.Chanfrein(c->val);
} break;
// ...
} InvalidateRect(hw,0,0); return 0; // force à redessiner
// ...
}
struct Polygone { // Basé sur des cycles de segments
static const int tol=5;
Segment *last=0,*sel=0;
double A; // Aire: A=∫dA
double Sx,Sy; // Moments statiques: Sx=∫y·dA, Sy=∫x·dA
double Xg,Yg; // Centre de gravité: Xg=Sy/A, Yg=Sx/A
double Ix,Iy; // Moments d'inertie axiaux: Ix=∫y²·dA, Iy=∫x²·dA
// Moment d'inertie polaire: Ip=Ix+Iy
// ...
Segment *Precedent(Segment *seg) { // Precedent->nxt == seg
Segment *s=last;
if (s) do
if (s->nxt!=seg) s=s->nxt; else return s;
while (s!=last);
return 0;
}
// ...
void MarkSel(HDC dc,Tfm2D *t) {
if (sel==0) return;
POINT xy;
t->ToPoint(sel,&xy);
int x=xy.x,y=xy.y;
Ellipse(dc,x-tol,y-tol,x+tol,y+tol);
}
// ...
bool Select(int i, int j, Tfm2D* tf) {Segment *s=last;
if (s) {
double x=tf->CoordX(i),y=tf->CoordY(j),t=abs(tol/tf->Dil);
do {s=s->nxt;
if ((abs(x-s->X)<=tol)&&(abs(y-s->Y)<=tol)) {sel=s; return true;}
} while (s!=last);
} return false;
}
// ...
// --- Adjonctions ------------------------------------------------------------
void Chanfrein(double D) { // sel != 0
Segment *pcd=Precedent(sel),*svt=sel->nxt,*z;
double x=sel->X,y=sel->Y,dx=x-svt->X,dy=y-svt->Y,d;
d=D/sqrt(dx*dx+dy*dy); z=new Segment(x-d*dx,y-d*dy);
dx=x-pcd->X; dy=y-pcd->Y; d=D/sqrt(dx*dx+dy*dy); sel->X-=d*dx; sel->Y-=d*dy;
z->nxt=sel->nxt; sel->nxt=z; sel=0;
}
};
Menu.cpp est aussi adapté.
Lorsque les segments d'un sommet sont perpendiculaires, l'introduction d'un chanfrein symétrique est simple. Par contre, dans le cas général, ce n'est pas tout-à-fait évident.
Pour permettre d'adjoindre des chanfreins symétriques sur des sommets définis par des segments d'angles quelconques, j'ajoute la construction d'une étoile régulière:
struct Polygone {
// ...
void EtoileReguliere(double R,double r,int n) {
if (n>=2) Clear(); else return;
double da=6.2831853071795865/n,c=cos(da),s=sin(da),
X=R,Y=0,x=r*cos(da/2),y=r*sin(da/2),xx;
Append(new Segment(X,Y)); Append(new Segment(x,y));
for (int i=1; i<n; i++) {
xx=X; X=X*c-Y*s; Y=xx*s+Y*c; Append(new Segment(X,Y));
xx=x; x=x*c-y*s; y=xx*s+y*c; Append(new Segment(x,y));
}
}
// ...
};
Effectuez les étapes suivantes pour obtenir le polygone correspondant à l'image de capture:
_EtR 100.000
_Etr 32.000
_Etn 7
_Chf 20.000
‥ Copier ces 4 paramètres dans la fenêtre
PolyEdit.
‥ Activer ces paramètres:
► Activer params.
‥ Construire l'étoile:
► {Construction} ► Etoile régulière [EtR,Etr,Etn].
‥ Refaire la mise en page:
► Voir tout.
‥ Sélectionner la "pointe" du 1. cadrant:
(droite)► pointe (point rouge).
‥ Adjoignez le chanfrein:
► {Adjonction} ► Chanfrein [Chf].
‥ Sélectionner le "creux" qui suit:
(droite)► creux (point rouge).
‥ Adjoignez le chanfrein:
► {Adjonction} ► Chanfrein [Chf].
‥ Centrer:
► {Opération} ► Centrer sur (Xg,Yg) (très petit déplacement).
‥ Rotation sur axes principaux:
► {Opération} ► Rotation sur axes principaux
‥ Calculer les caractéristiques:
► Calculer>
(dans PolyEdit).
Bonne lecture ...
Adaptation et compilation des fichiers sources
Avec la version gratuite de
MS Visual Studio Express, il suffit de suivre les étapes suivantes:
► New Projet
► Visual C++ ► General ► Empty Projet
a) Donner le nom du projet.
b) Ajouter le fichier existant
Polygone.cpp dans
Sources Files (clic droit).
Les fichiers d'entête
*.h et les autres fichiers tels que
Menu.cpp etc ..., n'ont pas besoin d'être ajoutés à la solution.
Ils sont importés par les #include dans Polygone.cpp.
Mais pour pouvoir les adapter, on peut simplement les glisser dans la fenêtre principale de MS VSExpress.
Tous ces fichier doivent figurer dans un même dossier.
Liens
Creo Parametric: Schémas de cotation de chanfreins
CodeS-SourceS:
Section_A: Polygone (caractéristiques géométriques)
Section_B: Polygone en cycle de segments
Section_C: Polygone avec symétries
Section_D: Polygone, opérations paramétrées
Section_E: Polygone, constructions paramétrées
Section_F: Polygone, profils usuels I L T U Z
Section_G: Polygone, produit d'inertie Ixy
Section_H: Polygone, axes principaux
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.