DenisHen Posté(e) le 12 mars 2021 Posté(e) le 12 mars 2021 Bon, vous aimer les chalenges... Et je l'ai bien compris, les critères de mon premier n'étaient pas "correctes"... J'ai donc un nouveau "truc" à vous proposer... Quelque-soit le langage que vous proposerez sera le bien venu (Lisp, V-Lisp, VBA, C#, F# Ruby, patatruc...), vous êtes libre : C'est de la géométrie, désolé, mais c'est mon truc. Le challenge est : Dessinez un cercle (oui, c'est graphique Et géométrique). Dans ce cercle, dessinez un carré inscrit, et dans ce carré un cercle inscrit... Et ce, au moins 4 ... Mais avant tout, Est-ce judicieux comme challenge ? Ai-je oublié quelque-chose ? Mais bien à vous, et lancez-vous... On ne "jugera" as sur la quantité de fonction/commande et non du nombre de lignes de programmation... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Curlygoth Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 edit : question effacés je garde mon idée pour moi Mon site Web (en cours de construction) : Site DA-CODE de @didier
DenisHen Posté(e) le 13 mars 2021 Auteur Posté(e) le 13 mars 2021 edit : question effacés je garde mon idée pour moi Égoïste ! ! ! ;) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Curlygoth Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 En attendant voici un aperçu (qui marche) Dim MonCercle As AcadCircleDim p(0 To 7) As DoubleDim Poly As AcadLWPolylineDim ANGLE As DoubleMe.HideDIA = DIAM_CERCLEptCen = ThisDrawing.Utility.GetPoint(, "Viser le point de départ")For i = 1 To NB_CERCLE Set MonCercle = ThisDrawing.ModelSpace.AddCircle(ptCen, DIA / 2) MonCercle.Update c = DIA / Sqr(2) p(0) = (ptCen(0) + c / 2): p(1) = (ptCen(1) - c / 2) p(2) = (ptCen(0) + c / 2): p(3) = (ptCen(1) + c / 2) p(4) = (ptCen(0) - c / 2): p(5) = (ptCen(1) + c / 2) p(6) = (ptCen(0) - c / 2): p(7) = (ptCen(1) - c / 2) Set Poly = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) Poly.Closed = True Poly.Update DIA = c A = A + ANext i Ma version 2 sera bien plus complete ^^ j'ai un userform ou je rentre le nombre de cercle et la taille initial du cercle Mon site Web (en cours de construction) : Site DA-CODE de @didier
Curlygoth Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 Bon un petit plus pour faire tourner le carré Présentation via ce lien : Private Sub UserForm_Initialize()NB_CERCLE = 6DIAM_CERCLE = 10ANGLE_CAR = 0End Sub Private Sub VALIDER_Click()Dim MonCercle As AcadCircleDim p(0 To 7) As DoubleDim Poly As AcadLWPolylineDim ANGLE As DoubleMe.HideANGLE = ANGLE_CARA = Deg2Rad(ANGLE)DIA = DIAM_CERCLEPI = Atn(1) * 4 ptCen = ThisDrawing.Utility.GetPoint(, "Viser le point de départ") For i = 1 To NB_CERCLE Set MonCercle = ThisDrawing.ModelSpace.AddCircle(ptCen, DIA / 2) MonCercle.Update c = DIA / Sqr(2) p(0) = (ptCen(0) + c / 2): p(1) = (ptCen(1) - c / 2) p(2) = (ptCen(0) + c / 2): p(3) = (ptCen(1) + c / 2) p(4) = (ptCen(0) - c / 2): p(5) = (ptCen(1) + c / 2) p(6) = (ptCen(0) - c / 2): p(7) = (ptCen(1) - c / 2) Set Poly = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) Poly.Closed = True Poly.Rotate ptCen, A Poly.Update DIA = c A = A + A Next i End Sub Function Deg2Rad(dDegrees As Double) PI = Atn(1) * 4 Deg2Rad = dDegrees * PI / 180End FunctionFunction Rad2Deg(dRadians As Double) PI = Atn(1) * 4 Rad2Deg = dRadians * 180 / PIEnd Function Mon site Web (en cours de construction) : Site DA-CODE de @didier
DenisHen Posté(e) le 13 mars 2021 Auteur Posté(e) le 13 mars 2021 Salut CurlyGoth. Quelle commande faut-il lancer, car VBA plante lors du Me.Hide... Et pour cacher quoi ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Curlygoth Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 c'est parce que j'ai un userform dans lequel tu entres tes valeurs regarde ma vidéo ^^ Oups... il s'est pas mis : voici le dvb ^^Challenge.zip Mon site Web (en cours de construction) : Site DA-CODE de @didier
(gile) Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 Salut, S'il s'agit de dessiner dans AutoCAD, on ne peut le faire qu'avec 4 API :AutoLISP, donc uniquement en LISPCOM/ActiveX, avec tous langage ayant accès à l'interface COM : VBA, Visual LISP, C#, F#, VB.NET, C, C++, Python, ....NET, avec tous les langages supportant .NET : C#, F#, VB.NET, IronPython, ...ObjectARX, uniquement avec C/C++ Qu'est-ce qu'on veut comparer ? Les capacités des différentes API à régler les problèmes géométriques ? La façon dont on dessine dans AutoCAD suivant l'API ?Les possibilités des différentes API pour la saisie des données (interface utilisateur, saisie avec affichage dynamique) ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Curlygoth Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 je pense qu'il faut répondre juste au challenge ^^' moi si on juge je pars xD Have fun ;-) Mon site Web (en cours de construction) : Site DA-CODE de @didier
(gile) Posté(e) le 13 mars 2021 Posté(e) le 13 mars 2021 Un exemple en .NET (C#).Nombre de cercles limité : minimum 4, maximum 32.Valeur par défaut du nombre de cercles (dernière valeur entrée).Affichage dynamique pendant la saisie du rayon.Fonctionnement suivant le SCU courant.Si vous avez confiance, téléchargez le fichier ChallengeCercleCarre.zip joint, le débloquer, extraire la DLL ChallengeCercleCarre.dll, la charger dans AutoCAD avec NETLOAD et lancer la commande CCC. using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.GraphicsInterface; using Autodesk.AutoCAD.Runtime; using System.Collections.Generic; using static System.Math; using AcAp = Autodesk.AutoCAD.ApplicationServices.Core.Application; using AcDb = Autodesk.AutoCAD.DatabaseServices; namespace ChallengeCercleCarre { public class Commands { static int numOfCircles = 4; [CommandMethod("CCC")] public static void ChallengeCercleCarre() { var doc = AcAp.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; var intOptions = new PromptIntegerOptions("\nEntrez le nombre de cercles: "); intOptions.DefaultValue = numOfCircles; intOptions.UseDefaultValue = true; intOptions.LowerLimit = 4; intOptions.UpperLimit = 32; var intResult = ed.GetInteger(intOptions); if (intResult.Status != PromptStatus.OK) return; numOfCircles = intResult.Value; var pointResult = ed.GetPoint("\nSpécifiez le centre : "); if (pointResult.Status != PromptStatus.OK) return; var center = pointResult.Value; double radius = 1.0; var ucs = ed.CurrentUserCoordinateSystem; using (var tr = db.TransactionManager.StartTransaction()) { var cSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); var entities = new List<Entity>(); for (int i = 0; i < numOfCircles; i++) { var circle = new Circle(center, Vector3d.ZAxis, radius); circle.TransformBy(ucs); entities.Add(circle); var pline = new AcDb.Polyline(); pline.AddVertexAt(0, new Point2d(center.X + radius, center.Y), 0.0, 0.0, 0.0); pline.AddVertexAt(1, new Point2d(center.X, center.Y + radius), 0.0, 0.0, 0.0); pline.AddVertexAt(2, new Point2d(center.X - radius, center.Y), 0.0, 0.0, 0.0); pline.AddVertexAt(3, new Point2d(center.X, center.Y - radius), 0.0, 0.0, 0.0); pline.Elevation = center.Z; pline.Closed = true; pline.TransformBy(ucs * Matrix3d.Rotation(PI * 0.25, Vector3d.ZAxis, center)); entities.Add(pline); radius *= Sqrt(0.5); } var jig = new ScaleJig(entities, center.TransformBy(ucs)); var jigResult = ed.Drag(jig); if (jigResult.Status == PromptStatus.OK) { foreach (var entity in entities) { cSpace.AppendEntity(entity); tr.AddNewlyCreatedDBObject(entity, true); entity.TransformBy(jig.Transform); } } else { foreach (var entity in entities) { entity.Dispose(); } } tr.Commit(); } } class ScaleJig : DrawJig { List<Entity> entities; Point3d center; double radius; public Matrix3d Transform { get; private set; } public ScaleJig(List<Entity> entities, Point3d center) { this.entities = entities; this.center = center; } protected override SamplerStatus Sampler(JigPrompts prompts) { var options = new JigPromptDistanceOptions("\nSpécifiez le rayon: "); options.BasePoint = center; options.UseBasePoint = true; options.Cursor = CursorType.RubberBand; options.UserInputControls = UserInputControls.Accept3dCoordinates; var result = prompts.AcquireDistance(options); if (result.Value == radius) return SamplerStatus.NoChange; radius = result.Value; Transform = Matrix3d.Scaling(radius, center); return SamplerStatus.OK; } protected override bool WorldDraw(WorldDraw draw) { var geometry = draw.Geometry; if (geometry != null) { geometry.PushModelTransform(Transform); foreach (var entity in entities) { geometry.Draw(entity); } geometry.PopModelTransform(); } return true; } } } } ChallengeCercleCarre.zip Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 14 mars 2021 Auteur Posté(e) le 14 mars 2021 Salut.moi si on juge je pars xD Have fun ;-)J'ai utilisé le verbe juger entre guillemets, c'est plus pour se faire une idée des différentes façons de faire dans différents langages. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 mars 2021 Auteur Posté(e) le 14 mars 2021 Salut (gile).J'applaudis à m'en faire mal aux mains, challenge superbement relevé ! ! ! Et belle démonstration du code...Un exemple en .NET (C#).Comment fais-tu du .NET pour AutoCAD ? Avec Visual Studio Express ? Puis-je le faire ? Est-ce interactif avec AutoCAD ? Comment se epasse la création d'une DLL ?Je suis très attiré par ses possibilités de langages, j'ai débuté en Pascal dans les années 80) puis en Turbo Pascal, ensuite est venu le Basic (vers 1992) puis en Turbo Basic (peu de temps après) puis le Visual Basic (avec VB 6), et pour finir, un peu de Lisp... Affichage dynamique pendant la saisie du rayon.Ca, c'est de la magie ! ! ! Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Comment fais-tu du .NET pour AutoCAD ? Avec Visual Studio Express ? Puis-je le faire ? Est-ce interactif avec AutoCAD ? Comment se epasse la création d'une DLL ?Je suis très attiré par ses possibilités de langages, j'ai débuté en Pascal dans les années 80) puis en Turbo Pascal, ensuite est venu le Basic (vers 1992) puis en Turbo Basic (peu de temps après) puis le Visual Basic (avec VB 6), et pour finir, un peu de Lisp...Si tu veux te lancer dans l'aventure, bienvenue à toi. Mais sache que c'est un gros morceau.Je pense qu'avant d'attaquer la programmation d'AutoCAD il faut se familiariser avec l'environnement .NET à savoir :Visual Studio (le plus gros logiciel de chez Microsoft). Visual Studio Code peut suffire pour te dégrossir dans l'environnement Windows mais un "vrai" Visual Studio est nécessaire pour AutoCAD (la version Community est gratuite) ;la Programmation Orientée Objet (les classes, l'héritage, le polymorphisme, l'encapsulation, ...) le typage statique(*]un langage supporté, je recommande fortement C#,il a été créé pour .NET et c'est le plus utilisé. VB.NET est une adaptation de VB à l'environnement .NET qui a conservé la plupart des trucs foireux du VB... de plus, Microsoft a annoncé qu'il ne ferait plus évoluer le VB.NET (C# évolue régulièrement avec de nouvelle fonctionnalités).Ceci fait, (il faut compter quelques mois avec l'aide de livres et/ou de tutos sérieux) tu pourras aborder l'API .NET d'AutoCAD qui n'est pas d'un accès si facile. Après, dans Visual Studio, tu référence les bibliothèques AutoCAD, tu codes, tu compiles en DLL, tu charges la DLL dans AutoCAD pour l'utiliser. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 (modifié) Coucou Je ne viens plus très souvent mais aujourd'hui j'ai décidé de le faireDonc je viens répondre en Autolisp après une version VBA et une C#. Fonctionnement semblable au travail de (gile)Le nom de la commande est TESTUne vidéo jointe pour voir le résultat des fois que ça ne fonctionne pas chez vous Lien Vidéo Amicalement (defun da:DessPoly2D (listesommets z closed) (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (if z (cons 38 z) ) (cons 90 (length listesommets)) (if closed (cons 70 1) (cons 70 0) ) ) (mapcar '(lambda (p) (cons 10 p)) listesommets) ) ) ) (defun c:test (/ loop centre rayon sommets) (setq loop (getint "\nNombre de cercles\n")) (setq centre '(0 0 0) rayon 1 ) (setq ss (ssadd)) (entmake (list (cons 0 "CIRCLE") (cons 10 centre) (cons 40 rayon))) (setq ss (ssadd (entlast) ss)) (setq sommets (list (polar centre 0 rayon) (polar centre (/ pi 2) rayon) (polar centre pi rayon) (polar centre (+ pi (/ pi 2)) rayon) ) ) (da:DessPoly2D sommets 0 T) (setq ss (ssadd (entlast) ss)) (repeat (- loop 1) (setq rayon (* (/ (sqrt 2) 2) rayon)) (entmake (list (cons 0 "CIRCLE") (cons 10 centre) (cons 40 rayon))) (setq ss (ssadd (entlast) ss)) (setq sommets (list (polar centre 0 rayon) (polar centre (/ pi 2) rayon) (polar centre pi rayon) (polar centre (+ pi (/ pi 2)) rayon) ) ) (da:DessPoly2D sommets 0 T) (setq ss (ssadd (entlast) ss)) ) (command "_move" ss "" centre pause) (command "_scale" ss "" (getvar "lastpoint") pause) (princ) ) Modifié le 14 mars 2021 par (gile) Suppression des balises [color] dans le code et formatage du code Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 14 mars 2021 Auteur Posté(e) le 14 mars 2021 Merci à vous deux, (gile) et didier (je vous surveille toujours, vous êtes (même si vous ne le voulais pas, mes très humbles professeurs.) et mes maîtres à penser pour le lisp...Et je parle au nom de beaucoup de personnes... @(gile) : tu m'a fais "adoré le lisp"... Tu m'as tellement aidé... Tu n'estime pas à quel point... A quel point tu es extraordinaire... Tu aides et tu professe, j'adore, et je serais toujours ton élève...@didier : toi aussi, tu était (et restera à jamais) un réel support dans mes développement, tu as été d'une aide que tu ne peux peut-être pas comprendre, tellement tu m'as donné. mais j'ai côtoyé tous tes le Lisp, c'est grâce à vous deux et d'autres aussi, Tramber, le crabe (Ô décapode) que je fais du Lisp... Bref; vous avez été tous les deux (avec d'autres, je le redis, Tramber, le crabe... Je persiste.) Un réel confort... Je ne serais jamais assez vous remercier... En gros, si je peux faire des petit Lisp (humbles), c'est uniquement grâce à vous... J'ai testé le lisp dans les années 90, mais depuis 2005 (environ), vous avez été d'une grande aide, et je ne saurait vous la prouver et vous remercier... Mais vous êtes tous extraordinaires, tous... Didier avec ton site (que je consulte au moins deux fois par jour) tu es un de mes maître, je sais, c'est dur à porter, mais tu l'es, quand à d'autres, comme Maître (gile), que dire... Que du bien... Maître (gile) va me faire aborder le .NET... Car il me (nous) démontre sa puissance... Extraordinaire, je vous dois tellement... Vous êtes et resterez des maîtres... Je suis désolé de vous l'apprendre, mais ce n'est juste qu'une question, en gros et pour parler comme nus le comprenons, vous êtes vraiment balaises... je vous serez toujours redevable, et je ne suis pas le seul... Encore un énorme merci à vous tous... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 mars 2021 Auteur Posté(e) le 14 mars 2021 Didier, t'es sérieux ? Tu vas me faire croire que ton Lisp fait ça ? ? Tu vas me faire croire qu'en vingt ligne, tu as fais autant que (gile) en plus de 100 lignes ? ? ?Car si en Lisp c'était faisable en 20 lignes; Maître (gile) nous aurait fait la démonstration... Non ? Si c'est vrai, tu DOIS me donner ton secret... Et à nous tous... Mais je suis très content de t'avoir vu, tu ne ressemblais pas à ce que j'imaginais de toi, je croyais voir un vieux aigris... Mais en fait, tu est très jeune... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
didier Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Bonjour DenisHEN Je te remercie de ces déclarations qui me font rosir, comme aujourd'hui je suis habillé en rouge ça nous fait un beau camaïeu.Oui le Lisp est moins verbeux que le C# mais on ne joue pas dans la même cour, le C# est bien plus puissant que le lisp (pour AutoCAD)en vitesse de traitement mais surtout en possibilités bien plus étendues. J'ai fait des trucs en C# qui sont bluffants de rapidité mais c'est tellement différent que je me permets de te mettre en garde :Tant que tu restes dans des routines dont tu as la solution LSP ne te prends pas le chou Je me suis sérieusement agacé pour comprendre ce langage et je suis très loin d'en avoir fait le tour, j'ai juste gratté la surfaceTout ça pour dire que tu peux t'y coller mais tu dois assurer tes bases comme le conseille (gile)il me l'a conseillé, je l'ai ignoré, mal m'en a pris, quelques années plus tard je m'y suis remis et ça va mieux en ayant fait des applications "console" par dizaines. Dans quelques temps (je ne donne pas de date) je pense augmenter le périmètre de da-code en y ajoutant le VBA et le C#. (pour débutants) Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Hé, Denis, tu ne réponds jamais aux challenges que tu lances.Autrefois, celui qui lançait un challenge avait une réponses déjà prête dans les tuyaux... Perso, en LISP j'aurais simplement fait ça:(defun c:test (/ cen rad nb) (initget 6) (and (setq nb (getint "\nNombre de cercles: ")) (setq cen (getpoint "\nCentre du cercle: ")) (setq rad (getdist cen "\nRayon du cercle: ")) (repeat nb (command "_.circle" "_non" cen rad) (command "_.rectang" "_non" (polar cen (* PI 1.25) rad) "_non" (polar cen (* PI 0.25) rad)) (setq rad (* rad (sqrt 0.5))) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Pour la dernière je me suis fait doubler sur le fil du rasoir.. Le temps de lire le sujet et d'écrire les qq lignes de codes en command...(defun c:ccc2 (/ ss c r cmdecho) (setq c (getpoint "\nSpécifiez le centre du Cercle: ") ss (ssadd) r 1. cmdecho (getvar 'cmdecho) ) (setvar 'cmdecho 0) (repeat (getint "\nEntrez le nombre de Cercles: ") (command "_circle" c r) (ssadd (entlast) ss) (command "_rectang" "_NON" (polar c (* 1.25 pi) r) "_NON" (polar c (* 0.25 pi) r)) (ssadd (entlast) ss) (setq r (* (/ (sqrt 2) 2) r)) ) (princ "\nSpécifiez le rayon: ") (command "_scale" ss "" c pause) (setvar 'cmdecho cmdecho) (princ) ) Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 @ Didier un petit oublie dans le code, les changements de plans (code 210 sur le cercle et la lwp) @ DenisHen, à être spectateur tu passes à coté de tous ce qu'il y a prendre dans ce type d'exercice, c'est vraiment dommage... Salutations Bruno Apprendre => Prendre => Rendre
Curlygoth Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Dans quelques temps (je ne donne pas de date) je pense augmenter le périmètre de da-code en y ajoutant le VBA et le C#. (pour débutants)OOOUUUIII Si tu as besoin ;-) je serais à ton service ! (pour le VBA) Mon site Web (en cours de construction) : Site DA-CODE de @didier
(gile) Posté(e) le 14 mars 2021 Posté(e) le 14 mars 2021 Je dois tirer mon chapeau à didier, qui a été malin pour facilement contourner ce que je pensais être une difficulté en LISP en utilisant la commande native ECHELLE (_SCALE). Je propose donc de mettre la barre un peu plus haut.Côté géométrie, on peut rendre la commande plus polyvalent en ne se limitant pas au carré et en demandant le nombre de sommets du polygone inscrit/circonscrit.Côté affichage, on peut aussi demander la rotation et, plus difficile (si je ne me trompe pas cette fois) combiner échelle et rotation. ChallengeCerclePolygone.zip Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 15 mars 2021 Posté(e) le 15 mars 2021 Bonjour, Cette fois je ne pensais pas participé (peu de disponibilité), mais comme ça n'a pas l'air de ce bousculer, une première proposition avec un code à minima calqué sur les 2 dernières propositions de l'exercice précédent.(defun c:ccc1 (/ nc ns c pt r ang) (and (setq nc (getint "\nEntrez le nombre de cercles: ")) (setq ns (getint "\nEntrez le nombre de sommets: ")) (setq c (getpoint "\nSpécifiez le centre: ")) (setq pt (getpoint c "\nSpécifiez la position du sommet: ")) (setq r (distance c pt) ang (angle c pt) ) (repeat nc (command "_.circle" "_non" c r) (command "_.polygon" ns "_non" c "_I" "_non" (polar c ang r)) (setq r (* r (cos (/ pi ns)))) ) ) (princ) ) Côté affichage, on peut aussi demander la rotation et, plus difficile (si je ne me trompe pas cette fois) combiner échelle et rotation. :(rires forts): :(rires forts): :(rires forts): C'est forcément, cette dernière affirmation qui m'a fait sourire et décider de participé (car je sais trés bien ce que cela implique), car non on ne fera pas aussi bien que en .net, à moins d'essayer d'émuler le code au moyen de la fonction grread et de réécrire les accrochages aux objets en faisant d'interminable page de code fastidieuse, pour au final avoir un fonctionnement plus ou moins bancal... Malgré tout on peut s'en approcher à très peu de frais, très rapidement ma deuxième proposition sur le ton de l'humour :D : (defun c:ccc2 (/ nc ns c pt r ang cmdecho) (and (setq nc (getint "\nEntrez le nombre de cercles: ")) (setq ns (getint "\nEntrez le nombre de sommets: ")) (setq c (getpoint "\nSpécifiez le centre: ")) (princ "\nSpécifiez la position du sommet: ") (setq cmdecho (getvar 'cmdecho)) (setvar 'cmdecho 0) (vl-cmdf "_.polygon" ns "_non" c "_I" "_non" pause) (setq pt (cdr (assoc 10 (entget (entlast)))) r (distance c pt) ang (angle c pt) ) (entdel (entlast)) (repeat nc (command "_.circle" "_non" c r) (command "_.polygon" ns "_non" c "_I" "_non" (polar c ang r)) (setq r (* r (cos (/ pi ns)))) ) (setvar 'cmdecho cmdecho) ) (princ) ) A+ Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 17 mars 2021 Auteur Posté(e) le 17 mars 2021 Salut à tous... Pour faire quelques réponses collégiales, je dirais : Si je lance un challenge, c'est que, justement, je me demande comment faire ? Je ne suis ni un professeur, ni un expert (comme beaucoup d'entre vous). C'est une façon vulgairement cachée de voir "comment d'autres feraient ?"... Je n'ai pas la solution, je regarde, analyse et apprend énormément de tous vos commentaires et vos codes... A mon époque (les années 90) j'apprenais seul avec juste un "maître penseur codifiant" (et il n'y avait pas internet, et pas CadXP) qui m'a mit le pied à l'étrier du développement : Pascal, Turbo Pascal, puis, Basic, Turbo Basic, et Visual Basic pour continuer en Lisp... Donc, mes challenges sont peut-être égoïstes (bien qu'ils peuvent servir à beaucoup d'autres, je l'espère) mais ils ne sont pas dénués de tous sens... Je pense avoir atteint mes limites en Lisp (car je suis autodidacte et non anglophone), je fais plein de dev dont je suis très fier, mais j'aurai pû faire mieux... Et actuellement, je me pose la question : le Lisp est-il mon langage de "prédilection" ? Je reçois avec grand plaisir toutes vos remarques/critiques envers moi, ou sur mes capacités, je ne suis absolument pas susceptible... Mais comprenez que je n'ai eu que des aides ponctuelles (grâce à 99% aux membres de CadXP) suite à mes question pas toujours très explicites ou très "compréhensibles"... Mais j'ai tellement appris depuis mes début que je ressent une petite fierté, mais je devrais réussir à faire plus... En VBA, j'ai utilisé un classeur Excel comme une base de données, j'utilisais Excel comme "interface" pour avoir accès à des centaines de fichiers .txt... Mes collègues ouvraient le même classeur en lecture seule, mais n'avaient pas besoin de l'enregistrer... Ils remplissaient des champs et tout était envoyé par courriel, avec un minimum d'intervention de leurs part... Tous était géré par un seul ruban, personnalisé lui aussi C'est compliqué, mais je m'en suis sortie, et ce code était utilisé par quatre à six personnes en même temps, et pendant 4 à 5 ans. Après, la direction a commandé un ERP. Mais cet ERP ne remplissait pas ce que je faisais... C'est une source de fierté... Je sais, mais restant humble, j'aurais aimé être "balaize" en Lisp, mais je n'y arrive pas... Il y a plein de choses que j'aimerais faire en Lisp, mais je n'y arrive simplemement pas, malgré toutes les aides (Maître (gile), Tramber, LeCrabe, didier...) je ne m'en sors pas... Donc, il me faut apprendre un autre langage, et en ce moment, je pense me tourner vers le .NET et C#... Qu'en pensez-vous ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Curlygoth Posté(e) le 17 mars 2021 Posté(e) le 17 mars 2021 a ben c'est plus fort ! j'ai pas trouvé de doc pour le vb.net... a part (gile) [encore lui ;-p] qui explique comment creer une classe de base (.dll) pour autocad ^^ Mon site Web (en cours de construction) : Site DA-CODE de @didier
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