nazemrap Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 Bonsoir, je me lance dans un challenge de débutant.Afin de sortir de l 'austérité du boulot, je souhaiterais fabriquer un jeu de bonneteau.(vous savez ce jeu de 3 cartes retournées où il faut retrouver la bonne).Ce thème pourrait faire l 'objet de choix d 'évolution. La première étape sera de faire dessiner 3 cartes .Elles seront rectangulaires en polyligne 2d de 10 de large sur 20 de haut, alignées horizontalement, séparées de 10 unitésLe moins de lignes de code possible est souhaité, mais les commentaires sont les bienvenus,l 'objectif étant de faire connaître des possibilités d' utilisation.VBA bien sûr. [Edité le 21/10/2007 par nazemrap]
sechanbask Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 Très bonne initiatve : l'algorithme devrait ressembler à ça : une boucle de 1 à 3 pour dessiner chaque carte au même endroit et en fin de boucle, les déplacer bonne chance ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
sechanbask Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 j'ai réussi... mais c'est pas juste, je suis aguerri et en plus j'ai déjà fait des bout de codes similaires.. dois-je poster maintenant? ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
nazemrap Posté(e) le 20 octobre 2007 Auteur Posté(e) le 20 octobre 2007 Salut, J 'avais pas vu ton message.Il n 'y a pas beaucoup de volontaires !!!!Tant pis, on continue. Vas y postes, je mets le mien aussi, on pourra comparer.J 'ai fait moi ausi une boucle, mais j 'ai inclu le déplacement dans la boucle. 'definition des variables pour les 3 cartes (le 0 compte aussi) Dim carte(2) As AcadLWPolyline 'definition des points nécesssaires à la polyligne 4 sommets avec x et y pour chacun soit 8 valeurs en double précision Dim pt(0 To 7) As Double 'definition de la variable pour la largeur Dim largeur As Double ' definition de la variable pour la hauteur Dim hauteur As Double ' definition d' une varariable entier pour une boucle Dim fois As Integer ' definition d' une varariable entier pour l 'écart séparant 2 cartes Dim dep As Double Public Sub bonneteau_1() 'valoriser les 3 paramètres de dimension et placement largeur = 10 hauteur = largeur * 2 dep = largeur * 2 'création des cartes avec une boucle '3 tours For fois = 0 To 2 'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement pt(0) = 0 + (dep * fois): pt(1) = 0 ' second point bas droite pt(2) = pt(0) + largeur: pt(3) = pt(1) 'troisieme point au dessus du second pt(4) = pt(2): pt(5) = pt(3) + hauteur 'quatrième point en revenant au dessus du premier pt(6) = pt(4) - largeur: pt(7) = pt(5) 'creation de la carte proprement dit avec une polyligne 2d Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt) 'propriété qui permet de fermer la polyligne sur son premier point carte(fois).Closed = True Next End Sub [Edité le 20/10/2007 par nazemrap]
mdsv31 Posté(e) le 20 octobre 2007 Posté(e) le 20 octobre 2007 Bon j'avais pas vue passer le poste mais si tu as d'autre challenge dans le meme genre alors, je veux bien essayer de participer. @+MDSV31 PS: code bien documenté, jamais vue avant. Dessinateur Indépendant
nazemrap Posté(e) le 20 octobre 2007 Auteur Posté(e) le 20 octobre 2007 Soir, on attend Sechanbask, pour comparer, d' autres encore si des possibilités apparaissent.remarques, commentaires et orientations bienvenues.Suite à venir.
mdsv31 Posté(e) le 20 octobre 2007 Posté(e) le 20 octobre 2007 'quatrième point en revenant au dessus du premier pt(6) = pt(4) - largeur: pt(7) = pt(5) ne sert à rien car tu demande de clore la polyligne à la fin 'propriété qui permet de fermer la polyligne sur son premier point carte(fois).Closed = True C'est tous ce que j'ai pu remarquer. @+MDSV31 Dessinateur Indépendant
nazemrap Posté(e) le 21 octobre 2007 Auteur Posté(e) le 21 octobre 2007 Hello, Heu!! J 'ai besoin de 4 points pour tracer 3 segments et donc de fermer la polyligne après le quatrième point pour rejoindre le premier.Si je ferme après le troisième j 'ai un triangle non ???
mdsv31 Posté(e) le 21 octobre 2007 Posté(e) le 21 octobre 2007 Bon d'accord, j'ai commandé un nouveau cerveau pour noêl. J'espere qu'il sera plus efficasse que celui d'origine. Désolé. @+MDSV31 PS: GETCORNER permet de faire des rectangles en lisp il n'y a pas d'equivalent en VBA? Dessinateur Indépendant
sechanbask Posté(e) le 21 octobre 2007 Posté(e) le 21 octobre 2007 désolé mais mon PC est en rad, alors je suis coincé pour l'instant mias j'avais fait différement de ce que j'avais proposé : création d'une carte puis rotiation de celle-ci et enfin mirror avec une copie entre chaque action et donc j'avais pas besoin de faire de boucle... ça m'avais réduit la longueur du code. j'avais même pensé à mettre chaque carte dans un calque diférrent pour faire la suite :on choisi la carte à cherché et la carte à trouvé change de couleur. pour que le Pc choisisse où sera la carte, j'ai pensé à utilisé la fonction RDN puis tester la dernier chiffre en faisant un select case : select case chiffrecase 0,3,6,9'mettre la carte de gauche dans le calque carte à touver'et mettre les 2 autres dans un calque quelconquecase 1,4,7'mettre la carte du milieu dans le calque carte à touver'et mettre les 2 autres dans un calque quelconquecase else'mettre la carte de droite dans le calque carte à touver'et mettre les 2 autres dans un calque quelconqueend select c'est pas super m'ai j'ai trouvé que ça pour changer les cartes de manière aléatoire ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
nazemrap Posté(e) le 21 octobre 2007 Auteur Posté(e) le 21 octobre 2007 Hey, -MDSV31 : je ne connait pas d 'équivalant vba pour le rectangle, mais étant donné ma pratique, il est possible que qelquechose puisse exister.D' autres avis viendront peut-être. -Sechanbask : désolé pour ton pc.Je retiens l 'idée de mettre les cartes sur un calque différent, pour exploiter le tirage, ce sera sans doute Rnd, mais c 'est à mon avis un peu tôt.Le miroir va être à tester en effet, j 'espère que tu seras bientôt de nouveau opérationnel... Ce serait bien que ces challenges servent, à ceux qui le souhaitent, à s' initier à VBA.Pour ma part j 'envisage en rapport avec le code précédent, de récupérer la largeur de la carte avec une boite de saisie (fréquente en vba), ce qui permettra d 'adapter la dimension au goût de chacun.Seule la largeur est nécessaire pour l' instant pour induire le reste des opérations.Je souhaiterais aussi que les angles soient arrondis, et comme il s' agit d' une polyligne...Il faut sans doute envisager aussi un zoom étendu. Si il y a des amateurs ....
sechanbask Posté(e) le 22 octobre 2007 Posté(e) le 22 octobre 2007 mdsv31 :à ma connaissance, le getcorner ne sert qu'à demander à l'utilisateur de pointer un point pour en faitre un rectangle. Je ne connais pas de get corner pour que le programme fasse tout seul un rectangle sans intervention de l'utilisateur... Mais je peux me tromper par ignorance. ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
mdsv31 Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 Bon voici un code pour des cartes avec les coins arrondis 'definition des variables pour les 3 cartes (le 0 compte aussi) Dim carte(2) As AcadLWPolyline 'definition des points nécesssaires à la polyligne 4 sommets avec x et y pour chacun soit 8 valeurs en double précision Dim pt(0 To 15) As Double 'definition de la variable pour la largeur Dim largeur As Double ' definition de la variable pour la hauteur Dim hauteur As Double ' definition d' une varariable entier pour une boucle Dim fois As Integer ' definition d' une varariable entier pour l 'écart séparant 2 cartes Dim dep As Double ' definition d'une variable pour le chanfrein de la carte Dim ray As Double Public Sub bonneteau_1() 'valoriser les 3 paramètres de dimension et placement largeur = 10 hauteur = largeur * 2 dep = largeur * 2 ray = largeur * 0.1 fois = 0 'création des cartes avec une boucle '3 tours For fois = 0 To 2 'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement pt(0) = 0 + (dep * fois) + ray: pt(1) = 0 pt(2) = pt(0) + largeur - ray: pt(3) = pt(1) pt(4) = pt(2) + ray: pt(5) = pt(3) + ray pt(6) = pt(4): pt(7) = pt(3) + hauteur - ray pt(8) = pt(2): pt(9) = pt(3) + hauteur pt(10) = pt(0): pt(11) = pt(9) pt(12) = pt(0) - ray: pt(13) = pt(7) pt(14) = pt(12): pt(15) = pt(1) + ray 'creation de la carte proprement dit avec une polyligne 2d Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt) 'propriété qui permet de fermer la polyligne sur son premier point carte(fois).Closed = True 'propriété qui permet d'avoir des coins arrondis carte(fois).SetBulge 1, Tan(22.5 * 3.14159 / 180) carte(fois).SetBulge 3, Tan(22.5 * 3.14159 / 180) carte(fois).SetBulge 5, Tan(22.5 * 3.14159 / 180) carte(fois).SetBulge 7, Tan(22.5 * 3.14159 / 180) Next End Sub Bon j'ai pas pu mieux faire. @+MDSV31 Dessinateur Indépendant
nazemrap Posté(e) le 25 octobre 2007 Auteur Posté(e) le 25 octobre 2007 Hello, Wouah!! trop drôle, je ne peux pas résister à mettre ce que j 'avais fait. Public Sub bonneteau_3() 'arrondir les angles avec la méthode bulge 'saisie de la largeur par une boite largeur = InputBox("Quelle est la largeur de la carte") hauteur = largeur * 2 dep = largeur * 2 ' le rayon sera proportionnel à la largeur rayon_coin = largeur / 10 'la boucle qui inclut cette fois 8 points qui permettront de "bulger" 'il est recommandé à ceux que cela intéresse d 'aller voir dans l' aide pour setbulge For fois = 0 To 2 pt(0) = 0 + (dep * fois) + rayon_coin: pt(1) = 0 pt(2) = pt(0) + largeur - (2 * rayon_coin): pt(3) = pt(1) pt(4) = pt(2) + rayon_coin: pt(5) = pt(3) + rayon_coin pt(6) = pt(4): pt(7) = pt(5) + hauteur - (2 * rayon_coin) pt(8) = pt(6) - rayon_coin: pt(9) = pt(7) + rayon_coin pt(10) = pt(8) - largeur + (2 * rayon_coin): pt(11) = pt(9) pt(12) = pt(10) - rayon_coin: pt(13) = pt(11) - rayon_coin pt(14) = pt(12): pt(15) = pt(13) - hauteur + (2 * rayon_coin) Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt) carte(fois).Closed = True 'boucle imbriquée qui permet de réaliser l 'arrondi For coin = 1 To 7 Step 2 carte(fois).SetBulge coin, (1.414 * rayon_coin) / 4 Next Next End Sub C 'est pratiquement la même chose, mais plus propre pour MDSV31.Mais j 'ai pas honte, je joue le jeu, je savais bien que cela allait m'être profitable....J 'ai rajouté un input pour la largeur de la carte, les autres dimensions sont en fonction.Pour le "SetBulge", je l' ai mis dans une boucle.J 'ai éxécuté les 2, j 'ai superposé, MDSV31 dépasse les 10.Fallait bien que je trouve quelque chose.Il reste le zoom étendu. Qu' est-ce qu' on fait maintenant ?
mdsv31 Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 Fonction qui permet de convertir degre en radia Public Function DenR(angle) Pi = 4 * Atn(1) DenR = (angle * Pi) / 180 End Function Et le code pour dessiner les cartes avec un zoom etendu à la fin (en gras) Public Sub bonneteau_1() 'valoriser les 3 paramètres de dimension et placement largeur = InputBox("Quelle est la largeur de la carte") hauteur = largeur * 2 dep = largeur * 2 ray = largeur * 0.1 'création des cartes avec une boucle '3 tours For fois = 0 To 2 'point d' origine au tour suivant le placement du point d 'origine est augmenté de la variable de placement pt(0) = 0 + (dep * fois) + ray: pt(1) = 0 pt(2) = pt(0) + largeur - 2 * ray: pt(3) = pt(1) pt(4) = pt(2) + ray: pt(5) = pt(3) + ray pt(6) = pt(4): pt(7) = pt(3) + hauteur - ray pt(8) = pt(2): pt(9) = pt(3) + hauteur pt(10) = pt(0): pt(11) = pt(9) pt(12) = pt(0) - ray: pt(13) = pt(7) pt(14) = pt(12): pt(15) = pt(1) + ray 'creation de la carte proprement dit avec une polyligne 2d Set carte(fois) = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt) 'propriété qui permet de fermer la polyligne sur son premier point carte(fois).Closed = True 'propriété qui permet d'avoir des coins arrondis For fois2 = 1 To 7 Step 2 carte(fois).SetBulge fois2, Tan(DenR(22.5)) Next fois2 Next fois [b] ThisDrawing.Application.ZoomExtents [/b] End Sub @+MDSV31 Ps: Bon pour l'erreur de largeur c'est rectifiéPs2:Merci nazemrap pour les commentaire et pour la boite de dialogue Pi modifier merci sechanbask [Edité le 25/10/2007 par mdsv31] Dessinateur Indépendant
nazemrap Posté(e) le 25 octobre 2007 Auteur Posté(e) le 25 octobre 2007 Bon !! Joli appel de fonction !ça avance bien, je crois que cette fois on peut garder le code de MDSV31.Si des commentaires, des variantes ou suggestion, n 'hésitez pas ! Quelles cartes choisit-on de représenter ?(ne demandez pas le valet de pique) Ps pour ceux qui reprennent le code n 'oubliez pas éventuellement la déclaration des variables. [Edité le 25/10/2007 par nazemrap]
mdsv31 Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 Bon pour les cartes, le mieux pour commencer c'est d'y mettre une forme un carre pour la bonne carteun cercle pour les nauvaises @+MDSv31 Dessinateur Indépendant
sechanbask Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 pour connairte Pi j'utilise la fonction suivante au lieu de me souvenir des nombre : Pi = 4 * Atn(1) bon courage pour la suite moi, je suis toujours en rade de PC... P.S. pour l'imput box, moi je préfère car je trouve ça plus fluide : thisdrawing.utility.getreal J'espère que je ne me suis pas trompé dans la syntaxe... [Edité le 25/10/2007 par sechanbask] ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
mdsv31 Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 sechanbask Pour la suite j'ai un p'tit probléme, je ne trouve pas d'info sur la fonction RDN. Si tu as un exemple, je veux bien regarder ça. Sinon je penser utiliser les XDATA pour mettre les informations de la carte comme cela il ne reste plus qu'à selectionner la carte et lire la XDATA pour savoir si c'est la bonne carte.Cela évite que les personne triche en regardant les calques pour savoir si c'est la bonne carte. @+MDSV31 Dessinateur Indépendant
nazemrap Posté(e) le 25 octobre 2007 Auteur Posté(e) le 25 octobre 2007 Bon je pense qu 'on va utiliser tout ça. Quand même, moi j 'aurais bien aimé 3 as : un coeur, un pique un trèfle.Le coeur sert de base pour tracer les autres. http://www.premiumwanadoo.com/technaulogis/cadxp/bonneteau_01.jpg
winfield Posté(e) le 25 octobre 2007 Posté(e) le 25 octobre 2007 For...'propriété qui permet d'avoir des coins arrondiscarte(fois).SetBulge 1, Tan(22.5 * 3.14159 / 180)carte(fois).SetBulge 3, Tan(22.5 * 3.14159 / 180)carte(fois).SetBulge 5, Tan(22.5 * 3.14159 / 180)carte(fois).SetBulge 7, Tan(22.5 * 3.14159 / 180)Next ça fait pas gagner grand chose mais bon. For.............. For i = 1 To 7 Step 2 carte(fois).SetBulge i, Tan(22.5 * 3.14159 / 180) Next Next Bonne continuation Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
nazemrap Posté(e) le 26 octobre 2007 Auteur Posté(e) le 26 octobre 2007 Bonjour, Winfield, c' était donné dans le n° 14 par MDSV31.
winfield Posté(e) le 26 octobre 2007 Posté(e) le 26 octobre 2007 Oups désolé, ça m'apprendra à ne pas tout lire Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
sechanbask Posté(e) le 26 octobre 2007 Posté(e) le 26 octobre 2007 les infos sur la fonction RDN est à lire dans l'aide VBA pas dans l'aide des programmateur d'autocad. Bonne lecture ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
nazemrap Posté(e) le 27 octobre 2007 Auteur Posté(e) le 27 octobre 2007 Bonjour, Je pense qu 'il y a eu une mauvaise saisie au clavier, il doit s' agir de [surligneur]Rnd [/surligneur] qui génère un nombre aléatoire ? Pour le déroulement du jeu en lui-même, je pense qu 'il va exister pas mal de possibilités.le Xdata sera sans doute intéressant car plein de possibilités à faire connaître. La proposition des carrés et cercles est toujours valable, si d 'autres firgures sont proposées, il suffira de substituer. Voici la construction géométrique que j 'envisageais pour le coeur, qui sert de base aux autres.Ce sont des triangles isocèles, le rayon est le même que l 'arrondi des coins de cartes. http://www.premiumwanadoo.com/technaulogis/cadxp/bonneteau_02.jpg
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