belam Posté(e) le 20 octobre 2009 Posté(e) le 20 octobre 2009 Salut à tous C'est re moi J'ai remis au goût du jour la commande bati2 ou b2, c'est la plus simple et la plus courte. Elle dessine un rectangle dont on connait deux points représentant les extrémités d'un coté et la hauteur. Ce peut être les deux point levés d'une construction rectangulaire et de l'autre dimension du rectangle. Par convention le rectangle est dessiné à gauche du coté levé [pt1, pt2] en regardant de pt1 vers pt2. La commande marche correctement. En voici le code. void bati2(){ h = 0.0; struct resbuf *result; ads_initget(1, NULL); resget = ads_getpoint(NULL, _T("\n1° point ? "), pt1); #include "rtcan.h" if(resget != RTNORM) { acutPrintf(_T("\nLa saisie du premier point a échoué.")); _flushall(); _fcloseall(); return; } x1 = pt1[0]; y11 = pt1[1]; ads_initget(1, NULL); resget = ads_getpoint(pt1, _T("\n2° point ? "), pt2); #include "Rtcan.h" if(resget != RTNORM) { acutPrintf(_T("\nLa saisie du second point a échoué.")); _flushall(); _fcloseall(); return; } x2 = pt2[0]; y2 = pt2[1]; acedGetVar(_T("userr2"), &rb); rb.restype = RTREAL; h = rb.resval.rreal; if(h != 0.0) acutPrintf(_T("\nHauteur <%.2lfm> ? "), h); else acutPrintf(_T("\nHauteur ? ")); ads_initget(2, NULL); resget = ads_getdist(NULL, NULL, &h); #include "rtcan.h" if(resget != RTNORM) { acutPrintf(_T("\nLa saisie de la hauteur a échoué.")); _flushall(); _fcloseall(); return; } rb.resval.rreal = h; ads_setvar(_T("userr2"), &rb); dx = x2 - x1; dy = y2 - y11; d = sqrt(dx * dx + dy * dy); gis = gisement(dx, dy) - 1.570796327; x3 = x2 + h * sin(gis); y3 = y2 + h * cos(gis); pt3[0] = x3; pt3[1] = y3; x4 = x1 + h * sin(gis); y4 = y11 + h * cos(gis); pt4[0] = x4; pt4[1] = y4; acedCommand(RTSTR, _T("_pline"), RTPOINT, pt1, RTPOINT, pt2, RTPOINT, pt3, RTPOINT, pt4, RTSTR, _T("_close"), 0); _flushall(); _fcloseall(); return; } C'est programmé plutôt en C et ADS au lieu de C++ et ObjectARX. Si ça peut servir voici aussi le code du programme principal ObjectArx. #include "stdafx.h" #include "tchar.h" #include #include "adscodes.h" #include "acedads.h" #include #include #include #include #include #include #include #include ads_real xor, yor, x1, x2, x3, x4, y11, y2, y3, y4, xprov, yprov; ads_real dx, dy, gis, d, h; ads_point pt0, pt1, pt2, pt3, pt4; char layname[80], buffer[160]; int resget; struct resbuf rb, cecol, osm; void initApp(); void unloadApp(); void helloWorld(); void bati2(); void bati3(); void initApp() { acedRegCmds->addCommand(_T("TOPO1_COMMANDS"), _T("Hello"), _T("Bonjour"), ACRX_CMD_TRANSPARENT, helloWorld); acedRegCmds->addCommand(_T("TOPO1_COMMANDS"), _T("b2"), _T("bati2"), ACRX_CMD_MODAL, bati2); acedRegCmds->addCommand(_T("TOPO1_COMMANDS"), _T("b3"), _T("bati3"), ACRX_CMD_MODAL, bati3); } void unloadApp() { acedRegCmds->removeGroup(_T("TOPO1_COMMANDS")); } void helloWorld() { acutPrintf(_T("\nHello World!")); } #include "gisement.h" #include "bati2.h" #include "bati3.h" extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { switch (msg) { case AcRx::kInitAppMsg: acrxDynamicLinker->unlockApplication(pkt); acrxRegisterAppMDIAware(pkt); initApp(); break; case AcRx::kUnloadAppMsg: unloadApp(); break; default: break; } return AcRx::kRetOK; } J'ai fais la même chose avec la commande bati3 (b3) qui dessine un rectangle à partir de trois points levés, en positionnant au mieux les coins du rectangle par rapport aux points levés. La commande suivante, plus complxe, fait appel à une boite de dialogue implémentée en DCL que je me propose de remplacer par une boite MFC. A+ belam -------------------------------------------------------------------------------De toute façon c'est moins grave que si c'était pire. (Frédéric Dard - San Antonio ?)Si c'est pas sûr, c'est quand même peut-être. (Jacque Brel)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant